Dialogflow webhook biçimi {:#dialogflow-webhook-format} (Dialogflow)

Bu bölümde Actions on Google'ın Dialogflow v2 aracılığıyla sipariş karşılama.

Eylemler oluşturmak için Dialogflow'u kullanıyorsanız sipariş karşılama Dialogflow ile iletişim kurmak için Actions on Google sohbet webhook'u biçimi. Dialogflow webhook biçimi şirketine ait tüm bilgiler ileti dizisi webhook'u biçimi Dialogflow'a özel ek veriler (örneğin, bağlam ve parametrelerdir.

Dialogflow webhook'ları için JSON mesajlarıyla ilgili daha fazla örnek görmek isterseniz bu GitHub projesine göz atabilirsiniz.

İstek içeriği

Gönderilen istek mesajı, Dialogflow, Dialogflow webhook biçiminde veriler içerir. Bu nesne şunları içerir: Google'a özel bilgiler üzerinde yapılan işlemler (aşağıda özetlenmiştir):

  • originalDetectIntentRequest.source değeri "google".
  • originalDetectIntentRequest.version, Actions on Google'ı belirtir sürümünü kullanın.
  • originalDetectIntentRequest.payload, Google'a özel önemli İşlemler içeriyor ve hatta görüşme esnasında istek Asistan'dan JSON.
  • Conversation.conversationToken alanı Dialogflow webhook tarafından desteklenmiyor kabul edersiniz. Bunun yerine, sipariş karşılama işleminiz için bir Dialogflow kullanabilir bağlamı da kullanabilirsiniz. konuşma süresi.

Basit çağrı isteği örneği

Aşağıdaki snippet'te Dialogflow'daki bir çağrı isteği örneği gösterilmektedir webhook biçiminde olur.

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

Basit görüşme isteği örneği

Aşağıdaki snippet'te Dialogflow'daki bir sohbet isteği örneği gösterilmektedir. webhook biçiminde olmalıdır. Burada kullanıcı girişi bir metin dizesidir.

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

Yardımcı sonucu örneği

Aşağıdaki snippet'te Dialogflow webhook biçimindeki yardımcı sonuç örneği gösterilmektedir. Bu örnekte, webhook Asistan'a kullanıcının onayını alması gerektiğini belirttikten sonra kullanıcının verdiği yanıt gösterilmektedir.

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

Yanıt gövdesi

Karşılama uç noktanızdaki HTTP gönderilerinin başlığındaki Content-Type Asistan, application/json olmalıdır.

İstek karşılama işleminizin Dialogflow'a gönderdiği yanıt mesajı şurada olmalıdır: Dialogflow webhook biçimini kullanın.

Asistan'la iletişim kurarken yanıtınızda genellikle payload yer alır "google" etiketini içeren nesne nesnesini tanımlayın. "google" yük nesnesi şunları içerir: Actions on Google'a özel bilgiler En azından bir expectUserResponse alanı ve richResponse veya systemIntent alanı.

"google" için önemli alanlar yük nesnesi aşağıda özetlenmiştir:

Alan Açıklama
expectUserResponse Karşılamanızın kullanıcı yanıtı bekleyip beklemediğini belirtir. Değeri şu şekilde ayarla: true Görüşmenin ne zaman devam edeceği ve false için sona ereceği zaman tercih edebilirsiniz.
userStorage Belirli bir kullanıcıya bağlı kalıcı verileri depolar. Toplam depolama alanı miktarı 10.000 bayttır.
richResponse Bu alan ses, metin, kart, öneri veya yapılandırılmış veri içeriyor Asistan'ın oluşturması için kullanılır. Şu etkinlik için zengin yanıtları kullanma hakkında daha fazla bilgi edinmek istiyorsanız: Actions on Google'a göz atın Zengin yanıtlar
systemIntent Bu alan ExpectedInput.possibleIntents Yanıtınızda genelde systemIntent Sipariş karşılama işleminizde bir yardımcı amacıdır. systemIntent içindeki possibleIntents alanı, inputValueData alan adının data olarak değiştirilmesiyle birlikte bir ExpectedIntent nesnesine ayarlanmalıdır.

ExpectedIntent içinde nesne için şu değerleri belirtirsiniz:

  • intent: istediğiniz bilgileri ve
  • data: Bir değer spesifikasyonu; Google Asistan'ın yardımcıyı yürütmesi için gereklidir.

Örneğin, kullanıcıdan izin istiyorsanız intent öğesini şuna ayarlayın: actions.intent.PERMISSSION ve data için değer spesifikasyonuna "@type": "type.googleapis.com/google.actions.v2.PermissionValueSpec" ve şuna ilişkin alanlar: işleyeceğiz.

Aşağıdaki listede, bir Dialogflow webhook yanıtı için systemIntent. Actions on Google amaçlarının tam listesi için için bkz. Intents referansı.

Amaç Adı Dialogflow Etkinliği Adı Değer Spesifikasyonu Açıklama
actions.intent.CONFIRMATION actions_intent_CONFIRMATION "@type": "type.googleapis.com/google.actions.v2.ConfirmationValueSpec" Kullanıcıdan onay alır (örneğin, cevabı evet veya hayır olan bir soru).
actions.intent.DATETIME actions_intent_DATETIME "@type": "type.googleapis.com/google.actions.v2.DateTimeValueSpec" Kullanıcının tarih ve saat girişini alır.
actions.intent.DELIVERY_ADDRESS actions_intent_DELIVERY_ADDRESS "@type": "type.googleapis.com/google.actions.v2.DeliveryAddressValueSpec" Kullanıcının teslimat adresi girişini alır.
actions.intent.LINK actions_intent_LINK "@type": "type.googleapis.com/google.actions.v2.LinkValueSpec" Bir Android uygulamasına derin bağlantı akışı ister.
actions.intent.OPTION actions_intent_OPTION "@type": "type.googleapis.com/google.actions.v2.OptionValueSpec" Seçili öğeyi bir liste veya bant kullanıcı arayüzünden alır.
actions.intent.PERMISSION actions_intent_PERMISSION "@type": "type.googleapis.com/google.actions.v2.PermissionValueSpec" Kullanıcının tam adı, yaklaşık konumu veya tam konum.
actions.intent.SIGN_IN actions_intent_SIGN_IN "@type": "type.googleapis.com/google.actions.v2.SignInValueSpec" Kullanıcının hesabını bağlamak için hesap bağlama akışı ister.

Basit yanıt örneği

Aşağıdaki snippet'te Dialogflow'daki basit bir yanıt örneği gösterilmektedir webhook biçiminde olur.

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

Yardımcı örneği

Aşağıdaki snippet'te Dialogflow'da yardımcı amaç kullanmaya dair bir örnek gösterilmektedir webhook biçiminde olur. Bu örnekte, webhook'unuz actions.intent.OPTIONS yardımcısının, Asistan'a bir iki seçenek arasında seçim yapar.

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

Asistan, önceki örnekteki mesajı aldığında geçici olarak konuyu ele alır ve ondan duruma göre seçim yapmasını ister. tercih edebilirsiniz. Asistan, gerekli tüm kullanıcı girişlerini topladıktan sonra bu yardımcı sonucu bir Dialogflow webhook isteğindeki karşılamanıza geri gönderir.

Aşağıdaki snippet'te, kullanıcı seçimi seçimiyle yardımcı sonucun bir örneği gösterilmektedir.

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

İleti dizisini sonlandırma örneği

Aşağıdaki snippet'te, bir ileti dizisini sonlandırmak için basit bir yanıt örneği gösterilmektedir oturumunda görüntüleyebilirsiniz. İlgili içeriği oluşturmak için kullanılan expectUserResponse Asistan'a gönderilen yanıt mesajı sinyallerindeki false değeri bunun beklendiğini ve geçerli tüm etkinliklerin yardımcı olur.

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

Kullanıcılar bir standardı çağırdığında varsayılan davranışın nasıl geçersiz kılınacağını öğrenmek için konuşmayı bitirmek için konuşmaya, ileti dizisi çıkışları rehberini inceleyin.