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.
-
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).
-
Richten Sie den Server ein.
-
Um Nachrichten von Ihrem digitalen Assistenten zu empfangen, veröffentlichen Sie den POST-Aufruf auf dem Server.
-
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 der Abbildung create-webhook-channel.png -
-
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 der Abbildung webhook-channel-config.png -
Veröffentlichen Sie auf Ihrem Server die zweite POST-API. Mit dieser werden Nachrichten über die Webhook-URL an Ihren digitalen Assistenten gesendet.
-
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:
-
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_URLundBOT_WEBHOOK_SECRETsind Umgebungsvariablen, die Sie auf dem Knotenserver festlegen. Wenn Sie diese Umgebungsvariablen verwenden, können Sie eine Hartcodierung sensibler Daten direkt im Webhook vermeiden. -
Ein JSON-Objekt mit den Eigenschaften
userId,profileundmessagePayload:{ "userId": "33c0bcBc8e-378c-4496-bc2a-b2b9647de2317", "profile": { "firstName": "Bob", "lastName": "Franklin", "age": 45 }, "messagePayload": {....} }Eigenschaft Beschreibung Typ Erforderlich? userIdEine eindeutige ID für den Benutzer. Diese ID ist spezifisch für den Aufrufer. Zeichenfolge Ja profileEigenschaften, die den Benutzer repräsentieren, wie firstNameundLastName.JSON-Objekt Nein messagePayloadmessagePayloadkanntext,postback,attachmentundlocationsein.JSON-Objekt Ja Hinweis
Wenn Ihr Skill oder digitaler Assistent die Benutzersprache ermitteln muss, müssen Sie sicherstellen, dassprofile.localeundprofile.languageTagin den Webhook-Nachrichten auf Null gesetzt sind.
Beispiele für Payloads: Eingehende Nachrichten
| Nachrichtentyp | Beispiel-Payload |
|---|---|
text |
|
postback |
|
attachment |
|
location |
|
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.
-
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 desX-Hub-Signature-Headers, Ihren digitalen Assistenten als Absender zu authentifizieren und die Integrität der Payload zu validieren. -
Eine JSON-Payload mit
userID, einer eindeutigen ID, die von der eingehenden Nachricht und demtypeangegeben wird. Letzterer kann den Werttext,attachmentodercardaufweisen. Wie in den folgenden Beispielen dargestellt, können mit den AntworttypentextundcardAktionen 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 einetext-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" } ] }attachmentBei 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" } }