Webhooks
Se o canal de mensagens que você deseja usar não for suportado por padrão no Oracle Digital Assistant, você poderá usar um webhook para integrar manualmente esse canal.
-
Um servidor de mensagens HTTP acessível publicamente que retransmita mensagens entre o dispositivo do usuário e seu assistente digital (ou habilidade) usando um webhook.
Você implementa esse webhook com:
-
Uma chamada POST que permita ao servidor receber mensagens do assistente digital.
-
Uma chamada POST que permita ao servidor enviar mensagens para o assistente digital.
-
-
O URI da chamada do webhook que recebe as mensagens do assistente digital (de modo que o assistente digital saiba para onde enviar as mensagens).
-
O URL do Webhook que é gerado para o assistente digital depois que você preenche a caixa de diálogo Criar Canal (para que o servidor de mensagens possa acessar o assistente digital).
-
Configure o servidor.
-
Para receber mensagens do assistente digital, publique a chamada POST no servidor.
-
Na caixa de diálogo Criar Canal, informe um nome e depois:
-
Escolha Webhook como tipo de canal.
-
Defina a Versão da Plataforma como 1.1 (Modelo de Conversa).
-
Registre o servidor como destinatário das mensagens do assistente digital, informando o URI para essa chamada POST no campo URI do Webhook de Saída.
-
Se necessário, informe a expiração da sessão e ative Canal Ativado.
Descrição da ilustração create-webhook-channel.png -
-
Clique em Criar.
O Digital Assistant gera o URL do webhook para o assistente digital e a Chave Secreta para criptografar mensagens. Mantenha o URL do webhook à mão porque ele é o ponteiro que o servidor de mensagens precisa para enviar mensagens de volta ao assistente digital.
Descrição da ilustração webhook-channel-config.png -
No servidor, publique a segunda API POST, que envia mensagens para o assistente digital usando o URL do webhook.
-
Ative a opção Canal Ativado.
Você pode usar o Node.js SDK do Digital Assistant para configurar o envio de mensagens de/para seu assistente digital.
Mensagens de Entrada
A biblioteca WebhookClient
no Node.js SDK do Oracle Digital Assistant simplifica a configuração de envio e recebimento de mensagens nos canais do Webhook. Se não estiver usando o SDK, aqui está o que você precisa saber sobre a criação de mensagens de entrada.
A chamada para enviar mensagens ao assistente digital (ou habilidade) deve ter:
-
Um cabeçalho
X-Hub-Signature
contendo o valor SHA256 do payload. A chamada inclui funções que criam esse hash usando a Chave Secreta como chave.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
eBOT_WEBHOOK_SECRET
são variáveis de ambiente que você define no servidor de Nó. O uso dessas variáveis de ambiente permite que você evite informações sigilosas de codificação diretamente no webhook -
Um objeto JSON com as propriedades
userId
,profile
emessagePayload
:{ "userId": "33c0bcBc8e-378c-4496-bc2a-b2b9647de2317", "profile": { "firstName": "Bob", "lastName": "Franklin", "age": 45 }, "messagePayload": {....} }
Propriedade Descrição Tipo 0brigatório? userId
Um identificador exclusivo do usuário. Esse ID é específico do chamador. String Sim profile
Propriedades que representam o usuário, como firstName
eLastName
.Objeto JSON Não messagePayload
A propriedade messagePayload
pode sertext
,postback
,attachment
elocation
.Objeto JSON Sim Observação
Se sua habilidade ou assistente digital precisar detectar o idioma do usuário, certifique-se de queprofile.locale
eprofile.languageTag
estejam definidos como nulos nas mensagens do Webhook.
Payloads de Exemplo: Mensagens de Entrada
Tipo de mensagem | Payload de Exemplo |
---|---|
text |
|
postback |
|
attachment |
|
location |
|
Mensagens de Saída
A biblioteca WebhookClient
no Node.js SDK do Oracle Digital Assistant simplifica a configuração de envio e recebimento de mensagens nos canais do Webhook. Se não estiver usando o SDK, aqui está o que você precisa saber sobre a criação de mensagens de saída.
Publique as chamadas no formato JSON que o Digital Assistant espera, com o cabeçalho de autorização.
-
Um cabeçalho
X-Hub-Signature
contendo o valor SHA256 do payload, calculado usando a Chave Secreta como chave.Observação
O Digital Assistant usa o cabeçalhoX-Hub-Signature
para permitir que o destinatário autentique seu assistente digital como remetente e valide a integridade do payload. -
Um payload JSON que contém o
userID
, um identificador exclusivo que é especificado pela mensagem de entrada, otype
, que pode sertext
,attachment
ecard
. Conforme mostrado nos exemplos a seguir, os tipos de respostatext
ecard
podem ter ações associadas. Qualquer um dos tipos de resposta também pode incluir ações globais.Tipo de Resposta Payload de Exemplo text
{ "userId":"22343248763458761287 "messagePayload": { "type": "text", "text": "Hello, how are you?" } }
O trecho de código a seguir mostra uma respostatext
com ações:{ "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
O tipo de resposta de anexo pode ser uma imagem, um arquivo de áudio ou um vídeo: ... { "type": "attachment", "attachment": { "type": "video", "url": "https://www.youtube.com/watch?v=CMNry4PE93Y" } }