line-api-send

วิธีส่งข้อความผ่าน LINE API

ตอนนี้มาถึงบทสุดท้ายของเนื้อหา LINE API แล้ว ในบทนี้เรามาดู วิธีส่งข้อความผ่าน LINE API เช่น message, image, location, sticker กลับไปหาทาง user กันครับ ซึ่งจากบทที่ผ่านมาทำให้เราสามารถเข้าใจเนื้อหาดังนี้แล้ว

 

ก่อนที่เราจะมาดู วิธีส่งข้อความผ่าน LINE API เรามาดูเรื่องโครงสร้างของ Send message object กันก่อน เพราะมันคือ ข้อมูลที่จำเป็นในการส่งข้อความ

LINE

 

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 เช่น
    1. text { “type”:”text”, “text”:”Hello, user” }
    2. image { “type”: “image”, “originalContentUrl”: “https://example.com/original.jpg”, “previewImageUrl”: “https://example.com/preview.jpg” }
    3. video { “type”: “video”, “originalContentUrl”: “https://example.com/original.mp4”, “previewImageUrl”: “https://example.com/preview.jpg” }
    4. audio { “type”: “audio”, “originalContentUrl”: “https://example.com/original.m4a”, “duration”: 240000 }
    5. location { “type”: “location”, “title”: “my location”, “address”: “Bangkok, Thailand”, “latitude”: 35.65910807942215, “longitude”: 139.70372892916203 }
    6. 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:

 

Author: Suphakit Annoppornchai

Credit: https://saixiii.com,https://devdocs.line.me/

6 Thoughts to “บทที่5 วิธีส่งข้อความผ่าน LINE API หรือ LINE Bot ด้วย Curl”

  1. […] บทที่5 วิธีส่งข้อความผ่าน LINE API หรือ LINE B… […]

  2. […] บทที่5 วิธีส่งข้อความผ่าน LINE API หรือ LINE B… […]

  3. […] บทที่5 วิธีส่งข้อความผ่าน LINE API หรือ LINE B… […]

  4. […] วิธีส่งข้อความผ่าน LINE API จาก server ของเราไปยัง LINE Server เพื่อ notify user […]

  5. line ที่เป็น developer trail สามารถซื้อ Premium Id ได้ไหมครับ เพราะผมสร้าง LineBot ผ่านตัว webhook โดยใช้ PHP SDK เสร็จแล้ว อยากเปลี่ยน ID เป็นแบบ Premium สามารถซื้อได้ไหมครับ

  6. nopphanat kongsaden

    รบกวนช่วยแนะนำการเก็บ UserId ลง SQL Server แล้วส่งข้อมูลใน SQL Server แล้วส่งให้ User ตาม table นั้นๆ ครับ

Leave a Reply