Webhook
Se il canale di messaggistica che si desidera utilizzare non è supportato per impostazione predefinita in Oracle Digital Assistant, è possibile utilizzare un webhook per integrare manualmente tale canale.
-
Un server di messaggistica HTTP accessibile pubblicamente che trasmette i messaggi tra il dispositivo utente e l'assistente digitale (o abilità) utilizzando un webhook.
Implementate questo webhook con:
-
Una chiamata POST che consente al server di ricevere messaggi dall'assistente digitale.
-
Una chiamata POST che consente al server di inviare messaggi all'assistente digitale.
-
-
L'URI della chiamata webhook che riceve i messaggi dell'assistente digitale (in modo che l'assistente digitale sappia dove inviare i messaggi).
-
L'URL del webhook generato per l'assistente digitale dopo aver completato la finestra di dialogo Crea canale, in modo che il server dei messaggi possa accedere all'assistente digitale.
-
Impostare il server.
-
Per ricevere messaggi dall'assistente digitale, pubblicare la chiamata POST sul server.
-
Nella finestra di dialogo Crea canale immettere un nome, quindi effettuare le operazioni riportate di seguito.
-
Scegliere Webhook come tipo di canale.
-
Impostare Versione piattaforma su 1.1 (Modello di conversazione).
-
Registrare il server come destinatario dei messaggi dell'assistente digitale immettendo l'URI per questa chiamata POST nel campo URI webhook in uscita.
-
Se necessario, immettere la scadenza della sessione e attivare Canale abilitato.
Descrizione dell'immagine create-webhook-channel.png -
-
Fare clic su Crea.
Digital Assistant genera l'URL del webhook per l'assistente digitale e la relativa chiave segreta per la cifratura dei messaggi. Tieni a portata di mano l'URL del webhook, perché è il puntatore di cui il server di messaggistica ha bisogno per inviare messaggi al tuo assistente digitale.
Descrizione dell'immagine webhook-channel-config.png -
Sul tuo server, pubblica la seconda API POST, che invia messaggi al tuo assistente digitale utilizzando l'URL del webhook.
-
Attivare l'opzione Canale abilitato.
È possibile utilizzare l'SDK Node.js di Digital Assistant per impostare l'invio di messaggi da e verso l'assistente digitale.
Messaggi in entrata
La libreria WebhookClient
nell'SDK Node.js di Oracle Digital Assistant semplifica l'impostazione dell'invio e della ricezione di messaggi nei canali Webhook. Se non si utilizza l'SDK, ecco cosa è necessario sapere sulla creazione di messaggi in entrata.
La chiamata per l'invio di messaggi al tuo assistente digitale (o abilità) deve avere:
-
Un'intestazione
X-Hub-Signature
contenente il valore SHA256 del payload. La chiamata include funzioni che creano questo hash utilizzando la chiave segreta come chiave.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
sono variabili di ambiente impostate sul server Node. L'uso di queste variabili di ambiente consente di evitare di codificare le informazioni riservate direttamente nel webhook -
Oggetto JSON con proprietà
userId
,profile
emessagePayload
:{ "userId": "33c0bcBc8e-378c-4496-bc2a-b2b9647de2317", "profile": { "firstName": "Bob", "lastName": "Franklin", "age": 45 }, "messagePayload": {....} }
Proprietà descrizione; Digita Richiesto? userId
Identificativo univoco dell'utente. Questo ID è specifico per il chiamante. Stringa Sì profile
Proprietà che rappresentano l'utente, ad esempio firstName
eLastName
.Oggetto JSON No messagePayload
Il valore messagePayload
può esseretext
,postback
,attachment
elocation
.Oggetto JSON Sì Nota
Se lo skill o l'assistente digitale deve rilevare la lingua utente, assicurarsi cheprofile.locale
eprofile.languageTag
siano impostati su null nei messaggi del webhook.
Payload di esempio: messaggi in entrata
Tipo di messaggio | Payload di esempio |
---|---|
text |
|
postback |
|
attachment |
|
location |
|
Messaggi in uscita
La libreria WebhookClient
nell'SDK Node.js di Oracle Digital Assistant semplifica l'impostazione dell'invio e della ricezione di messaggi nei canali Webhook. Se non si utilizza l'SDK, ecco cosa è necessario sapere sulla creazione di messaggi in uscita.
È necessario pubblicare le chiamate nel formato JSON previsto da Digital Assistant, insieme all'intestazione di autorizzazione.
-
Un'intestazione
X-Hub-Signature
contenente il valore SHA256 del payload, calcolata utilizzando la chiave segreta come chiave.Nota
Digital Assistant utilizza l'intestazioneX-Hub-Signature
per consentire al destinatario di autenticare l'assistente digitale come mittente e convalidare l'integrità del payload. -
Un payload JSON contenente
userID
, un identificativo univoco specificato dal messaggio in entrata,type
, che può esseretext
,attachment
ecard
. Come illustrato negli esempi riportati di seguito, ai tipi di rispostatext
ecard
possono essere associate azioni. Qualsiasi tipo di risposta può includere anche azioni globali.Tipo di risposta Payload di esempio text
{ "userId":"22343248763458761287 "messagePayload": { "type": "text", "text": "Hello, how are you?" } }
Il seguente snippet mostra una rispostatext
con azioni:{ "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
Il tipo di risposta allegato può essere un'immagine, un file audio o un video: ... { "type": "attachment", "attachment": { "type": "video", "url": "https://www.youtube.com/watch?v=CMNry4PE93Y" } }