Skip to main content

Quản lý webhook

Xác thực dữ liệu webhook

Khi bạn muốn xác thực dữ liệu được nhận từ đầu api mà bạn đăng kí có phải từ PiScale hay không? Vui lòng làm theo hướng dẫn sau:

  • Lấy dữ liệu x-piscale-timestampx-piscale-signature từ request header.
  • Lấy body từ request body.
  • Khóa bí mật của hàm băm là bot_token, thông số được trả về khi bot được tạo thành công.
  • Thực hiện băm SHA-256 dữ liệu từ x-piscale-timestampbody với định dạng đầu vào "{x-piscale-timestamp}.{body}".

Nếu kết quả của hàm băm bằng với giá trị x-piscale-signature thì request được gửi từ PiScale.

Ví dụ:
receiveWebhook(signature: string, timestamp: string, body: any): string {
// Start verify signature
const secretKey = process.env.BOT_TOKEN;
const hash = crypto.createHmac('sha256', secretKey);
hash.update(`${timestamp}.${body}`);

const hashSignature = hash.digest('hex');
if (hashSignature !== signature) {
console.log('Signature is invalid');
return 'NOT OK';
}
// End verify signature

// TODO: Define your logic here
return 'OK';
}

Webhook Body

Dưới đây là body được gửi tới webhook_url:

Tin nhắn văn bản

{
"type":"message_created",
"created_at":1723652465925,
"payload":{
"ext_bot_id":"6872016393688539",
"message_id":4,
"text":"Alo",
"is_rtf":true,
"thread_id":"45591586546110",
"thread_type":"direct",
"version":"1.0",
"sender":{
"user_id":"30043",
"display_name":"Nam To To",
"avatar_url":"https://sign-NGVjZWRjNi5wbmc.png",
"ext_user_id":"6872016393206779",
"app_id":100001
},
"metadata":null
}
}

Tin nhắn hình ảnh

{
"type": "message_created",
"created_at": 1723652615141,
"payload": {
"ext_bot_id": "6872016393688539",
"message_id": 6,
"text": "Image nè",
"is_rtf": true,
"thread_id": "45591586546110",
"thread_type": "direct",
"version": "1.0",
"sender": {
"user_id": "30043",
"display_name": "Nam To To",
"avatar_url": "https://sign-avatar.piscale.com/5nxrJMzgc.png",
"ext_user_id": "6872016393206779",
"app_id": 100001
},
"metadata": [
{
"name": "Screenshot_2024-08-11_at_16_45_03.png",
"size": 446533,
"height": 859,
"width": 2000,
"source_thumb_url": "https://thumb-i-1.piscale.com/<width>x<height>/smart/1003.png",
"source_url": "https://image-1.piscale.com/116_45_03.png",
"type": "image"
}
]
}
}

Tin nhắn video

{
"type": "message_created",
"created_at": 1723653399249,
"payload": {
"ext_bot_id": "6872016393688539",
"message_id": 8,
"text": "video nè",
"is_rtf": true,
"thread_id": "45591586546110",
"thread_type": "direct",
"version": "1.0",
"sender": {
"user_id": "30043",
"display_name": "Nam To To",
"avatar_url": "https://sign-avatar.piscale.com/5nxrJMzgiRxshfApISa2bmc.png",
"ext_user_id": "6872016393206779",
"app_id": 100001
},
"metadata": [
{
"name": "b2o.mov",
"size": 106568790,
"height": 1762,
"width": 2974,
"source_thumb_url": "https://video-1.piscale.com/100001/10/thumb.jpg",
"source_url": "https://video-1.piscale.com/100001/100001/b2o.mov",
"type": "video",
"duration": 173.15
}
]
}
}

Tin nhắn tệp

{
"type": "message_created",
"created_at": 1723653069259,
"payload": {
"ext_bot_id": "6872016393688539",
"message_id": 7,
"text": "Tệp nè",
"is_rtf": true,
"thread_id": "45591586546110",
"thread_type": "direct",
"version": "1.0",
"sender": {
"user_id": "30043",
"display_name": "Nam To To",
"avatar_url": "https://sign-avatar.piscale.com/i5wbmc.png",
"ext_user_id": "6872016393206779",
"app_id": 100001
},
"metadata": [
{
"name": "halan.jpeg",
"size": 275397,
"source_url": "https://file-1.piscale.com/100.jpeg",
"type": "file"
}
]
}
}

Tin nhắn liên kết

{
"type": "message_created",
"created_at": 1723653564332,
"payload": {
"ext_bot_id": "6872016393688539",
"message_id": 9,
"text": "https://google.com",
"is_rtf": true,
"thread_id": "45591586546110",
"thread_type": "direct",
"version": "1.0",
"sender": {
"user_id": "30043",
"display_name": "Nam To To",
"avatar_url": "https://sign-avatar.piscale.comc.png",
"ext_user_id": "6872016393206779",
"app_id": 100001
},
"metadata": [
{
"title": "Google",
"source_url": "https://google.com",
"sitename": "google.com",
"type": "preview_link"
}
]
}
}

Tin nhắn sticker

{
"type": "message_created",
"created_at": 1723653637612,
"payload": {
"ext_bot_id": "6872016393688539",
"message_id": 10,
"is_rtf": false,
"thread_id": "45591586546110",
"thread_type": "direct",
"version": "1.0",
"sender": {
"user_id": "30043",
"display_name": "Nam To To",
"avatar_url": "https://sign-avatar.piscale.com/5n5wbmc.png",
"ext_user_id": "6872016393206779",
"app_id": 100001
},
"metadata": [
{
"source_url": "https://file-1.piscale.com/100001/100001/7a35c120-4719-49b2d7.webp",
"type": "sticker",
"file_type": "webp"
}
]
}
}