Поддержка диалоговых действий будет прекращена 13 июня 2023 г. Дополнительные сведения см. в разделе Закрытие диалоговых действий .

Формат веб-перехватчика Dialogflow {:#dialogflow-webhook-format} (Dialogflow)

Оптимизируйте свои подборки Сохраняйте и классифицируйте контент в соответствии со своими настройками.

В этом разделе описывается формат полезной нагрузки JSON, когда Actions on Google вызывает ваше выполнение через Dialogflow v2.

Если вы используете Dialogflow для создания действий, ваше выполнение взаимодействует с Dialogflow через собственный стандартный формат веб-перехватчика вместо формата веб-перехватчика действий в Google. Формат веб-перехватчика Dialogflow содержит всю информацию о формате веб-перехватчика диалога, а также дополнительные данные, относящиеся к Dialogflow, например сведения о контекстах и ​​параметрах.

Чтобы увидеть больше примеров сообщений JSON для веб-хуков Dialogflow, вы можете обратиться к этому проекту GitHub .

Тело запроса

Сообщение запроса от Dialogflow содержит данные в формате веб-перехватчика Dialogflow. Этот объект включает действия с информацией, относящейся к Google, как указано ниже:

  • Исходное значение originalDetectIntentRequest.source — «google».
  • originalDetectIntentRequest.version указывает версию Actions on Google для запроса.
  • originalDetectIntentRequest.payload содержит ключевые действия с информацией, относящейся к Google, включая JSON- запрос диалога от помощника.
  • Поле Conversation.conversationToken не поддерживается запросами веб-перехватчиков Dialogflow. Вместо этого ваше выполнение может использовать контекст Dialogflow для сохранения данных на протяжении всего разговора.

Пример простого запроса на вызов

Фрагмент ниже показывает пример запроса на вызов в формате веб-перехватчика 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}"
}

Простой пример запроса разговора

Фрагмент ниже показывает пример диалогового запроса в формате веб-перехватчика Dialogflow, где пользовательский ввод представляет собой текстовую строку.

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

Пример результата помощника

Фрагмент ниже показывает пример вспомогательного результата в формате веб-перехватчика Dialogflow. В этом примере показан ответ пользователя после того, как веб-перехватчик указывает помощнику, что ему необходимо получить подтверждение пользователя.

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

Тело ответа

Content-Type в заголовке HTTP-сообщений от конечной точки выполнения до Assistant должен быть application/json .

Ответное сообщение, которое ваше выполнение отправляет в Dialogflow, должно быть в формате веб-перехватчика Dialogflow .

При общении с Ассистентом ваш ответ обычно содержит объект payload , который инкапсулирует объект " google ". Объект полезной нагрузки " google " включает действия с информацией, относящейся к Google. Он должен содержать как минимум поле expectUserResponse и либо поле richResponse , либо поле systemIntent .

Ключевые поля для объекта полезной нагрузки " google " приведены ниже:

Поле Описание
expectUserResponse Указывает, ожидает ли ваше выполнение ответа пользователя. Установите значение true , чтобы продолжить разговор, и false , чтобы завершить разговор.
userStorage Хранит постоянные данные, привязанные к конкретному пользователю. Общий объем хранилища составляет 10 000 байт.
richResponse Это поле содержит аудио, текст, карточки, предложения или структурированные данные, которые помощник может отображать. Чтобы узнать больше об использовании расширенных ответов для действий в Google, см. Расширенные ответы.
systemIntent Это поле имеет ту же структуру, что и ExpectedInput.possibleIntents . Ваш ответ обычно содержит systemIntent , если ваше выполнение использует вспомогательное намерение . Поле possibleIntents в systemIntent должно быть установлено на объект ExpectedIntent , а имя поля inputValueData изменено на data .

В объекте ExpectedIntent вы указываете следующие значения:

  • намерение : имя намерения для помощника, которое указывает тип информации, которую вы хотите, чтобы пользователь предоставил, и
  • data : Спецификация значения, представляющая собой строку, описывающую данные, необходимые помощнику для выполнения помощника.

Например, если вы запрашиваете разрешение пользователя, задайте intent actions.intent.PERMISSSION , а data спецификации значения значение "@type": "type.googleapis.com/google.actions.v2.PermissionValueSpec" , вместе с полями для этого типа.

В следующем списке приведены строки спецификации значений для помощников, которые можно задать в systemIntent для ответа веб-перехватчика Dialogflow. Полный список намерений Actions on Google для диалогового управления см. в справочнике по намерениям .

Имя намерения Имя события диалогового потока Значение Спецификация Описание
actions.intent.CONFIRMATION actions_intent_CONFIRMATION "@type": "type.googleapis.com/google.actions.v2.ConfirmationValueSpec" Получает подтверждение от пользователя (например, ответ на вопрос «да» или «нет»).
actions.intent.DATETIME actions_intent_DATETIME "@type": "type.googleapis.com/google.actions.v2.DateTimeValueSpec" Получает ввод даты и времени от пользователя.
actions.intent.DELIVERY_ADDRESS actions_intent_DELIVERY_ADDRESS "@type": "type.googleapis.com/google.actions.v2.DeliveryAddressValueSpec" Получает адрес доставки от пользователя.
actions.intent.LINK actions_intent_LINK "@type": "type.googleapis.com/google.actions.v2.LinkValueSpec" Запрашивает поток ссылок на контент в приложение для Android.
actions.intent.OPTION actions_intent_OPTION "@type": "type.googleapis.com/google.actions.v2.OptionValueSpec" Получает выбранный элемент из списка или пользовательского интерфейса карусели.
actions.intent.PERMISSION actions_intent_PERMISSION "@type": "type.googleapis.com/google.actions.v2.PermissionValueSpec" Получает информацию о пользователе, включая полное имя, примерное местоположение или точное местоположение.
actions.intent.SIGN_IN actions_intent_SIGN_IN "@type": "type.googleapis.com/google.actions.v2.SignInValueSpec" Запрашивает поток привязки учетной записи для привязки учетной записи пользователя.

Пример простого ответа

Фрагмент ниже показывает пример простого ответа в формате веб-перехватчика Dialogflow.

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

Пример помощника

Фрагмент ниже показывает пример использования вспомогательного намерения в формате веб-перехватчика Dialogflow. В этом примере ваш веб-перехватчик использует намерение помощника actions.intent.OPTIONS , чтобы указать помощнику получить выбор пользователя между двумя вариантами.

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

Получив сообщение из предыдущего примера, Помощник временно берет на себя беседу и предлагает пользователю сделать выбор на основе заданных параметров. Собрав все необходимые пользовательские данные, помощник отправляет этот вспомогательный результат обратно вашему выполнению в запросе веб-перехватчика Dialogflow.

Фрагмент ниже показывает пример результата помощника с выбором пользователя.

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

Пример завершения разговора

Фрагмент ниже показывает пример простого ответа на завершение сеанса беседы в формате веб-перехватчика Dialogflow. Значение expectUserResponse , равное false в ответном сообщении сигнализирует помощнику о том, что дальнейших действий пользователя не ожидается и что он должен завершить текущий диалог.

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

Чтобы узнать, как переопределить поведение по умолчанию, когда пользователи используют стандартную фразу для завершения беседы с Ассистентом, см. руководство по завершению беседы .