Open in
Webhook এন্ডপয়েন্ট
প্রতি এন্ডপয়েন্টের জন্য আলাদা সিক্রেট এবং ইভেন্ট ফিল্টারসহ একাধিক webhook URL পরিচালনা করুন।
এন্ডপয়েন্ট-ভিত্তিক webhook সিস্টেম আপনাকে প্রতি সংস্থার জন্য একাধিক গন্তব্য নিবন্ধন করতে দেয়, প্রতিটির নিজস্ব secret, নিজস্ব status এবং event type-এর একটি উপসেটের জন্য নিজস্ব subscription থাকে। নতুন সব integration-এর জন্য এটিই প্রস্তাবিত মডেল।
লিগ্যাসি একক-URL webhook-এর সঙ্গে তুলনা করুন, যেটি backward compatibility-এর জন্য রাখা হয়েছে, তবে প্রতি সংস্থায় শুধু একটি URL সমর্থন করে।
এন্ডপয়েন্ট
| পদ্ধতি | পাথ | প্রয়োজনীয় ভূমিকা | বিবরণ |
|---|---|---|---|
GET | /v1/developer/webhook-endpoints | admin+ | এন্ডপয়েন্টের তালিকা |
POST | /v1/developer/webhook-endpoints | admin+ | একটি এন্ডপয়েন্ট তৈরি করুন |
PATCH | /v1/developer/webhook-endpoints/{endpoint_id} | admin+ | লেবেল / URL / event / status আপডেট করুন |
DELETE | /v1/developer/webhook-endpoints/{endpoint_id} | admin+ | একটি এন্ডপয়েন্ট মুছুন |
POST | /v1/developer/webhook-endpoints/{endpoint_id}/test | admin+ | একটি signed test delivery পাঠান |
GET | /v1/developer/webhook-deliveries | admin+ | সাম্প্রতিক এন্ডপয়েন্ট ও লিগ্যাসি delivery ফলাফল পরিদর্শন করুন |
এন্ডপয়েন্ট অবজেক্ট
{
"id": "c4d5e6f7-...",
"label": "Production — Call events",
"url": "https://example.com/thunderphone/hook",
"events": ["telephony.incoming", "telephony.complete"],
"status": "active",
"agent_id": 42,
"agent_name": "Support Agent",
"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 স্পষ্টভাবে-নির্বাচনযোগ্য প্রতি-টার্ন ইভেন্ট (telephony.turn / web.turn) ছাড়া সব ইভেন্টে সাবস্ক্রাইব করে |
status | string | active, disabled (ম্যানুয়ালি স্থগিত), অথবা failing (একটি ডেলিভারি একটিও 2xx না পেয়ে তার 24 h পুনঃচেষ্টা সূচি শেষ করলে স্বয়ংক্রিয়ভাবে সেট হয়) |
agent_id | integer | null | এই এন্ডপয়েন্ট যে এজেন্টের জন্য নির্ধারিত; null মানে সংস্থাজুড়ে প্রযোজ্য |
agent_name | string | null | নির্ধারিত এজেন্টের নাম, অথবা সংস্থাজুড়ে প্রযোজ্য এন্ডপয়েন্টের জন্য null |
secret_hint | string | সাইনিং সিক্রেটের প্রথম 4 এবং শেষ 4 অক্ষর, মাঝখানে এলিপসিসসহ (a1b2…9f0e) — সম্পূর্ণ মান প্রকাশ না করেই আপনি স্থানীয়ভাবে সংরক্ষিত সিক্রেটটি মিলিয়ে দেখার জন্য যথেষ্ট |
created_at, updated_at | timestamp |
বৈধ ইভেন্টের ধরন
events এই সঠিক সেটের বিপরীতে যাচাই করা হয় — তালিকার বাইরের মান দিলে
400 ফেরত আসে। প্রতিটি ধরনের payload কাঠামোর জন্য ইভেন্ট ক্যাটালগ দেখুন।
telephony.incoming,telephony.complete,telephony.tool,telephony.turnweb.incoming,web.complete,web.tool,web.turncall.graded,call.data_extractedcampaign.completedissue.reported,issue.escalatedtest-call.completedalert.triggered
issue.escalated-এ কোনো এজেন্ট প্রসঙ্গ নেই এবং এটি কেবল
সংস্থাজুড়ে প্রযোজ্য এন্ডপয়েন্টে পাঠানো হয়।
voice.ready এবং voice.failed স্পষ্টভাবে নির্বাচন করা যায় না। এগুলো পেতে,
events: [] সহ একটি সংস্থাজুড়ে প্রযোজ্য এন্ডপয়েন্ট তৈরি করুন। একটি খালি ইভেন্ট
তালিকা telephony.turn এবং web.turn ছাড়া প্রতিটি সমর্থিত ইভেন্ট পায়; এগুলো
স্পষ্টভাবে নির্বাচন করতে হবে।
এন্ডপয়েন্টের স্ট্যাটাস
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 ফেরত দেয়।
শুধু সেই এজেন্টের জন্য নির্ধারিত এন্ডপয়েন্ট ফেরত পেতে ?agent_id=42 পাঠান।
এজেন্ট-নির্ধারিত এন্ডপয়েন্ট
সংস্থাজুড়ে প্রযোজ্য এন্ডপয়েন্ট প্রতিটি মিলে যাওয়া ইভেন্ট পায়। agent_id-সহ একটি
এন্ডপয়েন্ট কেবল সেই এজেন্ট পরিচালিত কলের জন্য মিলে যাওয়া ইভেন্ট পায়;
alert.triggered-এর মতো এজেন্ট প্রসঙ্গবিহীন ইভেন্ট কখনও এতে পৌঁছায় না। আপনি
এজেন্ট বিল্ডারের ওয়েবহুক বিভাগ থেকেও এই এন্ডপয়েন্টগুলো তৈরি ও পরিচালনা
করতে পারেন।
একটি এন্ডপয়েন্ট তৈরি করুন
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 | স্ট্রিং | হ্যাঁ | 1–120 অক্ষর |
url | স্ট্রিং | হ্যাঁ | HTTPS URL (http শুধুমাত্র localhost / 127.0.0.1-এর জন্য অনুমোদিত) |
events | অ্যারে | না | খালি/বাদ দিলে telephony.turn / web.turn ছাড়া সব ইভেন্টে সাবস্ক্রাইব করে; এগুলোর জন্য স্পষ্ট সাবস্ক্রিপশন প্রয়োজন। বৈধ ইভেন্টের ধরন-এ তালিকাভুক্ত মানগুলো ব্যবহার করতে হবে; ডুপ্লিকেট সরিয়ে ফেলা হয় |
agent_id | ইন্টিজার | null | না | এই প্রতিষ্ঠানের একটি এজেন্টের জন্য ডেলিভারির পরিধি নির্ধারণ করুন; প্রতিষ্ঠানব্যাপী এন্ডপয়েন্টের জন্য বাদ দিন বা null ব্যবহার করুন |
এন্ডপয়েন্ট অবজেক্ট-এর সঙ্গে অতিরিক্ত শীর্ষ-স্তরের secret ফিল্ডসহ 201 Created ফেরত দেয়, যাতে অপরিবর্তিত সাইনিং কী থাকে — একটি 48-অক্ষরের হেক্স স্ট্রিং:
{
"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 | স্ট্রিং | |
url | স্ট্রিং | |
events | অ্যারে | |
status | স্ট্রিং | active অথবা disabled। সার্ভার failing হিসেবে চিহ্নিত করা এন্ডপয়েন্ট পুনরায় সক্রিয় করতে active সেট করুন |
agent_id | ইন্টিজার | null | এন্ডপয়েন্টের পরিধি নির্ধারণ করতে একটি এজেন্ট id সেট করুন, অথবা প্রতিষ্ঠানব্যাপী করতে null দিন |
আপডেট করা এন্ডপয়েন্ট অবজেক্ট-সহ 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
সাবস্ক্রিপশনে যোগ করা যায় না। প্রথম প্রচেষ্টা ব্যর্থ হলে, ডেলিভারিটি সাধারণ
ইভেন্ট ডেলিভারির মতো একই পুনঃচেষ্টা সময়সূচি অনুসরণ করে।
প্রকৃত ইভেন্ট কাঠামোর বিপরীতে একটি ট্রিগার কনফিগার করতে, ঐচ্ছিক
event_type পাঠান। ডেলিভারিটি এখনও কৃত্রিম থাকে এবং এতে "sample": true থাকে;
কল-সম্পর্কিত নমুনাগুলোতে call_id: 0 এবং agent_id: 0 ব্যবহৃত হয়।
curl -X POST https://api.thunderphone.com/v1/developer/webhook-endpoints/c4d5e6f7-.../test \
-H "Authorization: Bearer sk_live_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"event_type":"call.graded"}'event_type বৈধ ইভেন্টের ধরন থেকে যেকোনো মান গ্রহণ করে।
এটি বাদ দিলে সাধারণ webhook.test আচরণ বজায় থাকে।
একটি এন্ডপয়েন্ট মুছুন
curl -X DELETE https://api.thunderphone.com/v1/developer/webhook-endpoints/c4d5e6f7-... \
-H "Authorization: Bearer sk_live_YOUR_API_KEY"204 No Content ফেরত দেয়। URL-এ ডেলিভারি অবিলম্বে বন্ধ হয়;
চলমান পুনঃচেষ্টাগুলো বাতিল করা হয়।
ডেলিভারি ডিবাগ করুন
কোনো ওয়েবহুক পাঠানো হয়নি বলে সিদ্ধান্ত নেওয়ার আগে,
GET /v1/developer/webhook-deliveries পরিদর্শন করুন।
এটি কল id, URL অরিজিন, HTTP স্ট্যাটাস, প্রচেষ্টার সংখ্যা, অনুমোদিত তালিকাভুক্ত ব্যর্থতার বিভাগ এবং
পরবর্তী পুনঃচেষ্টার সময়সহ উভয় ওয়েবহুক সিস্টেমের সাম্প্রতিক প্রচেষ্টা দেখায়।
এটি কখনও ইভেন্ট পেলোড, ট্রান্সক্রিপ্ট, সংরক্ষিত ত্রুটির লেখা,
রেসপন্স বডি বা URL পাথ ফেরত দেয় না।
আপনি এজেন্ট → একটি এজেন্ট নির্বাচন করুন → ওয়েবহুক → সাম্প্রতিক ডেলিভারি-তেও একই সাম্প্রতিক ইতিহাস দেখতে পারেন। সারিগুলোতে এন্ডপয়েন্ট লেবেল এবং সর্বশেষ প্রচেষ্টায় ব্যবহৃত URL অরিজিন দেখানো হয়। এটি অপরিবর্তনীয় অডিট লগের পরিবর্তে অপারেশনাল অবস্থা: একটি এন্ডপয়েন্ট মুছে দিলে তার ডেলিভারি সারিগুলোও মুছে যায়।
একটি n8n 404-এর ক্ষেত্রে, প্রথমে নিশ্চিত করুন যে ওয়ার্কফ্লো সক্রিয়, POST গ্রহণ করে এবং
পরীক্ষার URL-এর পরিবর্তে প্রোডাকশন ওয়েবহুক URL ব্যবহার করে। একটি 401 বা 403
প্রমাণীকরণ বা স্বাক্ষর যাচাইকরণের দিকে নির্দেশ করে; টাইমআউট গন্তব্যের বিলম্ব
বা প্রাপ্যতার দিকে নির্দেশ করে; TLS ত্রুটি সার্টিফিকেট চেইন, হোস্টনাম বা মেয়াদ শেষ হওয়ার দিকে নির্দেশ করে।