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

यह सेक्शन, JSON पेलोड के फ़ॉर्मैट के बारे में बताता है. ऐसा तब होता है, जब Actions on Google कार्रवाई SDK टूल की मदद से, कार्रवाई करना शुरू करता है.

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

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

जब उपयोगकर्ता कोई शुरुआती क्वेरी करते हैं या बाद में कुछ इनपुट देते हैं, तो Assistant आपको ऑर्डर पूरा करने का अनुरोध भेजती है. Assistant से मिलने वाले, बातचीत वाले वेबहुक अनुरोधों में डेटा जैसे कि ट्रिगर किए गए इंटेंट, उपयोगकर्ता के इनपुट का रॉ टेक्स्ट, और उपयोगकर्ता के डिवाइस की परफ़ॉर्मेंस के बारे में जानकारी शामिल होती है.

बातचीत के वेबहुक फ़ॉर्मैट में, अनुरोध के लिए मुख्य फ़ील्ड की खास जानकारी यहां दी गई है:

फ़ील्ड ब्यौरा
isInSandbox इस बूलियन वैरिएबल का इस्तेमाल मुख्य रूप से ट्रांज़ैक्शन सुविधा के लिए किया जाता है. इससे यह पता चलता है कि आपके वेबहुक को सैंडबॉक्स मोड में यह अनुरोध मैनेज करना चाहिए या नहीं. सैंडबॉक्स मोड में, आपके वेबहुक को उपयोगकर्ताओं के किसी भी परचेज़ ऑर्डर (पीओ) से शुल्क नहीं लेना चाहिए और न ही उसे पूरा करना चाहिए. डिफ़ॉल्ट रूप से, यह "true" पर सेट होता है.
surface Assistant के जिस प्लैटफ़ॉर्म से उपयोगकर्ता इंटरैक्ट कर रहा है उसके बारे में जानकारी और उसकी क्षमताओं के बारे में जानकारी.
Inputs बातचीत शुरू करने के अनुरोध के बारे में जानकारी. ट्रिगर करने के लिए, इसमें एक इंटेंट शामिल होता है, जो किसी कार्रवाई के लिए मैप करता है. बातचीत में बाद में किए गए अनुरोधों के लिए, इस ऑब्जेक्ट में तर्क भी शामिल हो सकते हैं. ये आर्ग्युमेंट, आपके फ़ुलफ़िलमेंट के बताए गए इनपुट के मुताबिक हो सकते हैं.
User अनुरोध करने वाले उपयोगकर्ता की जानकारी. इस जानकारी में उपयोगकर्ता से मिली अनुमतियां और उपयोगकर्ता की स्थान-भाषा शामिल होती है.
Conversation बातचीत के कॉन्टेक्स्ट की जानकारी. इसमें यह जानकारी भी शामिल होती है कि बातचीत का आईडी, किस तरह का है (जैसे, क्या यह अनुरोध नई बातचीत शुरू कर रहा है), और बातचीत का टोकन, ताकि बातचीत के पूरे समय में स्थायी डेटा को सेव किया जा सके.
availableSurfaces इस जानकारी का इस्तेमाल कई जगहों पर होने वाली बातचीत के लिए किया जाता है.

बातचीत शुरू करने के अनुरोध का आसान उदाहरण

नीचे दिया गया स्निपेट, बातचीत के वेबहुक फ़ॉर्मैट में, शुरू करने के अनुरोध का उदाहरण दिखाता है.

{
  "user": {
    "userId": "ABwppHEF...",
    "locale": "en-US",
    "lastSeen": "2018-03-21T17:59:52Z",
    "userStorage": "{\"data\":{}}"
  },
  "device": {},
  "surface": {
    "capabilities": [
      {
        "name": "actions.capability.SCREEN_OUTPUT"
      },
      {
        "name": "actions.capability.AUDIO_OUTPUT"
      },
      {
        "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
      },
      {
        "name": "actions.capability.WEB_BROWSER"
      }
    ]
  },
  "conversation": {
    "conversationId": "1521784527171",
    "type": "NEW"
  },
  "inputs": [
    {
      "intent": "actions.intent.MAIN",
      "rawInputs": [
        {
          "inputType": "VOICE",
          "query": "Talk to my test app"
        }
      ]
    }
  ],
  "availableSurfaces": [
    {
      "capabilities": [
        {
          "name": "actions.capability.SCREEN_OUTPUT"
        },
        {
          "name": "actions.capability.AUDIO_OUTPUT"
        },
        {
          "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
        },
        {
          "name": "actions.capability.WEB_BROWSER"
        }
      ]
    }
  ]
}

बातचीत के अनुरोध का उदाहरण

नीचे दिया गया स्निपेट, बातचीत के वेबहुक फ़ॉर्मैट में, बातचीत वाले अनुरोध का एक उदाहरण दिखाता है. इसमें उपयोगकर्ता का इनपुट, एक टेक्स्ट स्ट्रिंग होती है (उदाहरण के लिए, “मेरा लकी नंबर 88 है.”):

{
  "user": {
    "userId": "ABwppHEF...",
    "locale": "en-US",
    "lastSeen": "2018-03-21T17:59:52Z",
    "userStorage": "{\"data\":{}}"
  },
  "device": {},
  "surface": {
    "capabilities": [
      {
        "name": "actions.capability.SCREEN_OUTPUT"
      },
      {
        "name": "actions.capability.AUDIO_OUTPUT"
      },
      {
        "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
      },
      {
        "name": "actions.capability.WEB_BROWSER"
      }
    ]
  },
  "conversation": {
    "conversationId": "1521784527171",
    "type": "NEW"
  },
  "inputs": [
    {
      "intent": "actions.intent.TEXT",
      "rawInputs": [
        {
          "inputType": "VOICE",
          "query": "My lucky number is 88."
        }
      ]
    }
  ],
  "availableSurfaces": [
    {
      "capabilities": [
        {
          "name": "actions.capability.SCREEN_OUTPUT"
        },
        {
          "name": "actions.capability.AUDIO_OUTPUT"
        },
        {
          "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
        },
        {
          "name": "actions.capability.WEB_BROWSER"
        }
      ]
    }
  ]
}

जवाब का मुख्य भाग

Assistant के लिए आपके फ़ुलफ़िलमेंट एंडपॉइंट से एचटीटीपी पोस्ट के हेडर में मौजूद Content-Type, application/json होना चाहिए.

बातचीत के वेबहुक फ़ॉर्मैट में रिस्पॉन्स में, उपयोगकर्ता को दिखाने के लिए असल यूज़र इंटरफ़ेस (यूआई) जैसा डेटा (इसमें ऑडियो और विज़ुअल कॉम्पोनेंट शामिल होते हैं) और वह इंटेंट शामिल होता है जिसे बाद के अनुरोध में ट्रिगर किया जा सकता है. इसे उम्मीद के मुताबिक इंटेंट कहा जाता है. उम्मीद के मुताबिक इंटेंट, ऐसे कोई भी इंटेंट हो सकते हैं जिन्हें Assistant समझती है, जैसा कि Intents API के रेफ़रंस में बताया गया है.

Assistant में आपके जवाब दिखने के बाद, उनके लिए यूज़र इंटरफ़ेस को फ़ॉर्मैट करने के बारे में ज़्यादा जानने के लिए जवाब दस्तावेज़ देखें.

जवाब के सामान्य उदाहरण

नीचे दिया गया स्निपेट, बातचीत के वेबहुक फ़ॉर्मैट में आसान जवाब का एक उदाहरण दिखाता है.

{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "possibleIntents": [
        {
          "intent": "actions.intent.TEXT"
        }
      ],
      "inputPrompt": {
        "richInitialPrompt": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "You are using the Actions SDK. Do you want to hear more about it?"
              }
            }
          ]
        }
      }
    }
  ]
}

हेल्पर उदाहरण

नीचे दिया गया स्निपेट, बातचीत के वेबहुक फ़ॉर्मैट में हेल्पर इंटेंट इस्तेमाल करने का उदाहरण दिखाता है. इस उदाहरण में, वेबहुक actions.intent.OPTIONS हेल्पर इंटेंट का इस्तेमाल कर रहा है, ताकि Assistant को कई विकल्पों में से किसी उपयोगकर्ता को चुनने का निर्देश दिया जा सके.

हेल्पर इंटेंट का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, हेल्पर गाइड देखें.

{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "possibleIntents": [
        {
          "intent": "actions.intent.OPTION",
          "inputValueData": {
            "@type": "type.googleapis.com/google.actions.v2.OptionValueSpec",
            "carouselSelect": {
              "items": [
                {
                  "optionInfo": {
                    "key": "one",
                    "synonyms": [
                      "synonym of KEY_ONE 1",
                      "synonym of KEY_ONE 2"
                    ]
                  },
                  "description": "Description of number one",
                  "title": "Number one"
                },
                {
                  "optionInfo": {
                    "key": "two",
                    "synonyms": [
                      "synonym of KEY_TWO 1",
                      "synonym of KEY_TWO 2"
                    ]
                  },
                  "description": "Description of number two",
                  "title": "Number two"
                }
              ]
            }
          }
        }
      ],
      "inputPrompt": {
        "richInitialPrompt": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "this shows an example of a carousel"
              }
            }
          ],
          "suggestions": [
            {
              "title": "1"
            },
            {
              "title": "2"
            }
          ]
        }
      }
    }
  ]
}

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

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

जवाब के तौर पर दिखने वाले मैसेज में, false की expectedUserResponse वैल्यू से Assistant को यह पता चलता है कि आगे किसी उपयोगकर्ता इनपुट की ज़रूरत नहीं है. साथ ही, इससे मौजूदा बातचीत खत्म हो जानी चाहिए. finalResponse की वैल्यू से पता चलता है कि बातचीत खत्म होने से पहले, Assistant को उपयोगकर्ता को क्या दिखाना चाहिए या क्या आउटपुट देना चाहिए.

{
  "expectUserResponse": false,
  "finalResponse": {
    "richResponse": {
      "items": [
        {
          "simpleResponse": {
            "textToSpeech": "Good bye"
          }
        }
      ]
    }
  }
}

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