LINE API – Webhook
จากใน บทที่ 1 ที่เราติดตั้ง ทำ LINE Bot ไปแล้ว จะเห็นว่าได้มีการ configure URL https ของเราลงไป เพื่อใช้ในการรับ notification ที่เกิดกับ account LINE ของเราแบบ realtime โดยทาง LINE เองจะส่ง https POST มาให้กับ server ของเรา หลักการของ LINE API หรือ Messaging API ที่ได้แนะนำไปในบทที่ 2 และ บทที่ 3
- บทที่1 เราสามารถติดตั้ง LINE Bot บน Linux ได้
- บทที่2 อธิบายการทำงานของ LINE Messaging API ที่เอามาใช้งาน
- บทที่3 ข้อกำหนดการใช้งานของ LINE API command
ต่อไปนี้เราจะมาทำความเข้าใจกับโครงสร้างของ request ที่ส่งมาด้วย webhook
Request headers
หลักการของ LINE API Webhook ภายในส่วนของ header จะมี tag X-Line-Signature เป็นรหัสไว้ตรวจสอบ เทียบกับ Channel Secret ว่าตรงกันไหม เพื่อยืนยันว่าส่งมาจาก LINE Server จริง
Request header | Description |
---|---|
X-Line-Signature | Used for signature validation |
Request body
เป็น JSON format ภายในเป็น array เก็บของในรูปแบบของ webhooks event objects
Field | Type | Description |
---|---|---|
events | Array of webhook event objects | Information about the event |
ตัวอย่างเช่น
{
"events": [
{
"replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
"type": "message",
"timestamp": 1462629479859,
"source": {
"type": "user",
"userId": "U206d25c2ea6bd87c17655609a1c37cb8"
},
"message": {
"id": "325708",
"type": "text",
"text": "Hello, world"
}
}
]
}
Response
Server ของเราต้องตอบ https status code 200 สำหรับ HTTP POST ที่มาจาก Webhooks กลับไปให้ LINE Server แต่ต่อให้เรา return fail ทาง LINE Server ก็ไม่ resent transactions นั้นลงมาอีกอยู่ดี (- 0 -)
Webhook event object
ส่วนนี้คือข้อมูลที่เราต้องการจริงๆ เพราะคือรายละเอียดของ message ที่ถูกเก็บอยู่ในรูป JSON object เรามาดูกันว่ามีโครงสร้างอย่างไร
{ "events": [ { "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA", "type": "message", "timestamp": 1462629479859, "source": { "type": "user", "userId": "U206d25c2ea6bd87c17655609a1c37cb8" }, "message": { "id": "325708", "type": "text", "text": "Hello, world" } }, { "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA", "type": "follow", "timestamp": 1462629479859, "source": { "type": "user", "userId": "U206d25c2ea6bd87c17655609a1c37cb8" } } ] }
จะเห็นว่าภายใต้ events จะเป็น array ของ messages ซึ่งแต่ละ message เองก็จะมี file ดังนี้
- Common fields คือ field ที่ต้องมีทุกๆ event
Field | Type | Description |
---|---|---|
replyToken | String | เป็น token id ที่ทาง LINE generate ขึ้นมา สำหรับใช้ในการ reply message กลับไป |
type | String | ชนิดของ event เช่น message, follow, unfollo, join, leave, postback |
timestamp | Number | เวลาที่เกิด event (milliseconds) |
source | User Group Room |
เป็น JSON object ที่มีข้อมูลผู้ส่ง ว่ามาจากไหน และ id อะไร
"source": { "type": "user", "userId": "U206d25c2ea6bd87c17655609a1c37cb8" }, |
- Message event เป็น event object ที่มีข้อมูล messages หลายแบบ เช่น text, image, video, audio, location, sticker
Text
"message": { "id": "325708", "type": "text", "text": "Hello, world" }
Field | Type | Description |
---|---|---|
id | String | Message ID |
type | String | text |
text | String | Message text |
Image, Video, Audio
สำหรับการ download ข้อมูล content จะใช้ message id ในนี้ไปดึงจากอีก end point ในหัวข้อ content
"message": { "id": "325708", "type": "image" }
Field | Type | Description |
---|---|---|
id | String | Message ID |
type | String | image, video, audio |
Location
"message": { "id": "325708", "type": "location", "title": "my location", "address": "Bangkok Thailand", "latitude": 35.65910807942215, "longitude": 139.70372892916203 }
Field | Type | Description |
---|---|---|
id | String | Message ID |
type | String | location |
title | String | Title |
address | String | Address |
latitude | Decimal | Latitude |
longitude | Decimal | Longitude |
Sticker message
"message": { "id": "325708", "type": "sticker", "packageId": "1", "stickerId": "1" }
Field | Type | Description |
---|---|---|
id | String | Message ID |
type | String | sticker |
packageId | String | Package ID |
stickerId | String | Sticker ID |
- Follow event การขอ add friend หรือ unblock
{ "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA", "type": "follow", "timestamp": 1462629479859, "source": { "type": "user", "userId": "U206d25c2ea6bd87c17655609a1c37cb8" } }
Field | Type | Description |
---|---|---|
type | String | follow |
replyToken | String | Token for replying to this event |
- Unfollow event มีการ block account เรา
{ "type": "unfollow", "timestamp": 1462629479859, "source": { "type": "user", "userId": "U206d25c2ea6bd87c17655609a1c37cb8" } }
Field | Type | Description |
---|---|---|
type | String | unfollow |
- Join event มีการชวน account เราเข้า group/room
{ "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA", "type": "join", "timestamp": 1462629479859, "source": { "type": "group", "groupId": "cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" } }
Field | Type | Description |
---|---|---|
type | String | join |
replyToken | String | Token for replying to this event |
- Leave event โดนเตะออกจาก group/room
{ "type": "leave", "timestamp": 1462629479859, "source": { "type": "group", "groupId": "cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" } }
Field | Type | Description |
---|---|---|
type | String | leave |
สรุป Webhook ก็คือส่วนของ message notification ที่ทาง LINE Server ส่งมาให้เรา ให้รับทราบถึง event trigger ที่เกิดขึ้น realtime ซึ่งในเราสามารถนำเอามาเป็น input ให้ LINE Bot เราใช้ทำงานได้
บทความต่อไปคือ วิธีส่งข้อความผ่าน LINE API จาก server ของเราไปยัง LINE Server เพื่อ notify user ที่เป็นเพื่อนของ account เรา
Reference:
- ทำความเข้าใจ LINE API (Unofficial) – Messaging API
- ทำ LINE bot (Unofficial) สามารถโต้ตอบแบบ Chatbot หรือ Echobot
- วิธีสมัคร LINE Business Center และ LINE@
- บทที่1 ทำ LINE Bot สามารถโต้ตอบ หรือ Chatbot ด้วย Python (Official)
- บทที่2 เรียนรู้ LINE API คืออะไร ทำ LINE Bot ผ่าน LINE Messaging API (Official)
- บทที่3 วิธีใช้ LINE API (Messaging API) เพื่อทำ LINE Bot
- บทที่4 Webhook หลักการของ LINE API ที่เอาไว้ ทำ LINE Bot
- บทที่5 วิธีส่งข้อความผ่าน LINE API หรือ LINE Bot ด้วย Curl
- บทที่6 วิธีใช้ LINE Python SDK ทำ LINE Bot ด้วย LINE Messaging API
Author: Suphakit Annoppornchai
Credit: https://saixiii.com,https://devdocs.line.me
[…] ในบทต่อเราจะมาดูกันว่า Webhook คืออะไร […]
[…] บทที่4 Webhook หลักการของ LINE API ที่เอาไว้ ทำ … […]
[…] บทที่4 Webhook หลักการของ LINE API ที่เอาไว้ ทำ … […]
[…] บทที่4 การรับ Notification จากLINE Server ด้วย Webhook […]
[…] บทที่4 Webhook หลักการของ LINE API ที่เอาไว้ ทำ … […]