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_URL
undBOT_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. -
Ein JSON-Objekt mit den Eigenschaften
userId
,profile
undmessagePayload
:{ "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
undLastName
.JSON-Objekt Nein messagePayload
messagePayload
kanntext
,postback
,attachment
undlocation
sein.JSON-Objekt Ja Hinweis
Wenn Ihr Skill oder digitaler Assistent die Benutzersprache ermitteln muss, müssen Sie sicherstellen, dassprofile.locale
undprofile.languageTag
in 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 demtype
angegeben wird. Letzterer kann den Werttext
,attachment
odercard
aufweisen. Wie in den folgenden Beispielen dargestellt, können mit den Antworttypentext
undcard
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 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" } ] }
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" } }