Webhooks
Si el canal de mensajería que desea utilizar no se admite de forma predeterminada en Oracle Digital Assistant, puede utilizar un webhook para integrar manualmente ese canal.
-
Un servidor de mensajería HTTP de acceso público que transmita los mensajes entre el dispositivo del usuario y el asistente digital (o la aptitud) mediante un webhook.
Este webhook se implanta con:
-
Una llamada POST que permite al servidor recibir mensajes del asistente digital.
-
Una llamada POST que permite al servidor enviar mensajes al asistente digital.
-
-
El URI de la llamada de webhook que recibe los mensajes del asistente digital (de manera que el asistente digital sepa adónde enviar los mensajes).
-
El URL del webhook generado para el asistente digital después de completar el cuadro de diálogo Crear canal (de modo que el servidor de mensajes pueda acceder al asistente digital).
-
Configure el servidor.
-
Para recibir mensajes del asistente digital, publique la llamada POST en el servidor.
-
En el cuadro de diálogo Crear canal, introduzca un nombre y, a continuación:
-
Seleccione Webhook como tipo de canal.
-
Defina la versión de la plataforma en 1.1 (Conversation Model).
-
Registre el servidor como destinatario de los mensajes del asistente digital introduciendo el URI de esta llamada POST en el campo URI de webhook saliente.
-
Si es necesario, introduzca la caducidad de la sesión y active Canal activado.
Descripción de la ilustración create-webhook-channel.png -
-
Haga clic en Crear.
Digital Assistant genera el URL del webhook para el asistente digital y la clave secreta para cifrar mensajes. Mantenga el URL del webhook a mano, ya que es el indicador que necesita el servidor de mensajería para enviar mensajes al asistente digital.
Descripción de la ilustración webhook-channel-config.png -
En el servidor, publique la segunda API de POST, una que envía mensajes al asistente digital utilizando el URL del webhook.
-
Active la opción Canal activado.
Puede utilizar el SDK de Node.js de Digital Assistant para configurar el envío de mensajes desde y hacia el asistente digital.
Mensajes entrantes
La biblioteca WebhookClient
del SDK de Node.js de Oracle Digital Assistant simplifica la configuración del envío y la recepción de mensajes en canales de webhook. Si no utiliza el SDK, esto es lo que necesita saber sobre la creación de mensajes entrantes.
La llamada para enviar mensajes al asistente digital (o aptitud) debe incluir estos elementos:
-
Una cabecera
X-Hub-Signature
que contenga el valor SHA256 de la carga útil. La llamada incluye funciones que crean este valor hash utilizando la clave secreta como clave.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
yBOT_WEBHOOK_SECRET
son variables de entorno que se establecen en el servidor de nodo. El uso de estas variables de entorno le permite evitar la codificación de la información confidencial directamente en el webhook. -
Un objeto JSON con las propiedades
userId
,profile
ymessagePayload
:{ "userId": "33c0bcBc8e-378c-4496-bc2a-b2b9647de2317", "profile": { "firstName": "Bob", "lastName": "Franklin", "age": 45 }, "messagePayload": {....} }
Propiedad Descripción Tipo ¿Obligatoria? userId
Identificador único para el usuario. Este ID es específico del emisor de llamada. Cadena Sí profile
Propiedades que representan al usuario, como firstName
yLastName
.Objeto JSON No messagePayload
El valor de messagePayload
puede sertext
,postback
,attachment
ylocation
.Objeto JSON Sí Nota
Si la aptitud o el asistente digital necesita detectar el idioma del usuario, asegúrese de queprofile.locale
yprofile.languageTag
están definidos como nulos en los mensajes de webhook.
Cargas útiles de ejemplo: mensajes entrantes
Tipo de mensaje | Carga útil de ejemplo |
---|---|
text |
|
postback |
|
attachment |
|
location |
|
Mensajes salientes
La biblioteca WebhookClient
del SDK de Node.js de Oracle Digital Assistant simplifica la configuración del envío y la recepción de mensajes en canales de webhook. Si no utiliza el SDK, esto es lo que debe saber sobre la creación de mensajes salientes.
Debe publicar las llamadas en el formato JSON que espera Digital Assistant, junto con la cabecera de autorización.
-
Una cabecera
X-Hub-Signature
que contiene el valor SHA256 de la carga útil, calculado utilizando la clave secreta como clave.Nota
Digital Assistant utiliza la cabeceraX-Hub-Signature
para permitir al destinatario autenticar el asistente digital como el remitente y validar la integridad de la carga útil. -
Una carga útil de JSON que contiene
userID
, un identificador único especificado por el mensaje entrante,type
, que puede sertext
,attachment
ycard
. Como se muestra en los ejemplos siguientes, los tipos de respuestatext
ycard
pueden contener acciones asociadas. Cualquiera de los tipos de respuesta puede incluir también acciones globales.Tipo de respuesta Carga útil de ejemplo text
{ "userId":"22343248763458761287 "messagePayload": { "type": "text", "text": "Hello, how are you?" } }
El siguiente fragmento muestra una respuestatext
con acciones:{ "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
El tipo de respuesta de anexo puede ser una imagen, un archivo de audio o un vídeo: ... { "type": "attachment", "attachment": { "type": "video", "url": "https://www.youtube.com/watch?v=CMNry4PE93Y" } }