Webhook এন্ডপয়েন্ট
এন্ডপয়েন্ট-ভিত্তিক webhook সিস্টেমটি আপনাকে প্রতি সংগঠনে একাধিক গন্তব্য নিবন্ধন করতে দেয়, প্রতিটির নিজস্ব secret, নিজস্ব স্ট্যাটাস এবং ইভেন্ট টাইপের একটি উপসেটে নিজস্ব সাবস্ক্রিপশনসহ। সব নতুন ইন্টিগ্রেশনের জন্য এটিই প্রস্তাবিত মডেল।
পুরোনো একক-URL webhook-এর সঙ্গে তুলনা করুন, যেটি পশ্চাদ্সামঞ্জস্যের জন্য রাখা হয়েছে, তবে প্রতি সংগঠনে শুধুমাত্র একটি URL সমর্থন করে।
এন্ডপয়েন্ট
| পদ্ধতি | পাথ | প্রয়োজনীয় ভূমিকা | বিবরণ |
|---|---|---|---|
GET | /v1/developer/webhook-endpoints | admin+ | এন্ডপয়েন্টের তালিকা |
POST | /v1/developer/webhook-endpoints | admin+ | একটি এন্ডপয়েন্ট তৈরি করুন |
PATCH | /v1/developer/webhook-endpoints/{endpoint_id} | admin+ | লেবেল / URL / ইভেন্ট / স্ট্যাটাস আপডেট করুন |
DELETE | /v1/developer/webhook-endpoints/{endpoint_id} | admin+ | একটি এন্ডপয়েন্ট মুছুন |
POST | /v1/developer/webhook-endpoints/{endpoint_id}/test | admin+ | একটি স্বাক্ষরিত পরীক্ষামূলক ডেলিভারি পাঠান |
এন্ডপয়েন্ট অবজেক্ট
{
"id": "c4d5e6f7-...",
"label": "Production — Call events",
"url": "https://example.com/thunderphone/hook",
"events": ["telephony.incoming", "telephony.complete"],
"status": "active",
"secret_hint": "a1b2…9f0e",
"created_at": "2026-04-20T18:24:10.113Z",
"updated_at": "2026-04-20T18:24:10.113Z"
}
| ফিল্ড | ধরন | বিবরণ |
|---|---|---|
id | UUID | এন্ডপয়েন্ট id |
label | string | প্রদর্শনের নাম, 1–120 অক্ষর |
url | string | HTTPS URL; ডেভেলপমেন্টের জন্য http://localhost অনুমোদিত |
events | string-এর array | সাবস্ক্রাইব করা ইভেন্ট টাইপ (বৈধ মান দেখুন)। খালি array সব ইভেন্টে সাবস্ক্রাইব করে |
status | string | active, disabled (ম্যানুয়ালি স্থগিত), অথবা failing (কোনো ডেলিভারি একটি 2xx না পেয়ে তার 24 ঘণ্টার পুনঃচেষ্টা সূচি শেষ করলে স্বয়ংক্রিয়ভাবে সেট হয়) |
secret_hint | string | স্বাক্ষরকারী secret-এর প্রথম 4 এবং শেষ 4 অক্ষর, মাঝখানে ellipsis-সহ (a1b2…9f0e) — সম্পূর্ণ মান প্রকাশ না করে স্থানীয়ভাবে সংরক্ষিত secret-এর সঙ্গে মিলিয়ে দেখার জন্য যথেষ্ট |
created_at, updated_at | timestamp |
বৈধ ইভেন্ট টাইপ
events এই সঠিক সেটের বিপরীতে যাচাই করা হয় — তালিকার বাইরের মান
400 ফেরত দেয়। প্রতিটি টাইপের payload-এর কাঠামোর জন্য ইভেন্ট ক্যাটালগ দেখুন।
telephony.incoming,telephony.complete,telephony.toolweb.incoming,web.complete,web.toolcall.gradedissue.reportedtest-call.completedalert.triggered
এন্ডপয়েন্ট স্ট্যাটাস
active— ডেলিভারি স্বাভাবিকভাবে চলতে থাকে।disabled—PATCH-এর মাধ্যমে ম্যানুয়ালি স্থগিত করা হয়। কোনো অনুরোধ পাঠানো হয় না। আমরা কখনওdisabledএন্ডপয়েন্টের স্ট্যাটাস পরিবর্তন করি না; এটিকে আবারactive-এ ফিরিয়ে নেওয়া সবসময় আপনার সিদ্ধান্ত।failing— এন্ডপয়েন্টে একটি ডেলিভারি কোনো 2xx না পেয়ে তার সম্পূর্ণ পুনঃচেষ্টা সূচি (24 ঘণ্টায় 8টি প্রচেষ্টা) শেষ করলে স্বয়ংক্রিয়ভাবে সেট হয়। একটি ব্যর্থ এন্ডপয়েন্টে আর কোনো ট্র্যাফিক পাঠানো হয় না। এন্ডপয়েন্ট ঠিক হয়ে গেলে,PATCHব্যবহার করে এর স্ট্যাটাস আবারactiveকরুন; যেসব ডেলিভারির পুনঃচেষ্টা সূচি এখনও শেষ হয়নি, সেগুলো যেখানে থেমেছিল সেখান থেকে পুনরায় শুরু হয়।
এন্ডপয়েন্টের তালিকা
curl https://api.thunderphone.com/v1/developer/webhook-endpoints \
-H "Authorization: Bearer sk_live_YOUR_API_KEY"
এন্ডপয়েন্ট অবজেক্ট-এর একটি array ফেরত দেয়।
একটি এন্ডপয়েন্ট তৈরি করুন
curl -X POST https://api.thunderphone.com/v1/developer/webhook-endpoints \
-H "Authorization: Bearer sk_live_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"label": "Production — Call events",
"url": "https://example.com/thunderphone/hook",
"events": ["telephony.incoming", "telephony.complete"]
}'
result = requests.post(
"https://api.thunderphone.com/v1/developer/webhook-endpoints",
headers={"Authorization": "Bearer sk_live_YOUR_API_KEY"},
json={
"label": "Production — Call events",
"url": "https://example.com/thunderphone/hook",
"events": ["telephony.incoming", "telephony.complete"],
},
).json()
secret = result["secret"]
endpoint_id = result["id"]
রিকোয়েস্ট ফিল্ড
| ফিল্ড | ধরন | প্রয়োজনীয় | বিবরণ |
|---|---|---|---|
label | string | হ্যাঁ | 1–120 অক্ষর |
url | string | হ্যাঁ | HTTPS URL (http কেবল localhost / 127.0.0.1-এর জন্য অনুমোদিত) |
events | array | না | খালি রাখলে/বাদ দিলে সব ইভেন্টে সাবস্ক্রাইব হবে। বৈধ ইভেন্টের ধরন-এ তালিকাভুক্ত মান ব্যবহার করতে হবে; ডুপ্লিকেট সরিয়ে দেওয়া হয় |
এন্ডপয়েন্ট অবজেক্ট-এর সঙ্গে অতিরিক্ত শীর্ষ-স্তরের secret ফিল্ডসহ 201 Created ফেরত দেয়, যেখানে কাঁচা সাইনিং কী থাকে — একটি 48-অক্ষরের hex স্ট্রিং:
{
"id": "c4d5e6f7-…",
"label": "Production — Call events",
"url": "https://example.com/thunderphone/hook",
"events": ["telephony.incoming", "telephony.complete"],
"status": "active",
"secret_hint": "a1b2…9f0e",
"created_at": "2026-04-20T18:24:10.113Z",
"updated_at": "2026-04-20T18:24:10.113Z",
"secret": "a1b2c37e08d94f5b16a2c8d90e7f3a4b5c6d7e8f90a19f0e"
}
একটি এন্ডপয়েন্ট আপডেট করুন
curl -X PATCH https://api.thunderphone.com/v1/developer/webhook-endpoints/c4d5e6f7-... \
-H "Authorization: Bearer sk_live_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"label": "Production — Call + Grade events",
"events": ["telephony.incoming", "telephony.complete", "call.graded"]
}'
| ফিল্ড | ধরন | বিবরণ |
|---|---|---|
label | string | |
url | string | |
events | array | |
status | string | active অথবা disabled। সার্ভার failing হিসেবে চিহ্নিত করা এন্ডপয়েন্ট পুনরায় সক্রিয় করতে active সেট করুন |
আপডেট করা এন্ডপয়েন্ট অবজেক্ট-সহ 200 OK ফেরত দেয়।
একটি পরীক্ষামূলক ডেলিভারি পাঠান
ক্যানোনিক্যাল JSON সিরিয়ালাইজেশন, X-ThunderPhone-Signature, ডেলিভারি রেকর্ডিং এবং পুনঃচেষ্টার হিসাবসহ স্বাভাবিক ডেলিভারি পাইপলাইন ব্যবহার করে একটি এন্ডপয়েন্টে সিনথেটিক webhook.test ইভেন্ট পাঠান।
পরীক্ষাটি নির্বাচিত এন্ডপয়েন্টকে লক্ষ্য করে, তার events ফিল্টার নির্বিশেষে।
curl -X POST https://api.thunderphone.com/v1/developer/webhook-endpoints/c4d5e6f7-.../test \
-H "Authorization: Bearer sk_live_YOUR_API_KEY"
এন্ডপয়েন্টটি এ ধরনের একটি এনভেলপ পায়:
{
"data": {
"message": "ThunderPhone webhook test",
"sent_at": "2026-07-17T20:12:34.567890+00:00"
},
"event_id": "2ad6507c-7d19-4498-9b2d-7e8f944ab5a1",
"type": "webhook.test"
}
গন্তব্য ত্রুটি ফেরত দিলেও প্রথম প্রচেষ্টার পরে API 200 OK ফেরত দেয়।
ডেলিভারির ফলাফল জানতে success, status, response_code এবং error পরীক্ষা করুন:
{
"success": true,
"event_id": "2ad6507c-7d19-4498-9b2d-7e8f944ab5a1",
"event_type": "webhook.test",
"status": "delivered",
"response_code": 204,
"error": ""
}
webhook.test সিনথেটিক এবং এটি কোনো এন্ডপয়েন্টের events সাবস্ক্রিপশনে যোগ করা যায় না।
প্রথম প্রচেষ্টা ব্যর্থ হলে, ডেলিভারি স্বাভাবিক ইভেন্ট ডেলিভারির মতো একই পুনঃচেষ্টা সূচি অনুসরণ করে।
একটি এন্ডপয়েন্ট মুছুন
curl -X DELETE https://api.thunderphone.com/v1/developer/webhook-endpoints/c4d5e6f7-... \
-H "Authorization: Bearer sk_live_YOUR_API_KEY"
204 No Content ফেরত দেয়। URL-এ ডেলিভারি অবিলম্বে বন্ধ হয়ে যায়;
চলমান পুনরায় চেষ্টা পরিত্যাগ করা হয়।