Dialogflow वेबहुक फ़ॉर्मैट {:#dialogflow-webhook-format} (Dialogflow)

इस सेक्शन में, JSON पेलोड के फ़ॉर्मैट के बारे में बताया गया है. इसे तब भेजा जाएगा, जब Actions on Google ने Dialogflow v2 के ज़रिए कार्रवाई को पूरा करना.

अगर आप कार्रवाइयां बनाने के लिए Dialogflow का इस्तेमाल कर रहे हैं, तो आपका काम यह डायलॉग बॉक्स अपने स्टैंडर्ड वेबहुक फ़ॉर्मैट के बजाय, Dialogflow के साथ कम्यूनिकेट करता है Actions on Google बातचीत के लिए वेबहुक फ़ॉर्मैट. Dialogflow वेबहुक फ़ॉर्मैट में यह शामिल है इस तरह की जानकारी को सुरक्षित बातचीत के लिए वेबहुक फ़ॉर्मैट साथ ही, आपको Dialogflow का खास डेटा भी दिखेगा. जैसे, कॉन्टेक्स्ट और पैरामीटर.

Dialogflow वेबहुक के लिए JSON मैसेज के और उदाहरण देखने के लिए, इस GitHub प्रोजेक्ट में जोड़ें.

अनुरोध का मुख्य भाग

इनसे मिला अनुरोध मैसेज Dialogflow में डेटा, Dialogflow वेबहुक फ़ॉर्मैट में होता है. इस ऑब्जेक्ट में ये शामिल हैं Actions on Google से जुड़ी खास जानकारी, जैसा कि यहां बताया गया है:

  • originalDetectIntentRequest.source की वैल्यू "google" है.
  • originalDetectIntentRequest.version, Actions on Google के बारे में बताता है वर्शन भी मौजूद है.
  • originalDetectIntentRequest.payload में, खास तौर पर Google के लिए बनाई गई खास कार्रवाइयां मौजूद हैं बातचीत के साथ-साथ अन्य जानकारी अनुरोध Assistant से मिला 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 वेबहुक फ़ॉर्मैट में हेल्पर नतीजे का उदाहरण दिखाता है. यह उदाहरण वेबहुक के, Assistant को संकेत देने के बाद उपयोगकर्ता का जवाब दिखाता है यह भी पक्का किया जा सकता है कि उसे उपयोगकर्ता की पुष्टि लेनी होगी.

{
  "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 और Assistant, application/json होनी चाहिए.

आपके ग्राहक ने जो मैसेज विक्रेता को भेजा है वह इसमें होना चाहिए Dialogflow वेबहुक फ़ॉर्मैट में.

Assistant से बातचीत करते समय, आम तौर पर आपके जवाब में payload होता है ऐसा ऑब्जेक्ट जो "google" इनकैप्सुलेट करता हो ऑब्जेक्ट है. "google" पेलोड ऑब्जेक्ट में शामिल है Actions on Google से जुड़ी खास जानकारी. इसमें कम से कम, expectUserResponse फ़ील्ड और richResponse या systemIntent फ़ील्ड.

"google" के लिए मुख्य फ़ील्ड पेलोड ऑब्जेक्ट के बारे में यहां खास जानकारी दी गई है:

फ़ील्ड ब्यौरा
expectUserResponse इससे पता चलता है कि ग्राहक को आइटम भेजने के लिए, खरीदार से जवाब की उम्मीद है या नहीं. मान इस पर सेट करें true बातचीत कब जारी रखनी है और false खत्म करने के लिए बातचीत.
userStorage यह किसी उपयोगकर्ता से जुड़े स्थायी डेटा को सेव करता है. कुल स्टोरेज रकम 10,000 बाइट होती है.
richResponse इस फ़ील्ड में ऑडियो, टेक्स्ट, कार्ड, सुझाव या स्ट्रक्चर्ड डेटा है का इस्तेमाल नहीं किया जा सकता. रिच जवाबों का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए Actions on Google, देखें बेहतर जवाब
systemIntent इस फ़ील्ड का स्ट्रक्चर एक जैसा है ExpectedInput.possibleIntents. आम तौर पर, आपके जवाब में systemIntent अगर ग्राहक को आइटम भेजने के लिए इसका इस्तेमाल किया जा रहा है हेल्पर इंटेंट. systemIntent में मौजूद possibleIntents फ़ील्ड को ExpectedIntent ऑब्जेक्ट पर सेट किया जाना चाहिए. साथ ही, inputValueData फ़ील्ड का नाम बदलकर data किया जाना चाहिए.

ExpectedIntent में ऑब्जेक्ट है, तो आप ये मान दर्ज करते हैं:

  • intent: हेल्पर के लिए इंटेंट का नाम, जो दिखाता है कि वह जानकारी जो आपको उपयोगकर्ता से देनी है, और
  • data: वैल्यू स्पेसिफ़िकेशन, एक ऐसी स्ट्रिंग होती है जो सहायक के लिए सहायक के काम करना ज़रूरी होता है.

उदाहरण के लिए, अगर आपको उपयोगकर्ता की अनुमति लेनी है, तो intent को वैल्यू स्पेसिफ़िकेशन के लिए, actions.intent.PERMISSSION और data "@type": "type.googleapis.com/google.actions.v2.PermissionValueSpec" और इसके लिए फ़ील्ड आपकी सहायता कर सकता है.

नीचे दी गई सूची में हेल्पर के लिए वैल्यू स्पेसिफ़िकेशन स्ट्रिंग की खास जानकारी दी गई है. Dialogflow वेबहुक के जवाब के लिए systemIntent. 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 हेल्पर, Assistant को दो विकल्पों में से उपयोगकर्ता को चुना जाता है.

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

पिछले उदाहरण से मैसेज मिलने पर, Assistant कुछ समय के लिए वह बातचीत को कंट्रोल करता है और उपयोगकर्ता को दिए गए विकल्प. उपयोगकर्ता के सभी ज़रूरी इनपुट इकट्ठा करने पर, Assistant इस सहायक नतीजे को 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}"
}

बातचीत खत्म करने का उदाहरण

नीचे दिया गया स्निपेट बातचीत खत्म करने के लिए एक आसान जवाब का उदाहरण दिखाता है सेशन में पूरी जानकारी इकट्ठा की जाएगी. जवाब वाले मैसेज में false की expectUserResponse वैल्यू से, Assistant को यह संकेत मिलता है कि उपयोगकर्ता से कोई और इनपुट नहीं चाहिए और उसे मौजूदा बातचीत को खत्म कर देना चाहिए.

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

जब उपयोगकर्ता किसी स्टैंडर्ड को शुरू करते हैं, तो डिफ़ॉल्ट ऐक्शन को बदलने का तरीका जानने के लिए Assistant के साथ बातचीत समाप्त करने के लिए वाक्यांश देखें, बातचीत से बाहर निकलने के लिए गाइड पर क्लिक करें.