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-Signature | sha256=<hmac-hex> |
X-SID-Delivery-ID | ID ที่ไม่ซ้ำกันสำหรับการส่งแต่ละครั้ง |
User-Agent | s.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);
}