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-Signaturecontendo 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_URLeBOT_WEBHOOK_SECRETsã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,profileemessagePayload:{ "userId": "33c0bcBc8e-378c-4496-bc2a-b2b9647de2317", "profile": { "firstName": "Bob", "lastName": "Franklin", "age": 45 }, "messagePayload": {....} }Propriedade Descrição Tipo 0brigatório? userIdUm identificador exclusivo do usuário. Esse ID é específico do chamador. String Sim profilePropriedades que representam o usuário, como firstNameeLastName.Objeto JSON Não messagePayloadA propriedade messagePayloadpode sertext,postback,attachmentelocation.Objeto JSON Sim Observação
Se sua habilidade ou assistente digital precisar detectar o idioma do usuário, certifique-se de queprofile.localeeprofile.languageTagestejam 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-Signaturecontendo o valor SHA256 do payload, calculado usando a Chave Secreta como chave.Observação
O Digital Assistant usa o cabeçalhoX-Hub-Signaturepara 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,attachmentecard. Conforme mostrado nos exemplos a seguir, os tipos de respostatextecardpodem 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 respostatextcom 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" } ] }attachmentO 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" } }