Webhook Endpoint
สร้าง จุดเชื่อมต่อ Webhook
สร้าง Webhook ที่ URL HTTP(S) แบบ absolute และแนะนำ HTTPS สำหรับ production status เป็น active หรือ inactive subscribed_events รับ public event หรือ ["*"] และ max_attempts 0..5 เมื่อสร้าง endpoint ของบัญชีเป็น active หากบัญชีเดียวกันมี endpoint active อื่นอยู่แล้ว จะคืน 409 account_webhook_already_exists (40008) สิทธิ์รับเหตุการณ์โทรควบคุมด้วย is_beta ของเวิร์กสเปซ สำหรับเวิร์กสเปซทดสอบ subscribed_events ที่เป็น *, รายการว่าง หรือไม่ระบุฟิลด์จะรวมเหตุการณ์โทร ส่วนรายการเฉพาะจะรับเฉพาะเหตุการณ์ที่ระบุ เวิร์กสเปซทั่วไปใช้ wildcard ได้แต่จะไม่ได้รับเหตุการณ์โทร การระบุสมัครเหตุการณ์โทรโดยตรงยังคงได้ 403 beta_feature_not_enabled ตรวจสิทธิ์ใหม่ทุกครั้งที่ส่ง ลองใหม่ และเล่นซ้ำ dead letter หากตรวจสอบล้มเหลวจะไม่อนุญาต ส่วนบันทึกการโทร message.* เป็นอิสระจากสิทธิ์นี้
https://api.unifyport.ai/v1/webhook-endpointsช่องทางที่รองรับ
ก่อนเรียกใช้
ใช้ X-Api-Key ของ workspace เจ้าของทรัพยากรบนเซิร์ฟเวอร์ แทนค่าตัวอย่างทั้งหมดก่อนเรียกใช้
เมื่อสร้างหรือเปิดใช้งานปลายทางเฉพาะบัญชีอีกครั้ง account_id เดียวมีปลายทาง active ได้เพียงหนึ่งรายการ หากขัดแย้งจะได้รับ 409 account_webhook_already_exists (40008) มีปลายทางบัญชีที่เป็น inactive และปลายทางของเวิร์กสเปซได้หลายรายการ ปลายทางที่เป็น active อยู่แล้วสามารถแก้ไขโดยคง active ได้ รวมถึงการตั้งค่าเดิมที่มีหลาย active
ที่มาของพารามิเตอร์
- account_id
- รับ data.id จากการสร้างหรือค้นหาบัญชี รหัสเป็นของ workspace ที่ระบุด้วย X-Api-Key ดูบัญชี
พารามิเตอร์คำขอ
ส่วนหัว
X-Api-KeyAPI key ของพื้นที่ทำงาน ระบบจะระบุพื้นที่ทำงานจากส่วนหัวนี้
Content-Typeใช้ application/json เมื่อต้องส่งเนื้อหาของคำขอเป็น JSON
เนื้อหาของคำขอ
account_idID บัญชีสาธารณะที่ไม่บังคับใน body เช่น acc_example เมื่อสร้างจะผูก endpoint กับบัญชี หากละไว้จะสร้าง endpoint ของเวิร์กสเปซ เมื่ออัปเดตจะตรวจสอบเฉพาะการผูกเดิม หากละไว้จะคงเจ้าของเดิมไว้ ไม่สามารถเปลี่ยนบัญชี เปลี่ยน endpoint ของเวิร์กสเปซเป็น endpoint ของบัญชี หรือล้างการผูกได้ ไม่รับ query, null, สตริงว่าง สตริงที่มีแต่ช่องว่าง หรือฟิลด์ซ้ำ ต้องใช้ชื่อ account_id ตรงตัว หากใช้ตัวพิมพ์ใหญ่เล็กต่างกันใน body หรือ query หรือเจ้าของไม่ตรงกันจะคืน 400 invalid_request หากบัญชีที่ระบุไม่มีอยู่หรือไม่อยู่ในเวิร์กสเปซปัจจุบันจะคืน 404 account_not_found (20020) การตั้งค่าอิสระของบัญชีมีลำดับความสำคัญเหนือการตั้งค่าเวิร์กสเปซ การปิดใช้งานหรือไม่ได้สมัครเหตุการณ์บางประเภทจะไม่กลับไปใช้เวิร์กสเปซ เมื่อลบ endpoint อิสระตัวสุดท้าย การส่งครั้งแรกของเหตุการณ์ถัดไปจะกลับมาสืบทอดการตั้งค่าเวิร์กสเปซ การตรวจสอบข้อขัดแย้งเมื่อเปิดใช้งานพิจารณาเฉพาะ endpoint active อื่นที่มี account_id เดียวกัน endpoint ของเวิร์กสเปซไม่อยู่ภายใต้ข้อจำกัดนี้ ดูเงื่อนไขใน status
minLength: 1 · pattern: \S
urlURL HTTP(S) แบบ absolute ที่รับ Webhook และแนะนำ HTTPS สำหรับ production
format: uri
statusสถานะ endpoint: active หรือ inactive เมื่อสร้าง endpoint active ของบัญชีหรือเปลี่ยน inactive→active หากบัญชีเดียวกันมี endpoint active อื่นอยู่แล้ว จะคืน 409 account_webhook_already_exists (40008) บัญชีมี endpoint inactive ได้หลายตัว และเวิร์กสเปซมี endpoint ได้หลายตัว การอัปเดต endpoint ที่เป็น active อยู่แล้วและยังคง active ทำได้ รวมถึงการตั้งค่าเก่าที่มีหลาย endpoint active โดยจะไม่ล้าง endpoint เก่าโดยอัตโนมัติ
enum: active, inactive
subscribed_events[]การสมัคร public standard event หากละเว้น ใช้อาร์เรย์ว่าง หรือมี * จะรับ public event ทั้งหมด รวมถึง contact.updated ที่เพิ่มใหม่ แต่ไม่รวม provider.raw_event หากต้องการเฉพาะบาง event ให้ระบุชื่ออย่างชัดเจน
signing_secretsecret สำหรับลงนาม Webhook แบบเลือก ในตัวอย่างให้ใช้ค่าตัวแทน
retry_policyobjectmax_attempts คือจำนวน retry หลังการส่งครั้งแรก ค่าเริ่มต้น 3 ช่วง 0–5 และ 0 หมายถึงส่งครั้งแรกเท่านั้น
retry_policymax_attempts คือจำนวน retry หลังการส่งครั้งแรก ค่าเริ่มต้น 3 ช่วง 0–5 และ 0 หมายถึงส่งครั้งแรกเท่านั้น
max_attemptsจำนวน retry หลังการส่งครั้งแรก ตั้งแต่ 0 ถึง 5
ทำความเข้าใจผลลัพธ์
ตรวจการตั้งค่าที่ส่งกลับ ก่อนทดสอบการส่ง ปลายทางต้องเป็น active และสมัครรับเหตุการณ์นั้น ตรวจลายเซ็นเฉพาะเมื่อ signing_enabled=true บันทึกเหตุการณ์ก่อน แล้วส่ง 2xx เพื่อยืนยันการรับ
การตอบกลับ 201 Created
{
"request_id": "<REQUEST_ID>",
"data": {
"id": "we_example",
"url": "https://example.com/webhook",
"status": "active",
"subscribed_events": [
"*"
],
"signing_enabled": true,
"retry_policy": {
"max_attempts": 3
}
}
}
เนื้อหาการตอบกลับ
idตัวระบุ จุดเชื่อมต่อ Webhook (we_...)
account_idID บัญชีสาธารณะของ endpoint อิสระของบัญชี สำหรับ endpoint ของเวิร์กสเปซจะละฟิลด์นี้ ไม่คืน null
minLength: 1
urlURL HTTP(S) แบบ absolute ที่รับ Webhook และแนะนำ HTTPS สำหรับ production
format: uri
statusสถานะ จุดเชื่อมต่อ: active หรือ inactive
enum: active, inactive
subscribed_events[]public standard event ของ จุดเชื่อมต่อ; ["*"] หมายถึง public event ทั้งหมดโดยไม่รวม provider.raw_event
signing_enabledเป็น true เมื่อมีการตั้ง signing secret และการนำส่งถูกลงนาม
retry_policyobjectmax_attempts นับ retry หลังการส่งครั้งแรก ค่าเริ่มต้น 3 ช่วง 0–5
retry_policymax_attempts นับ retry หลังการส่งครั้งแรก ค่าเริ่มต้น 3 ช่วง 0–5
max_attemptsจำนวน retry หลังการส่งครั้งแรกที่ตั้งไว้ ตั้งแต่ 0 ถึง 5
การตอบกลับ
201201 Created
คำขอสำเร็จ ดูตัวอย่างเนื้อหาตอบกลับด้านบน
400Bad Request
เนื้อหาของคำขอ path หรือพารามิเตอร์ไม่ถูกต้อง
401Unauthorized
ส่วนหัว X-Api-Key หายไปหรือไม่ถูกต้อง
403Forbidden
ระบบระบุคำขอได้ แต่ไม่อนุญาตให้ดำเนินการนี้
404Not Found
ไม่พบทรัพยากรที่ร้องขอ โปรดตรวจสอบ error.code ร่วมกับการดำเนินการปัจจุบัน
409Conflict
การดำเนินการขัดแย้งกับบัญชีของผู้ให้บริการหรือทรัพยากรที่มีอยู่
500Internal Server Error
บริการพบข้อผิดพลาดที่ไม่คาดคิด
เมื่อคำขอล้มเหลว
ตรวจ HTTP และ error.code/numeric_code เก็บ request_id แล้วแก้พารามิเตอร์ ยืนยันตัวตนต่อ หรือตรวจ runtime ตามสาเหตุ ตรวจผลครั้งก่อนก่อนส่งหรือเขียนซ้ำ อ้างอิงรหัสข้อผิดพลาด
อ่านสถานะ HTTP, error.code และ error.numeric_code ร่วมกับคำสั่งที่เรียก รหัสตัวเลขเป็นสตริง เก็บ request_id เพื่อตรวจปัญหา ค่านี้ไม่ใช่คีย์ป้องกันการทำซ้ำหรือรหัสงาน
- invalid_request · 10000 · 400
ตรวจ JSON และฟิลด์ที่จำเป็น
วิธีจัดการและลองใหม่: แก้พารามิเตอร์ตามคำสั่งและเงื่อนไขช่องทางก่อนเรียกใหม่ การส่งคำขอผิดแบบเดิมซ้ำไม่ช่วยแก้ข้อผิดพลาด
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 400 · 10000
{ "request_id": "req_example", "error": { "code": "invalid_request", "numeric_code": "10000", "message": "Invalid request parameters" } }- invalid_target_workspace · 11003 · 400
เวิร์กสเปซเป้าหมายที่กำหนดทับว่างหรือรูปแบบไม่ถูกต้อง ให้ลบเฮดเดอร์กำหนดทับและใช้ API Key ของเวิร์กสเปซเป้าหมาย
เงื่อนไข: ใช้เมื่อคำขอมีเฮดเดอร์ X-Workspace-Id เพื่อระบุเวิร์กสเปซทับ
วิธีจัดการและลองใหม่: แก้พารามิเตอร์ตามคำสั่งและเงื่อนไขช่องทางก่อนเรียกใหม่ การส่งคำขอผิดแบบเดิมซ้ำไม่ช่วยแก้ข้อผิดพลาด
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 400 · 11003
{ "request_id": "req_example", "error": { "code": "invalid_target_workspace", "numeric_code": "11003", "message": "Invalid target workspace" } }- invalid_api_key · 11001 · 401
ตรวจว่า API Key ถูกต้องและเปิดใช้งานอยู่
วิธีจัดการและลองใหม่: เก็บ request_id และรหัสแบบมีโครงสร้าง ตรวจคำสั่งปัจจุบันก่อนเลือกการดำเนินการถัดไป
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 401 · 11001
{ "request_id": "req_example", "error": { "code": "invalid_api_key", "numeric_code": "11001", "message": "Invalid API key" } }- missing_api_key · 11000 · 401
เพิ่มส่วนหัว X-Api-Key
วิธีจัดการและลองใหม่: เก็บ request_id และรหัสแบบมีโครงสร้าง ตรวจคำสั่งปัจจุบันก่อนเลือกการดำเนินการถัดไป
ตัวอย่าง · 401 · 11000
{ "request_id": "req_xxx", "error": { "code": "missing_api_key", "numeric_code": "11000", "message": "Missing X-Api-Key header" } }- beta_feature_not_enabled · 41002 · 403
เวิร์กสเปซต้องมีสิทธิ์ทดสอบแบบปิดเพื่อใช้ API การโทรและสมัครรับเหตุการณ์การโทรอย่างชัดเจน
วิธีจัดการและลองใหม่: เก็บ request_id และรหัสแบบมีโครงสร้าง ตรวจคำสั่งปัจจุบันก่อนเลือกการดำเนินการถัดไป
ตัวอย่าง · 403 · 41002
{ "request_id": "req_example", "error": { "code": "beta_feature_not_enabled", "numeric_code": "41002", "message": "Beta feature not enabled" } }- workspace_override_forbidden · 11002 · 403
คำขอพยายามระบุเวิร์กสเปซทับโดย API Key นี้ไม่มีสิทธิ์ ให้ลบเฮดเดอร์กำหนดทับและใช้ API Key ของเวิร์กสเปซเป้าหมาย
เงื่อนไข: ใช้เมื่อคำขอมีเฮดเดอร์ X-Workspace-Id เพื่อระบุเวิร์กสเปซทับ
วิธีจัดการและลองใหม่: เก็บ request_id และรหัสแบบมีโครงสร้าง ตรวจคำสั่งปัจจุบันก่อนเลือกการดำเนินการถัดไป
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 403 · 11002
{ "request_id": "req_example", "error": { "code": "workspace_override_forbidden", "numeric_code": "11002", "message": "Workspace override is not allowed" } }- account_not_found · 20020 · 404
ตรวจ account_id และใช้ X-Api-Key ของเวิร์กสเปซเจ้าของบัญชี คีย์ปัจจุบันไม่สามารถเข้าถึงบัญชีที่ไม่พบในเวิร์กสเปซนี้
วิธีจัดการและลองใหม่: ตรวจรหัสเป้าหมาย เจ้าของทรัพยากร และเวิร์กสเปซปัจจุบัน อย่าถือว่าเป้าหมายที่ยืนยันแล้วว่าไม่มีหรือเข้าไม่ถึงเป็นความขัดข้องชั่วคราวที่ควรลองซ้ำอัตโนมัติ
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 404 · 20020
{ "request_id": "req_example", "error": { "code": "account_not_found", "numeric_code": "20020", "message": "Account not found" } }- target_workspace_not_found · 11004 · 404
ไม่พบเวิร์กสเปซที่กำหนดทับหรือใช้งานไม่ได้ ตรวจเจ้าของเวิร์กสเปซ ลบเฮดเดอร์กำหนดทับ และใช้ API Key ของเวิร์กสเปซเป้าหมาย การส่งซ้ำไม่เพิ่มสิทธิ์
เงื่อนไข: ใช้เมื่อคำขอมีเฮดเดอร์ X-Workspace-Id เพื่อระบุเวิร์กสเปซทับ
วิธีจัดการและลองใหม่: ตรวจรหัสเป้าหมาย เจ้าของทรัพยากร และเวิร์กสเปซปัจจุบัน อย่าถือว่าเป้าหมายที่ยืนยันแล้วว่าไม่มีหรือเข้าไม่ถึงเป็นความขัดข้องชั่วคราวที่ควรลองซ้ำอัตโนมัติ
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 404 · 11004
{ "request_id": "req_example", "error": { "code": "target_workspace_not_found", "numeric_code": "11004", "message": "Target workspace not found" } }- account_webhook_already_exists · 40008 · 409
ใช้ account_id เรียกดูปลายทางเฉพาะบัญชี แล้วแก้ไขปลายทาง active ที่มีอยู่ หากต้องการเปลี่ยน ให้ปิดใช้งาน active เดิมก่อนเปิดปลายทางอื่น ห้ามลองสร้างหรือเปิดใช้งานอีกครั้งโดยอัตโนมัติ
วิธีจัดการและลองใหม่: อ่านการตั้งค่าปลายทางและบัญชีที่สังกัดก่อนส่งใหม่ PATCH แทนที่การตั้งค่า จึงต้องเก็บการสมัครเหตุการณ์ ลายเซ็น และนโยบายลองใหม่ที่ต้องการ เมื่อ active ขัดแย้งให้อัปเดตของเดิมหรือปิดของเดิมก่อนเปิดอีกอัน
ตัวอย่าง · 409 · 40008
{ "request_id": "req_example_webhook_conflict", "error": { "code": "account_webhook_already_exists", "numeric_code": "40008", "message": "Account already has an active webhook endpoint" } }- create_webhook_endpoint_failed · 40001 · 500
สร้าง จุดเชื่อมต่อ Webhook: ข้อผิดพลาดที่ยังไม่จัดประเภทขัดจังหวะการเปลี่ยนแปลง ต้องยืนยันสถานะสุดท้าย
วิธีจัดการและลองใหม่: อ่านการตั้งค่าปลายทางและบัญชีที่สังกัดก่อนส่งใหม่ PATCH แทนที่การตั้งค่า จึงต้องเก็บการสมัครเหตุการณ์ ลายเซ็น และนโยบายลองใหม่ที่ต้องการ เมื่อ active ขัดแย้งให้อัปเดตของเดิมหรือปิดของเดิมก่อนเปิดอีกอัน
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 500 · 40001
{ "request_id": "req_example", "error": { "code": "create_webhook_endpoint_failed", "numeric_code": "40001", "message": "Failed to create webhook endpoint" } }