Google Chat के उपयोगकर्ताओं से जानकारी इकट्ठा करना और उसे प्रोसेस करना

इस गाइड में बताया गया है कि Google Chat ऐप्लिकेशन, कार्ड-आधारित इंटरफ़ेस में फ़ॉर्म इनपुट बनाकर, उपयोगकर्ताओं से जानकारी कैसे इकट्ठा और प्रोसेस कर सकते हैं.

Google Chat में, ऐड-ऑन उपयोगकर्ताओं को Google Chat ऐप्लिकेशन के तौर पर दिखते हैं. ज़्यादा जानने के लिए, Google Chat का ऐक्सेस देने की सुविधा के बारे में खास जानकारी देखें.

अलग-अलग तरह के विजेट वाला डायलॉग.
पहली इमेज: ऐसा चैट ऐप्लिकेशन जो संपर्क जानकारी इकट्ठा करने के लिए डायलॉग बॉक्स खोलता है.

चैट ऐप्लिकेशन, Chat में या उसके बाहर कार्रवाइयां करने के लिए, उपयोगकर्ताओं से जानकारी का अनुरोध करते हैं. इनमें ये तरीके भी शामिल हैं:

  • सेटिंग कॉन्फ़िगर करें. उदाहरण के लिए, उपयोगकर्ताओं को सूचना सेटिंग को पसंद के मुताबिक बनाने या Chat ऐप्लिकेशन को एक या उससे ज़्यादा स्पेस में कॉन्फ़िगर करने और जोड़ने की अनुमति देने के लिए.
  • Google Workspace के अन्य ऐप्लिकेशन में जानकारी बनाएं या अपडेट करें. उदाहरण के लिए, उपयोगकर्ताओं को Google Calendar इवेंट बनाने की अनुमति दें.
  • उपयोगकर्ताओं को दूसरे ऐप्लिकेशन या वेब सेवाओं में संसाधनों को ऐक्सेस और अपडेट करने की अनुमति दें. उदाहरण के लिए, Chat ऐप्लिकेशन की मदद से उपयोगकर्ता, सीधे Chat स्पेस से सहायता टिकट की स्थिति अपडेट कर सकते हैं.

ज़रूरी शर्तें

Node.js

Google Workspace का ऐसा ऐड-ऑन जो Google Chat में काम करता है. इसे बनाने के लिए, एचटीटीपी से जुड़ी शुरुआती जानकारी वाला लेख पढ़ें.

Apps Script

Google Workspace का ऐसा ऐड-ऑन जो Google Chat में काम करता है. कोई ऐप्लिकेशन बनाने के लिए, Apps Script का शुरुआती कोर्स पूरा करें.

कार्ड का इस्तेमाल करके फ़ॉर्म बनाना

जानकारी इकट्ठा करने के लिए, Chat ऐप्लिकेशन फ़ॉर्म और उनके इनपुट डिज़ाइन करते हैं और उन्हें कार्ड में बनाते हैं. उपयोगकर्ताओं को कार्ड दिखाने के लिए, Chat ऐप्लिकेशन इन Chat इंटरफ़ेस का इस्तेमाल कर सकते हैं:

  • चैट मैसेज जिनमें एक या उससे ज़्यादा कार्ड शामिल हैं.
  • डायलॉग, ये कार्ड होते हैं जो मैसेज और होम पेजों से नई विंडो में खुलते हैं.

चैट ऐप्लिकेशन, इन विजेट का इस्तेमाल करके कार्ड बना सकते हैं:

  • फ़ॉर्म इनपुट विजेट, जो उपयोगकर्ताओं से जानकारी का अनुरोध करते हैं. इसके अलावा, फ़ॉर्म इनपुट विजेट में पुष्टि करने की सुविधा जोड़ी जा सकती है. इससे यह पक्का किया जा सकता है कि उपयोगकर्ता सही तरीके से जानकारी डालें और उसे सही फ़ॉर्मैट में डालें. चैट ऐप्लिकेशन, इन फ़ॉर्म इनपुट विजेट का इस्तेमाल कर सकते हैं:

  • बटन विजेट, ताकि उपयोगकर्ता कार्ड में डाली गई वैल्यू सबमिट कर सकें. उपयोगकर्ता के बटन पर क्लिक करने के बाद, Chat ऐप्लिकेशन अपने पास मौजूद जानकारी को प्रोसेस कर सकता है.

नीचे दिए गए उदाहरण में, कार्ड टेक्स्ट इनपुट, तारीख और समय चुनने वाले टूल, और चुनने के लिए दिए गए विकल्पों का इस्तेमाल करके संपर्क जानकारी इकट्ठा करता है:

जानकारी इकट्ठा करने के लिए इस्तेमाल किए जा सकने वाले इंटरैक्टिव विजेट के ज़्यादा उदाहरणों के लिए, Google Chat API दस्तावेज़ में इंटरैक्टिव कार्ड या डायलॉग डिज़ाइन करना देखें.

एक से ज़्यादा विकल्प चुनने वाला मेन्यू जोड़ना

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

एक से ज़्यादा आइटम चुनने की सुविधा वाले मेन्यू के लिए, इन डेटा सोर्स से आइटम जोड़े जा सकते हैं:

  • Google Workspace का डेटा. इसमें उपयोगकर्ताओं या उन 'Chat स्पेस' का डेटा शामिल होता है जिनका उपयोगकर्ता सदस्य है. मेन्यू में सिर्फ़ उसी Google Workspace संगठन के आइटम दिखते हैं.
  • बाहरी डेटा सोर्स, जैसे कि रिलेशनल डेटाबेस. उदाहरण के लिए, कस्टमर रिलेशनशिप मैनेजमेंट (सीआरएम) सिस्टम से बिक्री की लीड की सूची में से चुनने में उपयोगकर्ता की मदद करने के लिए, मल्टी-सिलेक्ट मेन्यू का इस्तेमाल किया जा सकता है.

Google Workspace के डेटा सोर्स से आइटम पॉप्युलेट करना

Google Workspace के डेटा सोर्स का इस्तेमाल करने के लिए, SelectionInput विजेट में platformDataSource फ़ील्ड की जानकारी दें. चुनने के लिए उपलब्ध अन्य इनपुट टाइप के उलट, आपको SelectionItem ऑब्जेक्ट को शामिल नहीं करना होता. इसकी वजह यह है कि चुनने के लिए उपलब्ध ये आइटम, Google Workspace से डाइनैमिक तौर पर सोर्स किए जाते हैं.

नीचे दिया गया कोड, Google Workspace के उपयोगकर्ताओं का मल्टी-सिलेक्ट मेन्यू दिखाता है. उपयोगकर्ताओं को पॉप्युलेट करने के लिए, चुनने के लिए दिया गया इनपुट commonDataSource को USER पर सेट करता है:

JSON

{
  "selectionInput": {
    "name": "contacts",
    "type": "MULTI_SELECT",
    "label": "Selected contacts",
    "multiSelectMaxSelectedItems": 5,
    "multiSelectMinQueryLength": 1,
    "platformDataSource": {
      "commonDataSource": "USER"
    }
  }
}

यहां दिया गया कोड, चैट स्पेस का मल्टी-सिलेक्ट मेन्यू दिखाता है. स्पेस में जानकारी भरने के लिए, चुने गए इनपुट में hostAppDataSource फ़ील्ड की जानकारी दी जाती है. चुनने के कई विकल्प वाले मेन्यू में, defaultToCurrentSpace को true पर भी सेट किया जाता है. इससे, मेन्यू में मौजूदा स्पेस डिफ़ॉल्ट तौर पर चुना जाता है:

JSON

{
  "selectionInput": {
    "name": "spaces",
    "type": "MULTI_SELECT",
    "label": "Selected contacts",
    "multiSelectMaxSelectedItems": 3,
    "multiSelectMinQueryLength": 1,
    "platformDataSource": {
      "hostAppDataSource": {
        "chatDataSource": {
          "spaceDataSource": {
            "defaultToCurrentSpace": true
          }
        }
      }
    }
  }
}

किसी बाहरी डेटा सोर्स से आइटम पॉप्युलेट करना

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

किसी बाहरी डेटा सोर्स से अनुरोधों की संख्या कम करने के लिए, सुझाए गए आइटम शामिल किए जा सकते हैं. ये आइटम, उपयोगकर्ताओं के मेन्यू में टाइप करने से पहले, कई आइटम चुनने की सुविधा वाले मेन्यू में दिखते हैं. उदाहरण के लिए, उपयोगकर्ता के लिए हाल ही में खोजे गए संपर्कों की जानकारी अपने-आप भरी जा सकती है. किसी बाहरी डेटा सोर्स से सुझाए गए आइटम पॉप्युलेट करने के लिए, स्टैटिक SelectionItem ऑब्जेक्ट डालें.

नीचे दिया गया कोड, एक ऐसा मल्टी-सिलेक्ट मेन्यू दिखाता है जो किसी बाहरी डेटा सोर्स से आइटम की क्वेरी करता है और उन्हें पॉप्युलेट करता है:

JSON

{
  "selectionInput": {
    "name": "contacts",
    "type": "MULTI_SELECT",
    "label": "Selected contacts",
    "multiSelectMaxSelectedItems": 3,
    "multiSelectMinQueryLength": 1,
    "externalDataSource": { "function": "FUNCTION" },
    // Suggested items loaded by default.
    // The list is static here but it could be dynamic.
    "items": [FUNCTION]
  }
}

FUNCTION को एचटीटीपी यूआरएल या ऐसे Apps Script फ़ंक्शन के नाम से बदलें जो बाहरी डेटाबेस से क्वेरी करता है. सुझाए गए आइटम लौटाने का तरीका बताने वाला पूरा उदाहरण देखने के लिए, एक से ज़्यादा आइटम चुनने के लिए सुझाव दें सेक्शन देखें.

इंटरैक्टिव विजेट से डेटा पाना

जब भी उपयोगकर्ता किसी बटन पर क्लिक करते हैं, तो इंटरैक्शन की जानकारी के साथ Chat ऐप्लिकेशन की कार्रवाई ट्रिगर होती है. इवेंट पेलोड के commonEventObject में, formInputs ऑब्जेक्ट में वे सभी वैल्यू होती हैं जिन्हें उपयोगकर्ता डालता है.

ऑब्जेक्ट commonEventObject.formInputs.WIDGET_NAME से वैल्यू वापस पाई जा सकती हैं. यहां WIDGET_NAME, वह name फ़ील्ड है जिसे आपने विजेट के लिए तय किया है. वैल्यू, विजेट के लिए किसी खास डेटा टाइप के तौर पर दिखती हैं.

यहां किसी इवेंट ऑब्जेक्ट का एक हिस्सा दिखाया गया है, जिसमें उपयोगकर्ता ने हर विजेट के लिए वैल्यू डाली है:

{
  "commonEventObject": { "formInputs": {
    "contactName": { "stringInputs": {
      "value": ["Kai 0"]
    }},
    "contactBirthdate": { "dateInput": {
      "msSinceEpoch": 1000425600000
    }},
    "contactType": { "stringInputs": {
      "value": ["Personal"]
    }}
  }}
}

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

फ़ॉर्म इनपुट विजेट इनपुट डेटा का टाइप इवेंट ऑब्जेक्ट से इनपुट वैल्यू उदाहरण के तौर पर दी गई वैल्यू
textInput stringInputs event.commonEventObject.formInputs.contactName.stringInputs.value[0] Kai O
selectionInput stringInputs पहली या सिर्फ़ एक वैल्यू पाने के लिए, event.commonEventObject.formInputs.contactType.stringInputs.value[0] Personal
dateTimePicker, जो सिर्फ़ तारीखें स्वीकार करता है. dateInput event.commonEventObject.formInputs.contactBirthdate.dateInput.msSinceEpoch. 1000425600000

Chat ऐप्लिकेशन को डेटा मिलने के बाद, वह इनमें से कोई भी काम कर सकता है:

एक से ज़्यादा आइटम चुनने की सुविधा

अगर किसी कार्ड में एक से ज़्यादा आइटम चुनने वाला ऐसा मेन्यू है जो बाहरी डेटा सोर्स से आइटम भरता है, तो Chat ऐप्लिकेशन, मेन्यू में उपयोगकर्ताओं के टाइप करने के आधार पर सुझाए गए आइटम दिखा सकता है. उदाहरण के लिए, अगर कोई उपयोगकर्ता अमेरिका के शहरों की जानकारी देने वाले मेन्यू के लिए Atl टाइप करना शुरू करता है, तो उपयोगकर्ता के टाइप करने के खत्म होने से पहले ही, आपका Chat ऐप्लिकेशन Atlanta का सुझाव अपने-आप दे सकता है. Chat ऐप्लिकेशन, ज़्यादा से ज़्यादा 100 आइटम का सुझाव दे सकता है.

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

  1. इवेंट ऑब्जेक्ट को मैनेज करें. यह ऑब्जेक्ट, उपयोगकर्ताओं के मेन्यू में टाइप करने पर Chat ऐप्लिकेशन को मिलता है.
  2. इवेंट ऑब्जेक्ट से, उपयोगकर्ता की टाइप की गई वैल्यू पाएं. यह वैल्यू, event.commonEventObject.parameters["autocomplete_widget_query"] फ़ील्ड में दिखती है.
  3. उपयोगकर्ता को सुझाव देने के लिए, एक या एक से ज़्यादा SelectionItems पाने के लिए, उपयोगकर्ता की डाली गई वैल्यू का इस्तेमाल करके डेटा सोर्स से क्वेरी करें.
  4. modifyCard ऑब्जेक्ट के साथ ऐक्शन RenderActions को दिखाकर, सुझाए गए आइटम दिखाएं.

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

Node.js

/**
 * Google Cloud Function that responds to events sent from a
 * Google Chat space.
 *
 * @param {Object} req Request sent from Google Chat space
 * @param {Object} res Response to send back
 */
exports.selectionInput = function selectionInput(req, res) {
  if (req.method === 'GET' || !req.body.chat) {
    return res.send('Hello! This function is meant to be used ' +
        'in a Google Chat Space.');
  }
  // Stores the Google Chat event
  const chatEvent = req.body.chat;

  // Handle user interaction with multiselect.
  if(chatEvent.widgetUpdatedPayload) {
    return res.send(queryContacts(req.body));
  }
  // Replies with a card that contains the multiselect menu.
  return res.send({ hostAppDataAction: { chatDataAction: { createMessageAction: { message: {
    cardsV2: [{
      cardId: "contactSelector",
      card: { sections:[{ widgets: [{
        selectionInput: {
          name: "contacts",
          type: "MULTI_SELECT",
          label: "Selected contacts",
          multiSelectMaxSelectedItems: 3,
          multiSelectMinQueryLength: 1,
          externalDataSource: { function: "FUNCTION_URL" },
          // Suggested items loaded by default.
          // The list is static here but it could be dynamic.
          items: [getSuggestedContact("3")]
        }
      }]}]}
    }]
  }}}}});
};

/**
* Get contact suggestions based on text typed by users.
*
* @param {Object} event the event object that contains the user's query
* @return {Object} suggestions
*/
function queryContacts(event) {
  const query = event.commonEventObject.parameters["autocomplete_widget_query"];
  return { action: { modifyOperations: [{ updateWidget: { selectionInputWidgetSuggestions: { suggestions: [
    // The list is static here but it could be dynamic.
    getSuggestedContact("1"), getSuggestedContact("2"), getSuggestedContact("3"), getSuggestedContact("4"), getSuggestedContact("5")
  // Only return items based on the query from the user.
  ].filter(e => !query || e.text.includes(query)) }}}]}};
}

/**
 * Generate a suggested contact given an ID.
 *
 * @param {String} id The ID of the contact to return.
 * @return {Object} The contact formatted as a selection item in the menu.
 */
function getSuggestedContact(id) {
  return {
    value: id,
    startIconUri: "https://www.gstatic.com/images/branding/product/2x/contacts_48dp.png",
    text: "Contact " + id
  };
}

FUNCTION_URL को उस एचटीटीपी एंडपॉइंट से बदलें जो बाहरी डेटा सोर्स से क्वेरी करता है.

Apps Script

/**
* Responds to a Message trigger in Google Chat.
*
* @param {Object} event the event object from Google Chat
* @return {Object} Response from the Chat app.
*/
function onMessage(event) {
  // Replies with a card that contains the multiselect menu.
  return { hostAppDataAction: { chatDataAction: { createMessageAction: { message: {
    cardsV2: [{
      cardId: "contactSelector",
      card: { sections:[{ widgets: [{
        selectionInput: {
          name: "contacts",
          type: "MULTI_SELECT",
          label: "Selected contacts",
          multiSelectMaxSelectedItems: 3,
          multiSelectMinQueryLength: 1,
          externalDataSource: { function: "queryContacts" },
          // Suggested items loaded by default.
          // The list is static here but it could be dynamic.
          items: [getSuggestedContact"3")]
        }
      }]}]}
    }]
  }}}}};
}

/**
* Get contact suggestions based on text typed by users.
*
* @param {Object} event the interactive event.
* @return {Object} suggestions
*/
function queryContacts(event) {
  const query = event.commonEventObject.parameters["autocomplete_widget_query"];
  return { action: { modifyOperations: [{ updateWidget: { selectionInputWidgetSuggestions: { suggestions: [
    // The list is static here but it could be dynamic.
    getSuggestedContact("1"), getSuggestedContact("2"), getSuggestedContact("3"), getSuggestedContact("4"), getSuggestedContact("5")
  // Only return items based on the query from the user.
  ].filter(e => !query || e.text.includes(query)) }}}]}};
}

/**
* Generate a suggested contact given an ID.
*
* @param {String} id The ID of the contact to return.
* @return {Object} The contact formatted as a selection item in the menu.
*/
function getSuggestedContact(id) {
  return {
    value: id,
    startIconUri: "https://www.gstatic.com/images/branding/product/2x/contacts_48dp.png",
    text: "Contact " + id
  };
}

डेटा को किसी दूसरे कार्ड पर ट्रांसफ़र करना

जब कोई उपयोगकर्ता किसी कार्ड की जानकारी सबमिट करता है, तो आपको इनमें से कोई भी काम करने के लिए, अतिरिक्त कार्ड दिखाने पड़ सकते हैं:

  • अलग-अलग सेक्शन बनाकर, उपयोगकर्ताओं को लंबे फ़ॉर्म भरने में मदद करें.
  • उपयोगकर्ताओं को शुरुआती कार्ड में दी गई जानकारी की झलक दिखाएं और उसकी पुष्टि करने का विकल्प दें, ताकि वे सबमिट करने से पहले अपने जवाबों की समीक्षा कर सकें.
  • फ़ॉर्म के बाकी हिस्सों में जानकारी अपने-आप भर जाए. उदाहरण के लिए, उपयोगकर्ताओं को अपॉइंटमेंट बनाने के लिए कहने के लिए, Chat ऐप्लिकेशन एक शुरुआती कार्ड दिखा सकता है. इस कार्ड में, अपॉइंटमेंट की वजह पूछी जाती है. इसके बाद, एक और कार्ड दिखता है. इसमें अपॉइंटमेंट के टाइप के आधार पर, उपलब्ध समय की जानकारी दी जाती है.

शुरुआती कार्ड से डेटा इनपुट ट्रांसफ़र करने के लिए, actionParameters के साथ button विजेट बनाया जा सकता है. इसमें विजेट का name और उपयोगकर्ता की डाली गई वैल्यू शामिल होती है, जैसा कि यहां दिए गए उदाहरण में दिखाया गया है:

{
  "buttonList": { "buttons": [{
    "text": "Submit",
    "onClick": { "action": {
      "function": "submitForm",
      "parameters": [
        {
          "key": "WIDGET_NAME",
          "value": "USER_INPUT_VALUE"
        },
        // Can specify multiple parameters
      ]
    }}
  }]}
}

यहां WIDGET_NAME, विजेट का name है और USER_INPUT_VALUE वह वैल्यू है जो उपयोगकर्ता डालता है. उदाहरण के लिए, किसी व्यक्ति का नाम इकट्ठा करने वाले टेक्स्ट इनपुट के लिए, विजेट का नाम contactName और उदाहरण के तौर पर दी गई वैल्यू Kai O है.

जब कोई उपयोगकर्ता बटन पर क्लिक करता है, तो आपके Chat ऐप्लिकेशन को एक इवेंट ऑब्जेक्ट मिलता है. इससे आपको डेटा मिल सकता है.

फ़ॉर्म सबमिट करने का जवाब देना

कार्ड मैसेज या डायलॉग से डेटा मिलने के बाद, Chat ऐप्लिकेशन जवाब देता है. इसमें, डेटा मिलने की पुष्टि की जाती है या गड़बड़ी का मैसेज दिया जाता है.

नीचे दिए गए उदाहरण में, Chat ऐप्लिकेशन एक टेक्स्ट मैसेज भेजता है. इससे यह पुष्टि की जाती है कि उसे कार्ड मैसेज से सबमिट किया गया फ़ॉर्म मिल गया है.

Node.js

/**
 * Google Cloud Function that handles all Google Workspace Add On events for
 * the contact manager app.
 *
 * @param {Object} req Request sent from Google Chat space
 * @param {Object} res Response to send back
 */
exports.contactManager = function contactManager(req, res) {
  const chatEvent = req.body.chat;
  const chatMessage = chatEvent.messagePayload.message;

  // Handle message payloads in the event object
  if(chatEvent.messagePayload) {
    return res.send(handleMessage(chatMessage, chatEvent.user));
  // Handle button clicks on the card
  } else if(chatEvent.buttonClickedPayload) {
    switch(req.body.commonEventObject.parameters.actionName) {
        case "openDialog":
            return res.send(openDialog());
        case "openNextCard":
            return res.send(openNextCard(req.body));
        case "submitForm":
            return res.send(submitForm(req.body));
    }
  }
};

/**
 * Submits information from a dialog or card message.
 *
 * @param {Object} event the interactive event with form inputs.
 * @return {Object} a message response that posts a private message.
 */
function submitForm(event) {
  const chatUser = event.chat.user;
  const contactName = event.commonEventObject.parameters["contactName"];

  return { hostAppDataAction: { chatDataAction: { createMessageAction: { message: {
    privateMessageViewer: chatUser,
    text: "✅ " + contactName + " has been added to your contacts."
  }}}}};
}

Apps Script

/**
 * Sends private text message that confirms submission.
 *
 * @param {Object} event the interactive event with form inputs.
 * @return {Object} a message response that posts a private message.
 */
function submitForm(event) {
  const chatUser = event.chat.user;
  const contactName = event.commonEventObject.parameters["contactName"];

  return { hostAppDataAction: { chatDataAction: { createMessageAction: { message: {
    privateMessageViewer: chatUser,
    text: "✅ " + contactName + " has been added to your contacts."
  }}}}};
}

किसी डायलॉग को प्रोसेस और बंद करने के लिए, आपको एक ऐसा RenderActions ऑब्जेक्ट दिखाना होगा जिससे यह पता चलता हो कि आपको पुष्टि करने वाला मैसेज भेजना है, ओरिजनल मैसेज या कार्ड को अपडेट करना है या सिर्फ़ डायलॉग बॉक्स को बंद करना है. इसके लिए, डायलॉग बॉक्स बंद करना लेख पढ़ें.

समस्या हल करें

जब Google Chat ऐप्लिकेशन या कार्ड से कोई गड़बड़ी का मैसेज मिलता है, तो Chat इंटरफ़ेस पर "कोई गड़बड़ी हुई" मैसेज दिखता है. या "आपका अनुरोध प्रोसेस नहीं किया जा सका." कभी-कभी Chat के यूज़र इंटरफ़ेस (यूआई) पर, गड़बड़ी का कोई मैसेज नहीं दिखता. हालांकि, Chat ऐप्लिकेशन या कार्ड से अनचाहा नतीजा मिल सकता है. उदाहरण के लिए, हो सकता है कि कार्ड का मैसेज न दिखे.

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