Google Chat অ্যাপ কমান্ডের উত্তর দেওয়া

Google Chat অ্যাপ হিসেবে কীভাবে কমান্ড সেট-আপ ও উত্তর দিতে হয় তা এই পৃষ্ঠায় ব্যাখ্যা করা হয়েছে।

কমান্ডের সাহায্যে ব্যবহারকারীরা Chat অ্যাপের মূল ফিচারগুলি খুঁজে দেখতে ও ব্যবহার করতে পারেন। শুধুমাত্র Chat অ্যাপই কমান্ডের কন্টেন্ট দেখতে পায়। যেমন, কোনও ব্যবহারকারী স্ল্যাশ কমান্ড সহ মেসেজ পাঠালে, মেসেজটি শুধুমাত্র ব্যবহারকারী এবং Chat অ্যাপ দেখতে পাবে।

আপনাকে কমান্ড তৈরি করতে হবে কিনা তা সিদ্ধান্ত নিতে এবং কীভাবে ব্যবহারকারীর ইন্টার‍্যাকশন ডিজাইন করতে হয় তা বুঝতে, ব্যবহারকারীর সমস্ত জার্নি নির্ধারণ করুন দেখুন।

Chat অ্যাপ কমান্ডের ধরন

আপনি স্ল্যাশ কমান্ড, দ্রুত কমান্ড বা মেসেজ অ্যাকশন হিসেবে Chat অ্যাপ কমান্ড তৈরি করতে পারেন। প্রতিটি ধরনের কমান্ড ব্যবহার করতে, ব্যবহারকারী নিম্নলিখিত কাজগুলি করতে পারেন:
  1. স্ল্যাশ কমান্ড: ব্যবহারকারী মেনু থেকে স্ল্যাশ কমান্ড বেছে নিতে পারেন অথবা স্ল্যাশ (/) ও তারপরে /about-এর মতো পূর্ব-নির্ধারিত টেক্সট টাইপ করতে পারেন। চ্যাট অ্যাপে সাধারণত স্ল্যাশ কমান্ডের জন্য আর্গুমেন্ট টেক্সট প্রয়োজন হয়।

    আপনার Chat অ্যাপে ব্যবহারকারীর থেকে অতিরিক্ত ইনপুট প্রয়োজন হলে স্ল্যাশ কমান্ড তৈরি করুন। যেমন, আপনি একটি স্ল্যাশ কমান্ড তৈরি করতে পারেন যা ব্যবহারকারী কোনও বাক্যাংশ লিখে সার্চ করার পরে রান করে, যেমন /search receipts। /search

  2. দ্রুত কমান্ড: ব্যবহারকারীরা চ্যাট মেসেজের উত্তর দেওয়ার জায়গা থেকে মেনু খুলে কমান্ড ব্যবহার করেন। কমান্ড ব্যবহার করতে, তারা যোগ করুন বিকল্পে ক্লিক করেন এবং মেনু থেকে একটি কমান্ড বেছে নেন।

    আপনার Chat অ্যাপ যদি ব্যবহারকারীকে অতিরিক্ত ইনপুটের জন্য অপেক্ষা না করেই অবিলম্বে উত্তর দিতে পারে, তাহলে একটি কুইক কমান্ড তৈরি করুন। যেমন, আপনি র‍্যান্ডম ছবি নামে একটি কুইক কমান্ড তৈরি করতে পারেন যা একটি ছবি দিয়ে সঙ্গে সঙ্গে উত্তর দেয়।

  3. মেসেজ অ্যাকশন: ব্যবহারকারীরা কোনও মেসেজের উপর কার্সর নিয়ে গিয়ে এবং তিন-ডট মেনুতে ক্লিক করে মেসেজ অ্যাকশন ব্যবহার করেন। কমান্ড ব্যবহার করতে, তারা তিন-ডট মেনু খুলে মেনু থেকে একটি কমান্ড বেছে নেন।

    আপনার Chat অ্যাপ যদি কোনও মেসেজের প্রসঙ্গ অনুযায়ী অ্যাকশন পারফর্ম করতে পারে, তাহলে মেসেজ অ্যাকশন তৈরি করুন।

নিচের ছবিগুলি থেকে বোঝা যায় যে কীভাবে ব্যবহারকারীরা স্ল্যাশ ও কুইক কমান্ড এবং মেসেজ অ্যাকশনের মেনু খুঁজে পান:

পূর্বশর্ত

HTTP

Google Chat অ্যাপ যা ব্যবহারকারীর ইন্টার‍্যাকশন গ্রহণ করে এবং উত্তর দেয়। এটি তৈরি করতে, HTTP কুইকস্টার্ট সম্পূর্ণ করুন।

Apps Script

Google Chat অ্যাপ যা ব্যবহারকারীর ইন্টার‍্যাকশন গ্রহণ করে এবং উত্তর দেয়। এটি তৈরি করতে, অ্যাপ স্ক্রিপ্ট কুইকস্টার্ট সম্পূর্ণ করুন।

কমান্ড সেট-আপ করা

এই বিভাগে, কীভাবে কোনও কমান্ড সেট-আপ করার জন্য নিম্নলিখিত ধাপগুলি সম্পূর্ণ করতে হয় তা ব্যাখ্যা করা হয়েছে:

  1. কমান্ডের জন্য নাম ও বিবরণ তৈরি করুন।
  2. Google Cloud কনসোলে কমান্ড কনফিগার করুন।
  3. ঐচ্ছিক: স্টার্টার প্রম্পটের জন্য ম্যাপ কমান্ড।

কমান্ডের নাম ও বিবরণ লিখুন

কমান্ডের নাম হল সেটি যা ব্যবহারকারীরা টাইপ করেন বা বেছে নেন যাতে Chat অ্যাপ খোলা যায়। নামের নিচে একটি সংক্ষিপ্ত বিবরণও দেখানো হয়, যাতে ব্যবহারকারীদের কমান্ড ব্যবহার করার পদ্ধতি সম্পর্কে আরও প্রম্পট করা যায়:

স্ল্যাশ কমান্ডের নাম ও বিবরণ
স্ল্যাশ কমান্ডের নাম ও বিবরণ।

আপনার কমান্ডের নাম ও বিবরণ বেছে নেওয়ার সময়, নিম্নলিখিত সাজেশন বিবেচনা করে দেখুন:

কোনও কমান্ডের নাম দিতে:

  • ব্যবহারকারীর কাছে কমান্ড স্পষ্ট করে তুলতে, ছোট, বর্ণনামূলক এবং অ্যাকশনযোগ্য শব্দ বা বাক্যাংশ ব্যবহার করুন। যেমন, Create a reminder নামের পরিবর্তে, Remind me ব্যবহার করুন।
  • আপনার কমান্ডের জন্য অনন্য বা সাধারণ নাম ব্যবহার করার কথা বিবেচনা করুন। আপনার কমান্ড যদি কোনও সাধারণ ইন্টার‍্যাকশন বা ফিচার বর্ণনা করে, তাহলে আপনি এমন একটি সাধারণ নাম ব্যবহার করতে পারেন যা ব্যবহারকারীরা চিনতে ও আশা করতে পারেন, যেমন Settings বা Feedback। অন্যথায়, অনন্য কমান্ড নাম ব্যবহার করার চেষ্টা করুন, কারণ আপনার কমান্ডের নাম যদি অন্যান্য Chat অ্যাপের মতো হয়, তাহলে ব্যবহারকারীকে আপনার কমান্ড খুঁজে পেতে ও ব্যবহার করতে একই ধরনের কমান্ডের মধ্যে ফিল্টার করতে হবে।

কোনও কমান্ডের বিবরণ দিতে:

  • বিবরণ সংক্ষিপ্ত ও স্পষ্ট রাখুন যাতে ব্যবহারকারীরা কমান্ড ব্যবহার করার সময় কী আশা করতে পারেন তা জানতে পারেন।
  • কমান্ডের জন্য কোনও ফর্ম্যাটিং সংক্রান্ত প্রয়োজনীয়তা থাকলে ব্যবহারকারীকে তা জানান। যেমন, আপনি যদি আর্গুমেন্ট টেক্সটের প্রয়োজন হয় এমন স্ল্যাশ কমান্ড তৈরি করেন, তাহলে বিবরণটি Remind me to do [something] at [time]-এর মতো কিছুতে সেট করুন।
  • Chat অ্যাপ স্পেসের সকলের কাছে উত্তর দেয় নাকি যে ব্যবহারকারী কমান্ড প্রয়োগ করেছেন তাকে ব্যক্তিগতভাবে উত্তর দেয় তা ব্যবহারকারীকে জানান। যেমন, 'দ্রুত কমান্ড' About-এর জন্য, আপনি এটিকে Learn about this app (Only visible to you) হিসেবে বর্ণনা করতে পারেন।

Google Cloud Console-এ কমান্ড কনফিগার করুন

স্ল্যাশ কমান্ড, দ্রুত কমান্ড বা মেসেজ অ্যাকশন তৈরি করতে, আপনি Google Chat API-এর জন্য আপনার Chat অ্যাপের কনফিগারেশনে কমান্ড বা অ্যাকশন সম্পর্কে তথ্য নির্দিষ্ট করেন।

Google Chat API-তে কোনও কমান্ড কনফিগার করতে, নিম্নলিখিত ধাপগুলি সম্পূর্ণ করুন:

  1. Google Cloud কনসোলে, 'মেনু' > API ও পরিষেবা > চালু করা API ও পরিষেবা > Google Chat API বিকল্পে ক্লিক করুন

    Google Chat API পৃষ্ঠায় যান

  2. কনফিগারেশন বিকল্পে ক্লিক করুন।

  3. কানেকশন সেটিংস বিকল্পের মধ্যে, ট্রিগার বিকল্পে যান এবং আপনার এন্ডপয়েন্ট সম্পর্কিত বিবরণ দিন। কমান্ডের উত্তর দেওয়ার জন্য আপনাকে নিম্নলিখিত বিভাগে এই ট্রিগার ব্যবহার করতে হবে।

    1. HTTP এন্ডপয়েন্ট URL: আপনি এখানে একটি সাধারণ HTTP এন্ডপয়েন্ট URL নির্দিষ্ট করতে পারেন। অথবা, আলাদা আলাদা ট্রিগারের জন্য আলাদা আলাদা HTTP এন্ডপয়েন্ট ব্যবহার করতে, অ্যাপ কমান্ড ফিল্ডে সরাসরি এন্ডপয়েন্ট নির্দিষ্ট করুন।
    2. Apps Script: Apps Script ডিপ্লয়মেন্ট আইডি লিখুন। সাধারণত, onAppCommand ফাংশনটি ইনভোক করা হবে। অন্য কোনও Apps Script ফাংশন ব্যবহার করতে, অ্যাপ কমান্ড ফিল্ডে কাস্টম ফাংশনের নাম উল্লেখ করুন।
  4. কমান্ড বিকল্পের মধ্যে, কমান্ড যোগ করুন বিকল্পে ক্লিক করুন।

  5. কমান্ড সম্পর্কে নিম্নলিখিত তথ্য লিখুন:

    1. কমান্ড আইডি: ১ থেকে ১০০০ পর্যন্ত একটি সংখ্যা যা আপনার Chat অ্যাপ কমান্ড শনাক্ত করতে এবং উত্তর দিতে ব্যবহার করে।
    2. বিবরণ: কমান্ড কীভাবে ব্যবহার ও ফর্ম্যাট করতে হয় তা বর্ণনা করে এমন টেক্সট। বিবরণ সর্বাধিক ৫০ অক্ষরের হতে পারে।
    3. কমান্ডের ধরন: দ্রুত কমান্ড, স্ল্যাশ কমান্ড অথবা মেসেজ অ্যাকশন বিকল্প বেছে নিন।
    4. কমান্ডের নাম লিখুন:
      • দ্রুত কমান্ডের নাম: কমান্ড চালু করার জন্য ব্যবহারকারীরা মেনু থেকে যে ডিসপ্লে নাম বেছে নেন। সর্বাধিক ৫০ অক্ষরের হতে পারে এবং বিশেষ অক্ষর থাকতে পারে। যেমন, Remind me
      • স্ল্যাশ কমান্ডের নাম: মেসেজে কমান্ড ইনভোক করার জন্য ব্যবহারকারীরা যে টেক্সট টাইপ করেন। স্ল্যাশ দিয়ে শুরু হতে হবে, শুধুমাত্র টেক্সট থাকতে হবে এবং সর্বাধিক ৫০টি অক্ষর থাকতে পারে। যেমন, /remindMe
      • মেসেজ অ্যাকশনের নাম: মেসেজ অ্যাকশন চালু করতে ব্যবহারকারীরা মেনু থেকে যে ডিসপ্লে নাম বেছে নেন। সর্বাধিক ৫০ অক্ষরের হতে পারে এবং বিশেষ অক্ষর থাকতে পারে। যেমন, Remind me
  6. ঐচ্ছিক: লোডিং বিজ্ঞপ্তি মেসেজ: মেসেজ অ্যাকশন এক্সিকিউট করার সময় ব্যবহারকারীকে দেখানোর জন্য টোস্ট বিজ্ঞপ্তি মেসেজ। শুধুমাত্র সেইসব মেসেজ অ্যাকশনের জন্য উপলভ্য যেগুলি ডায়ালগ খোলে না।

  7. ঐচ্ছিক: আপনি যদি চান যে আপনার Chat অ্যাপ কোনও কমান্ডের উত্তর ডায়ালগ দিয়ে দিক, তাহলে ডায়ালগ খোলো চেকবক্স বেছে নিন।

  8. সেভ করুন বিকল্পে ক্লিক করুন।

কমান্ডটি এখন Chat অ্যাপের জন্য কনফিগার করা হয়েছে।

ম্যাপ কমান্ড থেকে স্টার্টার প্রম্পট

আপনি নিজের কমান্ডকে স্টার্টার প্রম্পট হিসেবে ফিচার করতে পারেন, যাতে ব্যবহারকারীরা আপনার Chat অ্যাপের সাথে খালি ১:১ ডাইরেক্ট মেসেজ শুরু করার সময় সেগুলিকে ইন্টারেক্টিভ চিপ হিসেবে দেখতে পান।

স্টার্টার প্রম্পটের সাথে কমান্ড ম্যাপ করতে:

  1. আপনার কমান্ডে যেন অতিরিক্ত কাস্টম আর্গুমেন্ট না লাগে তা নিশ্চিত করুন (শুধুমাত্র কোনও আর্গুমেন্ট নেই বা প্রাথমিক আর্গুমেন্ট সহ কমান্ডগুলি স্টার্টার প্রম্পট হিসেবে কাজ করে)।
  2. Google Cloud Console-এ, Chat API-এর কনফিগারেশন পেজে যান।
  3. ইন্টার‍্যাক্টিভ ফিচার > স্টার্টার প্রম্পট বিকল্পের মধ্যে, প্রম্পট যোগ করুন বিকল্পে ক্লিক করুন।
  4. দেখানোর ক্রমের জন্য র‍্যাঙ্ক (১-৩) সেট করুন।
  5. টাইপ বেছে নেওয়া বিকল্পের মধ্যে থেকে কমান্ড প্রম্পট বেছে নিন এবং ড্রপ-ডাউন থেকে আপনার কমান্ড বেছে নিন।
  6. হয়ে গেছে বিকল্পে ক্লিক করুন, তারপর সেভ করুন বিকল্পে ক্লিক করুন।

কমান্ডের উত্তর দেওয়া

ব্যবহারকারী কোনও কমান্ড ব্যবহার করলে, আপনার Chat অ্যাপ একটি ইভেন্ট অবজেক্ট পায়। ইভেন্ট পেলোডে (event.chat.appCommandPayload) একটি appCommandPayload অবজেক্ট থাকে, যেখানে ইনভোক করা কমান্ডের বিবরণ (কমান্ড আইডি ও কমান্ডের ধরন সহ) থাকে, যাতে আপনি উপযুক্ত উত্তর দিতে পারেন। আপনি যখন অ্যাপ কমান্ড ট্রিগার কনফিগার করেছেন, তখন ইভেন্ট অবজেক্টটি আপনার নির্দিষ্ট করা HTTP এন্ডপয়েন্ট বা অ্যাপ স্ক্রিপ্ট ফাংশনে পাঠানো হয়।

Cymbal Labs Chat অ্যাপের
  জন্য ব্যক্তিগত মেসেজ। মেসেজে বলা হয়েছে যে
  Chat অ্যাপটি Cymbal Labs তৈরি করেছে এবং এতে ডকুমেন্টেশন ও সহায়তা টিমের সাথে যোগাযোগ করার
  লিঙ্ক শেয়ার করা হয়েছে।
সহায়তা কীভাবে পাবেন তা ব্যাখ্যা করতে, Chat অ্যাপ স্ল্যাশ কমান্ড /help-এর উত্তর ব্যক্তিগতভাবে দেয়।

স্ল্যাশ কমান্ড বা কুইক কমান্ডের উত্তর দেওয়া

নিচের কোডে Chat অ্যাপের একটি উদাহরণ দেখানো হয়েছে যা টেক্সট মেসেজের মাধ্যমে স্ল্যাশ কমান্ড /about-এর উত্তর দেয়। স্ল্যাশ কমান্ড বা দ্রুত কমান্ডের উত্তর দিতে, Chat অ্যাপ অ্যাপ কমান্ড ট্রিগার থেকে ইভেন্ট অবজেক্ট (event.chat.appCommandPayload) ম্যানেজ করে। কোনও ইভেন্ট অবজেক্টের পেলোডে মিলে যাওয়া কমান্ড আইডি থাকলে, Chat অ্যাপ createMessageAction (hostAppDataAction.chatDataAction.createMessageAction) অবজেক্ট সহ অ্যাকশন DataActions রিটার্ন করে:

Node.js

node/chat/avatar-app/index.js
// The ID of the slash command "/about".
// You must use the same ID in the Google Chat API configuration.
const ABOUT_COMMAND_ID = 1;

/**
 * Handle requests from Google Workspace add on
 *
 * @param {Object} req Request sent by Google Chat
 * @param {Object} res Response to be sent back to Google Chat
 */
http('avatarApp', (req, res) => {
  const chatEvent = req.body.chat;
  let message;
  if (chatEvent.appCommandPayload) {
    message = handleAppCommand(chatEvent);
  } else {
    message = handleMessage(chatEvent);
  }
  res.send({ hostAppDataAction: { chatDataAction: { createMessageAction: {
    message: message
  }}}});
});

/**
 * Responds to an APP_COMMAND event in Google Chat.
 *
 * @param {Object} event the event object from Google Chat
 * @return the response message object.
 */
function handleAppCommand(event) {
  switch (event.appCommandPayload.appCommandMetadata.appCommandId) {
    case ABOUT_COMMAND_ID:
      return {
        text: 'The Avatar app replies to Google Chat messages.'
      };
  }
}

Python

python/chat/avatar-app/main.py
# The ID of the slash command "/about".
# You must use the same ID in the Google Chat API configuration.
ABOUT_COMMAND_ID = 1

@functions_framework.http
def avatar_app(req: flask.Request) -> Mapping[str, Any]:
  """Handle requests from Google Workspace add on

  Args:
    flask.Request req: the request sent by Google Chat

  Returns:
    Mapping[str, Any]: the response to be sent back to Google Chat
  """
  chat_event = req.get_json(silent=True)["chat"]
  if chat_event and "appCommandPayload" in chat_event:
    message = handle_app_command(chat_event)
  else:
    message = handle_message(chat_event)
  return { "hostAppDataAction": { "chatDataAction": { "createMessageAction": {
      "message": message
  }}}}

def handle_app_command(event: Mapping[str, Any]) -> Mapping[str, Any]:
  """Responds to an APP_COMMAND event in Google Chat.

  Args:
    Mapping[str, Any] event: the event object from Google Chat

  Returns:
    Mapping[str, Any]: the response message object.
  """
  if event["appCommandPayload"]["appCommandMetadata"]["appCommandId"] == ABOUT_COMMAND_ID:
    return {
      "text": "The Avatar app replies to Google Chat messages.",
    }
  return {}

Java

java/chat/avatar-app/src/main/java/com/google/chat/avatar/App.java
// The ID of the slash command "/about".
// You must use the same ID in the Google Chat API configuration.
private static final int ABOUT_COMMAND_ID = 1;

private static final Gson gson = new Gson();

/**
 * Handle requests from Google Workspace add on
 * 
 * @param request the request sent by Google Chat
 * @param response the response to be sent back to Google Chat
 */
@Override
public void service(HttpRequest request, HttpResponse response) throws Exception {
  JsonObject event = gson.fromJson(request.getReader(), JsonObject.class);
  JsonObject chatEvent = event.getAsJsonObject("chat");
  Message message;
  if (chatEvent.has("appCommandPayload")) {
    message = handleAppCommand(chatEvent);
  } else {
    message = handleMessage(chatEvent);
  }
  JsonObject createMessageAction = new JsonObject();
  createMessageAction.add("message", gson.fromJson(gson.toJson(message), JsonObject.class));
  JsonObject chatDataAction = new JsonObject();
  chatDataAction.add("createMessageAction", createMessageAction);
  JsonObject hostAppDataAction = new JsonObject();
  hostAppDataAction.add("chatDataAction", chatDataAction);
  JsonObject dataActions = new JsonObject();
  dataActions.add("hostAppDataAction", hostAppDataAction);
  response.getWriter().write(gson.toJson(dataActions));
}

/**
 * Handles an APP_COMMAND event in Google Chat.
 *
 * @param event the event object from Google Chat
 * @return the response message object.
 */
private Message handleAppCommand(JsonObject event) throws Exception {
  switch (event.getAsJsonObject("appCommandPayload")
    .getAsJsonObject("appCommandMetadata").get("appCommandId").getAsInt()) {
    case ABOUT_COMMAND_ID:
      return new Message()
        .setText("The Avatar app replies to Google Chat messages.");
    default:
      return null;
  }
}

Apps Script

apps-script/chat/avatar-app/Code.gs
// The ID of the slash command "/about".
// You must use the same ID in the Google Chat API configuration.
const ABOUT_COMMAND_ID = 1;

/**
 * Responds to an APP_COMMAND event in Google Chat.
 *
 * @param {Object} event the event object from Google Chat
 */
function onAppCommand(event) {
  // Executes the app command logic based on ID.
  switch (event.chat.appCommandPayload.appCommandMetadata.appCommandId) {
    case ABOUT_COMMAND_ID:
      return { hostAppDataAction: { chatDataAction: { createMessageAction: { message: {
        text: 'The Avatar app replies to Google Chat messages.'
      }}}}};
  }
}

এই কোড স্যাম্পেল ব্যবহার করতে, ABOUT_COMMAND_ID-এর জায়গায় আপনি যখন Chat API-তে কমান্ড কনফিগার করেছিলেন, তখন আপনার নির্দিষ্ট করা কমান্ড আইডি লিখুন।

মেসেজ অ্যাকশনের উত্তর দেওয়া

নিম্নলিখিত কোডটি একটি চ্যাট অ্যাপের উদাহরণ দেখায় যা টেক্সট মেসেজের মাধ্যমে আমাকে মনে করিয়ে দাও মেসেজ অ্যাকশনের উত্তর দেয়। মেসেজ অ্যাকশনের উত্তর দিতে, Chat অ্যাপ অ্যাপ কমান্ড ট্রিগার থেকে ইভেন্ট অবজেক্ট ম্যানেজ করে। ইভেন্ট অবজেক্টের পেলোডে মেসেজ অ্যাকশন কমান্ড আইডি থাকলে, Chat অ্যাপ অ্যাকশন DataActions সহ createMessageAction অবজেক্ট রিটার্ন করে:

Node.js

/**
 * Responds to an APP_COMMAND interaction event from Google Chat.
 *
 * @param {Object} event The interaction event from Google Chat.
 * @param {Object} res The HTTP response object.
 * @return {Object} The JSON response message with a confirmation.
 */
function onAppCommand(event, res) {
  // Collect the command ID and type from the event metadata.
  const {appCommandId, appCommandType} =
    event.chat.appCommandPayload.appCommandMetadata;

  if (appCommandType === 'MESSAGE_ACTION' &&
      appCommandId === REMIND_ME_COMMAND_ID) {

    // Message actions can access the context of the message they were
    // invoked on, such as the text or sender of that message.
    const messageText = event.chat.appCommandPayload.message.text;

    // Return a response that includes details from the original message.
    return res.json({
      "hostAppDataAction": {
        "chatDataAction": {
          "createMessageAction": {
            "message": {
              "text": `Setting a reminder for message: "${messageText}"`
            }
          }
        }
      }
    });
  }
}

Python

def on_app_command(event):
    """Responds to an APP_COMMAND interaction event from Google Chat.

    Args:
        event (dict): The interaction event from Google Chat.

    Returns:
        dict: The JSON response message with a confirmation.
    """
    # Collect the command ID and type from the event metadata.
    payload = event.get('chat', {}).get('appCommandPayload', {})
    metadata = payload.get('appCommandMetadata', {})
    if metadata.get('appCommandType') == 'MESSAGE_ACTION' and \
       metadata.get('appCommandId') == REMIND_ME_COMMAND_ID:

        # Message actions can access the context of the message they were
        # invoked on, such as the text or sender of that message.
        message_text = payload.get('message', {}).get('text')

        # Return a response that includes details from the original message.
        return {
            "hostAppDataAction": {
                "chatDataAction": {
                    "createMessageAction": {
                        "message": {
                            "text": f'Setting a reminder for message: "{message_text}"'
                        }
                    }
                }
            }
        }

Java

/**
 * Responds to an APP_COMMAND interaction event from Google Chat.
 *
 * @param event The interaction event from Google Chat.
 * @param response The HTTP response object.
 */
void onAppCommand(JsonObject event, HttpResponse response) throws Exception {
  // Collect the command ID and type from the event metadata.
  JsonObject payload = event.getAsJsonObject("chat").getAsJsonObject("appCommandPayload");
  JsonObject metadata = payload.getAsJsonObject("appCommandMetadata");
  String appCommandType = metadata.get("appCommandType").getAsString();

  if (appCommandType.equals("MESSAGE_ACTION")) {
    int commandId = metadata.get("appCommandId").getAsInt();
    if (commandId == REMIND_ME_COMMAND_ID) {
      // Message actions can access the context of the message they were
      // invoked on, such as the text or sender of that message.
      String messageText = payload.getAsJsonObject("message").get("text").getAsString();

      // Return a response that includes details from the original message.
      JsonObject responseMessage = new JsonObject();
      responseMessage.addProperty("text", "Setting a reminder for message: " + messageText);

      JsonObject createMessageAction = new JsonObject();
      createMessageAction.add("message", responseMessage);

      JsonObject chatDataAction = new JsonObject();
      chatDataAction.add("createMessageAction", createMessageAction);

      JsonObject hostAppDataAction = new JsonObject();
      hostAppDataAction.add("chatDataAction", chatDataAction);

      JsonObject finalResponse = new JsonObject();
      finalResponse.add("hostAppDataAction", hostAppDataAction);

      response.getWriter().write(finalResponse.toString());
    }
  }
}

Apps Script

/**
 * Responds to an APP_COMMAND interaction event in Google Chat.
 *
 * @param {Object} event The interaction event from Google Chat.
 * @return {Object} The JSON response message with a confirmation.
 */
function onAppCommand(event) {
  // Collect the command ID and type from the event metadata.
  const {appCommandId, appCommandType} =
    event.chat.appCommandPayload.appCommandMetadata;

  if (appCommandType === 'MESSAGE_ACTION' &&
      appCommandId === REMIND_ME_COMMAND_ID) {

    // Message actions can access the context of the message they were
    // invoked on, such as the text or sender of that message.
    const messageText = event.chat.appCommandPayload.message.text;

    // Return a response that includes details from the original message.
    return CardService.newChatResponseBuilder()
        .setText("Setting a reminder for message: " + messageText)
        .build();
  }
}

এই কোড স্যাম্পেল ব্যবহার করতে, REMIND_ME_COMMAND_ID-এর জায়গায় আপনি যখন Chat API-তে কমান্ড কনফিগার করেছিলেন তখন নির্দিষ্ট করা কমান্ড আইডি লিখুন।

কমান্ড পরীক্ষা করে দেখুন

কমান্ড ও কোড পরীক্ষা করতে, Google Chat অ্যাপের জন্য ইন্টার‍্যাক্টিভ ফিচার পরীক্ষা করুন দেখুন।

Chat UI-তে কীভাবে কমান্ড পরীক্ষা ও ব্যবহার করতে হয় তা জানতে, Google Chat সহায়তা ডকুমেন্টেশনে Google Chat-এ অ্যাপ ব্যবহার করা লিঙ্ক দেখুন।

অ্যাড-অন নয় এমন চ্যাট অ্যাপ: কমান্ডের উত্তর দেওয়া

Google Workspace অ্যাড-অন নয় এমন Chat অ্যাপের ক্ষেত্রে নিম্নলিখিত ডকুমেন্টেশন প্রযোজ্য। অ্যাড-অন নয় এমন Chat অ্যাপ মাইগ্রেট করতে, Google Chat অ্যাপকে Google Workspace অ্যাড-অনে কনভার্ট করুন দেখুন।

ব্যবহারকারী কোনও কমান্ড ব্যবহার করলে, অ্যাড-অন নয় এমন একটি Chat অ্যাপ ইন্টার‍্যাকশন ইভেন্ট পায় এবং সরাসরি Message অবজেক্ট রিটার্ন করে উত্তর দিতে পারে। ইভেন্ট পেলোডে, ইনভোক করা কমান্ডের (কমান্ড আইডি ও কমান্ডের ধরন সহ) বিবরণ সহ মেটাডেটা থাকে, যাতে আপনি উপযুক্ত উত্তর দিতে পারেন।

Chat অ্যাপে অ্যাড-অন নয় এমন প্রতিটি কমান্ডের উত্তর দিতে, আপনাকে ইভেন্ট পেলোডের মধ্যে বিভিন্ন ধরনের ইভেন্ট ও মেটাডেটা অবজেক্ট ম্যানেজ করতে হবে:

কমান্ডের ধরন ইভেন্টের প্রকার কমান্ড মেটাডেটা
স্ল্যাশ কমান্ড MESSAGE message.slashCommand অথবা message.annotation.slashCommand
দ্রুত কমান্ড APP_COMMAND appCommandMetadata
মেসেজ অ্যাকশন APP_COMMAND appCommandMetadata

স্ল্যাশ কমান্ডের উত্তর দেওয়া

নিম্নলিখিত কোডটি এমন একটি Chat অ্যাপের উদাহরণ দেখায় যা স্ল্যাশ কমান্ডের উত্তর দেয় না এমন একটি অ্যাড-অন /about। Chat অ্যাপ MESSAGE ইন্ট্যার‍্যাকশন ইভেন্ট ম্যানেজ করে, ইন্ট্যার‍্যাকশন ইভেন্টে ম্যাচিং কমান্ড আইডি আছে কিনা তা শনাক্ত করে এবং একটি ব্যক্তিগত Message অবজেক্ট রিটার্ন করে:

Node.js

node/avatar-app/index.js
/**
 * Handles slash and quick commands.
 *
 * @param {Object} event - The Google Chat event.
 * @param {Object} res - The HTTP response object.
 */
function handleAppCommands(event, res) {
  const {appCommandId, appCommandType} = event.appCommandMetadata;

  switch (appCommandId) {
    case ABOUT_COMMAND_ID:
      return res.send({
        privateMessageViewer: event.user,
        text: 'The Avatar app replies to Google Chat messages.'
      });
    case HELP_COMMAND_ID:
      return res.send({
        privateMessageViewer: event.user,
        text: 'The Avatar app replies to Google Chat messages.'
      });
  }
}

Apps Script

apps-script/avatar-app/avatar-app.gs
// Checks for the presence of a slash command in the message.
if (event.message.slashCommand) {
  // Executes the slash command logic based on its ID.
  // Slash command IDs are set in the Google Chat API configuration.
  switch (event.message.slashCommand.commandId) {
    case ABOUT_COMMAND_ID:
      return {
        privateMessageViewer: event.user,
        text: 'The Avatar app replies to Google Chat messages.'
      };
  }
}

Python

python/avatar-app/main.py
def handle_app_commands(event: Mapping[str, Any]) -> Mapping[str, Any]:
    """Handles slash and quick commands.

    Args:
        Mapping[str, Any] event: The Google Chat event.

    Returns:
        Mapping[str, Any]: the response
    """
    app_command_id = event["appCommandMetadata"]["appCommandId"]

    if app_command_id == ABOUT_COMMAND_ID:
        return {
            "privateMessageViewer": event["user"],
            "text": "The Avatar app replies to Google Chat messages.",
        }
    elif app_command_id == HELP_COMMAND_ID:
        return {
            "privateMessageViewer": event["user"],
            "text": "The Avatar app replies to Google Chat messages.",
        }
    return {}

Java

java/avatar-app/src/main/java/AvatarApp.java
/**
 * Handles slash and quick commands.
 *
 * @param event    The Google Chat event.
 * @param response The HTTP response object.
 */
private void handleAppCommands(JsonObject event, HttpResponse response) throws Exception {
  int appCommandId = event.getAsJsonObject("appCommandMetadata").get("appCommandId").getAsInt();

  switch (appCommandId) {
    case ABOUT_COMMAND_ID:
      Message aboutMessage = new Message();
      aboutMessage.setText("The Avatar app replies to Google Chat messages.");
      aboutMessage.setPrivateMessageViewer(new User()
          .setName(event.getAsJsonObject("user").get("name").getAsString()));
      response.getWriter().write(gson.toJson(aboutMessage));
      return;
    case HELP_COMMAND_ID:
      Message helpMessage = new Message();
      helpMessage.setText("The Avatar app replies to Google Chat messages.");
      helpMessage.setPrivateMessageViewer(new User()
          .setName(event.getAsJsonObject("user").get("name").getAsString()));
      response.getWriter().write(gson.toJson(helpMessage));
      return;
  }
}

Google Cloud কনসোলে কমান্ড কনফিগার করার সময় আপনি যে কমান্ড আইডি নির্দিষ্ট করেছিলেন সেটি দিয়ে ABOUT_COMMAND_ID পরিবর্তন করুন।

দ্রুত কমান্ডের উত্তর দেওয়া

নিচে দেওয়া কোডে এমন একটি চ্যাট অ্যাপের উদাহরণ দেখানো হয়েছে যেটি কোনও অ্যাড-অন নয় এবং যেটি কুইক কমান্ড সাহায্য করুন-এর উত্তর দেয়। Chat অ্যাপ APP_COMMAND ইন্ট্যার‍্যাকশন ইভেন্ট ম্যানেজ করে, ইন্ট্যার‍্যাকশন ইভেন্টে ম্যাচিং কমান্ড আইডি আছে কিনা তা শনাক্ত করে এবং একটি ব্যক্তিগত Message অবজেক্ট রিটার্ন করে:

Node.js

node/avatar-app/index.js
/**
 * Handles slash and quick commands.
 *
 * @param {Object} event - The Google Chat event.
 * @param {Object} res - The HTTP response object.
 */
function handleAppCommands(event, res) {
  const {appCommandId, appCommandType} = event.appCommandMetadata;

  switch (appCommandId) {
    case ABOUT_COMMAND_ID:
      return res.send({
        privateMessageViewer: event.user,
        text: 'The Avatar app replies to Google Chat messages.'
      });
    case HELP_COMMAND_ID:
      return res.send({
        privateMessageViewer: event.user,
        text: 'The Avatar app replies to Google Chat messages.'
      });
  }
}

Apps Script

apps-script/avatar-app/avatar-app.gs
/**
 * Handles the APP_COMMAND event type. This function is triggered when a user
 * interacts with a quick command within the Google Chat app.  It responds
 * based on the command ID.
 *
 * @param {Object} event The event object from Google Chat, containing details
 *     about the app command interaction.  It includes information like the
 *     command ID and the user who triggered it.
 */
function onAppCommand(event) {
  // Executes the quick command logic based on its ID.
  // Command IDs are set in the Google Chat API configuration.
  switch (event.appCommandMetadata.appCommandId) {
    case HELP_COMMAND_ID:
      return {
        privateMessageViewer: event.user,
        text: 'The Avatar app replies to Google Chat messages.'
      };
  }
}

Python

python/avatar-app/main.py
def handle_app_commands(event: Mapping[str, Any]) -> Mapping[str, Any]:
    """Handles slash and quick commands.

    Args:
        Mapping[str, Any] event: The Google Chat event.

    Returns:
        Mapping[str, Any]: the response
    """
    app_command_id = event["appCommandMetadata"]["appCommandId"]

    if app_command_id == ABOUT_COMMAND_ID:
        return {
            "privateMessageViewer": event["user"],
            "text": "The Avatar app replies to Google Chat messages.",
        }
    elif app_command_id == HELP_COMMAND_ID:
        return {
            "privateMessageViewer": event["user"],
            "text": "The Avatar app replies to Google Chat messages.",
        }
    return {}

Java

java/avatar-app/src/main/java/AvatarApp.java
/**
 * Handles slash and quick commands.
 *
 * @param event    The Google Chat event.
 * @param response The HTTP response object.
 */
private void handleAppCommands(JsonObject event, HttpResponse response) throws Exception {
  int appCommandId = event.getAsJsonObject("appCommandMetadata").get("appCommandId").getAsInt();

  switch (appCommandId) {
    case ABOUT_COMMAND_ID:
      Message aboutMessage = new Message();
      aboutMessage.setText("The Avatar app replies to Google Chat messages.");
      aboutMessage.setPrivateMessageViewer(new User()
          .setName(event.getAsJsonObject("user").get("name").getAsString()));
      response.getWriter().write(gson.toJson(aboutMessage));
      return;
    case HELP_COMMAND_ID:
      Message helpMessage = new Message();
      helpMessage.setText("The Avatar app replies to Google Chat messages.");
      helpMessage.setPrivateMessageViewer(new User()
          .setName(event.getAsJsonObject("user").get("name").getAsString()));
      response.getWriter().write(gson.toJson(helpMessage));
      return;
  }
}

Google Cloud কনসোলে কমান্ড কনফিগার করার সময় আপনি যে কমান্ড আইডি নির্দিষ্ট করেছিলেন সেটি দিয়ে HELP_COMMAND_ID পরিবর্তন করুন।

মেসেজ অ্যাকশনের উত্তর দেওয়া

নিচের কোডে এমন একটি Chat অ্যাপের উদাহরণ দেখানো হয়েছে যা মেসেজ অ্যাকশনের উত্তর দেয় এমন কোনও অ্যাড-অন নয় আমাকে মনে করিয়ে দাও। Chat অ্যাপ APP_COMMAND ইন্ট্যার‍্যাকশন ইভেন্ট ম্যানেজ করে, ইন্ট্যার‍্যাকশন ইভেন্টে ম্যাচিং কমান্ড আইডি আছে কিনা তা শনাক্ত করে এবং একটি ব্যক্তিগত Message অবজেক্ট রিটার্ন করে:

Node.js

/**
 * Responds to an APP_COMMAND interaction event from Google Chat.
 *
 * @param {Object} event The interaction event from Google Chat.
 * @param {Object} res The HTTP response object.
 * @return {Object} The JSON response message with a confirmation.
 */
function handleAppCommand(event, res) {
  // Collect the command ID and type from the event metadata.
  const {appCommandId, appCommandType} = event.appCommandMetadata;

  // Use appCommandType to detect message actions.
  if (appCommandType === 'MESSAGE_ACTION' &&
      appCommandId === REMIND_ME_COMMAND_ID) {

    // Message actions can access the context of the message they were
    // invoked on, such as the text or sender of that message.
    const messageText = event.message.text;

    // Return a response that includes details from the original message.
    return res.send({
      text: `Setting a reminder for this message: "${messageText}"`
    });
  }
}

Apps Script

/**
 * Responds to an APP_COMMAND interaction event in Google Chat.
 *
 * @param {Object} event The interaction event from Google Chat.
 * @return {Object} The JSON response message with a confirmation.
 */
function onAppCommand(event) {
  // Collect the command ID and type from the event metadata.
  const {appCommandId, appCommandType} = event.appCommandMetadata;

  if (appCommandType === 'MESSAGE_ACTION' &&
      appCommandId === REMIND_ME_COMMAND_ID) {

    // Message actions can access the context of the message they were
    // invoked on, such as the text or sender of that message.
    const messageText = event.message.text;

    // Return a response that includes details from the original message.
    return { "text": "Setting a reminder for message: " + messageText };
  }
}

Python

def handle_app_command(event):
    """Responds to an APP_COMMAND interaction event from Google Chat.

    Args:
        event (dict): The interaction event from Google Chat.

    Returns:
        dict: The JSON response message with a confirmation.
    """
    # Collect the command ID and type from the event metadata.
    metadata = event.get('appCommandMetadata', {})
    if metadata.get('appCommandType') == 'MESSAGE_ACTION' and \
       metadata.get('appCommandId') == REMIND_ME_COMMAND_ID:

        # Message actions can access the context of the message they were
        # invoked on, such as the text or sender of that message.
        message_text = event.get('message', {}).get('text')

        # Return a response that includes details from the original message.
        return {
            "text": f'Setting a reminder for message: "{message_text}"'
        }

Java

/**
 * Responds to an APP_COMMAND interaction event from Google Chat.
 *
 * @param event The interaction event from Google Chat.
 * @param response The HTTP response object.
 */
void handleAppCommand(JsonObject event, HttpResponse response) throws Exception {
  // Collect the command ID and type from the event metadata.
  JsonObject metadata = event.getAsJsonObject("appCommandMetadata");
  String appCommandType = metadata.get("appCommandType").getAsString();

  if (appCommandType.equals("MESSAGE_ACTION")) {
    int commandId = metadata.get("appCommandId").getAsInt();
    if (commandId == REMIND_ME_COMMAND_ID) {
      // Message actions can access the context of the message they were
      // invoked on, such as the text or sender of that message.
      String messageText = event.getAsJsonObject("message").get("text").getAsString();

      // Return a response that includes details from the original message.
      JsonObject responseMessage = new JsonObject();
      responseMessage.addProperty("text", "Setting a reminder for message: " + messageText);
      response.getWriter().write(responseMessage.toString());
    }
  }
}

Google Cloud কনসোলে কমান্ড কনফিগার করার সময় আপনি যে কমান্ড আইডি নির্দিষ্ট করেছিলেন সেটি দিয়ে REMIND_ME_COMMAND_ID পরিবর্তন করুন।