Format webhooka Dialogflow {:#dialogflow-webhook-format} (Dialogflow)

Ta sekcja opisuje format ładunku JSON, gdy Actions on Google wywołuje Twoją w usłudze Dialogflow w wersji 2.

Jeśli do tworzenia akcji używasz Dialogflow, Twoja realizacja komunikuje się z Dialogflow za pomocą własnego, standardowego formatu webhooka zamiast Format webhooka rozmowy w Actions on Google. Format webhooka Dialogflow zawiera wszystkie informacje format webhooka rozmowy wraz z dodatkowymi danymi dotyczącymi Dialogflow, takimi jak informacje kontekstów i parametrów.

Więcej przykładów wiadomości JSON dla webhooków Dialogflow znajdziesz w dokumentacji w tym projekcie GitHub.

Treść żądania

Prośba od Dialogflow zawiera dane w formacie webhooka Dialogflow. Ten obiekt zawiera: Podsumowanie informacji dotyczących Actions on Google:

  • Wartość originalDetectIntentRequest.source to „google”.
  • originalDetectIntentRequest.version oznacza działanie w Actions on Google wersję dla żądania.
  • originalDetectIntentRequest.payload zawiera kluczowe działania w Actions on Google informacje, w tym rozmowę; prośba JSON z Asystenta.
  • Pole Conversation.conversationToken nie jest obsługiwane przez webhooka Dialogflow żądań. Zamiast tego Twoja realizacja może korzystać z Dialogflow kontekstu, aby utrwalać dane w całym długość rozmowy.

Przykład prostego żądania wywołania

Poniższy fragment kodu zawiera przykład żądania wywołania w Dialogflow webhooka.

{
 
"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}"
}

Przykład prostej prośby o rozmowę

Poniższy fragment kodu zawiera przykład żądania rozmowy w Dialogflow webhooka, gdzie dane wejściowe użytkownika to ciąg tekstowy.

{
 
"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}"
}

Przykład wyniku pomocniczego

Poniższy fragment kodu zawiera przykładowy wynik pomocniczy w formacie webhooka Dialogflow. Ten przykład pokazuje odpowiedź użytkownika po tym, jak webhook powiadomi Asystenta że musi uzyskać potwierdzenie użytkownika.

{
 
"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}"
}

Treść odpowiedzi

Content-Type w nagłówku postów HTTP z punktu końcowego realizacji do Asystenta musi mieć wartość application/json.

Wiadomość z odpowiedzią wysyłana do Dialogflow musi zostać wysłana przez Twoją realizację format webhooka Dialogflow.

Gdy komunikujesz się z Asystentem, odpowiedź zwykle zawiera obiekt payload, który zawiera obiekt „google”. Obiekt ładunku „google” zawiera działania dotyczące informacji związanych z Google. Musi zawierać, co najmniej expectUserResponse i richResponse lub systemIntent.

Kluczowe pola obiektu „google” podsumowujemy obiekt ładunku:

Pole Opis
expectUserResponse Wskazuje, czy realizacja oczekuje odpowiedzi użytkownika. Ustaw wartość na true, kiedy kontynuować rozmowę, a false, aby ją zakończyć. rozmowę.
userStorage Przechowuje dane trwałe powiązane z określonym użytkownikiem. Łączna ilość miejsca na dane wynosi 10 000 bajtów.
richResponse To pole zawiera dźwięk, tekst, karty, sugestie lub uporządkowane dane które ma wykonać Asystent. Aby dowiedzieć się więcej o używaniu odpowiedzi rozszerzonych w przypadku Actions on Google, zobacz Rozszerzone odpowiedzi
systemIntent To pole ma taką samą strukturę jak ExpectedInput.possibleIntents Odpowiedź zwykle zawiera systemIntent, jeśli usługa korzysta z intencji pomocniczej. Pole possibleIntents w obiekcie systemIntent musi być ustawione na obiekt ExpectedIntent, a nazwa pola inputValueData musi zostać zmieniona na data.

W ciągu: ExpectedIntent możesz określić te wartości:

  • intent: nazwa intencji dla pomocnika, która wskazuje typ informacji, które użytkownik ma podać, oraz
  • data: specyfikacja wartości, czyli ciąg tekstowy opisujący dane niezbędna, by Asystent wyprowadził pomoc.

Jeśli na przykład pytasz o zgodę użytkownika, ustaw intent na actions.intent.PERMISSSION i data do specyfikacji wartości, aby "@type": "type.googleapis.com/google.actions.v2.PermissionValueSpec" oraz pola dla tego typu.

Poniższa lista zawiera podsumowanie ciągów specyfikacji wartości dla elementów pomocniczych, które można ustawić w systemIntent dla odpowiedzi webhooka Dialogflow. Pełną listę intencji Actions on Google dla kontroli konwersacyjnej, zobacz Dokumentacja intencji.

Nazwa intencji Nazwa zdarzenia Dialogflow Specyfikacja wartości Opis
actions.intent.CONFIRMATION actions_intent_CONFIRMATION "@type": "type.googleapis.com/google.actions.v2.ConfirmationValueSpec" uzyskuje potwierdzenie od użytkownika (na przykład odpowiedź na pytanie typu „tak” lub „nie”).
actions.intent.DATETIME actions_intent_DATETIME "@type": "type.googleapis.com/google.actions.v2.DateTimeValueSpec" Uzyskuje dane wejściowe użytkownika dotyczące daty i godziny.
actions.intent.DELIVERY_ADDRESS actions_intent_DELIVERY_ADDRESS "@type": "type.googleapis.com/google.actions.v2.DeliveryAddressValueSpec" Uzyskuje adres dostawy podany od użytkownika.
actions.intent.LINK actions_intent_LINK "@type": "type.googleapis.com/google.actions.v2.LinkValueSpec" Pyta o przepływ precyzyjnego linku do aplikacji na Androida.
actions.intent.OPTION actions_intent_OPTION "@type": "type.googleapis.com/google.actions.v2.OptionValueSpec" Pobiera wybrany element z interfejsu listy lub karuzeli.
actions.intent.PERMISSION actions_intent_PERMISSION "@type": "type.googleapis.com/google.actions.v2.PermissionValueSpec" Pobiera informacje o użytkowniku, w tym imię i nazwisko, przybliżoną lokalizację lub dokładną lokalizację.
actions.intent.SIGN_IN actions_intent_SIGN_IN "@type": "type.googleapis.com/google.actions.v2.SignInValueSpec" prosi o przeprowadzenie procesu łączenia kont w celu połączenia konta użytkownika.

Przykład prostej odpowiedzi

Poniższy fragment kodu zawiera przykładową prostą odpowiedź w Dialogflow webhooka.

{
 
"payload": {
   
"google": {
     
"expectUserResponse": true,
     
"richResponse": {
       
"items": [
         
{
           
"simpleResponse": {
             
"textToSpeech": "this is a simple response"
           
}
         
}
       
]
     
}
   
}
 
}
}

Przykład Asystenta

Fragment kodu poniżej pokazuje przykład użycia intencji pomocniczej w Dialogflow webhooka. W tym przykładzie webhook używa zamierzenia pomocniczego actions.intent.OPTIONS, aby zlecić Asystentowi uzyskanie wyboru użytkownika spośród 2 opcji.

{
 
"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"
             
}
           
]
         
}
       
}
     
}
   
}
 
}
}

Po otrzymaniu wiadomości z poprzedniego przykładu Asystent tymczasowo przejmuje kontrolę nad rozmową i zachęca użytkownika do dokonania wyboru na podstawie podanych opcji. Po zebraniu wszystkich wymaganych danych wejściowych użytkownika Asystent wysyła ten wynik pomocniczy z powrotem do Twojej realizacji w żądaniu webhooka Dialogflow.

Fragment kodu poniżej zawiera przykładowy wynik pomocniczy z wyborem opcji użytkownika.

{
 
"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}"
}

Przykład strony kończenia rozmowy

Fragment kodu poniżej to przykład prostej odpowiedzi na zakończenie rozmowy w formacie webhooka Dialogflow. expectUserResponse wartość false w komunikacie z odpowiedzią, która jest sygnalizowana Asystentowi że użytkownik nie powinien podejmować dalszych działań i powinien zakończyć rozmowy.

{
 
"payload": {
   
"google": {
     
"expectUserResponse": false,
     
"richResponse": {
       
"items": [
         
{
           
"simpleResponse": {
             
"textToSpeech": "Goodbye!"
           
}
         
}
       
]
     
}
   
}
 
}
}

Informacje o zastępowaniu domyślnego działania, gdy użytkownicy wywołują standardowe działanie aby zakończyć rozmowę z Asystentem, zobacz przewodnika po wyjściach z rozmowy.