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, Twoja odpowiedź zwykle zawiera payload obiekt zawierający „google” obiektu. „google” obiekt ładunku zawiera Informacje dotyczące Actions on 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ź zawiera zwykle systemIntent, jeśli Twoja realizacja opiera się na z intencją pomocniczą. possibleIntents pole w systemIntent musi mieć wartość ExpectedIntent obiekt z nazwą pola inputValueData zmienionym na data.

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

  • intent: nazwa intencji dla elementu pomocniczego, która wskazuje typ intencji jakich informacji oczekujesz od użytkownika,
  • 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" uzyskuje informacje o użytkowniku, w tym jego 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 korzysta z funkcji actions.intent.OPTIONS ma zamiar poinstruować Asystenta, że ma uzyskać wybór między dwiema opcjami.

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