ข้ามไปยังเนื้อหา

ตั้งค่าเว็บฮุคสำหรับเหตุการณ์ของเอเจนต์

รับ POST ที่มีการลงลายเซ็นบน endpoint https ของคุณเองเมื่อการทำงานของเอเจนต์เสร็จสิ้นหรือล้มเหลว เมื่อเอเจนต์รอการอนุมัติ หรือเมื่อมีการเผยแพร่ไซต์เอกสาร ครอบคลุมถึงเหตุการณ์, เพย์โหลด, การตรวจสอบลายเซ็น, การลองใหม่ และการปิดใช้งานอัตโนมัติ

อัปเดตเมื่อ ใช้เวลาอ่าน 9 นาที

เว็บฮุคจะส่ง POST ที่มีการลงลายเซ็นไปยัง endpoint ของคุณทันทีที่มีเหตุการณ์เกิดขึ้น เช่น เมื่อการทำงานของเอเจนต์เสร็จสิ้นหรือเอเจนต์กำลังรอการอนุมัติ เพื่อให้ระบบของคุณไม่ต้องคอยดึงข้อมูล บทความนี้ครอบคลุมถึงการเพิ่ม endpoint, เหตุการณ์ต่างๆ, เพย์โหลด, การตรวจสอบลายเซ็น และสิ่งที่เกิดขึ้นเมื่อการส่งข้อมูลไม่สำเร็จ

ก่อนที่คุณจะเริ่ม

  • เว็บฮุคมีให้ใช้งานในแผน Pro, Business และ Custom ("เว็บฮุคมีให้ใช้งานในแผน Pro ขึ้นไป")
  • เฉพาะเจ้าของพื้นที่ทำงานและผู้ดูแลระบบเท่านั้นที่จัดการเว็บฮุคได้ สมาชิกคนอื่นจะเห็นข้อความ "เฉพาะเจ้าของและผู้ดูแลระบบเท่านั้นที่จัดการเว็บฮุคได้"
  • คุณต้องมีที่อยู่ https สาธารณะที่ตอบกลับด้วยสถานะ 2xx ภายใน 10 วินาที
  • พื้นที่ทำงานหนึ่งแห่งสามารถมีเว็บฮุคได้สูงสุด 10 รายการ

เพิ่มเว็บฮุค

  1. เปิดแท็บเว็บฮุค

    เปิดเมนูพื้นที่ทำงาน เลือก AI agents & API จากนั้นเปิด Webhooks แล้วคลิก เว็บฮุคใหม่

    แท็บเว็บฮุคที่มี endpoint หนึ่งรายการที่ example.com, เหตุการณ์ที่ได้รับ และเวลาที่ส่งล่าสุด
    เว็บฮุคแต่ละรายการจะแสดงเหตุการณ์, เวลาที่ส่งล่าสุด และส่วนท้ายของรหัสลับ
  2. ป้อน endpoint

    • Endpoint URL: "ที่อยู่ HTTPS สาธารณะ" เช่น https://example.com/clevera/webhooks
    • คำอธิบาย: ไม่บังคับ สูงสุด 200 ตัวอักษร เช่น "Slack relay"
  3. เลือกเหตุการณ์

    เลือกเหตุการณ์ที่ต้องการรับ หรือเลือก เหตุการณ์ทั้งหมด รวมถึงเหตุการณ์ใหม่ เหตุการณ์ที่ทำเครื่องหมายว่า เร็วๆ นี้ จะถูกยอมรับแต่ "ยังไม่มีเหตุการณ์นี้ส่งออกมาในขณะนี้"

    กล่องโต้ตอบเว็บฮุคใหม่: URL ของ endpoint, คำอธิบาย และเหตุการณ์ที่จะส่ง โดยเหตุการณ์ที่ยังไม่ส่งจะทำเครื่องหมายว่า เร็วๆ นี้
    เหตุการณ์ที่ทำเครื่องหมายว่า เร็วๆ นี้ จะถูกยอมรับแต่ยังไม่มีการส่งออกมา
  4. สร้างและบันทึกรหัสลับ

    คลิก สร้างเว็บฮุค รหัสลับการลงลายเซ็น (ขึ้นต้นด้วย whsec_) จะแสดงเพียงครั้งเดียว: "คัดลอกตอนนี้: คุณจะไม่เห็นมันอีก ใช้เพื่อตรวจสอบส่วนหัว Clevera-Signature" บันทึกไว้เหมือนรหัสผ่าน จากนั้นคลิก ฉันบันทึกไว้แล้ว

  5. ส่งเหตุการณ์ทดสอบ

    เปิดเมนู ⋯ ของเว็บฮุคแล้วเลือก ส่งเหตุการณ์ทดสอบ Clevera จะส่งเหตุการณ์ ping ที่มีการลงลายเซ็นหนึ่งครั้ง (ไม่มีการลองใหม่) "ส่งเหตุการณ์ทดสอบแล้ว" หมายความว่าเหตุการณ์ออกจาก Clevera แล้ว ให้ตรวจสอบ การส่งข้อมูล เพื่อดูคำตอบจาก endpoint ของคุณ

เหตุการณ์

เหตุการณ์ ส่งเมื่อ
job.started งานที่เอเจนต์เริ่มทำงานเริ่มดำเนินการ
job.needs_input งานรอการดำเนินการจากบุคคล เช่น การอนุมัติ รวมถึงลิงก์และเวลาที่คำขอหมดอายุ
job.succeeded งานเสร็จสิ้น
job.failed งานล้มเหลว รวมถึงรหัสข้อผิดพลาด
job.canceled งานถูกยกเลิก หรือการอนุมัติถูกปฏิเสธหรือหมดอายุ
approval.requested เอเจนต์ขอการอนุมัติใน คำขอจากเอเจนต์
approval.decided มีคนอนุมัติหรือปฏิเสธคำขอ หรือคำขอหมดอายุ
site.published ไซต์เอกสารได้รับการเผยแพร่
site.build_failed การเผยแพร่ไซต์เอกสารล้มเหลว
ping คุณคลิก ส่งเหตุการณ์ทดสอบ ไม่จำเป็นต้องสมัครรับข้อมูล

เหตุการณ์เหล่านี้แสดงเป็น เร็วๆ นี้ และยังไม่มีการส่งออกมา: job.progress, video.ready, article.ready, research.completed, insights.weekly

เหตุการณ์ของงานจะครอบคลุมงานที่เอเจนต์เริ่ม (ผ่านโทเค็น API หรือแอปที่เชื่อมต่อ) ไม่ใช่วิดีโอที่ผู้คนเริ่มในแอป

สิ่งที่ Clevera ส่ง

การส่งข้อมูลทุกครั้งคือ POST ที่มีเนื้อหา JSON และส่วนหัวดังนี้:

ส่วนหัว ค่า
Content-Type application/json
User-Agent Clevera-Webhooks/1.0
Clevera-Event ชื่อเหตุการณ์ เช่น job.succeeded
Clevera-Delivery รหัสเฉพาะของการส่งข้อมูล การส่งซ้ำจะใช้รหัสเดิม ดังนั้นให้ใช้เพื่อละเว้นรายการที่ซ้ำกัน
Clevera-Signature t=<unix time>,v1=<signature>

เพย์โหลดจะประกอบด้วยรหัส, ลิงก์, สถานะ และตัวเลข โดยไม่มีเนื้อหาจริง หากต้องการอ่านวิดีโอหรือบทความที่เสร็จสิ้น ให้เรียกใช้ API ด้วยโทเค็น

job.succeeded
{
  "id": "6f1c2d3e-4b5a-4c6d-8e9f-0a1b2c3d4e5f",
  "event": "job.succeeded",
  "created_at": "2026-10-20T14:03:11Z",
  "data": {
    "job": {
      "id": "job_8k2m4n6p8r0t2v4x",
      "kind": "video.create",
      "status": "succeeded",
      "error_code": null,
      "subject": { "type": "video", "id": "vid_example" },
      "credits_spent": 64
    },
    "needs_input": null,
    "workspace": { "id": "tm_example" }
  }
}
approval.requested
{
  "id": "0b9a8c7d-6e5f-4a3b-9c2d-1e0f9a8b7c6d",
  "event": "approval.requested",
  "created_at": "2026-10-20T14:01:02Z",
  "data": {
    "approval": {
      "id": "apr_example",
      "kind": "spend",
      "status": "pending",
      "credits_high": 80,
      "expires_at": "2026-10-21T14:01:02Z",
      "decided_at": null,
      "url": "https://app.clevera.ai/agents?tab=requests&team=tm_example"
    },
    "job": { "id": "job_8k2m4n6p8r0t2v4x", "kind": "video.create" },
    "workspace": { "id": "tm_example" }
  }
}

ตรวจสอบลายเซ็น

ตรวจสอบการส่งข้อมูลทุกครั้งก่อนที่คุณจะเชื่อถือ ลายเซ็นคือ HMAC-SHA256 ที่ใช้รหัสลับการลงลายเซ็นของคุณ, การประทับเวลา, จุด และเนื้อหาคำขอ ดิบ: <t>.<body>

  1. อ่าน t และ v1 จากส่วนหัว Clevera-Signature
  2. คำนวณ HMAC-SHA256(secret, t + "." + rawBody) เป็นเลขฐานสิบหก
  3. เปรียบเทียบกับ v1 ในเวลาคงที่
  4. ปฏิเสธการส่งข้อมูลที่มี t เก่าเกิน 5 นาที เพื่อไม่ให้คำขอที่ถูกดักจับถูกนำมาเล่นซ้ำได้
verify.js
import crypto from 'node:crypto';

export function verifyClevera(rawBody, header, secret, toleranceSeconds = 300) {
  const parts = Object.fromEntries(header.split(',').map((p) => p.trim().split('=')));
  const t = Number(parts.t);
  if (!parts.v1 || !Number.isInteger(t)) return false;
  if (Math.abs(Date.now() / 1000 - t) > toleranceSeconds) return false;
  const expected = crypto.createHmac('sha256', secret).update(`${t}.${rawBody}`).digest('hex');
  return expected.length === parts.v1.length &&
    crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1));
}

ใช้เนื้อหาตามที่ได้รับมาทุกประการ การแยกวิเคราะห์และเข้ารหัส JSON ใหม่ก่อนจะทำให้ไบต์เปลี่ยนไปและลายเซ็นจะไม่ตรงกัน

การลองใหม่และความล้มเหลว

การส่งข้อมูลจะถือว่าสำเร็จเมื่อ endpoint ของคุณตอบกลับด้วยสถานะ 2xx หากเป็นอย่างอื่นจะถือว่าความพยายามล้มเหลว:

  • สถานะอื่นๆ รวมถึงการเปลี่ยนเส้นทาง (3xx จะไม่ถูกติดตาม)
  • ไม่มีการตอบกลับภายใน 10 วินาที (5 วินาทีในการเชื่อมต่อ)
  • ที่อยู่ที่ไม่มีการแก้ไขไปยังอินเทอร์เน็ตสาธารณะอีกต่อไป

Clevera จะลองส่งข้อมูลที่ล้มเหลวใหม่ 5 ครั้ง หลังจากผ่านไป 1 นาที, 5 นาที, 30 นาที, 2 ชั่วโมง และ 6 ชั่วโมง เนื้อหาการตอบกลับของ endpoint ของคุณจะไม่ถูกอ่าน

เมื่อการส่งข้อมูลล้มเหลวติดต่อกัน 15 ครั้ง เว็บฮุคจะถูกปิด: "ปิดใช้งานหลังจากส่งข้อมูลล้มเหลวติดต่อกัน 15 ครั้ง แก้ไข endpoint แล้วเปิดใช้งาน" เจ้าของและผู้ดูแลระบบจะได้รับการแจ้งเตือน "เว็บฮุคไปยัง host ถูกปิด": "การส่งข้อมูลล้มเหลวอย่างต่อเนื่อง แก้ไข endpoint แล้วเปิดใช้งานอีกครั้ง" เหตุการณ์ที่เกิดขึ้นในขณะที่ปิดอยู่จะไม่ถูกส่ง เหตุการณ์ทดสอบจะไม่ถูกนับรวมในนี้

จัดการเว็บฮุค

คลิก การส่งข้อมูล บนเว็บฮุคเพื่อดูบันทึก หรือเปิดเมนู ⋯ เพื่อดูตัวเลือกอื่นๆ:

ตัวเลือก การทำงาน
แก้ไข เปลี่ยน URL, เหตุการณ์ หรือคำอธิบาย
การส่งข้อมูล การส่งข้อมูลล่าสุด 100 รายการพร้อมสถานะ (สำเร็จ, ไม่สำเร็จ, กำลังส่ง), ความพยายาม และรหัส HTTP ส่งซ้ำ จะส่งรายการนั้นอีกครั้ง ข้อมูลการส่งจะถูกเก็บไว้ 30 วัน
ส่งเหตุการณ์ทดสอบ ส่ง ping ที่มีการลงลายเซ็น
สร้างรหัสลับใหม่ "การส่งข้อมูลจะถูกลงลายเซ็นด้วยรหัสลับใหม่ทันที อัปเดต endpoint ของคุณเพื่อตรวจสอบ" ไม่มีการซ้อนทับ ดังนั้นให้อัปเดต endpoint ของคุณทันทีหลังจากนั้น
ปิด / เปิดใช้งาน หยุดชั่วคราวและดำเนินการส่งข้อมูลต่อ
ลบ "เราจะหยุดส่งเหตุการณ์ไปยังรายการนี้และลบบันทึกการส่งข้อมูลทิ้ง ซึ่งไม่สามารถย้อนกลับได้"

หากพื้นที่ทำงานออกจากแผน Pro

เว็บฮุคจะยังคงอยู่ในรายการและสามารถแก้ไขหรือลบได้ แต่จะไม่มีการส่งข้อมูลใดๆ การส่งข้อมูลที่รอการลองใหม่จะสิ้นสุดลงด้วยสถานะไม่สำเร็จ plan_locked และ ส่งเหตุการณ์ทดสอบ กับ ส่งซ้ำ จะแสดงข้อความ "เว็บฮุคไม่ได้อยู่ในแผนของคุณ" การอัปเกรดกลับเป็น Pro จะเริ่มส่งข้อมูลอีกครั้ง โดยไม่มีข้อมูลใดถูกลบ

การแก้ไขปัญหา

ข้อความ สาเหตุ วิธีแก้ไข
"เว็บฮุคไม่ได้อยู่ในแผนของคุณ" พื้นที่ทำงานไม่ได้อยู่ในแผน Pro, Business หรือ Custom อัปเกรดเป็น Pro
"ใช้ที่อยู่ https://" URL ขึ้นต้นด้วย http:// ให้บริการ endpoint ผ่าน HTTPS
"ใช้ชื่อโฮสต์ ไม่ใช่ที่อยู่ IP" URL ใช้ที่อยู่ IP ใช้ชื่อโดเมน
"ที่อยู่นี้ไม่สามารถเข้าถึงได้บนอินเทอร์เน็ตสาธารณะ" โฮสต์แก้ไขเป็นที่อยู่ส่วนตัวหรือภายใน ใช้ endpoint สาธารณะ หรือ relay
"ลบชื่อผู้ใช้และรหัสผ่านออกจากที่อยู่" URL มี user:password@ ลบออก แล้วตรวจสอบลายเซ็นแทน
"ป้อนที่อยู่เว็บที่ถูกต้อง" URL ไม่ถูกต้อง ตรวจสอบการพิมพ์ผิด
"เลือกอย่างน้อยหนึ่งเหตุการณ์" ไม่ได้เลือกเหตุการณ์ เลือกอย่างน้อยหนึ่งเหตุการณ์
"พื้นที่ทำงานนี้มีเว็บฮุค 10 รายการแล้ว" ถึงขีดจำกัดของพื้นที่ทำงาน ลบรายการที่คุณไม่ได้ใช้
"เปิดใช้งานเว็บฮุคก่อน" คุณพยายามส่งซ้ำบนเว็บฮุคที่ปิดอยู่ เปิดใช้งาน แล้วส่งซ้ำ
"การส่งข้อมูลนี้กำลังถูกส่ง" การส่งข้อมูลกำลังลองใหม่ รอให้เสร็จสิ้น
การส่งข้อมูลล้มเหลวด้วยรหัส HTTP endpoint ของคุณตอบกลับด้วยข้อผิดพลาด ตรวจสอบบันทึกของ endpoint และตรวจสอบว่าตอบกลับ 2xx อย่างรวดเร็ว ทำงานที่ช้าหลังจากตอบกลับแล้ว
ลายเซ็นไม่ตรงกัน เนื้อหาถูกเปลี่ยนก่อนตรวจสอบ หรือรหัสลับเก่า ตรวจสอบกับเนื้อหาดิบ สร้างรหัสลับใหม่หากไม่แน่ใจ