বট এবং ইন্টারঅ্যাকটিভ মেসেজ
একটি বট অ্যাকাউন্ট হলো একটি প্রোগ্রামের জন্য তৈরি করা ব্যবহারকারী। এর নিজস্ব নাম, ছবি এবং টোকেন থাকে, এবং এর নামের পাশে একটি BOT ট্যাগ দেখা যায়। এই পৃষ্ঠায় আপনি যেসব AI এজেন্ট নিজে পরিচালনা করেন এবং মেসেজের ইন্টারঅ্যাকটিভ অংশগুলো—যেমন বাটন, মেনু এবং ডায়ালগ, যা যেকোনো ইন্টিগ্রেশন ব্যবহার করতে পারে—সেগুলোও অন্তর্ভুক্ত রয়েছে।
বট অ্যাকাউন্ট কেন
- এর মেসেজগুলো পরিষ্কার পরিচয়ের—from a বট ট্যাগ—থেকে আসে, কোনো সহকর্মীর অ্যাকাউন্ট থেকে নয়।
- যে ব্যক্তি এটি সেটআপ করেছিল তার ভূমিকা পরিবর্তন করলে বা ছেড়ে দিলেও এর টোকেন কাজ করতে থাকে (যদি সার্ভার নন-অ্যাকটিভ মালিকদের বট নিষ্ক্রিয় না করে, নিচে দেখুন)।
- বট পাসওয়ার্ড দিয়ে সাইন ইন করতে পারে না, এবং কখনোই ওয়েব অ্যাপ দেখে না।
অ্যাপসমূহ প্লাগিন API (EnsureBotUser) ব্যবহার করে তাদের নিজস্ব বট তৈরি করে, যেমন Todo বা Playbooks বট। AI এজেন্টও বট অ্যাকাউন্ট, তবে এগুলো এক ধরনের বিশেষ বট যা AGENT ট্যাগ দিয়ে দেখানো হয়: এজেন্টসমূহ দেখুন।
বট অ্যাকাউন্ট সক্রিয় করুন
একজন সিস্টেম অ্যাডমিন সিস্টেম কনসোল › ইন্টিগ্রেশনসমূহ › বট অ্যাকাউন্ট-এ বট অ্যাকাউন্ট তৈরি সক্রিয় করুন (ServiceSettings.EnableBotAccountCreation, AM_SERVICESETTINGS_ENABLEBOTACCOUNTCREATION) চালু করেন। ডিফল্টভাবে এটি বন্ধ থাকে। শুধুমাত্র সিস্টেম অ্যাডমিন বট তৈরি করতে পারে, যদি না অনুমতি সেটিংসে অন্য ভূমিকাগুলিকে এই অধিকার দেওয়া হয়।
একই পেজে, অভিভাবক নিষ্ক্রিয় হলে বট অ্যাকাউন্ট নিষ্ক্রিয় করুন (ServiceSettings.DisableBotsWhenOwnerIsDeactivated, ডিফল্টভাবে চালু) মালিকের অ্যাকাউন্ট নন-অ্যাকটিভ হলে বটটি নিষ্ক্রিয় করে।
বট তৈরি করুন
- কমিউনিটি মেনু খুলুন, তারপর টিম সেটিংস-এ ক্লিক করুন, এর ট্যাবগুলোর শেষে ইন্টিগ্রেশনসমূহ-এ ক্লিক করুন, তারপর বট অ্যাকাউন্ট এবং বট অ্যাকাউন্ট যোগ করুন।
- একটি ইউজারনেম দিন (নিচের বর্ণ, সংখ্যা, পিরিয়ড, ড্যাশ ও আন্ডারস্কোর), এবং ইচ্ছা করলে একটি বট আইকন, ডিসপ্লে নাম এবং বর্ণনা।
- ভূমিকা নির্বাচন করুন: সদস্য, অথবা সার্ভার পরিচালনা করার জন্য সিস্টেম অ্যাডমিন। বটকে যত কম অনুমতি দিতে পারেন, তত দিন।
- সব পাবলিক চ্যানেলে পোস্ট করার জন্য post:channels টিক করুন, অথবা সব চ্যানেলে, প্রাইভেট চ্যানেল ও ডাইরেক্ট মেসেজসহ, সদস্য না হয়ে পোস্ট করার জন্য post:all।
- ডিফল্ট টোকেন কখনো মেয়াদোত্তীর্ণ হবে তা নির্ধারণ করুন, তারপর বট অ্যাকাউন্ট তৈরি করুন নির্বাচন করুন।
- প্রদর্শিত অ্যাক্সেস টোকেনটি কপি করুন। এটি আর দেখানো হবে না।
পরে, বটের সারিতে নতুন টোকেন তৈরি করুন একটি টোকেন যোগ করে, এবং প্রতিটি টোকেন নিষ্ক্রিয় বা মুছে ফেলা যায়। ব্যক্তিগত অ্যাক্সেস টোকেন মানুষের জন্য বন্ধ থাকলেও বট টোকেন কাজ করে।
একটি বট সার্ভার অ্যাট্রিবিউট বহন করতে পারে (সিস্টেম কনসোল › সিস্টেম অ্যাট্রিবিউট-এ সেটআপ করা অ্যাট্রিবিউটগুলো), যা Add/Edit Bot ফর্মে বা বটের ⋯ মেনু থেকে অ্যাট্রিবিউট সম্পাদনা করুন… ব্যবহার করে নির্ধারণ করা যায়। বটটি যিনি পরিচালনা করেন, তিনি এগুলো সেট করেন: মালিক, বট পরিচালনার অনুমতিসহ, বা অন্যের বট পরিচালনার অনুমতিসহ যেকোনো ব্যক্তি; অ্যাডমিন-পরিচালিত একটি অ্যাট্রিবিউটের জন্য এখনও একজন সিস্টেম অ্যাডমিন প্রয়োজন। একটি AI এজেন্টের বট কারও মালিকানায় থাকে না, তাই শুধুমাত্র অন্যের বট পরিচালনার অনুমতিসহ কেউ বা একজন সিস্টেম অ্যাডমিন এর অ্যাট্রিবিউট সেট করতে পারেন।
API-র মাধ্যমে:
# create the bot (you become its owner)
curl -X POST https://chat.example.com/api/v4/bots \
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{"username": "deploy-bot", "display_name": "Deploy", "description": "Posts deployments"}'
# give it a token
curl -X POST https://chat.example.com/api/v4/users/$BOT_USER_ID/tokens \
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{"description": "deploy pipeline"}'
কমান্ড লাইন থেকে, অ্যাডমিন হিসেবে সাইন ইন করে (লোকাল মোড নয়): amctl bot create deploy-bot --display-name Deploy --with-token --expires-in 90d। অন্যান্য এন্ডপয়েন্ট: GET /api/v4/bots, PUT /api/v4/bots/{bot_user_id}, POST /api/v4/bots/{bot_user_id}/disable এবং /enable, এবং মালিক পরিবর্তন করতে POST /api/v4/bots/{bot_user_id}/assign/{user_id}।
বটটি কমিউনিটি এবং চ্যানেলে যোগ করুন
নতুন একটি বট কোনো কমিউনিটিতে নেই। একজন ব্যক্তির মতোই, কমিউনিটির সদস্য ব্যবস্থাপনা থেকে বা API-র মাধ্যমে এটি যোগ করুন:
curl -X POST https://chat.example.com/api/v4/teams/$TEAM_ID/members \
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{"team_id": "'$TEAM_ID'", "user_id": "'$BOT_USER_ID'"}'
curl -X POST https://chat.example.com/api/v4/channels/$CHANNEL_ID/members \
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{"user_id": "'$BOT_USER_ID'"}'
post:channels বা post:all অধিকারসহ একটি বট সদস্য না হয়েও পোস্ট করতে পারে, তবে এটি শুধুমাত্র সেই চ্যানেলের WebSocket ইভেন্ট পায় যেখানে এটি রয়েছে।
বট হিসেবে পোস্ট করুন
যেকোনো API কলে বটের টোকেন ব্যবহার করুন; POST /api/v4/posts সবচেয়ে সাধারণ (দেখুন প্রধান রিসোর্স)। কারো সাথে সরাসরি লিখতে, প্রথমে ডাইরেক্ট মেসেজ চ্যানেলটি খুলুন:
# returns the channel; use its "id" as channel_id
curl -X POST https://chat.example.com/api/v4/channels/direct \
-H "Authorization: Bearer $BOT_TOKEN" -H 'Content-Type: application/json' \
-d '["'$BOT_USER_ID'", "'$USER_ID'"]'
মানুষ যা বলে তাতে প্রতিক্রিয়া জানাতে, বটের টোকেন ব্যবহার করে WebSocket ফলো করুন এবং আপনার যত্নের posted ইভেন্টগুলোর উত্তর দিন। লুপ এড়াতে বটের নিজের ম্যাসেজগুলো উপেক্ষা করুন।
শুধুমাত্র একজন ব্যক্তি যে ম্যাসেজ দেখতে পারে (এফিমেরাল ম্যাসেজ) পাঠানো হয় POST /api/v4/posts/ephemeral এবং {"user_id", "post": {"channel_id", "message"}} দিয়ে। এটির জন্য create_post_ephemeral অনুমতি প্রয়োজন, যা ডিফল্টভাবে শুধুমাত্র সিস্টেম অ্যাডমিনরা রাখেন। ইন্টিগ্রেশনগুলি সাধারণত স্লাশ কমান্ড এবং বাটনের উত্তর হিসেবে এফিমেরাল ম্যাসেজ পাঠায়।
এজেন্টসমূহ
একটি এজেন্ট হলো agent ধরনের একটি বট অ্যাকাউন্ট: ব্যবহারকারীদের ক্ষেত্রে "is_agent": true, বটদের ক্ষেত্রে "kind": "agent" থাকে, এবং ইন্টারফেসে BOT-এর পরিবর্তে একটি AGENT ট্যাগ দেখানো হয়। এজেন্টসমূহ শুধুমাত্র সিস্টেম অ্যাডমিনদের দ্বারা (সার্ভার-ওয়াইড এজেন্ট), সিস্টেম কনসোল › AI › মডেল কানেকশনসমূহ-এ, এবং কমিউনিটি অ্যাডমিনদের দ্বারা (তাদের কমিউনিটির), কমিউনিটি সেটিংসের AI ট্যাবে, অথবা /api/v4/ai/agents ব্যবহার করে তৈরি করা হয় (দেখুন API)। POST /bots ব্যবহার করে বা একটি অ্যাপের মাধ্যমে তৈরি করা বট সবসময় একটি সাধারণ বট হয়।
একটি বিল্ট-ইন এজেন্টের উত্তর সার্ভার দেয়, একটি মডেল কানেকশন ব্যবহার করে। একটি এক্সটার্নাল এজেন্ট আপনার নিজস্ব পরিচালনায় থাকে: অন্য কোথাও থাকা একটি প্রোগ্রাম (যেমন, একটি প্রজেক্টে কোডিং এজেন্ট) যা এজেন্ট হিসেবে সাইন ইন করে এবং একজন মানুষের মতো উত্তর দেয়। Antimatter এর পক্ষ থেকে উত্তর দেয় না।
একটি বিল্ট-ইন এজেন্টের স্ট্যাটাস সার্ভার দ্বারা নির্ধারিত হয়: যখন এর মডেল কানেকশন সাড়া দেয় তখন অনলাইন, যখন সাড়া দেয় না (ডাউন, টাইমআউট, বা অস্বীকৃত কী) তখন দূরে, এবং যখন এটি বন্ধ থাকে বা কোনো ব্যবহারযোগ্য কানেকশন বা মডেল নেই তখন অফলাইন। এজেন্ট বা এর কানেকশন পরিবর্তিত হলে, একটি কানেকশন পরীক্ষা করা হলে, এজেন্টের প্রতিটি মডেল কলে এবং প্রতি ১০ মিনিট পর পর এই স্ট্যাটাস যাচাই করা হয়। কেউ বিল্ট-ইন এজেন্টের স্ট্যাটাস পরিবর্তন করতে পারে না: সিস্টেম অ্যাডমিনদের ক্ষেত্রেও PUT /users/{id}/status এবং কাস্টম স্ট্যাটাস এন্ডপয়েন্টসমূহ 403 (api.status.agent.app_error) রিটার্ন করে, এবং প্লাগিন API-এর UpdateUserStatus, SetUserStatusTimedDND, UpdateUserCustomStatus এবং RemoveUserCustomStatus একইভাবে এটি প্রত্যাখ্যান করে। একটি এক্সটার্নাল এজেন্টের স্ট্যাটাস এর নিজস্ব কানেকশন অনুসরণ করে এবং শুধুমাত্র এর নিজস্ব টোকেন এটি পরিবর্তন করতে পারে।
একটি এক্সটার্নাল এজেন্ট চালান
- একজন অ্যাডমিন সিস্টেম কনসোল › AI › মডেল কানেকশনসমূহ (বা একটি কমিউনিটির AI ট্যাব) থেকে এজেন্টটি যোগ করেন, যেখানে ধরন হিসেবে এক্সটার্নাল এজেন্ট নির্বাচন করা হয় এবং কে এটির সাথে কথা বলতে পারবে তা বেছে নেওয়া হয়। এরপর পৃষ্ঠাটি এটি কীভাবে সংযোগ করতে হবে তা দেখায়।
- এটিকে একটি টোকেন দিন: একজন সিস্টেম অ্যাডমিন ইন্টিগ্রেশনসমূহ › বট অ্যাকাউন্ট খোলেন, এজেন্টের অ্যাকাউন্টটি খুঁজে বের করেন এবং নতুন টোকেন তৈরি করুন নির্বাচন করেন, অথবা এজেন্টের ইউজার আইডি ব্যবহার করে টোকেন API কল করেন:
curl -X POST https://chat.example.com/api/v4/users/$AGENT_USER_ID/tokens \ -H "Authorization: Bearer $ADMIN_TOKEN" -H 'Content-Type: application/json' \ -d '{"description": "agent"}' - প্রোগ্রামটি API কল করে এবং
Authorization: Bearer <token>ব্যবহার করে WebSocket খোলে,postedইভেন্টসমূহ থেকে এর মেনশনসমূহ এবং ডাইরেক্ট মেসেজ পড়ে, এবংPOST /postsব্যবহার করে মেসেজের থ্রেডে উত্তর দেয়। - এটি এর কার্যকলাপ সেট করে মানুষকে দেখায় যে এটি কী করছে:
curl -X PUT https://chat.example.com/api/v4/ai/agents/$AGENT_USER_ID/activity \ -H "Authorization: Bearer $AGENT_TOKEN" -H 'Content-Type: application/json' \ -d '{"state": "working", "text": "Running the tests", "thread_post_id": "'$ROOT_ID'"}'
এই পাথসমূহে এজেন্টের আইডি হলো এর ইউজার আইডি। টোকেনটি গোপন রাখুন: যার কাছে এটি আছে, সে এজেন্টের হয়ে পোস্ট করতে পারবে।
কার্যকলাপ
state:idle,thinking,working,waiting(কারো জন্য),blockedঅথবাoffline। ব্যস্ত অবস্থাগুলো (thinking, working, waiting, blocked)expires_in_secondsপরেidleঅবস্থায় ফিরে যায়: ডিফল্টভাবে ১০ মিনিট, সর্বোচ্চ ২৪ ঘণ্টা।text: কাজ সম্পর্কে কয়েকটি শব্দ, সর্বোচ্চ ২০০ অক্ষরের একটি লাইন। ইন্টারফেস এটি সদস্য তালিকা এবং প্রোফাইল কার্ডে দেখায়।thread_post_id: যে থ্রেডে এটি কাজ করে, যা প্রোগ্রামটি পড়তে সক্ষম হতে হবে। এটি শুধুমাত্র তাদের কাছেই দেওয়া হয় যারা এটি পড়ার অনুমতি পান।
কে এই এজেন্টের কার্যকলাপ পড়তে পারে তা দেখতে পায় (GET /ai/agents/{agent_id}/activity, অথবা আইডিগুলোর একটি তালিকা সহ POST /ai/agents/activity/ids) এবং থ্রেড ছাড়াই agent_activity_changed WebSocket ইভেন্ট পায়। বিল্ট-ইন এজেন্টসমূহ তাদের কার্যকলাপ নিজেই নির্ধারণ করে।
যখন একটি বিল্ট-ইন এজেন্ট তার উত্তর লেখে, সার্ভার ক্রমবর্ধমান টেক্সট agent_post_stream ইভেন্টের মাধ্যমে চ্যানেলে পাঠায়: post_id, channel_id, root_id, user_id, message (এ পর্যন্ত থাকা টেক্সট) এবং control (start, text, end, error অথবা cancel)। একটি post_edited ইভেন্ট চূড়ান্ত মেসেজটি বহন করে। যেসব ক্লায়েন্ট স্ট্রিম উপেক্ষা করে, তারা মেসেজটি সংরক্ষিত হওয়ার পর উত্তরটি দেখতে পায়।
ইন্টারঅ্যাকটিভ ম্যাসেজ: বাটন এবং মেনু
আটাচমেন্টসহ যেকোনো ম্যাসেজে অ্যাকশন থাকতে পারে: বাটন এবং বেছে নিতে মেনু। এগুলো API, ওয়েবহুক এবং স্লাশ কমান্ডের উত্তরে পোস্ট করা ম্যাসেজে কাজ করে। কেউ যখন একটি ব্যবহার করে, Antimatter আপনার ইন্টিগ্রেশনের URL-কে কল করে।
{
"channel_id": "…",
"message": "Deploy **api 2.4.0** to production?",
"props": {
"attachments": [{
"actions": [
{
"id": "approve",
"type": "button",
"name": "Approve",
"style": "primary",
"integration": {"url": "https://deploy.example.com/actions", "context": {"release": "2.4.0", "action": "approve"}}
},
{
"id": "env",
"type": "select",
"name": "Pick an environment",
"options": [{"text": "Staging", "value": "staging"}, {"text": "Production", "value": "production"}],
"integration": {"url": "https://deploy.example.com/actions", "context": {"release": "2.4.0", "action": "env"}}
}
]
}]
}
}
type:buttonবাselect।id: অক্ষর, সংখ্যা, ড্যাশ এবং আন্ডারস্কোর, ম্যাসেজের প্রতিটি অ্যাকশনের জন্য আলাদা। এটি বাদ দিলে স্বয়ংক্রিয়ভাবে তৈরি হয়।style(বাটন):default,primary,success,good,warning,danger, বা একটি হেক্স রঙ।options(মেনু), বাdata_source:usersবাchannelsদিয়ে একজন ব্যক্তি বা একটি চ্যানেল বেছে নিন।default_optionএকটি মান আগে থেকে নির্বাচিত করে।integration.url: ক্লিক পাঠানোর ঠিকানা। একটি অ্যাপ (প্লাগইন) নিজের রুট ব্যবহার করতে পারে, যেমন/plugins/com.example.deploy/actions।integration.contextআপনার নিজের: এটি ক্লিকের সাথে ফিরে আসে, এবং ক্লায়েন্টরা এটি কখনো দেখে না।
আপনার ইনটিগ্রেশন যে অনুরোধটি পায়
{
"user_id": "…",
"user_name": "priya",
"channel_id": "…",
"channel_name": "releases",
"team_id": "…",
"team_domain": "lumen-labs",
"post_id": "…",
"trigger_id": "…",
"type": "button",
"context": {"release": "2.4.0", "action": "approve"}
}
একটি মেনুর ক্ষেত্রে, type হয় select এবং context.selected_option-এ নির্বাচিত মান থাকে।
আপনার উত্তর
{
"update": {"message": "Deploy of **api 2.4.0** approved by @priya", "props": {}},
"ephemeral_text": "Done. The deploy starts in a minute."
}
update: ম্যাসেজের টেক্সট এবং প্রপার্টিগুলো প্রতিস্থাপন করে, যেমন ব্যবহারের পরে বোতামগুলো সরিয়ে ফেলতে (খালিprops)।ephemeral_text: এমন একটি ম্যাসেজ যা শুধুমাত্র যে ব্যক্তি ক্লিক করেছে, তিনিই দেখতে পান।goto_location: খোলার জন্য একটি URL।- খালি বডি (body) কিছুই পরিবর্তন করে না।
সার্ভার ইনটিগ্রেশন অনুরোধ টাইমআউট অনুমোদিত সময় পর্যন্ত অপেক্ষা করে (ডিফল্ট ৩০ সেকেন্ড)। প্রাইভেট নেটওয়ার্ক ঠিকানার ইনটিগ্রেশন URL-গুলোর জন্য সিস্টেম অ্যাডমিনের অনুমতি প্রয়োজন, যেমন ওয়েবহুকের ক্ষেত্রে।
ডায়ালগ
ডায়ালগ হলো এমন একটি ফর্ম যা চ্যাটের উপর খোলে। আপনি কেবল সেই ব্যক্তির সাম্প্রতিক কোনো কাজের (যেমন একটি স্লাশ কমান্ড বা বোতাম) উত্তরে এটি খুলতে পারেন, কারণ এটির জন্য সেই অনুরোধের trigger_id প্রয়োজন। trigger_id ইনটিগ্রেশন অনুরোধ টাইমআউটের সময় পর্যন্ত বৈধ থাকে।
curl -X POST https://chat.example.com/api/v4/actions/dialogs/open \
-H 'Content-Type: application/json' \
-d '{
"trigger_id": "'$TRIGGER_ID'",
"url": "https://deploy.example.com/dialog",
"dialog": {
"callback_id": "new-release",
"title": "New release",
"introduction_text": "Fill in the release details.",
"submit_label": "Create",
"notify_on_cancel": false,
"state": "anything you want back",
"elements": [
{"display_name": "Version", "name": "version", "type": "text", "placeholder": "2.4.0"},
{"display_name": "Notes", "name": "notes", "type": "textarea", "optional": true},
{"display_name": "Environment", "name": "env", "type": "select",
"options": [{"text": "Staging", "value": "staging"}, {"text": "Production", "value": "production"}]},
{"display_name": "Owner", "name": "owner", "type": "select", "data_source": "users"},
{"display_name": "Notify the channel", "name": "notify", "type": "bool", "default": "true"}
]
}
}'
| এলিমেন্টের ধরন | এটি কী দেখায় |
|---|---|
text | এক লাইনের ফিল্ড। subtype: text, email, number, password, tel বা url। min_length এবং max_length এর সীমা নির্ধারণ করে। |
textarea | একাধিক লাইনের ফিল্ড। |
select | একটি তালিকা: options, অথবা data_source হিসেবে users, channels, অথবা dynamic (যার সাথে data_source_url থাকে)। multiselect একাধিক মান নির্বাচন করতে দেয়। |
bool | একটি চেকবক্স। |
radio | options-এর মধ্যে একটি নির্বাচন। |
date, datetime | একটি তারিখ, অথবা তারিখ এবং সময়। |
action_button | একটি বোতাম যা ডায়ালগের সাবমিট থেকে আলাদাভাবে নিজের থেকে action_button_url কল করে। এর help_text বোতামের নিচে দেখা যায়। |
collapsible | একটি ভাঁজযোগ্য উপাদানের গ্রুপ। sub_type: "grid" থাকলে, এর শিশু কনটেইনারগুলো স্ট্যাক করার পরিবর্তে একটি টেবিলের মতো সাজানো হয়: প্রতিটি একটি সারি, এবং তাদের নিজস্ব উপাদানগুলো সেই সারির সেল। |
প্রতিটি এলিমেন্ট display_name, name, help_text, placeholder, default এবং optional গ্রহণ করে।
ডায়ালগের submit_buttons একটি স্ট্যাটিক select উপাদানের নাম উল্লেখ করে: এর অপশনগুলো ডায়ালগের সাবমিট বোতাম হয়ে ওঠে, প্রতিটি অপশনের জন্য একটি করে, একটি মাত্র সাবমিট বোতামের পরিবর্তে, এবং সেই select নিজে প্রদর্শিত হয় না। size ("small", "medium" অথবা "large"; উল্লেখ না থাকলে "small") একটি চওড়া ডায়ালগের অনুরোধ করে। refresh_on_return (source_url প্রয়োজন) একটি ডায়ালগ বন্ধ হওয়ার পর, যা এই ডায়ালগের উপর খোলা হয়েছিল, তখন source_url থেকে ডায়ালগটি পুনরায় ফেচ করে, যাতে এটি পরিবর্তনগুলো দেখাতে পারে। একটি অচেনা size অথবা sub_type ডায়ালগ খোলা বন্ধ করে না: এটি ডিফল্টে ফিরে যায় এবং সার্ভার শুধু এটি লগ করে।
ব্যক্তিটি সাবমিট করলে, Antimatter ডায়ালগের url-এ POST করে:
{
"type": "dialog_submission",
"callback_id": "new-release",
"state": "anything you want back",
"user_id": "…",
"channel_id": "…",
"team_id": "…",
"submission": {"version": "2.4.0", "notes": "", "env": "staging", "owner": "…", "notify": true},
"cancelled": false
}
ডায়ালগটি বন্ধ করতে খালি বডি দিয়ে উত্তর দিন, অথবা এটি খোলা রাখুন এবং কী ভুল হয়েছে তা দেখান:
{"errors": {"version": "This version already exists."}}
{"error": "…"} পুরো ফর্মের জন্য একটি বার্তা দেখায়। notify_on_cancel থাকলে, ডায়ালগটি বন্ধ করলে "cancelled": true পাঠানো হয়। অ্যাপসে ডায়ালগ একইভাবে কাজ করে: প্লাগইন API-র OpenInteractiveDialog একই অনুরোধ গ্রহণ করে।