Webhooks

Wenn der gewünschte Messaging-Kanal in Oracle Digital Assistant out-of-the-box nicht unterstützt wird, können Sie diesen Kanal mit einem Webhook manuell integrieren.

Um einen Webhook-Kanal zu erstellen, benötigen Sie Folgendes:
  • Einen öffentlich zugänglichen HTTP-Messagingserver, der Nachrichten zwischen dem Benutzergerät und Ihrem digitalen Assistenten (oder Skill) mit einem Webhook weiterleitet.

    Sie implementieren diesen Webhook mit:

    • Einem POST-Aufruf, mit dem der Server Nachrichten von Ihrem digitalen Assistenten empfangen kann.

    • Einem POST-Aufruf, mit dem der Server Nachrichten an Ihren digitalen Assistenten senden kann.

  • Die URI des Webhook-Aufrufs, der die Nachrichten des digitalen Assistenten empfängt (sodass der digitale Assistent weiß, wohin die Nachrichten gesendet werden sollen).

  • Die Webhook-URL, die für Ihren digitalen Assistenten generiert wird, nachdem Sie die Bearbeitung des Dialogfelds "Kanal erstellen" abgeschlossen haben (sodass der Nachrichtenserver auf Ihren digitalen Assistenten zugreifen kann).

So fügen Sie diese Elemente zu einem Webhook zusammen:
  1. Richten Sie den Server ein.

  2. Um Nachrichten von Ihrem digitalen Assistenten zu empfangen, veröffentlichen Sie den POST-Aufruf auf dem Server.

  3. Geben Sie im Dialogfeld "Kanal erstellen" einen Namen ein, und führen Sie dann folgende Schritte aus:
    • Wählen Sie "Webhook" als Kanaltyp aus.

    • Setzen Sie die Plattformversion auf 1.1 (Unterhaltungsmodell).

    • Registrieren Sie den Server als Empfänger der Nachrichten des digitalen Assistenten, indem Sie die URI für diesen POST-Aufruf in das Feld "Ausgehende Webhook-URI" eingeben.

    • Geben Sie bei Bedarf den Sessionablauf ein, und aktivieren Sie die Option Kanal aktiviert.


    Beschreibung von create-webhook-channel.png folgt
    Beschreibung der Abbildung create-webhook-channel.png
  4. Klicken Sie auf Erstellen.

    Digital Assistant generiert die Webhook-URL für Ihren digitalen Assistenten und den dazugehörigen Secret Key zur Verschlüsselung von Nachrichten. Halten Sie die Webhook-URL griffig, da Ihr Messaging-Server als Zeiger benötigt, um Nachrichten an Ihren digitalen Assistenten zurückzusenden.
    Beschreibung von webhook-channel-config.png folgt
    Beschreibung der Abbildung webhook-channel-config.png

  5. Veröffentlichen Sie auf Ihrem Server die zweite POST-API. Mit dieser werden Nachrichten über die Webhook-URL an Ihren digitalen Assistenten gesendet.

  6. Aktivieren Sie die Option Kanal aktiviert.

Mit dem Node.js-SDK von Digital Assistant können Sie das Senden von Nachrichten an und von Ihrem digitalen Assistenten einrichten.

Eingehende Nachrichten

Die WebhookClient-Bibliothek im Node.js-SDK von Oracle Digital Assistant vereinfacht die Einrichtung des Senden und Empfangens von Nachrichten in Webhook-Kanälen. Wenn Sie das SDK nicht verwenden, erfahren Sie hier, wie Sie eingehende Nachrichten erstellen.

Der Aufruf zum Senden von Nachrichten an Ihren digitalen Assistenten (oder Skill) muss Folgendes enthalten:

  1. Einen X-Hub-Signature-Header, der den SHA256-Wert der Payload enthält. Der Aufruf umfasst Funktionen, die diesen Hashwert mit dem Secret Key als Schlüssel erstellen.
    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 und BOT_WEBHOOK_SECRET sind Umgebungsvariablen, die Sie auf dem Knotenserver festlegen. Wenn Sie diese Umgebungsvariablen verwenden, können Sie eine Hartcodierung sensibler Daten direkt im Webhook vermeiden.

  2. Ein JSON-Objekt mit den Eigenschaften userId, profile und messagePayload:
    {
     "userId": "33c0bcBc8e-378c-4496-bc2a-b2b9647de2317",
     "profile": {
        "firstName": "Bob",
        "lastName": "Franklin",
        "age": 45
       },
     "messagePayload": {....}
    }
    Eigenschaft Beschreibung Typ Erforderlich?
    userId Eine eindeutige ID für den Benutzer. Diese ID ist spezifisch für den Aufrufer. Zeichenfolge Ja
    profile Eigenschaften, die den Benutzer repräsentieren, wie firstName und LastName. JSON-Objekt Nein
    messagePayload messagePayload kann text, postback, attachment und location sein. JSON-Objekt Ja
    Hinweis

    Wenn Ihr Skill oder digitaler Assistent die Benutzersprache ermitteln muss, müssen Sie sicherstellen, dass profile.locale und profile.languageTag in den Webhook-Nachrichten auf Null gesetzt sind.

Beispiele für Payloads: Eingehende Nachrichten

Nachrichtentyp Beispiel-Payload
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
  }
}

Ausgehende Nachrichten

Die WebhookClient-Bibliothek im Node.js-SDK von Oracle Digital Assistant vereinfacht die Einrichtung des Senden und Empfangens von Nachrichten in Webhook-Kanälen. Wenn Sie das SDK nicht verwenden, erfahren Sie hier, wie Sie ausgehende Nachrichten erstellen.

Sie müssen die Aufrufe in dem von Digital Assistant erwarteten JSON-Format zusammen mit dem Autorisierungsheader veröffentlichen.

Der Aufruf der ausgehenden Nachrichten Ihres digitalen Assistenten umfasst:
  1. Einen X-Hub-Signature-Header, der den SHA256-Wert der Payload enthält, der mit dem Secret Key als Schlüssel berechnet wurde.
    Hinweis

    Digital Assistant ermöglicht dem Empfänger mithilfe des X-Hub-Signature-Headers, Ihren digitalen Assistenten als Absender zu authentifizieren und die Integrität der Payload zu validieren.
  2. Eine JSON-Payload mit userID, einer eindeutigen ID, die von der eingehenden Nachricht und dem type angegeben wird. Letzterer kann den Wert text, attachment oder card aufweisen. Wie in den folgenden Beispielen dargestellt, können mit den Antworttypen text und card Aktionen verknüpft sein. Alle Antworttypen können auch globale Aktionen enthalten.
    Antworttyp Beispiel-Payload
    text
    {
     "userId":"22343248763458761287
     "messagePayload": {
        "type": "text",
        "text": "Hello, how are you?"
         }
    }
    Das folgende Snippet zeigt eine text-Antwort mit Aktionen:
    {
     "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 Bei dem Antworttyp "attachment" kann es sich um ein Bild, eine Audiodatei oder ein Video handeln:
    
    ...
    {
      "type": "attachment",
      "attachment": {
        "type": "video",
        "url": "https://www.youtube.com/watch?v=CMNry4PE93Y"
      }
    }