ทักคับ นักพัฒนา

เริ่มต้นใช้งาน

Webhook

Webhook ส่งข้อความจากลูกค้ามาที่เซิร์ฟเวอร์ของคุณทันที ไม่ต้องถาม API ซ้ำ ๆ

ตั้งค่า#

  1. ไปที่เมนู นักพัฒนา บนเว็บจัดการออฟฟิศ
  2. ใส่ที่อยู่ https ของเซิร์ฟเวอร์คุณ แล้วกดบันทึก
  3. คัดลอกความลับสำหรับตรวจลายเซ็น ระบบแสดงครั้งเดียว
  4. กด ส่งทดสอบ เพื่อตรวจว่าปลายทางรับได้

ข้อมูลที่ส่งมา#

ส่งแบบ POST เนื้อหาเป็น JSON ตอนนี้มีเหตุการณ์ message.received และ webhook.test

message.received
{
  "event": "message.received",
  "id": "1042-7",
  "created_at": 1793857502513,
  "office_id": "4611686018507324416",
  "thread": {
    "id": "1042",
    "customer_name": "คุณสมหญิง",
    "tags": ["VIP"],
    "note": "ชอบรับของช่วงเช้า"
  },
  "message": {
    "id": 7,
    "sent_at": 1793857502513,
    "from": "customer",
    "type": "text",
    "text": "ขนมชั้นวันนี้เหลือไหมคะ",
    "file": null,
    "location": null
  }
}

ระบบส่งเฉพาะข้อความจากลูกค้า คำตอบของออฟฟิศไม่ย้อนกลับมา บอทจึงไม่ตอบตัวเองวนไปมา

หัวข้อที่แนบมา#

หัวข้อความหมาย
X-Takkub-Eventชื่อเหตุการณ์
X-Takkub-Deliveryรหัสเหตุการณ์ ใช้กันทำงานซ้ำ
X-Takkub-Timestampเวลาที่ส่ง เป็นวินาที
X-Takkub-Signatureลายเซ็น เช่น v1=abc123

ตรวจลายเซ็น#

ต้องตรวจทุกครั้ง เพราะใครก็ยิงเข้าที่อยู่ของคุณได้ คำนวณ HMAC-SHA256 ของ timestamp.เนื้อหาดิบ ด้วยความลับ แล้วเทียบกับลายเซ็น และควรปฏิเสธเวลาที่เก่าเกิน 5 นาที

import crypto from 'node:crypto';

function verify(rawBody, timestamp, signature, secret) {
  if (Math.abs(Date.now() / 1000 - Number(timestamp)) > 300) return false;
  const expected = 'v1=' + crypto.createHmac('sha256', secret)
    .update(`${timestamp}.${rawBody}`).digest('hex');
  const a = Buffer.from(expected);
  const b = Buffer.from(signature || '');
  return a.length === b.length && crypto.timingSafeEqual(a, b);
}

การตอบกลับและการลองซ้ำ#

  • ตอบสถานะ 2xx ภายใน 5 วินาที แล้วค่อยทำงานหนัก เช่น เรียก AI ต่อภายหลัง
  • ถ้าไม่สำเร็จ ระบบลองใหม่อีก 2 ครั้ง หลัง 2 และ 10 วินาที
  • ล้มเหลวติดกัน 100 ครั้ง ระบบปิด Webhook ให้ กดบันทึกบนเว็บเพื่อเปิดใหม่
  • ระบบอาจส่งซ้ำ ให้ใช้ id กันทำงานซ้ำ
  • ข้อความอาจตกหล่นเมื่อคิวเต็ม หรือปลายทางล่มนาน ควรอ่าน รายการแชต เพื่อตามงานที่ค้างเป็นระยะ