একটি ভাষা বেছে নিন

ওয়েবহুক

অ্যাক্টিভেশনের ঘটনা রিয়েল টাইমে নিজের সার্ভারে পান, SmsGrab-Signature হেডার যাচাই করুন এবং পুনরায় চেষ্টা, টেস্ট ডেলিভারি ও স্বয়ংক্রিয় বন্ধ হওয়া বুঝুন।

এই পেজে
  1. ঘটনা
  2. ওয়েবহুক তৈরি করুন
  3. একটি ডেলিভারি দেখতে কেমন
  4. স্বাক্ষর যাচাই করুন
  5. দ্রুত উত্তর দিন
  6. পুনরায় চেষ্টা
  7. স্বয়ংক্রিয় বন্ধ
  8. টেস্ট ও পুনরায় ডেলিভারি

ওয়েবহুক ঘটনাগুলো ঘটামাত্র আপনার সার্ভারে পাঠায়, তাই বারবার জিজ্ঞেস করতে হয় না। একটি ওয়েবহুক একটি API কী-এর অন্তর্গত। এটি সেই কী দিয়ে কেনা নম্বরের ঘটনা এবং আপনার অ্যাকাউন্টের কম ব্যালান্সের সতর্কতা পায়।

ঘটনা

ঘটনা কখন
activation.created একটি নম্বর কেনা হয়েছে
activation.code_received প্রতিটি নতুন SMS, এ পর্যন্ত আসা সব বার্তাসহ
activation.completed আপনি শেষ করেছেন, বা কোডের পর সময় শেষ হয়েছে
activation.cancelled কোডের আগে বাতিল, টাকা ফেরত
activation.expired সময়মতো কোড আসেনি, টাকা ফেরত
activation.refunded কাটা টাকার যেকোনো ফেরত
balance.low আপনার ব্যালান্স নির্ধারিত সীমার নিচে নেমেছে
webhook.test আপনার শুরু করা একটি টেস্ট ডেলিভারি

ওয়েবহুক তৈরি করুন

অ্যাকাউন্ট > ডেভেলপার-এ একটি কী খুলে URL, পছন্দের ঘটনা ও ঐচ্ছিক বিবরণসহ ওয়েবহুক যোগ করুন। প্রতিটি কী-এর সর্বোচ্চ ৩টি ওয়েবহুক থাকতে পারে।

URL অবশ্যই:

  • https:// দিয়ে শুরু হবে;
  • IP ঠিকানা নয়, হোস্ট নাম ব্যবহার করবে;
  • একটি পাবলিক ঠিকানায় যাবে। প্রাইভেট নেটওয়ার্ক, localhost ও এরকম রেঞ্জ প্রত্যাখ্যাত হয়।

আপনি whsec_ দিয়ে শুরু হওয়া একটি সাইনিং সিক্রেট পান। API কী-এর মতো এটিও একবারই দেখানো হয়। পরে এটি বদলাতে পারেন, যার জন্যও পাসওয়ার্ড লাগে।

একটি ডেলিভারি দেখতে কেমন

HTTP
POST /your/endpoint HTTP/1.1
Content-Type: application/json
User-Agent: SmsGrab-Webhooks/1.0
SmsGrab-Event: activation.code_received
SmsGrab-Delivery: 9f7d6c1e-2b44-4c1a-8f0e-6a3d2c1b0e9f
SmsGrab-Signature: t=1790503200,v1=3b9a0c…

{ "id": "evt_4e1f…", "type": "activation.code_received", "created_at": "2026-09-27T10:06:12.004Z",
  "api_version": "2026-09-27", "data": { "activation": { "id": "5c1d0c2e-…", "status": "CODE_RECEIVED" } } }

স্বাক্ষর যাচাই করুন

SmsGrab-Signature-এ একটি টাইমস্ট্যাম্প t এবং v1 থাকে, যা আপনার সিক্রেট দিয়ে t, একটি বিন্দু ও কাঁচা অনুরোধ বডির HMAC-SHA256। যে ডেলিভারির টাইমস্ট্যাম্প আপনার ঘড়ি থেকে ৩০০ সেকেন্ডের বেশি দূরে, সেগুলো প্রত্যাখ্যান করুন এবং স্বাক্ষর ধ্রুব সময়ে তুলনা করুন।

PHP
[$t, $v1] = (function (string $h): array {
    parse_str(str_replace(',', '&', $h), $p);
    return [(int) ($p['t'] ?? 0), (string) ($p['v1'] ?? '')];
})($_SERVER['HTTP_SMSGRAB_SIGNATURE'] ?? '');
$body = file_get_contents('php://input');
$expected = hash_hmac('sha256', $t.'.'.$body, getenv('SMSGRAB_WEBHOOK_SECRET'));
$ok = abs(time() - $t) <= 300 && hash_equals($expected, $v1);
Python
import hmac, hashlib, time

def verify(header: str, body: bytes, secret: str) -> bool:
    parts = dict(p.split("=", 1) for p in header.split(","))
    t = int(parts.get("t", "0"))
    expected = hmac.new(secret.encode(), f"{t}.".encode() + body, hashlib.sha256).hexdigest()
    return abs(time.time() - t) <= 300 and hmac.compare_digest(expected, parts.get("v1", ""))
JavaScript
import crypto from 'node:crypto';

export function verify(header, rawBody, secret) {
  const parts = Object.fromEntries(header.split(',').map((p) => p.split('=')));
  const t = Number(parts.t ?? 0);
  const expected = crypto.createHmac('sha256', secret).update(`${t}.`).update(rawBody).digest('hex');
  const given = Buffer.from(parts.v1 ?? '', 'utf8');
  return Math.abs(Date.now() / 1000 - t) <= 300 && given.length === expected.length
    && crypto.timingSafeEqual(Buffer.from(expected, 'utf8'), given);
}

JSON পার্স করার আগে সবসময় কাঁচা বডি ঠিক যেমন পেয়েছেন তেমনই যাচাই করুন।

দ্রুত উত্তর দিন

১০ সেকেন্ডের মধ্যে যেকোনো 2xx অবস্থা দিয়ে উত্তর দিন এবং ধীর কাজ পরে করুন, যেমন কিউতে। রিডাইরেক্ট অনুসরণ করা হয় না।

পুনরায় চেষ্টা

ব্যর্থ ডেলিভারি ১ মিনিট, ৫ মিনিট, ১৫ মিনিট, ১ ঘণ্টা, ৩ ঘণ্টা, ৬ ঘণ্টা, ১২ ঘণ্টা ও ২৪ ঘণ্টা পর আবার চেষ্টা করা হয়। পুনরায় চেষ্টায় ঘটনার একই id থাকে, তাই প্রক্রিয়া করা আইডি মনে রাখুন এবং পুনরাবৃত্তি বাদ দিন। একটি অ্যাক্টিভেশনের ঘটনা ক্রমানুসারে আসে।

স্বয়ংক্রিয় বন্ধ

  • 410 Gone উত্তর দিলে ওয়েবহুক সঙ্গে সঙ্গে বন্ধ হয়।
  • অন্তত ২৪ ঘণ্টায় টানা ৫০টি ব্যর্থ চেষ্টার পর ওয়েবহুক বন্ধ হয় এবং আপনি বিজ্ঞপ্তি পান। endpoint ঠিক করে তারপর ওয়েবহুক আবার চালু করুন।
  • কী বাতিল করলে তার ওয়েবহুক বন্ধ হয়।

টেস্ট ও পুনরায় ডেলিভারি

ওয়েবহুকের পেজ থেকে একটি webhook.test ঘটনা পাঠান, তাহলে সঙ্গে সঙ্গে স্ট্যাটাস কোড, উত্তরের সময় ও যেকোনো ত্রুটি দেখতে পাবেন। ডেলিভারি তালিকা প্রতিটি ডেলিভারি ৩০ দিন রাখে, আর যেকোনোটি আবার পাঠাতে পারেন।

এই নিবন্ধটি কি কাজে এসেছে?

এখনও সাহায্য দরকার?

আমাদের লিখুন। আমরা প্রতিটি বার্তার উত্তর দিই, সাধারণত কয়েক ঘণ্টার মধ্যে।

অথবা ইমেইল করুন support@smsgrab.com