Questa sezione descrive il formato del payload JSON quando Actions on Google richiama il tuo fulfillment tramite Dialogflow v2.
Se utilizzi Dialogflow per creare azioni, il fulfillment comunica con Dialogflow tramite il proprio formato webhook standard anziché tramite il formato webhook di conversazione Actions on Google. Il formato webhook di Dialogflow contiene tutte le informazioni sul formato webhook di conversazione, oltre a dati aggiuntivi specifici per Dialogflow, come informazioni su contesti e parametri.
Per visualizzare altri esempi di messaggi JSON per i webhook Dialogflow, puoi fare riferimento a questo progetto GitHub.
Corpo della richiesta
Il messaggio di richiesta di Dialogflow contiene dati nel formato webhook di Dialogflow. Questo oggetto include informazioni specifiche di Actions on Google, come riepilogate di seguito:
- Il valore di
originalDetectIntentRequest.source
è "google". originalDetectIntentRequest.version
indica la versione di Actions on Google della richiesta.- Il campo
originalDetectIntentRequest.payload
contiene informazioni chiave specifiche di Actions on Google, tra cui la richiesta di conversazione inviata dall'assistente. - Il campo
Conversation.conversationToken
non è supportato dalle richieste di webhook di Dialogflow. Il fulfillment può invece utilizzare un contesto Dialogflow per mantenere i dati nel corso della durata della conversazione.
Esempio di richiesta di chiamata semplice
Lo snippet seguente mostra un esempio di richiesta di chiamata nel formato webhook di Dialogflow.
{
"responseId": "c4b863dd-aafe-41ad-a115-91736b665cb9",
"queryResult": {
"queryText": "GOOGLE_ASSISTANT_WELCOME",
"action": "input.welcome",
"parameters": {},
"allRequiredParamsPresent": true,
"fulfillmentText": "",
"fulfillmentMessages": [],
"outputContexts": [
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/google_assistant_welcome"
},
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/actions_capability_screen_output"
},
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/google_assistant_input_type_voice"
},
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/actions_capability_audio_output"
},
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/actions_capability_web_browser"
},
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/actions_capability_media_response_audio"
}
],
"intent": {
"name": "projects/${PROJECTID}/agent/intents/8b006880-0af7-4ec9-a4c3-1cc503ea8260",
"displayName": "Default Welcome Intent"
},
"intentDetectionConfidence": 1,
"diagnosticInfo": {},
"languageCode": "en-us"
},
"originalDetectIntentRequest": {
"source": "google",
"version": "2",
"payload": {
"isInSandbox": true,
"surface": {
"capabilities": [
{
"name": "actions.capability.SCREEN_OUTPUT"
},
{
"name": "actions.capability.AUDIO_OUTPUT"
},
{
"name": "actions.capability.WEB_BROWSER"
},
{
"name": "actions.capability.MEDIA_RESPONSE_AUDIO"
}
]
},
"inputs": [
{
"rawInputs": [
{
"query": "Talk to my test app",
"inputType": "VOICE"
}
],
"intent": "actions.intent.MAIN"
}
],
"user": {
"lastSeen": "2018-03-16T22:08:48Z",
"permissions": [
"UPDATE"
],
"locale": "en-US",
"userId": "ABwppHEvwoXs18xBNzumk18p5h02bhRDp_riW0kTZKYdxB6-LfP3BJRjgPjHf1xqy1lxqS2uL8Z36gT6JLXSrSCZ"
},
"conversation": {
"conversationId": "${SESSIONID}",
"type": "NEW"
},
"availableSurfaces": [
{
"capabilities": [
{
"name": "actions.capability.SCREEN_OUTPUT"
},
{
"name": "actions.capability.AUDIO_OUTPUT"
}
]
}
]
}
},
"session": "projects/${PROJECTID}/agent/sessions/${SESSIONID}"
}
Esempio di richiesta di conversazione semplice
Lo snippet riportato di seguito mostra un esempio di richiesta conversazionale nel formato webhook Dialogflow, in cui l'input utente è una stringa di testo.
{
"responseId": "68efa569-4ba1-4b7f-9b1b-ac2865deb539",
"queryResult": {
"queryText": "query from the user",
"action": "action.name.of.matched.dialogflow.intent",
"parameters": {},
"allRequiredParamsPresent": true,
"outputContexts": [
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/actions_capability_screen_output"
},
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/actions_capability_audio_output"
},
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/google_assistant_input_type_keyboard"
},
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/actions_capability_media_response_audio"
},
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/actions_capability_web_browser"
}
],
"intent": {
"name": "projects/${PROJECTID}/agent/intents/1f4e5bd9-a670-4161-a22e-2c97b077f29f",
"displayName": "Name of Dialogflow Intent"
},
"intentDetectionConfidence": 1,
"diagnosticInfo": {},
"languageCode": "en-us"
},
"originalDetectIntentRequest": {
"source": "google",
"version": "2",
"payload": {
"isInSandbox": true,
"surface": {
"capabilities": [
{
"name": "actions.capability.SCREEN_OUTPUT"
},
{
"name": "actions.capability.AUDIO_OUTPUT"
},
{
"name": "actions.capability.WEB_BROWSER"
},
{
"name": "actions.capability.MEDIA_RESPONSE_AUDIO"
}
]
},
"inputs": [
{
"rawInputs": [
{
"query": "query from the user",
"inputType": "KEYBOARD"
}
],
"arguments": [
{
"rawText": "query from the user",
"textValue": "query from the user",
"name": "text"
}
],
"intent": "actions.intent.TEXT"
}
],
"user": {
"lastSeen": "2017-10-06T01:06:56Z",
"locale": "en-US",
"userId": "AI_yXq-AtrRh3mJX5D-G0MsVhqun"
},
"conversation": {
"conversationId": "1522951193000",
"type": "ACTIVE",
"conversationToken": "[]"
},
"availableSurfaces": [
{
"capabilities": [
{
"name": "actions.capability.SCREEN_OUTPUT"
},
{
"name": "actions.capability.AUDIO_OUTPUT"
}
]
}
]
}
},
"session": "projects/${PROJECTID}/agent/sessions/${SESSIONID}"
}
Esempio di risultato della guida
Lo snippet seguente mostra un esempio di risultato helper nel formato webhook Dialogflow. Questo esempio mostra la risposta dell'utente dopo che il webhook ha indicato all'assistente che deve ottenere la conferma dell'utente.
{
"responseId": "cb6f5ec2-c26e-4349-b561-a9ddd6a0e495",
"queryResult": {
"queryText": "actions_intent_CONFIRMATION",
"action": "Dialogflow action name of matched intent",
"parameters": {},
"allRequiredParamsPresent": true,
"outputContexts": [
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/actions_intent_confirmation",
"parameters": {
"CONFIRMATION": true
}
}
],
"intent": {
"name": "projects/${PROJECTID}/agent/intents/1777d616-a5f7-4838-a9a9-870f2956bd14",
"displayName": "Dialogflow action name of matched intent"
},
"intentDetectionConfidence": 1,
"diagnosticInfo": {},
"languageCode": "en-us"
},
"originalDetectIntentRequest": {
"source": "google",
"version": "2",
"payload": {
"isInSandbox": true,
"surface": {},
"inputs": [
{
"rawInputs": [
{
"query": "yes",
"inputType": "VOICE"
}
],
"arguments": [
{
"name": "CONFIRMATION",
"boolValue": true
}
],
"intent": "actions.intent.CONFIRMATION"
}
],
"user": {},
"conversation": {},
"availableSurfaces": []
}
},
"session": "projects/${PROJECTID}/agent/sessions/${SESSIONID}"
}
Corpo della risposta
Il Content-Type
nell'intestazione dei post HTTP provenienti dall'endpoint di evasione degli ordini
all'assistente deve essere application/json
.
Il messaggio di risposta che il tuo fulfillment invia a Dialogflow deve essere nel formato webhook di Dialogflow.
Durante la comunicazione con l'assistente, la risposta in genere contiene un oggetto payload
che incapsula un oggetto "google
". L'oggetto payload "google
" include informazioni specifiche di Actions on Google. Deve contenere almeno un campo expectUserResponse
e un campo richResponse
o systemIntent
.
I campi chiave per l'oggetto payload "google
" sono riepilogati di seguito:
Campo | Descrizione |
---|---|
expectUserResponse |
Indica se il fulfillment prevede una risposta dell'utente. Imposta il valore su
true per mantenere viva la conversazione e su false per terminare
la conversazione. |
userStorage |
Archivia dati permanenti associati a un utente specifico. La quantità totale di archiviazione è di 10.000 byte. |
richResponse |
Questo campo contiene audio, testo, schede, suggerimenti o dati strutturati che l'assistente dovrà mostrare. Per scoprire di più sull'utilizzo delle risposte avanzate per Actions on Google, consulta la pagina Risposte dettagliate. |
systemIntent |
Questo campo ha la stessa struttura di ExpectedInput.possibleIntents . In genere, la risposta contiene un
systemIntent se il fulfillment utilizza
un intent helper. Il campo possibleIntents in systemIntent deve essere impostato su un oggetto ExpectedIntent , con il nome del campo inputValueData modificato in data .
|
All'interno dell'oggetto ExpectedIntent
, devi specificare i seguenti valori:
- intent: un nome di intent per l'helper che indica il tipo di informazioni che vuoi che l'utente fornisca e
- data: una specifica del valore, ovvero una stringa che descrive i dati necessari all'assistente per eseguire l'helper.
Ad esempio, se viene richiesta l'autorizzazione dell'utente, imposta intent
su
actions.intent.PERMISSSION
e data
sulla specifica del valore su
"@type": "type.googleapis.com/google.actions.v2.PermissionValueSpec"
, insieme ai campi per quel tipo.
Il seguente elenco riassume le stringhe di specifica dei valori per gli helper che puoi impostare in un
systemIntent
per una risposta webhook di Dialogflow. Per un elenco completo degli intent di Actions on Google per il controllo conversazionale, consulta la pagina di riferimento relativa agli intent.
Nome intent | Nome evento Dialogflow | Specifica del valore | Descrizione |
---|---|---|---|
actions.intent.CONFIRMATION
|
actions_intent_CONFIRMATION |
"@type": "type.googleapis.com/google.actions.v2.ConfirmationValueSpec"
|
Riceve una conferma dall'utente (ad esempio, una risposta a una domanda sì o no). |
actions.intent.DATETIME
|
actions_intent_DATETIME |
"@type": "type.googleapis.com/google.actions.v2.DateTimeValueSpec"
|
Consente di ottenere una data e un'ora inseriti dall'utente. |
actions.intent.DELIVERY_ADDRESS
|
actions_intent_DELIVERY_ADDRESS |
"@type": "type.googleapis.com/google.actions.v2.DeliveryAddressValueSpec"
|
Consente di ottenere un indirizzo di consegna inserito dall'utente. |
actions.intent.LINK
|
actions_intent_LINK |
"@type": "type.googleapis.com/google.actions.v2.LinkValueSpec"
|
Richiede un flusso di link diretti in un'app per Android. |
actions.intent.OPTION
|
actions_intent_OPTION |
"@type": "type.googleapis.com/google.actions.v2.OptionValueSpec"
|
Consente di ottenere l'elemento selezionato da un elenco o dall'interfaccia utente di un carosello. |
actions.intent.PERMISSION
|
actions_intent_PERMISSION |
"@type": "type.googleapis.com/google.actions.v2.PermissionValueSpec"
|
Consente di ottenere le informazioni dell'utente, tra cui nome completo, posizione approssimativa o posizione esatta. |
actions.intent.SIGN_IN
|
actions_intent_SIGN_IN |
"@type": "type.googleapis.com/google.actions.v2.SignInValueSpec"
|
Richiede una procedura di collegamento degli account per collegare l'account di un utente. |
Esempio di risposta semplice
Lo snippet seguente mostra un esempio di risposta semplice nel formato webhook di Dialogflow.
{
"payload": {
"google": {
"expectUserResponse": true,
"richResponse": {
"items": [
{
"simpleResponse": {
"textToSpeech": "this is a simple response"
}
}
]
}
}
}
}
Esempio di helper
Lo snippet riportato di seguito mostra un esempio di utilizzo di un intent helper nel formato webhook di Dialogflow. In questo esempio, il webhook utilizza l'intent helper actions.intent.OPTIONS
per indicare all'assistente di ottenere una selezione utente tra due opzioni.
{
"payload": {
"google": {
"expectUserResponse": true,
"richResponse": {
"items": [
{
"simpleResponse": {
"textToSpeech": "Choose a item"
}
}
]
},
"systemIntent": {
"intent": "actions.intent.OPTION",
"data": {
"@type": "type.googleapis.com/google.actions.v2.OptionValueSpec",
"listSelect": {
"title": "Hello",
"items": [
{
"optionInfo": {
"key": "first title key"
},
"description": "first description",
"image": {
"url": "/assistant/images/badges/XPM_BADGING_GoogleAssistant_VER.png",
"accessibilityText": "first alt"
},
"title": "first title"
},
{
"optionInfo": {
"key": "second"
},
"description": "second description",
"image": {
"url": "https://lh3.googleusercontent.com/Nu3a6F80WfixUqf_ec_vgXy_c0-0r4VLJRXjVFF_X_CIilEu8B9fT35qyTEj_PEsKw",
"accessibilityText": "second alt"
},
"title": "second title"
}
]
}
}
}
}
}
}
Dopo aver ricevuto il messaggio dell'esempio precedente, l'assistente prende temporaneamente il controllo della conversazione e chiede all'utente di effettuare una selezione in base alle opzioni fornite. Dopo aver raccolto tutti gli input utente richiesti, l'assistente invia questo risultato helper al fulfillment in una richiesta webhook di Dialogflow.
Lo snippet riportato di seguito mostra un esempio del risultato di supporto con la selezione della scelta dell'utente.
{
"responseId": "ea166558-615a-48f3-ae5b-7f55d895784b",
"queryResult": {
"queryText": "actions_intent_OPTION",
"action": "",
"parameters": {},
"allRequiredParamsPresent": true,
"fulfillmentText": "",
"fulfillmentMessages": [],
"outputContexts": [
{
"name": "projects/${PROJECTID}/agent/sessions/${SESSIONID}/contexts/actions_intent_option",
"parameters": {
"OPTION": "key of selected item"
}
}
],
"intent": {
"name": "projects/${PROJECTID}/agent/intents/1777d616-a5f7-4838-a9a9-870f2956bd14",
"displayName": "Dialogflow intent name of matched intent"
},
"intentDetectionConfidence": 1,
"diagnosticInfo": {},
"languageCode": "en-us"
},
"originalDetectIntentRequest": {
"source": "google",
"version": "2",
"payload": {
"isInSandbox": true,
"surface": {
"capabilities": []
},
"inputs": [
{
"rawInputs": [
{
"query": "Title of selected item",
"inputType": "TOUCH"
}
],
"arguments": [
{
"textValue": "Key of selected item",
"name": "OPTION"
}
],
"intent": "actions.intent.OPTION"
}
],
"user": {},
"conversation": {},
"availableSurfaces": []
}
},
"session": "projects/${PROJECTID}/agent/sessions/${SESSIONID}"
}
Esempio di fine della conversazione
Lo snippet seguente mostra un esempio di risposta semplice per terminare una sessione di conversazione
in formato webhook Dialogflow. Il valore expectUserResponse
false
nel messaggio di risposta indica all'assistente che non sono previsti ulteriori input da parte dell'utente e che la conversazione in corso deve terminare.
{
"payload": {
"google": {
"expectUserResponse": false,
"richResponse": {
"items": [
{
"simpleResponse": {
"textToSpeech": "Goodbye!"
}
}
]
}
}
}
}
Per informazioni su come ignorare il comportamento predefinito quando gli utenti richiamano una frase standard per terminare una conversazione con l'assistente, consulta la guida all'uscita dalla conversazione.