ওয়েবহুকসমূহ

একটি ইনকামিং ওয়েবহুক অন্য কোনো সিস্টেমকে একটি গোপন URL-এ JSON পাঠিয়ে চ্যানেলে পোস্ট করতে দেয়। একটি আউটগোয়িং ওয়েবহুক ঠিক বিপরীত কাজ করে: এটি আপনার URL-এ মেসেজ পাঠায়, সেগুলো হয় একটি ট্রিগার শব্দ দিয়ে শুরু হওয়া মেসেজ, অথবা মেসেজ মেনু থেকে ব্যবহারকারীরা যেগুলো বেছে নেন, এবং আপনি যা উত্তর দেন তা পোস্ট করে।

ওয়েবহুক পরিচালনা করার স্থান

কমিউনিটি মেনু খুলুন, তারপর টিম সেটিংস-এ যান, এবং তার ট্যাবগুলোর শেষে ইন্টিগ্রেশনসমূহ-এ ক্লিক করুন। বর্তমান কমিউনিটির ইন্টিগ্রেশন পৃষ্ঠাগুলোতে ইনকামিং ওয়েবহুকসমূহ এবং আউটগোয়িং ওয়েবহুকসমূহ তালিকাভুক্ত থাকে। প্রতিটি ওয়েবহুক একটি নির্দিষ্ট কমিউনিটির অন্তর্গত।

ডিফল্টভাবে, কমিউনিটি অ্যাডমিন এবং সিস্টেম অ্যাডমিনরা ওয়েবহুক তৈরি করতে পারেন। সিস্টেম কনসোলের পারমিশন সেটিংসে সিস্টেম অ্যাডমিন অন্য ভূমিকাকে এই অনুমতি দিতে পারেন। সিস্টেম অ্যাডমিন সিস্টেম কনসোল › ইন্টিগ্রেশনসমূহ › ইন্টিগ্রেশন ম্যানেজমেন্ট-এ প্রতিটি ধরনের ওয়েবহুক বন্ধও করতে পারেন: ইনকামিং ওয়েবহুক সক্রিয় করুন এবং আউটগোয়িং ওয়েবহুক সক্রিয় করুন উভয়ই ডিফল্টভাবে চালু থাকে।

A channel with messages from a CI bot and from GitHub, shown as cards with fields, pipeline stages and a button
কার্ড হিসেবে আঁকা ইন্টিগ্রেশন ম্যাসেজ: ফিল্ড, পাইপলাইন স্টেজ এবং একটি অ্যাকশন বাটন।

একটি ইনকামিং ওয়েবহুক তৈরি করুন

  1. ইন্টিগ্রেশনসমূহ-এ গিয়ে ইনকামিং ওয়েবহুকসমূহ নির্বাচন করুন, তারপর ইনকামিং ওয়েবহুক যোগ করুন ক্লিক করুন।
  2. একটি শিরোনাম এবং একটি বর্ণনা পূরণ করুন: এগুলো শুধুমাত্র ইন্টিগ্রেশন পেজে দেখা যায়।
  3. ডিফল্টভাবে ম্যাসেজগুলো যে চ্যানেলে যাবে তা Channel হিসেবে নির্বাচন করুন। যদি এটি একটি প্রাইভেট চ্যানেল হয়, তবে আপনাকে তার সদস্য হতে হবে।
  4. যদি প্রেরকদের অন্য কোথাও পোস্ট করার অনুমতি না থাকে, তবে এই চ্যানেলে লক করুন চেক করুন।
  5. ঐচ্ছিকভাবে, এর ম্যাসেজগুলির জন্য একটি ইউজারনেম এবং একটি প্রোফাইল ছবি URL সেট করুন (দেখুন নাম এবং আইকন)।
  6. সংরক্ষণ করুন নির্বাচন করুন। প্রদর্শিত URL টি কপি করুন: https://chat.example.com/hooks/<key>।
URL টিই একমাত্র গোপনীয়তা: যেই ব্যক্তি এটি পাবে, সে চ্যানেলে পোস্ট করতে পারবে। এটি পাবলিক রিপোজিটরিতে রাখবেন না, এবং যদি এটি লিক হয় তবে ওয়েবহুকটি মুছে ফেলুন।

API ব্যবহার করে: POST /api/v4/hooks/incoming পাঠান {"channel_id", "display_name", "description", "username", "icon_url", "channel_locked"} সহ; রেসপন্সের id হলো কী। কমান্ড লাইন থেকে: amctl webhook create-incoming --channel <channel id> --user <user> --display-name "CI"।

একটি ইনকামিং ওয়েবহুকে ম্যাসেজ পাঠান

curl -X POST https://chat.example.com/hooks/xgh5ycrx1jf7mbs9w8z4c8e7ho \
  -H 'Content-Type: application/json' \
  -d '{"text": "Deploy of **api 2.4.0** finished :white_check_mark:"}'

সার্ভার 200 সহ ok বডি দিয়ে উত্তর দেয়। এটি application/x-www-form-urlencodedও গ্রহণ করে, যেখানে JSON একটি payload ফিল্ডে থাকে, যেমন Slack-এর ওয়েবহুক করে, তাই Slack-এর জন্য তৈরি টুলগুলো সাধারণত কোনো পরিবর্তন ছাড়াই কাজ করে।

ফিল্ডঅর্থ
textMarkdown-এ লেখা ম্যাসেজ। attachments না থাকলে এটি আবশ্যক। সার্ভারের ম্যাসেজ সীমা ছাড়িয়ে গেলে টেক্সটটি কয়েকটি ম্যাসেজে ভাগ হয়ে যায়।
channelওয়েবহুকের কমিউনিটির অন্য একটি চ্যানেল, নাম অনুযায়ী (ops-alerts অথবা #ops-alerts), অথবা ওয়েবহুকের মালিকের কাছ থেকে একটি ডাইরেক্ট মেসেজের জন্য @username। ওয়েবহুকটি যখন তার নিজস্ব চ্যানেলে লক করা থাকে, তখন এটি প্রত্যাখ্যান করা হয়। পুরনো নাম town-square এখনও কমিউনিটির ডিফল্ট চ্যানেলে পৌঁছায়, যার এখনকার নাম general।
username, icon_url, icon_emojiসার্ভার ওভাররাইড অনুমতি দিলে প্রদর্শনের জন্য নাম এবং ছবি।
attachmentsম্যাসেজের আটাচমেন্ট, যা কার্ড হিসেবে আঁকা হয় (নিচে)।
propsমেসেজের সাথে সংরক্ষিত অতিরিক্ত বৈশিষ্ট্যসমূহ, যেগুলো অ্যাপগুলো পড়ে নেয়। একটি ফোরাম চ্যানেলে পোস্ট করতে props.am_thread_title প্রয়োজন (১ থেকে ১০০ অক্ষর): এটি ছাড়া হুকটি প্রত্যাখ্যান করা হয় (দেখুন Forums take only topics)।
typeকাস্টম পোস্ট টাইপ, যেমন custom_poll, যা একটি অ্যাপ আঁকে। system_ দিয়ে শুরু হওয়া টাইপগুলো প্রত্যাখ্যান করা হয়।
root_idএকটি থ্রেডের প্রথম ম্যাসেজের আইডি, সেই থ্রেডে উত্তর দেওয়ার জন্য।
priorityম্যাসেজের অগ্রাধিকার, যেমন {"priority": "urgent"}।
silenttrue হলে পুশ নোটিফিকেশন ছাড়াই ম্যাসেজ পাঠানো হয়।

একটি ওয়েবহুক দ্বারা পোস্ট করা প্রতিটি মেসেজের নামের পাশে একটি বট ট্যাগ থাকে, এমনকি যখন এটি তার স্রষ্টার নামের অধীনে দেখা যায়, যাতে মানুষ এটি আসল ব্যক্তির মেসেজ থেকে আলাদা করতে পারে। ওয়েবহুক মেসেজ কখনও আউটগোয়িং ওয়েবহুক ট্রিগার করে না।

নাম এবং আইকন

একটি ওয়েবহুক তৈরিকারী ব্যক্তির হিসেবে পোস্ট করে, যদি না সার্ভার ওভাররাইড অনুমতি দেয়। সিস্টেম কনসোল › ইন্টিগ্রেশনসমূহ › ইন্টিগ্রেশন ম্যানেজমেন্ট-এর দুটি সেটিং, উভয়ই ডিফল্টভাবে বন্ধ থাকে, যা এই পরিবর্তন করে:

  • ইন্টিগ্রেশন ব্যবহার করে ইউজারনেম পরিবর্তন করার অনুমতি দিন (ServiceSettings.EnablePostUsernameOverride): ওয়েবহুকের ইউজারনেম বা রিকোয়েস্টের username প্রদর্শিত হয়; যদি কোনোটিই না থাকে, তবে নামটি webhook হবে।
  • ইন্টিগ্রেশনকে প্রোফাইল ছবির আইকন ওভাররাইড করতে অনুমতি দিন (ServiceSettings.EnablePostIconOverride): ওয়েবহুকের প্রোফাইল ছবি, বা রিকোয়েস্টের icon_url বা icon_emoji প্রদর্শিত হয়।

রিকোয়েস্টের মান ওয়েবহুকে সংরক্ষিত মানের চেয়ে অগ্রাধিকার পায়।

আটাচমেন্ট

আটাচমেন্ট টেক্সটের নিচে স্ট্রাকচার্ড কনটেন্ট যোগ করে। এগুলো Slack-এর ম্যাসেজ আটাচমেন্ট ফরম্যাট অনুসরণ করে:

{
  "text": "Build failed on `main`",
  "attachments": [{
    "fallback": "main #1902 failed",
    "color": "#d24b4e",
    "author_name": "GitHub Actions",
    "author_icon": "https://chat.example.com/static/ci.png",
    "title": "main #1902 failed",
    "title_link": "https://ci.example.com/runs/1902",
    "text": "Commit `0f4d8e2` by Jonas Weber",
    "fields": [
      {"title": "Branch", "value": "zephyr-3.7", "short": true},
      {"title": "Duration", "value": "3m 40s", "short": true}
    ],
    "footer": "Lumen CI",
    "ts": 1760000000
  }]
}
ফিল্ডঅর্থ
fallbackকার্ড প্রদর্শন করা যায় না এমন জায়গার জন্য প্লেইন টেক্সট, যেমন নোটিফিকেশন।
colorরঙের বার: একটি হেক্স রঙ, অথবা good, warning, danger।
pretextকার্ডের উপরের টেক্সট।
author_name, author_link, author_iconএকটি ছোট হেডার লাইন।
title, title_linkকার্ডের শিরোনাম, ইচ্ছা হলে একটি লিংক।
textকার্ডের বডি, Markdown-এ।
fields{"title", "value", "short"} এর একটি তালিকা; short ফিল্ডগুলো পাশাপাশি বসে।
image_url, thumb_urlনিচে একটি বড় ছবি, অথবা পাশে একটি ছোট ছবি।
footer, footer_icon, tsএকটি ফুটার লাইন এবং সময় (Unix সেকেন্ডে)।
actionsবাটন এবং মেনু: দেখুন Interactive messages।

কার্ড: স্টেজ এবং চার্ট

Antimatter-এর ডিফল্ট ইন্টারফেস দ্বারা আটাচমেন্টে দুটি ফিল্ড যোগ করা হয়:

  • stages: একটি পাইপলাইনের ধাপগুলো পিল হিসেবে, সর্বোচ্চ ২০টি। প্রতিটি ধাপ {"name", "status"} আকারে থাকে, যেখানে স্ট্যাটাস হতে পারে passed, failed, running, pending, skipped বা canceled।
  • chart: সাম্প্রতিক মানগুলোর একটি ছোট লাইন চার্ট, {"values": [2 to 200 numbers], "threshold": number, "label": "…"}। থ্রেশহোল্ডটি একটি ড্যাশড লাইন হিসেবে আঁকা হয়, যা একটি অ্যালার্টের সীমা নির্দেশ করে।
{
  "attachments": [{
    "color": "danger",
    "title": "main #1902 failed",
    "stages": [
      {"name": "build", "status": "failed"},
      {"name": "unit", "status": "skipped"},
      {"name": "publish", "status": "skipped"}
    ]
  }, {
    "color": "warning",
    "title": "API latency above 400 ms",
    "chart": {"values": [210, 230, 260, 390, 450, 470], "threshold": 400, "label": "p95 latency, ms"}
  }]
}

ক্লাসিক ইন্টারফেস এবং অন্যান্য ক্লায়েন্ট এই দুটি ফিল্ড উপেক্ষা করে, তাই text বা fields-এও মূল তথ্যগুলো রাখুন।

একটি আউটগোয়িং ওয়েবহুক তৈরি করুন

একটি আউটগোয়িং ওয়েবহুক একটি কমিউনিটির পাবলিক চ্যানেলসমূহ পর্যবেক্ষণ করে। এটি আপনার URL-এ একটি মেসেজ পাঠায়, যখন মেসেজের প্রথম শব্দটি তার ট্রিগার শব্দগুলোর একটির সাথে মেলে, অথবা যখন কেউ মেসেজের মেনু থেকে এটি বেছে নেন (একটি মেসেজ অ্যাকশন)।

  1. ইন্টিগ্রেশনসমূহ-এ গিয়ে আউটগোয়িং ওয়েবহুকসমূহ নির্বাচন করুন, তারপর আউটগোয়িং ওয়েবহুক যোগ করুন ক্লিক করুন।
  2. শিরোনাম এবং বর্ণনা পূরণ করুন।
  3. রিকোয়েস্টের কনটেন্ট টাইপ নির্বাচন করুন: application/x-www-form-urlencoded বা application/json।
  4. একটি চ্যানেল নির্বাচন করুন, ট্রিগার ওয়াডস (প্রতি লাইনে একটি) লিখুন, বা উভয়ই করুন। একটি চ্যানেল এবং কোনো ট্রিগার ওয়াড না থাকলে, সেই চ্যানেলের প্রতিটি ম্যাসেজ পাঠানো হয়। উভয় থাকলে, ম্যাসেজটিকে উভয়ের সাথে মিলতে হবে।
  5. কখন ট্রিগার হবে এর অধীনে, প্রথম শব্দটি একটি ট্রিগার শব্দের সাথে সম্পূর্ণভাবে মিলে যায়, প্রথম শব্দটি একটি ট্রিগার শব্দ দিয়ে শুরু হয়, অথবা ম্যাসেজ মেনু থেকে নির্বাচন করুন। ম্যাসেজ মেনু থেকে নির্বাচন করলে, ট্রিগার শব্দগুলো অদৃশ্য হয়ে যায়, চ্যানেলটি ঐচ্ছিক হয় (কোনো চ্যানেল নির্বাচন না করলে, এই অ্যাকশনটি কমিউনিটির প্রতিটি পাবলিক চ্যানেলে উপলব্ধ থাকে), এবং শিরোনামটি আবশ্যক: এটি মেনুতে অ্যাকশনটির নাম হিসেবে দেখা যায়।
  6. কলব্যাক URL (প্রতি লাইনে একটি) লিখুন। প্রতিটি URL-এর কাছে সব মিলে যাওয়া ম্যাসেজ পৌঁছে যাবে।
  7. ঐচ্ছিকভাবে উত্তরগুলোতে ব্যবহৃত ইউজারনেম এবং প্রোফাইল ছবি নির্ধারণ করুন। ম্যাসেজ মেনু থেকে আসা অ্যাকশনের ক্ষেত্রে, আইকন ফিল্ডটি প্রোফাইল ছবিকে প্রতিস্থাপন করে: একটি .png বা .jpg ছবির URL অথবা, Antimatter-এর ডিফল্ট ইন্টারফেসে, একটি আপলোড করা ছবি। মেনুতে এটি ধূসর রঙে দেখা যায়; কোনো আইকন না থাকলে, অ্যাকশনটি একটি নিরপেক্ষ আইকন পায়।
  8. সংরক্ষণ করুন নির্বাচন করুন এবং প্রদর্শিত টোকেনটি কপি করুন। আপনার সার্ভিস থেকে আসা অনুরোধগুলো আপনার সার্ভার থেকে আসছে কিনা তা যাচাই করতে এই টোকেনটি ব্যবহার করে।

API ব্যবহার করে: POST /api/v4/hooks/outgoing এবং {"team_id", "channel_id", "trigger_words", "trigger_when", "callback_urls", "content_type", "display_name"} (trigger_when: সম্পূর্ণ মিলের জন্য 0, "দিয়ে শুরু হয়" এর জন্য 1, এবং "ম্যাসেজ মেনু থেকে" এর জন্য 2)। trigger_when 2 বিশিষ্ট একটি ওয়েবহুকের কোনো ট্রিগার শব্দ লাগে না এবং একটি display_name প্রয়োজন হয়। এর আইকন আপলোড করুন POST /api/v4/hooks/outgoing/{hook_id}/icon ব্যবহার করে (multipart, ফিল্ড image: PNG, JPEG বা GIF, 128 px PNG হিসেবে সংরক্ষিত); এরপর এর icon_url GET /api/v4/hooks/outgoing/{hook_id}/icon নির্দেশ করে।

The outgoing webhook form with Trigger When set to From the message menu, and the Icon field below it
যখন ম্যাসেজ মেনু থেকে হিসেবে নির্বাচন করা থাকে, তখন আইকন ফিল্ডের মাধ্যমে ট্রিগার করুন।
আপনার সার্ভিসটি একটি প্রাইভেট নেটওয়ার্কে থাকলে, সিস্টেম অ্যাডমিনকে অপপ্রমাণিত অভ্যন্তরীণ সংযোগ অনুমোদন করুন (ServiceSettings.AllowedUntrustedInternalConnections)-এ এর ঠিকানা অনুমোদন করতে হবে। অন্যথায় সার্ভার প্রাইভেট ঠিকানাগুলিকে কল করে না।

আউটগোয়িং রিকোয়েস্ট

Antimatter কন্টেন্ট টাইপ অনুযায়ী JSON বা ফর্ম-এনকোডেড হিসেবে এই ফিল্ডসমূহ সহ একটি POST পাঠায়:

{
  "token": "6kd1ofo5ojr5zgu5ipfipybgnc",
  "team_id": "…",
  "team_domain": "lumen-labs",
  "channel_id": "…",
  "channel_name": "ops-alerts",
  "timestamp": 1760010000000,
  "user_id": "…",
  "user_name": "priya",
  "post_id": "…",
  "text": "deploy api 2.4.0",
  "trigger_word": "deploy",
  "file_ids": ""
}

কোনো কাজের আগে token এবং ওয়েবহুক-এর টোকেনের তুলনা করুন। ফর্ম-এনকোডেড ভার্সনে timestamp মিলিসেকেন্ডের বদলে সেকেন্ডে থাকে। সার্ভার আপনার উত্তরের জন্য ইন্টিগ্রেশন অনুরোধ টাইমআউট অনুমোদিত সময় (ডিফল্ট ৩০ সেকেন্ড, ServiceSettings.OutgoingIntegrationRequestsTimeout) পর্যন্ত অপেক্ষা করে।

আউটগোয়িং ওয়েবহুকের উত্তর দিন

উত্তর পাঠাতে JSON দিয়ে উত্তর দিন। কিছুই না পাঠাতে খালি বডি দিয়ে উত্তর দিন।

{
  "text": "Deploying **api 2.4.0** to staging…",
  "response_type": "comment",
  "username": "deploy-bot",
  "icon_url": "https://chat.example.com/static/deploy.png"
}
  • text এবং attachments: উত্তর। দুটোর কোনোটিই না থাকলে কিছুই পোস্ট হবে না।
  • response_type: comment ট্রিগারিং ম্যাসেজের থ্রিডে উত্তর পোস্ট করে; অন্যথায় এটি চ্যানেলে যায়।
  • username, icon_url: সার্ভার ওভাররাইড অনুমোদিত হলে দেখানো হয়; অন্যথায় ওয়েবহুকের নিজস্ব মান ব্যবহার করা হয়।
  • props, type, priority: ইনকামিং ওয়েবহুকের মতো।

উত্তরটি ওয়েবহুকের নির্মাতার নামে পোস্ট হয়, ওভাররাইড করা নাম থাকলে সেই নামে। দ্রুত উত্তরের চেয়ে দীর্ঘ কোনো বিষয়ের জন্য, সাথে সাথে উত্তর দিন এবং পরে ইনকামিং ওয়েবহুক বা API ব্যবহার করে পোস্ট করুন।

ম্যাসেজ অ্যাকশন

একটি মেসেজ অ্যাকশন হলো একটি আউটগোয়িং ওয়েবহুক যার কখন ট্রিগার হবে সেট করা হয়েছে ম্যাসেজ মেনু থেকে হিসেবে। এটি কখনো পোস্ট করা মেসেজে ট্রিগার হয় না। পরিবর্তে, মানুষ এটি একটি মেসেজের মেনুতে দেখতে পায়: মেসেজের অপশন (⋯) › আরও অপশন, ইন্টিগ্রেশনসমূহ শিরোনামের অধীনে, এর আইকনসহ। ক্লাসিক ইন্টারফেসে মেসেজ অ্যাকশনগুলো দেখা যায় না। এটি নির্বাচন করলে সেই নির্দিষ্ট মেসেজটি কলব্যাক URL-এ পাঠানো হয়, এবং একটি সংক্ষিপ্ত বিজ্ঞপ্তিতে বলা হয় পাঠানো হয়েছে অ্যাকশনের নামে, অথবা আপনার ephemeral_text দেখানো হয়।

  • কোথায় দেখা যায়: ওয়েবহুকের চ্যানেলে, অথবা, কোনো চ্যানেল না থাকলে, এর কমিউনিটির প্রতিটি পাবলিক চ্যানেলে। শুধুমাত্র পাবলিক চ্যানেলে মেসেজ অ্যাকশন থাকে।
  • অতিথিরা শুধুমাত্র সেই অ্যাকশনগুলো পান যা তারা যে চ্যানেলে আছেন সেই চ্যানেলের সাথে যুক্ত, কমিউনিটি-ব্যাপী অ্যাকশনগুলো নয়।
  • আর্কাইভ করা এবং শুধুমাত্র পড়ার জন্য থাকা চ্যানেলসমূহ: মেসেজটি এখনও পাঠানো যেতে পারে। একটি চ্যানেল আর্কাইভ করলে, সেই চ্যানেলের সাথে যুক্ত ওয়েবহুকগুলো মুছে ফেলা হয়, তাই একটি আর্কাইভ করা চ্যানেল শুধুমাত্র কমিউনিটি-ব্যাপী অ্যাকশনগুলো ধরে রাখে। যে উত্তরটি ব্যক্তি সেখানে পোস্ট করতে পারেননি, তা শুধুমাত্র তাকেই দেখানো হয়।
  • রেট লিমিট: প্রতিটি ব্যক্তি ৫টি বার্স্টের পরে প্রতি মিনিটে ১০টি মেসেজ অ্যাকশন চালাতে পারেন। এর বেশি হলে, সার্ভার 429 উত্তর দেয়।
  • প্রাইভেট নেটওয়ার্ক: অন্যান্য আউটগোয়িং ওয়েবহুকের মতোই, অভ্যন্তরীণ ঠিকানাগুলো অপ্রমাণিত অভ্যন্তরীণ সংযোগ অনুমোদন করুন সেটিংসে অনুমোদিত হতে হবে।

রিকোয়েস্ট

ওয়েবহুকের কনটেন্ট টাইপ অনুযায়ী পেলোড JSON বা ফর্ম-এনকোডেড হিসেবে পাঠানো হয়:

{
  "token": "6kd1ofo5ojr5zgu5ipfipybgnc",
  "trigger": "message_action",
  "team_id": "…",
  "team_domain": "lumen-labs",
  "channel_id": "…",
  "channel_name": "ops-alerts",
  "timestamp": 1760010000000,
  "user_id": "…",
  "user_name": "priya",
  "post_id": "…",
  "post_root_id": "",
  "post_create_at": 1760009000000,
  "post_user_id": "…",
  "post_user_name": "jonas",
  "permalink": "https://chat.example.com/lumen-labs/pl/…",
  "text": "The staging database is full again",
  "files": [{"id": "…", "name": "df.txt", "link": "https://chat.example.com/api/v4/files/…"}],
  "priority": "",
  "requested_ack": false,
  "burn_on_read": false
}
  • user_id এবং user_name হলো সেই ব্যক্তি যিনি অ্যাকশনটি বেছে নিয়েছেন; post_user_id এবং post_user_name হলো মেসেজের লেখক।
  • শুধুমাত্র সেই মেসেজটি পাঠানো হয়, থ্রেডের বাকি অংশ নয়।
  • files তালিকাটি শুধুমাত্র তখনই মেসেজের ফাইলগুলো দেখায় যখন অ্যাকশনটি বেছে নেওয়া ব্যক্তি সেগুলো ডাউনলোড করতে পারেন। কোনো link ডাউনলোড করতে একটি সেশন বা টোকেন প্রয়োজন, API-এর যেকোনো ফাইলের মতোই।
  • বার্ন-অন-রিড মেসেজটি তার টেক্সট এবং ফাইল ছাড়াই পাঠানো হয়, যেখানে burn_on_read এর মান true সেট করা থাকে।
  • ফর্ম-এনকোডেড মোডে, ফাইলগুলো একই ক্রমে পুনরাবৃত্ত file_id, file_name এবং file_link ফিল্ড হিসেবে আসে।

উত্তর

যেকোনো আউটগোয়িং ওয়েবহুকের মতো উত্তর দিন (দেখুন আউটগোয়িং ওয়েবহুকের উত্তর): text বা attachments চ্যানেলে একটি উত্তর পোস্ট করে, এবং "response_type": "comment" মেসেজের থ্রেডে তা পোস্ট করে। আপনি ephemeral_text (৩০০ অক্ষরে কাটা) দিয়েও উত্তর দিতে পারেন: এটি শুধুমাত্র অ্যাকশনটি বেছে নেওয়া ব্যক্তিকে নোটিশে দেখানো হয়। খালি বডি কিছুই পোস্ট করে না।

{"ephemeral_text": "Ticket OPS-412 created"}

API ব্যবহার করে

  • GET /api/v4/channels/{channel_id}/message_actions: একটি চ্যানেলে আপনি যে অ্যাকশনগুলো বেছে নিতে পারেন, সেগুলো id, display_name, description এবং icon_url সহ। টোকেন বা কলব্যাক URL ফেরত দেওয়া হয় না।
  • POST /api/v4/posts/{post_id}/message_actions/{hook_id}: আপনি যে মেসেজটি পড়তে পারেন, সেই মেসেজে একটি অ্যাকশন চালায়। এটি {"ephemeral_text"} উত্তর দেয়।

যখন একটি ওয়েবহুক কাজ করে না

  • হুক URL থেকে 501: সার্ভারে ইনকামিং ওয়েবহুক বন্ধ আছে।
  • 400 "Failed to decode the payload…": JSON অবৈধ, অথবা ফর্ম ফিল্ডের নাম payload নয়। "No text specified." মানে হলো রিকোয়েস্টে text বা attachments এর কোনোটিই নেই।
  • 403: ওয়েবহুকটি অন্য চ্যানেলে লক করা আছে, অথবা এর মালিক আর চ্যানেলটি পড়তে পারেন না।
  • একটি আউটগোয়িং ওয়েবহুক কখনো ফায়ার করে না: চ্যানেলটি প্রাইভেট, ট্রিগারটি প্রথম শব্দ নয়, মেসেজটি একটি ওয়েবহুক থেকে এসেছে, অথবা ওয়েবহুকটি ম্যাসেজ মেনু থেকে ট্রিগার হওয়ার জন্য সেট করা আছে।
  • একটি মেসেজ অ্যাকশন মেনুতে নেই: চ্যানেলটি প্রাইভেট, অ্যাকশনটি অন্য চ্যানেলের সাথে বাঁধাই করা, ব্যক্তিটি অতিথি এবং অ্যাকশনটির কোনো চ্যানেল নেই, অথবা আউটগোয়িং ওয়েবহুকগুলো বন্ধ করা আছে।
  • বার্তা অ্যাকশন চালানোর সময় 404: অ্যাকশনটি বিদ্যমান নয়, অথবা এটি সেই ব্যক্তির জন্য ওই বার্তার চ্যানেলটি কভার করে না। 429: ব্যক্তিটি এক মিনিটে ১০টির বেশি অ্যাকশন চালিয়েছেন। 502: কলব্যাক URL-গুলোর কোনোটিতেই পৌঁছানো যায়নি (লগে কারণটি উল্লেখ আছে)।
  • ফোরামে একটি পোস্ট প্রত্যাখ্যান করা হয়েছে: হুকের বার্তার একটি শিরোনাম প্রয়োজন (props.am_thread_title); ত্রুটিটি একটি সাধারণ ব্যর্থতার পরিবর্তে কারণটি উল্লেখ করে, যেমন app.post.forum.title_required.app_error (দেখুন চ্যানেল টাইপস)।
  • লগ: Webhook Debugging সক্রিয় করুন (LogSettings.EnableWebhookDebugging) চালু থাকলে এবং লগ লেভেল DEBUG-এ থাকলে, সার্ভার ব্যর্থ ইনকামিং অনুরোধগুলোর পেইলোড লগ করে। ব্যর্থ আউটগোয়িং কলগুলো Outgoing Webhook POST failed হিসেবে লগ করা হয়।