ข้ามไปยังเนื้อหาหลัก
s.id Logo
ดู Markdown

Webhooks

Webhook ส่ง event จากบัญชี s.id ของคุณไปยังเซิร์ฟเวอร์ของคุณโดยตรง ลงทะเบียน endpoint ที่ Dashboard > Developer > Webhooks แล้วเลือก event ที่ต้องการ

Event และ header

เหตุการณ์ส่งเมื่อ
link.createdทำงานเมื่อสร้างลิงก์ใหม่
link.updatedทำงานเมื่อ URL หรือชื่อลิงก์เปลี่ยนแปลง
link.archivedทำงานเมื่อลิงก์ถูกเก็บเข้าคลัง
link.clickedทำงานทุกครั้งที่เปลี่ยนเส้นทาง (หนึ่งเหตุการณ์ต่อหนึ่งคลิก)
microsite.publishedทำงานเมื่อเผยแพร่ microsite
qr.scannedทำงานเมื่อสแกนคิวอาร์โค้ด
ส่วนหัวค่า
X-SID-Eventชื่อ event เช่น link.created
X-SID-Signaturesha256=<hmac-hex>
X-SID-Delivery-IDID ที่ไม่ซ้ำกันสำหรับการส่งแต่ละครั้ง
User-Agents.id-Webhooks/1.0
json
{
  "event": "link.created",
  "link": {
    "id": 123,
    "short": "[your-alias]",
    "short_url": "https://s.id/[your-alias]",
    "long_url": "https://example.com/long-url",
    "title": "My Link",
    "created": "2026-06-22T10:00:00Z"
  },
  "timestamp": "2026-06-22T10:00:00Z"
}

การส่ง

  • ส่งด้วย POST และ Content-Type: application/json
  • ลองส่งสูงสุด 3 ครั้งต่อ event โดยหน่วงเวลา 0, 5 และ 30 วินาที
  • webhook จะถูกปิดใช้งานหลังจาก event ที่ล้มเหลวติดต่อกัน 5 รายการ
  • ปุ่ม Test ส่ง payload ตัวอย่าง และประวัติการส่งดูได้ที่ Deliveries

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

การส่งแต่ละครั้งจะถูกลงลายเซ็นด้วย HMAC-SHA256 บน raw body โดยใช้ webhook secret ของคุณ คำนวณลายเซ็นใหม่ก่อนประมวลผล payload

javascript
const crypto = require('node:crypto');

function verifySignature(secret, rawBody, sigHeader) {
  if (typeof sigHeader !== 'string' || !sigHeader.startsWith('sha256=')) {
    return false;
  }

  const expected = 'sha256=' +
    crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
  const receivedBuffer = Buffer.from(sigHeader, 'utf8');
  const expectedBuffer = Buffer.from(expected, 'utf8');

  return receivedBuffer.length === expectedBuffer.length &&
    crypto.timingSafeEqual(receivedBuffer, expectedBuffer);
}