Webhooks

Si le canal de messagerie que vous voulez utiliser n'est pas prêt à l'emploi dans Oracle Digital Assistant, vous pouvez utiliser un webhook pour l'intégrer manuellement.

Pour créer un canal Webhook, il vous faut :
  • Un serveur de messagerie HTTP public qui relaie les messages entre l'appareil utilisateur et votre assistant numérique (ou compétence) à l'aide d'un webhook.

    Vous mettez en oeuvre ce webhook avec :

    • Un appel POST qui permet au serveur de recevoir des messages de votre assistant numérique.

    • Un appel POST qui permet au serveur d'envoyer des messages à votre assistant numérique.

  • L'URI de l'appel webhook qui reçoit les messages de votre assistant numérique (par conséquent, l'assistant numérique sait où envoyer les messages).

  • L'URL du webhook générée pour votre assistant numérique après que vous avez rempli la boîte de dialogue Créer un canal (afin que le serveur de messagerie puisse accéder à votre assistant numérique).

Pour assembler ces éléments dans un webhook :
  1. Configurez le serveur.

  2. Pour recevoir des messages de votre assistant numérique, publiez l'appel POST sur le serveur.

  3. Dans la boîte de dialogue Create Channel (Créer un canal), entrez un nom, puis :
    • Choisissez Webhook comme type de canal.

    • Réglez la version de la plate-forme à 1.1 (Conversation Model).

    • Enregistrez le serveur en tant que destinataire des messages de votre assistant numérique en entrant l'URI de cet appel POST dans le champ URI du webhook sortant.

    • S'il y a lieu, entrez l'expiration de la session et activez le commutateur Channel Enabled (Canal activé).


    Une description de create-webhook-channel.png suit
    Description de l'illustration create-webhook-channel.png
  4. Cliquez sur Create (Créer).

    Digital Assistant génère l'URL du webhook pour votre assistant numérique et sa clé secrète pour chiffrer les messages. Conservez l'URL du webhook, car il s'agit du pointeur dont votre serveur de messagerie a besoin pour renvoyer des messages à votre assistant numérique.
    Une description de webhook-channel-config.png suit
    Description de l'illustration webhook-channel-config.png

  5. Sur votre serveur, publiez la seconde API POST, qui envoie des messages à votre assistant numérique à l'aide de l'URL du webhook.

  6. Activez le commutateur Channel Enabled (Canal activé).

Vous pouvez utiliser la trousse SDK Node.js de Digital Assistant pour configurer l'envoi de messages depuis et vers cet assistant.

Messages entrants

La bibliothèque WebhookClient de la trousse SDK Node.js d'Oracle Digital Assistant simplifie la configuration de l'envoi et de la réception de messages dans les canaux Webhook. Si vous n'utilisez pas la trousse SDK, voici ce que vous devez savoir sur la création de messages entrants.

L'appel pour envoyer des messages à votre assistant numérique (ou compétence) doit comporter :

  1. Un en-tête X-Hub-Signature contenant la valeur SHA256 des données utiles. L'appel comprend des fonctions qui créent ce code de hachage en utilisant la clé secrète comme clé.
    const body = Buffer.from(JSON.stringify(messageToBot), 'utf8');
        const headers = {};
        headers['Content-Type'] = 'application/json; charset=utf-8';
        headers['X-Hub-Signature'] = buildSignatureHeader(body, channelSecretKey);
    
    ...
    
    function buildSignatureHeader(buf, channelSecretKey) {
        return 'sha256=' + buildSignature(buf, channelSecretKey);
    }
    
    function buildSignature(buf, channelSecretKey) {
        const hmac = crypto.createHmac('sha256', Buffer.from(channelSecretKey, 'utf8'));
        hmac.update(buf);
        return hmac.digest('hex');
    }

    BOT_WEBHOOK_URL et BOT_WEBHOOK_SECRET sont des variables d'environnement que vous avez définies sur le serveur Node.js. L'utilisation de ces variables d'environnement vous évite de coder de façon permanente les informations sensibles directement dans le webhook

  2. Un objet JSON avec les propriétés userId, profile et messagePayload :
    {
     "userId": "33c0bcBc8e-378c-4496-bc2a-b2b9647de2317",
     "profile": {
        "firstName": "Bob",
        "lastName": "Franklin",
        "age": 45
       },
     "messagePayload": {....}
    }
    Propriété Description Type Obligatoire?
    userId Identificateur unique de l'utilisateur. Cet ID est propre à l'appelant. Chaîne Oui
    profile Propriétés qui représentent l'utilisateur, comme firstName et LastName. Objet JSON Non
    messagePayload Les données utiles du message, messagePayload, peuvent être text. postback, attachment et location. Objet JSON Oui
    Note

    Si votre compétence ou votre assistant numérique doit détecter la langue de l'utilisateur, assurez-vous que profile.locale et profile.languageTag sont réglés à une valeur nulle dans les messages du webhook.

Exemples de données utiles : Messages entrants

Type de message Exemple de données utiles
text
{
    "type": "text",
    "text": "hello, world!"
}
postback
{
  "type": "postback",
  "postback": {
    "state": "orderPizza",
    "action": "deliverPizza",
    "variables": {
      "pizzaSize": "Large",
      "pizzaCrust": "Thin",
      "pizzaType": "Hawaiian"
    }
  }
}
attachment
{
  "type": "attachment",
  "attachment": {
    "type": "image",
    "url": "https://image.freepik.com/free-icon/attachment-tool-ios-7-interface-symbol_318-35539.jpg"
  }
}
location
{
  "type": "location",
  "location": {
    "longitude": -122.265987,
    "latitude": 37.529818
  }
}

Messages sortants

La bibliothèque WebhookClient de la trousse SDK Node.js d'Oracle Digital Assistant simplifie la configuration de l'envoi et de la réception de messages dans les canaux Webhook. Si vous n'utilisez pas la trousse SDK, voici ce que vous devez savoir sur la création de messages sortants.

Vous devez publier les appels au format JSON attendu par Digital Assistant, ainsi que l'en-tête d'autorisation.

L'appel pour les messages sortants de votre assistant numérique comporte :
  1. Un en-tête X-Hub-Signature contenant la valeur SHA256 des données utiles, calculée en utilisant la clé secrète comme clé.
    Note

    Digital Assistant utilise l'en-tête X-Hub-Signature pour permettre au destinataire d'authentifier votre assistant numérique comme l'expéditeur et de valider l'intégrité des données utiles.
  2. Des données utiles JSON contenant userID, identificateur unique indiqué par le message entrant, le type, qui peut être text,attachment et card . Comme illustré dans les exemples suivants, les types de réponse text et card peuvent être associés à des actions. N'importe lequel de ces types de réponse peut également inclure des actions globales.
    Type de réponse Exemple de données utiles
    text
    {
     "userId":"22343248763458761287
     "messagePayload": {
        "type": "text",
        "text": "Hello, how are you?"
         }
    }
    L'extrait de code suivant affiche une réponse text avec des actions :
    {
     "userId":"22343248763458761287
     "messagePayload": {
        "type": "text",
        "text": "What do you want to do?",
        "actions": [
          {
            "type": "postback",
            "label": "Order Pizza",
            "postback": {
              "state": "askAction",
              "action": "orderPizza"
            }
          },
          {
            "type": "postback",
            "label": "Cancel A Previous Order",
            "postback": {
              "state": "askAction",
              "action": "cancelOrder"
          }
        ]
      }
    }
    card
    
    ...
    {
     "type": "card",
      "layout": "horiztonal",
      "cards": [
        {
          "title": "Hawaiian Pizza",
          "description": "Ham and pineapple on thin crust",
          "actions": [
            {
              "type": "postback",
              "label": "Order Small",
              "postback": {
                "state": "GetOrder",
                "variables": {
                  "pizzaType": "hawaiian",
                  "pizzaCrust": "thin",
                  "pizzaSize": "small"
                }
              }
            },
            {
              "type": "postback",
              "label": "Order Large",
              "postback": {
                "state": "GetOrder",
                "variables": {
                  "pizzaType": "hawaiian",
                  "pizzaCrust": "thin",
                  "pizzaSize": "large"
                }
              }
            }
          ]
        },
        {
          "title": "Cheese Pizza",
          "description": "Cheese pizza (i.e. pizza with NO toppings) on thick crust",
          "actions": [
            {
              "type": "postback",
              "label": "Order Small",
              "postback": {
                "state": "GetOrder",
                "variables": {
                  "pizzaType": "cheese",
                  "pizzaCrust": "thick",
                  "pizzaSize": "small"
                }
              }
            },
            {
              "type": "postback",
              "label": "Order Large",
              "postback": {
                "state": "GetOrder",
                "variables": {
                  "pizzaType": "cheese",
                  "pizzaCrust": "thick",
                  "pizzaSize": "large"
                }
              }
            }
          ]
        }
      ],
      "globalActions": [
        {
          "type": "call",
          "label": "Call for Help",
          "phoneNumber": "123456789"
        }
      ]
    }
    attachment Le type de réponse avec fichier joint peut être une image, un fichier audio ou une vidéo :
    
    ...
    {
      "type": "attachment",
      "attachment": {
        "type": "video",
        "url": "https://www.youtube.com/watch?v=CMNry4PE93Y"
      }
    }