ওয়েবহুক

WhatsApp ওয়েবহুক: সাইন করা ইভেন্ট ও ইনকামিং ট্রিগার

নতুন WhatsApp মেসেজ, কন্টাক্ট আর ক্যাম্পেইনের সাইন করা ইভেন্ট আপনার URL-এ নিন, যেকোনো সিস্টেমের ওয়েবহুক দিয়ে অটোমেশন চালান, আর ফ্লো থেকে অর্ডারের ডেটা পাঠান।

WhatsApp ওয়েবহুক: সাইন করা ইভেন্ট ও ইনকামিং ট্রিগার

আপনার অর্ডার সিস্টেম জানে কখন অর্ডার এলো। আপনার CRM-এর জানা দরকার কখন কাস্টমার WhatsApp-এ লিখলেন। দুটো যুক্ত না থাকলে কাউকে এক স্ক্রিন দেখে আরেক স্ক্রিনে টাইপ করতে হয়, আর কিছু না কিছু বাদ পড়ে। প্রতি মিনিটে API-তে খোঁজ নেওয়া ধীর, আর রিকোয়েস্টও নষ্ট হয়।

ওয়েবহুক হলো একটা HTTP রিকোয়েস্ট, যা কোনো ঘটনা ঘটার সাথে সাথে এক সিস্টেম আরেক সিস্টেমকে পাঠায়। SaleMag দুই দিকেই ওয়েবহুক ব্যবহার করে: নতুন মেসেজ, কন্টাক্ট আর শেষ হওয়া ক্যাম্পেইনের খবর আপনার সিস্টেমকে দেয়, আর আপনার সিস্টেম SaleMag-এর অটোমেশন চালু করতে পারে।

SaleMag-এ কত ধরনের ওয়েবহুক আছে?

SaleMag-এ তিন ধরনের ওয়েবহুক আছে, সাথে কিছু প্ল্যাটফর্ম ওয়েবহুক, যা SaleMag নিজেই সেট করে:

ধরন দিক কী কাজে কোথায় সেট করবেন
আউটগোয়িং ইভেন্ট ওয়েবহুক SaleMag থেকে আপনার URL-এ নতুন মেসেজ, নতুন কন্টাক্ট, শেষ হওয়া ক্যাম্পেইন Webhooks পেজ, বা /api/v1/webhooks
ইনকামিং ওয়েবহুক ট্রিগার আপনার সিস্টেম থেকে SaleMag-এ যেকোনো সিস্টেম থেকে অটোমেশন চালু অটোমেশনের Webhook Received ট্রিগার
Call Webhook ধাপ ফ্লো থেকে যেকোনো URL-এ অটোমেশনের মাঝে অর্ডার বা কন্টাক্টের ডেটা পাঠানো অটোমেশন বিল্ডারের একটা ধাপ
প্ল্যাটফর্ম ওয়েবহুক Meta, স্টোর আর Telegram থেকে SaleMag-এ চ্যাট, অর্ডার আর কার্ট গ্রহণ চ্যানেল বা স্টোর যুক্ত করলে নিজে থেকে রেজিস্টার হয়

SaleMag-এর আউটগোয়িং ওয়েবহুক কোন কোন ইভেন্ট পাঠায়?

SaleMag-এর আউটগোয়িং ওয়েবহুক তিনটি ইভেন্ট পাঠায়। প্রতিটি এন্ডপয়েন্টে ইভেন্ট বাছাই করা যায়; কোনো ইভেন্ট না বাছলে সবগুলোই আসে।

ইভেন্ট কখন যায় পেলোডের মূল অবজেক্ট
message.received WhatsApp, Messenger, Instagram, Telegram বা WeChat-এ কাস্টমারের মেসেজ এলে message: id, conversation_id, direction, channel, body, sent_at
contact.created অ্যাপে নতুন কন্টাক্ট যোগ হলে, বা কাস্টমারের প্রথম মেসেজে contact: id, phone_e164, email, first_name, last_name
campaign.completed ব্রডকাস্ট শেষ হলে, স্ট্যাটাস completed বা failed campaign: id, name, channel, status, totals
test.ping শুধু Send test চাপলে message: একটা টেস্ট লেখা

CSV ইমপোর্ট, স্টোর সিঙ্ক বা POST /api/v1/contacts দিয়ে আসা কন্টাক্টে contact.created যায় না।

একটা message.received ডেলিভারি দেখতে এমন:

{
  "event": "message.received",
  "message": {
    "id": 9812,
    "conversation_id": 311,
    "direction": "in",
    "channel": "whatsapp",
    "body": "Ei dress ta koto?",
    "sent_at": "2026-10-24T09:15:02+00:00"
  },
  "timestamp": "2026-10-24T09:15:03+00:00"
}

campaign.completed-এ totals-এর ভেতরে থাকে total, queued, sent, delivered, read, failed, clicked আর unsubscribed-এর সংখ্যা।

প্রতিটি ডেলিভারিতে কোন কোন হেডার থাকে?

প্রতিটি ডেলিভারি JSON বডিসহ একটা HTTP POST, সাথে এই হেডারগুলো:

হেডার মান
Content-Type application/json
X-Webhook-Event ইভেন্টের নাম, যেমন message.received
X-Webhook-Signature t={unix seconds},v1={HMAC-SHA256 hex}
User-Agent শেষে থাকে Webhooks/1.0

ওয়েবহুকের সিগনেচার কীভাবে যাচাই করব?

আপনার সাইনিং সিক্রেট দিয়ে {t}.{raw body}-এর HMAC-SHA256 hex হিসেবে বের করুন, তারপর v1-এর সাথে মেলান। সিক্রেট শুরু হয় whsec_ দিয়ে; প্রিফিক্সসহ পুরো স্ট্রিংটাই ব্যবহার করুন। সবসময় যেমন এসেছে তেমন raw body হ্যাশ করুন, নতুন করে এনকোড করা কপি নয়।

import crypto from "node:crypto"

// rawBody: the request body as a string, exactly as received
export function verifySaleMagWebhook(rawBody, signatureHeader, secret, toleranceSec = 300) {
  const parts = Object.fromEntries(signatureHeader.split(",").map((p) => p.split("=", 2)))
  if (!parts.t || !parts.v1) return false
  if (Math.abs(Date.now() / 1000 - Number(parts.t)) > toleranceSec) return false

  const expected = crypto
    .createHmac("sha256", secret)
    .update(`${parts.t}.${rawBody}`)
    .digest("hex")

  const a = Buffer.from(expected)
  const b = Buffer.from(parts.v1)
  return a.length === b.length && crypto.timingSafeEqual(a, b)
}

একই যাচাই PHP-তে:

$raw = file_get_contents('php://input');
parse_str(str_replace(',', '&', $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'] ?? ''), $sig);
$expected = hash_hmac('sha256', ($sig['t'] ?? '') . '.' . $raw, $secret);
$valid = isset($sig['v1']) && hash_equals($expected, $sig['v1']);

প্রতিটি চেষ্টা, রিট্রাইসহ, নতুন টাইমস্ট্যাম্প দিয়ে আবার সাইন হয়। তাই পুরোনো টাইমস্ট্যাম্প নিশ্চিন্তে বাতিল করতে পারেন।

আমার এন্ডপয়েন্ট বন্ধ থাকলে কী হয়?

আপনার এন্ডপয়েন্ট ১০ সেকেন্ডের মধ্যে যেকোনো 2xx স্ট্যাটাস দিলে SaleMag ডেলিভারি সফল ধরে। বাকি সব ক্ষেত্রে এই সময়সূচিতে আবার চেষ্টা হয়:

চেষ্টা কখন
১ সাথে সাথে
২ ১ নম্বর ব্যর্থ হওয়ার ১ মিনিট পর
৩ ২ নম্বর ব্যর্থ হওয়ার ৫ মিনিট পর
৪ ৩ নম্বর ব্যর্থ হওয়ার ১ ঘণ্টা পর
৫ ৪ নম্বর ব্যর্থ হওয়ার ১ দিন পর, এরপর আর নয়

প্রতিটি চেষ্টা ডেলিভারি লগে সেভ হয়: ইভেন্ট, HTTP স্ট্যাটাস, কততম চেষ্টা আর সময়। Webhooks পেজে প্রতিটি এন্ডপয়েন্টের শেষ পাঁচটা দেখা যায়, আর View deliveries-এ পুরো তালিকা। প্রাইভেট বা লোকাল নেটওয়ার্কের ঠিকানায় যাওয়া URL ব্লক হয়, আবার চেষ্টাও হয় না।

ধীর সফল রেসপন্সের পরেও রিট্রাই আসতে পারে। তাই আপনার রিসিভার এমনভাবে বানান যাতে দুবার চললেও সমস্যা না হয়: অবজেক্টের id রেখে দিন, আগে সামলানো হলে বাদ দিন।

ওয়েবহুক এন্ডপয়েন্ট কীভাবে সামলাব?

অ্যাপের Webhooks পেজ থেকে, অথবা কোড দিয়ে:

  • তৈরি, এডিট, বন্ধ বা ডিলিট করুন। এই পেজ খুলতে টিম মেম্বারের ডেভেলপার পারমিশন লাগে।
  • সিক্রেট রোটেট করুন। পুরোনো সিক্রেট সাথে সাথে বন্ধ হয়ে যায়, তাই রিসিভার তখনই আপডেট করুন।
  • Send test। ওই এন্ডপয়েন্টে একটা test.ping পাঠায়।
  • API থেকে। webhooks:write স্কোপের টোকেন দিয়ে /api/v1/webhooks-এ GET, POST আর DELETE। তৈরির রেসপন্সে সিক্রেট একবারই আসে। দেখুন REST API।

ইনকামিং ওয়েবহুক কীভাবে অটোমেশন চালু করে?

অটোমেশনে Webhook Received ট্রিগার দিলে SaleMag এমন একটা URL দেখায়:

https://YOUR-SALEMAG-DOMAIN/api/webhooks/automation/{token}

প্রতিটি অটোমেশনের আলাদা টোকেন, আর অটোমেশনটি অ্যাক্টিভ থাকতে হবে। রিকোয়েস্ট এলে SaleMag সিক্রেট দেওয়া থাকলে সিগনেচার যাচাই করে, আপনার ইভেন্ট ফিল্টার মেলায়, একই রিকোয়েস্ট দুবার এলে বাদ দেয়, কন্টাক্ট খোঁজে, তারপর ফ্লো চালু করে। এরপর পেলোড টোকেন হিসেবে পাওয়া যায়, যেমন {{context.payload.order.number}}।

ট্রিগারের তিনটি প্রিসেট:

প্রিসেট সিগনেচার হেডার ইভেন্ট কোথা থেকে পড়ে ডুপ্লিকেট যাচাই
Shopify X-Shopify-Hmac-Sha256 (base64) X-Shopify-Topic হেডার X-Shopify-Webhook-Id
WooCommerce X-WC-Webhook-Signature (base64) X-WC-Webhook-Topic হেডার X-WC-Webhook-Delivery-Id
Custom বন্ধ, অথবা আপনার দেওয়া হেডার (hex বা base64) বডির event ফিল্ড, অথবা আপনার দেওয়া হেডার X-Delivery-Id, X-Request-Id বা X-Idempotency-Key

এর উপর কিছু বানালে যা জানা দরকার:

  • বডি। JSON, ফর্ম ডেটা বা কোয়েরি প্যারামিটার। SaleMag ১ MB পর্যন্ত পড়ে।
  • সিগনেচার। সিক্রেট দিলে SaleMag raw body-র HMAC-SHA256 যাচাই করে। hex বা base64 দুটোই চলে, sha256= প্রিফিক্স থাকুক বা না থাকুক। সাইন ছাড়া রিকোয়েস্ট বাতিল করতে "require signature" চালু করুন।
  • ইভেন্ট ফিল্টার। কোন ইভেন্ট নেবেন তার তালিকা দিন। শেষে * দিলে প্রিফিক্স মেলে, যেমন orders/* নেবে orders/create আর orders/paid।
  • ডুপ্লিকেট। আগে দেখা ডেলিভারি আইডির রিকোয়েস্ট বাদ পড়ে। ডেলিভারি আইডি হেডার না থাকলে হুবহু একই বডিকে ডুপ্লিকেট ধরা হয়। তাই দুটো আসল ইভেন্টের বডি একই হতে পারলে ডেলিভারি আইডি পাঠান।
  • কন্টাক্ট। SaleMag আগে ইমেইল, তারপর ফোন দিয়ে কন্টাক্ট মেলায়। অন্য পাথ ম্যাপ করা যায়, আর নতুন মানুষের জন্য "create contact" চালু করা যায়। কন্টাক্ট না পেলেও ফ্লো চলে।
  • ডেলিভারি লগ। প্রতিটি রিকোয়েস্ট স্ট্যাটাস, পেলোড আর হেডারসহ লগ হয়। বিল্ডার আসল পেলোড দেখে টোকেন সাজেস্ট করে, আর Replay লগের একটা ডেলিভারি আবার চালায়।

URL-টি GET-এ {"status":"ready"} দেয়, তাই "test this URL" বাটন পাস করে। রেসপন্সগুলো:

স্ট্যাটাস মানে
202 {"status":"accepted","run_id":…} রান শুরু হয়েছে
202 {"status":"ignored"} বা {"status":"duplicate"} ফিল্টারে বাদ, বা একই রিকোয়েস্ট আবার
401 সিগনেচার ভুল, অথবা বাধ্যতামূলক হলেও নেই
404 এই URL-এর কোনো অ্যাক্টিভ অটোমেশন নেই
429 এক ঠিকানা থেকে মিনিটে ১,০০০-এর বেশি রিকোয়েস্ট

অর্ডার আপডেটের টেমপ্লেট কেমন লিখলে অনুমোদন পায়, দেখুন WhatsApp-এ অর্ডার স্ট্যাটাস আপডেট।

অর্ডারের ডেটা আমার নিজের সিস্টেমে কীভাবে পাঠাব?

অটোমেশনের ভেতরে Call Webhook ধাপ ব্যবহার করুন। অর্ডার ইভেন্ট আউটগোয়িং ওয়েবহুকে যায় না, কিন্তু Order Placed, Order Shipped / Fulfilled বা Cart Abandoned ট্রিগারের অটোমেশন সেই মুহূর্তে আপনার URL-এ কল করতে পারে:

  • মেথড GET, POST, PUT, PATCH বা DELETE, সাথে আপনার নিজের হেডার।
  • টোকেন দিয়ে লেখা JSON বডি, যেমন {{context.order_number}}। GET ছাড়া বাকি সব মেথডে SaleMag বডিতে রানের context অবজেক্ট যোগ করে।
  • ১০ সেকেন্ডের টাইমআউট। রেসপন্সের স্ট্যাটাস রানে webhook_status হিসেবে সেভ হয়।

এই ধাপ SaleMag সাইন করে না। আপনার এন্ডপয়েন্টে যাচাই লাগলে নিজের একটা সিক্রেট হেডার যোগ করুন। অর্ডার ট্রিগার আসে যুক্ত করা Shopify, WooCommerce আর BigCommerce স্টোর আর চ্যাট অর্ডার থেকে। সব ট্রিগার আর ধাপ দেখতে অটোমেশন ফ্লো বিল্ডার দেখুন।

SaleMag ওয়েবহুক কী করে না?

  • অর্ডার, কার্ট, লিড বা মেসেজ স্ট্যাটাসের ইভেন্ট আউটগোয়িং ওয়েবহুকে যায় না। শুধু উপরের তিনটি ইভেন্টই SaleMag থেকে বের হয়।
  • Zapier, Make বা n8n-এর নিজস্ব অ্যাপ নেই। সাধারণ ওয়েবহুক দিয়ে কাজ করে।
  • Call Webhook ধাপে সিগনেচার নেই।
  • আউটগোয়িং ডেলিভারি হাতে আবার পাঠানোর ব্যবস্থা নেই। রিট্রাই নিজে থেকে হয়, আর Replay শুধু ইনকামিং অটোমেশন ওয়েবহুকে।

SaleMag ওয়েবহুক কাদের জন্য?

ডেভেলপার আর এজেন্সি, যারা SaleMag-কে ওয়েবসাইট, ERP, POS, CRM বা নো-কোড টুলের সাথে যুক্ত করেন। আর সেই শপগুলোর জন্য, যারা চান নিজেদের অর্ডার সিস্টেমের ঘটনার সাথে সাথে WhatsApp মেসেজ যাক। কোড থেকে মেসেজ পাঠানো বা ডেটা পড়ার কাজ REST API দিয়ে হয়।

কীভাবে শুরু করবেন?

SaleMag অ্যাকাউন্ট খুলুন, Webhooks পেজে আপনার এন্ডপয়েন্ট যোগ করুন, তারপর Send test চাপুন। প্ল্যানের দাম দামের পেজে।

ধাপে ধাপে

  1. 1

    এন্ডপয়েন্ট যোগ করুন

    Webhooks পেজে আপনার HTTPS URL দিন আর ইভেন্ট বাছুন, সব ইভেন্ট চাইলে কোনোটাই টিক দেবেন না।

  2. 2

    সিক্রেট সেভ করুন

    whsec_ সাইনিং সিক্রেট দেখানোর সাথে সাথে কপি করুন। এটা একবারই দেখায়; হারালে রোটেট করুন।

  3. 3

    সিগনেচার যাচাই করুন

    টাইমস্ট্যাম্প আর raw body-র HMAC-SHA256 দিয়ে X-Webhook-Signature মেলান, তারপর দ্রুত 2xx রেসপন্স দিন।

  4. 4

    টেস্ট পাঠান

    Send test চাপলে test.ping আসবে, তারপর ডেলিভারি লগে HTTP স্ট্যাটাস দেখুন।

সাধারণ জিজ্ঞাসা

SaleMag আমার ওয়েবহুক URL-এ কোন কোন ইভেন্ট পাঠায়?

SaleMag তিনটি ইভেন্ট পাঠায়: message.received, contact.created আর campaign.completed। Send test বাটন একটা test.ping-ও পাঠায়, তবে সেটায় সাবস্ক্রাইব করা যায় না।

SaleMag ওয়েবহুকের সিগনেচার কীভাবে যাচাই করব?

X-Webhook-Signature হেডার পড়ুন, দেখতে t={timestamp},v1={signature}-এর মতো। আপনার whsec_ সিক্রেট দিয়ে '{timestamp}.{raw body}'-এর HMAC-SHA256 hex হিসেবে বের করুন, তারপর constant-time তুলনায় v1-এর সাথে মেলান।

ডেলিভারি ব্যর্থ হলে SaleMag কি আবার চেষ্টা করে?

হ্যাঁ। ১০ সেকেন্ডের মধ্যে 2xx রেসপন্স না পেলে ১ মিনিট, ৫ মিনিট, ১ ঘণ্টা আর ১ দিন পর আবার চেষ্টা হয়, মোট ৫ বার। প্রতিটি চেষ্টা ডেলিভারি লগে দেখা যায়।

অর্ডার প্লেস হলে কি SaleMag ওয়েবহুক পাঠায়?

না, আউটগোয়িং ইভেন্ট হিসেবে পাঠায় না। অর্ডার ইভেন্ট অটোমেশন চালু করে। প্রতিটি অর্ডার আপনার সিস্টেমে পাঠাতে Order Placed ট্রিগার আর Call Webhook ধাপ দিয়ে অটোমেশন বানান।

আমার ওয়েবসাইট বা ERP কি ওয়েবহুক দিয়ে WhatsApp মেসেজ চালু করতে পারে?

হ্যাঁ। অটোমেশনে Webhook Received ট্রিগার দিন, তার URL-এ JSON পাঠান, আর ফ্লো আপনার পেলোডের মান দিয়ে WhatsApp টেমপ্লেট পাঠাতে পারে, যেমন {{context.payload.order.number}}।

Meta-র WhatsApp ওয়েবহুক কি আমাকে নিজে সেট করতে হবে?

না। SaleMag-এর WhatsApp সাইনআপ দিয়ে নম্বর যুক্ত করলে SaleMag নিজেই সেটাকে Meta-র ওয়েবহুকে সাবস্ক্রাইব করে। চ্যানেল সেটিংসে ওয়েবহুক হেলথ চেক আর Meta-তে আবার রেজিস্টার করার বাটন আছে।

SaleMag কি Zapier, Make বা n8n-এর সাথে কাজ করে?

হ্যাঁ, ওয়েবহুক দিয়ে। SaleMag-এর নিজস্ব Zapier অ্যাপ নেই, তবে এই টুলগুলো SaleMag-এর আউটগোয়িং ওয়েবহুক নিতে পারে আর অটোমেশনের ইনকামিং ওয়েবহুক URL-এ পাঠাতে পারে।

sent বা read-এর মতো ডেলিভারি স্ট্যাটাসের ওয়েবহুক কি আছে?

না। SaleMag ইনবক্সে sent, delivered আর read টিক দেখায়, কিন্তু মেসেজ স্ট্যাটাসের পরিবর্তন আপনার URL-এ পাঠায় না।

লেখক পরিচিতি

সেলম্যাগ টিম

হোয়াটসঅ্যাপ ও এফ-কমার্স অটোমেশন, ঢাকা

ঢাকার যে টিম সেলম্যাগ বানায়: বাংলাদেশের অনলাইন বিক্রেতাদের জন্য হোয়াটসঅ্যাপ, মেসেঞ্জার আর ইনস্টাগ্রামের এআই সেলস ইনবক্স।

আরও সলিউশন

ইউনিফায়েড ইনবক্স: WhatsApp, Messenger ও Instagram | SaleMag

WhatsApp, Messenger, Instagram, Telegram আর WeChat-এর সব চ্যাট এক ইনবক্সে। প্রতিটি চ্যাট একজনকে দিন, নোট রাখুন, সেভ করা উত্তর পাঠান, এআই এজেন্টের সাথে কাজ করুন।

২১ অক্টোবর, ২০২৬ · 5 মিনিটে পড়া

সোশ্যাল মিডিয়া পোস্ট শিডিউলার: Facebook ও Instagram | SaleMag

এক ক্যালেন্ডার থেকে Facebook, Instagram, LinkedIn, X, TikTok আর YouTube-এ পোস্ট শিডিউল করুন। এআই ক্যাপশন লেখে, বা একটা টপিক থেকে ৩ থেকে ১৪টা পোস্ট সাজিয়ে দেয়।

২১ অক্টোবর, ২০২৬ · 4 মিনিটে পড়া

এআই এজেন্ট: WhatsApp ও Messenger-এর বাংলা চ্যাটবট | SaleMag

আপনার প্রোডাক্ট আর FAQ থেকে WhatsApp, Messenger ও Instagram-এ কাস্টমারের প্রশ্নের উত্তর দেয় এআই এজেন্ট (চ্যাটবট), বাংলায়। কঠিন চ্যাট যায় টিমের কাছে।

২১ অক্টোবর, ২০২৬ · 6 মিনিটে পড়া

Ready to win every conversation?

Grow faster with SaleMag. Start free — no credit card required.