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.sourceto „google”.
- originalDetectIntentRequest.versionoznacza działanie w Actions on Google wersję dla żądania.
- originalDetectIntentRequest.payloadzawiera kluczowe działania w Actions on Google informacje, w tym rozmowę; prośba JSON z Asystenta.
- Pole Conversation.conversationTokennie 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ę, afalse, 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.possibleIntentsOdpowiedź zawiera zwyklesystemIntent, jeśli Twoja realizacja opiera się na
z intencją pomocniczą.possibleIntentspole wsystemIntentmusi mieć wartośćExpectedIntentobiekt z nazwą polainputValueDatazmienionym nadata. | 
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.
