วิธีส่งข้อความผ่าน LINE API
ตอนนี้มาถึงบทสุดท้ายของเนื้อหา LINE API แล้ว ในบทนี้เรามาดู วิธีส่งข้อความผ่าน LINE API เช่น message, image, location, sticker กลับไปหาทาง user กันครับ ซึ่งจากบทที่ผ่านมาทำให้เราสามารถเข้าใจเนื้อหาดังนี้แล้ว
- บทที่1 เราสามารถติดตั้ง LINE Bot บน Linux ได้
- บทที่2 อธิบายการทำงานของ LINE Messaging API ที่เอามาใช้งาน
- บทที่3 ข้อกำหนดการใช้งานของ LINE API command
- บทที่4 การรับ Notification จาก LINE Server ด้วย Webhook
ก่อนที่เราจะมาดู วิธีส่งข้อความผ่าน LINE API เรามาดูเรื่องโครงสร้างของ Send message object กันก่อน เพราะมันคือ ข้อมูลที่จำเป็นในการส่งข้อความ
Send message object
เป็นรูปแบบ JSON format ที่จำเป็นสำหรับ API command แต่ละแบบ
- Text
- Image
- Video
- Audio
- Location
- Sticker
Text
มีด้วยกัน 2 field คือ type = “text” และ text ส่งได้สูงสุด 2000 ตัวอักษร สามารถใช้ emoticons ได้ตามมาตราฐาน unicode
{ "type": "text", "text": "Hello, world" }
Image
การส่งรูปภาพ อาจจะลำบากหน่อย เพราะทาง LINE จะให้เราส่งเป็น URL ของ รูปให้กับ LINE Server แทน เพราะฉะนั้นเราต้องหา Server ที่สำหรับ upload รูปภาพเอง และสร้าง link ขึ้นมาเพื่อเอาไปส่งให้ LINE โดยจำกัดขนาด
Field | Type | Required | Description |
---|---|---|---|
type | String | Yes | image |
originalContentUrl | String | Yes | Image URL (Max: 1000 characters) HTTPS JPEG Max: 1024 x 1024 Max: 1 MB |
previewImageUrl | String | Yes | Preview image URL (Max: 1000 characters) HTTPS JPEG Max: 240 x 240 Max: 1 MB |
{ "type": "image", "originalContentUrl": "https://example.com/original.jpg", "previewImageUrl": "https://example.com/preview.jpg" }
Video
เช่นเดียวกับ Image
Field | Type | Required | Description |
---|---|---|---|
type | String | Yes | video |
originalContentUrl | String | Yes | URL of video file (Max: 1000 characters) HTTPS mp4 Less than 1 minute Max: 10 MB |
previewImageUrl | String | Yes | URL of preview image (Max: 1000 characters) HTTPS JPEG Max: 240 x 240 Max: 1 MB |
{ "type": "video", "originalContentUrl": "https://example.com/original.mp4", "previewImageUrl": "https://example.com/preview.jpg" }
Audio
เช่นเดียวกับ Image แต่ใช้ duration แทน preview
Field | Type | Required | Description |
---|---|---|---|
type | String | Yes | audio |
originalContentUrl | String | Yes | URL of audio file (Max: 1000 characters) HTTPS m4a Less than 1 minute Max 10 MB |
duration | Number | Yes | Length of audio file (milliseconds) |
{ "type": "audio", "originalContentUrl": "https://example.com/original.m4a", "duration": 240000 }
Location
ระบุตำแหน่ง location ที่แสดงขึ้นมาเป็นแผนที่ใน chat
Field | Type | Required | Description |
---|---|---|---|
type | String | Yes | location |
title | String | Yes | Title Max: 100 characters |
address | String | Yes | Address Max: 100 characters |
latitude | Decimal | Yes | Latitude |
longitude | Decimal | Yes | Longitude |
{ "type": "location", "title": "my location", "address": "ฺBangkok, Thailand", "latitude": 35.65910807942215, "longitude": 139.70372892916203 }
Sticker
ส่ง Sticker ที่ LINE Id นั้นมีอยู่ใน profile
Field | Type | Required | Description |
---|---|---|---|
type | String | Yes | sticker |
packageId | String | Yes | Package ID |
stickerId | String | Yes | Sticker ID |
{ "type": "sticker", "packageId": "1", "stickerId": "1" }
ต่อไปเราจะมาดู วิธีส่งข้อความผ่าน LINE API แต่ก่อนจะใช้งาน LINE API เราต้องมี program สำหรับ POST HTTP กลับไปหา LINE Server ก่อน ซึ่งในบทนี้เราจะอาศัย Curl command ในการส่งกันครับ สำหรับท่านทีไม่รู้ว่า Curl คืออะไร ทำงานอย่างไร อ่านได้ที่นี่
อ้างอิงจาก Messaging API ของ LINE จะเห็นว่าเค้ามี API spec ดังนี้ให้เราเลือกใช้
- Webhooks – ใช้รับ Notification ซึ่งได้อธิบาย
- Reply message – ตอบ message กลับไปหา user ที่ส่ง message มา
- Push message – ส่ง message หา user ได้ตลอดเวลา
- Multicast – ส่ง message หาหลายๆ user พร้อมกัน (broadcast)
- Content – download รูป, video และ ข้อความเสียงที่ user ส่งมา
- Profile – ดึงข้อมูล user profile
- Leave – ออกจาก group/room
Reply message
ใช้สำหรับ response event จาก message ของ webhook ที่ทาง LINE notify กลับไปหา user, group, room ในรูปแบบทั้ง ข้อความ, รูปภาพ, ต่ำแหน่ง ก็ได้ ส่วนใหญ่ใช้สำหรับโต้ตอบข้อความ หรือที่เอามาทำ LINE Bot กันนั้นเอง ซึ่งข้อมูลที่ใช้ในการอ้างอิงกลับไปคือ replyToken แต่เจ้า replyToken นี้จะมีอายุสำหรับใช้ตอบกลับได้เพียงแค่ 1 นาที ซึ่งถ้าเกินจากนั้นทาง LINE Server จะถือว่า Token นี้ใช้ไม่ได้แล้ว
วิธีการใช้งานคือ
POST https://api.line.me/v2/bot/message/reply
Header
- Content-Type:application/json
- Authorization: {Channel Access Token} ที่ได้จากหน้า LINE@ Manager ในบทที่1
Body
- replyToken: {id ที่ทาง Webhook ส่งมา}
- messages array สูงสุดได้ 5 message ใช้รูปแบบตาม Send message object เช่น
- text { “type”:”text”, “text”:”Hello, user” }
- image { “type”: “image”, “originalContentUrl”: “https://example.com/original.jpg”, “previewImageUrl”: “https://example.com/preview.jpg” }
- video { “type”: “video”, “originalContentUrl”: “https://example.com/original.mp4”, “previewImageUrl”: “https://example.com/preview.jpg” }
- audio { “type”: “audio”, “originalContentUrl”: “https://example.com/original.m4a”, “duration”: 240000 }
- location { “type”: “location”, “title”: “my location”, “address”: “Bangkok, Thailand”, “latitude”: 35.65910807942215, “longitude”: 139.70372892916203 }
- Sticker { “type”: “sticker”, “packageId”: “1”, “stickerId”: “1” }
curl -X POST \ -H 'Content-Type:application/json' \ -H 'Authorization: Bearer {ENTER_ACCESS_TOKEN}' \ -d '{ "replyToken":"nHuyWiB7yP5Zw52FIkcQobQuGDXCTA", "messages":[ { "type":"text", "text":"Hello, user" }, { "type":"text", "text":"May I help you?" } ] }' https://api.line.me/v2/bot/message/reply
ถ้าสำเร็จจะได้รับ HTTP status code 200 OK
PUSH message
เราสามารถส่ง message หา user, group, room ได้ตลอด โดยไม่ต้องรอ notify เพื่อใช้ replyToken ในการส่ง แต่จะต้องอาศัพ source id ซึ่งก็คือ userid, groupid, roomid ที่ต้องการส่งไปหานั้นเอง ซึ่ง id ในที่นี้ย้ำว่าไม่ใช่ LINE ID ส่วนวิธีการหานั้น ง่ายที่สุดคือใช้วิธีการจำจาก webhook ครับ คือตอนที่ webhook notify message มาที่ server ของเรา จะมี object userId, groupId, roomID เราสามารถเก็บข้อมูลพวกนี้ไว้ใช้ได้โดย map กับชื่อ display name ได้ด้วย Profile API ที่จะอธิบายต่อด้านล่าง
"source": { "type": "user", "userId": "U206d25c2ea6bd87c17655609a1c37cb8" }
วิธีการใช้งานคือ
POST https://api.line.me/v2/bot/message/push
Header
- Content-Type:application/json
- Authorization: {Channel Access Token}
Body
- to: {id ปลายทางของ user, group, room}
- messages array สูงสุดได้ 5 message ใช้รูปแบบ เช่นเดี่ยวกับ Send message object
curl -X POST \ -H 'Content-Type:application/json' \ -H 'Authorization: Bearer {ENTER_ACCESS_TOKEN}' \ -d '{ "to": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "messages":[ { "type":"text", "text":"Hello, user" }, { "type":"text", "text":"May I help you?" } ] }' https://api.line.me/v2/bot/message/push
ถ้าสำเร็จจะได้รับ HTTP status code 200 OK
Multicast
คือการ push message ไปให้หลายๆ user พร้อมกัน
วิธีการใช้งานคือ
POST https://api.line.me/v2/bot/message/multicast
Header
- Content-Type:application/json
- Authorization: {Channel Access Token}
Body
- to: { array ของ id ปลายทางของ user, group, room} ได้สูงสุด 150 id
- messages array สูงสุดได้ 5 message ใช้รูปแบบ เช่นเดี่ยวกับ Send message object
curl -X POST \ -H 'Content-Type:application/json' \ -H 'Authorization: Bearer {ENTER_ACCESS_TOKEN}' \ -d '{ "to": ["xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"], "messages":[ { "type":"text", "text":"Hello, user" }, { "type":"text", "text":"May I help you?" } ] }' https://api.line.me/v2/bot/message/multicast
ถ้าสำเร็จจะได้รับ HTTP status code 200 OK
Content
download content เช่น image, video, autio จาก message id ซึ่งได้จาก webhook
{ "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA", "type": "message", "timestamp": 1462629479859, "source": { "type": "user", "userId": "U206d25c2ea6bd87c17655609a1c37cb8" }, "message": { "id": "325708", "type": "image" } }
วิธีการใช้งานคือ
GET https://api.line.me/v2/bot/message/{messageId}/content
Header
- Authorization: {Channel Access Token}
curl -X GET \ -H 'Authorization: Bearer {ENTER_ACCESS_TOKEN}' \ https://api.line.me/v2/bot/message/{messageId}/content
ทาง LINE Server จะตอบ HTTP Status 200 OK พร้อมกับ content binary ที่เราจะเก็บทำเป็น imge, video, audio file
Profile
ใช้สำหรับดึงข้อมูล LINE User โดยใช้ userID
GET https://api.line.me/v2/bot/profile/{userId}
Header
- Authorization: {Channel Access Token}
curl -X GET \ -H 'Authorization: Bearer {ENTER_ACCESS_TOKEN}' \ https://api.line.me/v2/bot/profile/{userId}
ผลที่ได้คือ displayName, userID, pictureURL, statusMessage ซึ่งเราสามารถนำเอาไปเก็บเป็น key-value ระหว่าง userID กับ displayName ได้ ในกรณีที่เราต้องการใช้ push message หา user
{ "displayName":"LINE Name", "userId":"Uxxxxxxxxxxxxxx...", "pictureUrl":"http://obs.line-apps.com/...", "statusMessage":"Hello, LINE!" }
Leave
สำหรับสั่งให้ LINE user เราออกจาก group, room
POST https://api.line.me/v2/bot/group/{groupId}/leave
POST https://api.line.me/v2/bot/room/{roomId}/leave
Header
- Authorization: {Channel Access Token}
curl -X POST \ -H 'Authorization: Bearer {ENTER_ACCESS_TOKEN}' \ https://api.line.me/v2/bot/room/{roomId}/leave
ถ้าสำเร็จจะได้รับ HTTP status code 200 OK
ทั้งหมดนี้คือ วิธีส่งข้อความผ่าน LINE API และบทต่อไปเราจะไปดูว่ามี library program ภาษาอะไรบ้างที่ให้เราเลือกใช้ ในการทำ LINE Bot
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/
[…] บทที่5 วิธีส่งข้อความผ่าน LINE API หรือ LINE B… […]
[…] บทที่5 วิธีส่งข้อความผ่าน LINE API หรือ LINE B… […]
[…] บทที่5 วิธีส่งข้อความผ่าน LINE API หรือ LINE B… […]
[…] วิธีส่งข้อความผ่าน LINE API จาก server ของเราไปยัง LINE Server เพื่อ notify user […]
line ที่เป็น developer trail สามารถซื้อ Premium Id ได้ไหมครับ เพราะผมสร้าง LineBot ผ่านตัว webhook โดยใช้ PHP SDK เสร็จแล้ว อยากเปลี่ยน ID เป็นแบบ Premium สามารถซื้อได้ไหมครับ
รบกวนช่วยแนะนำการเก็บ UserId ลง SQL Server แล้วส่งข้อมูลใน SQL Server แล้วส่งให้ User ตาม table นั้นๆ ครับ