line python sdk

วิธีทำ LINE BOT ด้วย LINE Python SDK

หลังจากบทที่แล้วได้บอกวิธีการติดตั้งเบื้องต้นสำหรับ LINE BOT Python กันไปแล้ว ตอนนี้เรามาดูรายละเอียดภายใน LINE Python library กันว่ามันใช้งานกันอย่างไร และมันทำงานตาม spec LINE API (Messaging API) ที่เราพูดถึงกันในบทที่แล้วหรือไม่

 

รายละเอียดการติดตั้งทั้งหมดจะอยู่ในบทที่ 1 โดยมีหัวข้อสรุปตามนี้

สำหรับผู้ที่ยังไม่ได้ติดตั้ง LINE Python SDK หรือ LINE Python library ท่านสามารถติดตั้งด้วย command นี้บน Linux (Ubuntu)

$ pip install line-bot-sdk

หรือ download เป็น zip file ไป install ลงโดยตรงจาก GitHub

Link: https://github.com/Saixiii/line-bot-sdk-python

line GitHub

จากนั้นเข้าไปใน folder แล้ว run

$ python setup.py install

 

สำหรับผู้ที่ต้องการใช้ webhook ด้วย หรือส่วนของการรับ notification จาก LINE ให้ท่านทำการ install flask python ด้วยเพื่อทำงานเป็น web applciation server สามารถอ่านรายละเอียดและการติดตั้งได้จาก

Link: Flask คืออะไร Python Flask คือ framwork สำหรับทำ web application

รวมถึงทำ DDNS และ HTTPS  domain ให้เรียบร้อย

Link: DDNS คืออะไร เกี่ยวอะไรกับ กล้องวงจรปิด และ ต่างอย่างไรกับ DNS

Link: วิธีเปลี่ยน website จาก http เป็น https อย่างง่าย ไม่เสียเงิน ด้วย letsencrypt

 

การใช้งาน LINE Python SDK

เนื่อหาส่วนนี้จะเป็นการสอนวิธีการใช้ python command ในการรส่ง message, content ไปยัง user LINE ที่เราต้องการ ในที่นี้เราใช้งาน library ตัว  line-bot-sdk-python

สิ่งที่ต้องเตรียมข้อมูลไว้คือ

  • Channel Secret  หาได้จาก LINE@ Manager ในบทที่1
  • Channel Access Token หาได้จาก LINE@ Manager ในบทที่1
  • userId หาได้จาก webhook ในบทที่1 ที่ทำการติดตั้ง line python และรับ notification กลับมาจาก LINE Server จะมีข้อมูล userId อยู่

 

1. เข้าสู่ python prompt

$ python
Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

2. Import linebot sdk

>>> from linebot import (LineBotApi, WebhookHandler)
>>> from linebot.models import (
 MessageEvent, TextMessage, TextSendMessage, ImageSendMessage,
 SourceUser, SourceGroup, SourceRoom,
 TemplateSendMessage, ConfirmTemplate, MessageTemplateAction,
 ButtonsTemplate, URITemplateAction, PostbackTemplateAction,
 CarouselTemplate, CarouselColumn, PostbackEvent,
 StickerMessage, StickerSendMessage, LocationMessage, LocationSendMessage,
 ImageMessage, VideoMessage, AudioMessage,
 UnfollowEvent, FollowEvent, JoinEvent, LeaveEvent, BeaconEvent
)

3. สร้าง LineBotApi instance

__init__(self, channel_access_token, endpoint='https://api.line.me', timeout=5, http_client=RequestsHttpClient)

ใช้ Channel Access Token สร้าง instance ของ line bot ขึ้นมา เพื่อใช้ส่ง message แต่สิ่งที่จำเป็นจริงๆมีแค่ channel_access_token นอกนั้นเราสามารถตั้ง option เพิ่มได้เอง หรือไม่ก็ใช้ default ไป

# line_bot_api = LineBotApi('YOUR_CHANNEL_ACCESS_TOKEN')
>>> line_bot_api = LineBotApi('jibJtKouOP8/0UYtTRtlXcB70zzJxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')

4. Push message

push_message(self, to, messages, timeout=None)

เป็น function ในการส่ง message ออกไปยัง user โดยอ้างอิงจาก userId, groupId, roomId ที่หาได้จาก webhook ที่ notify message มาให้นะครับ ไม่ใช่ LINE ID

# line_bot_api.push_message(to, TextSendMessage(text=message))
>>> line_bot_api.push_message('U006eef227b0fda8e8b4xxxxxxxxxx', TextSendMessage(text='Hello World!'))

chat line bot

จะเห็นว่าง่ายนิดเดียวเองครับสำหรับการใช้ LINE python SDK

 

5. Reply message

reply_message(self, reply_token, messages, timeout=None)

เป็น function ที่ทำงานควบคู่ไปกับ webhook สำหรับการทำ chatbot เพราะ เวลาที่ webhook รับ notification จากทาง LINE Server ที่ส่งมาจะมี replyToken ส่งมาให้เราใช้ reply message กลับไป โดยไม่ต้องใช้ useId ในการส่งกลับไปเลย พูดง่ายๆคือใช้ replyToken แทน useId แต่เจ้า Token นี้มีอายุเพียงแค่ 1 นาที หลังจากนั้น LINE server จะไม่ยอมรับ และส่งไปก็จะ error

>>> line_bot_api.reply_message(reply_token, TextSendMessage(text='Hello World!'))

 

6. Multicast message

multicast(self, to, messages, timeout=None)

function แบบเดียวกับ push message แต่สามารถส่งไปให้ user พร้อมกันได้ 1-150 user

>>> line_bot_api.multicast(['to1', 'to2'], TextSendMessage(text='Hello World!'))

 

7. Get user profile

get_profile(self, user_id, timeout=None)

สามารถเอามาใช้ดึงข้อมูลของ user ร่วมกับ webhook เพื่อเก็บเป็นข้อมูล mapping ว่าใครส่ง notification มา

>>> profile = line_bot_api.get_profile(user_id)
>>> 
>>> print(profile.display_name)
>>> print(profile.user_id)
>>> print(profile.picture_url)
>>> print(profile.status_message)

 

8. Get message content

get_message_content(self, message_id, timeout=None)

function สำหรับ download image, video, audio จาก message id ที่ webhook ส่งมา โดยเราสามารถกำหนด path และชื่อ file ใน file_path

>>> message_content = line_bot_api.get_message_content(message_id)

>>> with open(file_path, 'wb') as fd:
    for chunk in message_content.iter_content():
        fd.write(chunk)

 

9. Leave group/room

leave_group(self, group_id, timeout=None)
leave_room(self, room_id, timeout=None)

ออกจาก group/room

>>> line_bot_api.leave_group(group_id)
>>> line_bot_api.leave_room(room_id)

 

การใช้งาน Send Message Object

เบื้องต้นจะเห็นว่าเราสามารถส่ง message text ผ่าน LINE API และ LINE Python SDK ได้แล้ว ทีนี้มาดูการส่ง content ชนิดอื่นโดยการทำเป็น message object กันครับ

อ้างอิงจาก linebot.models package

1. TextSendMessage

>>> text_message = TextSendMessage(text='Hello, world')
>>> line_bot_api.push_message('U006eef227b0fda8xxxxxxxxxxx', text_message)

จะเห็นว่าสามารถส่ง text message ได้เหมือนกัน โดยใช้ตัวแปลของ object ส่งค่าเข้าไปยัง instance แทน

 

2. ImageSendMessage

>>> image_message = ImageSendMessage(
    original_content_url='https://example.com/original.jpg',
    preview_image_url='https://example.com/preview.jpg'
    )
>>> line_bot_api.push_message('U006eef227b0fda8xxxxxxxxxxx', image_message)

 

3. VideoSendMessage

>>> video_message = VideoSendMessage(
      original_content_url='https://example.com/original.mp4',
      preview_image_url='https://example.com/preview.jpg'
    )
>>> line_bot_api.push_message('U006eef227b0fda8xxxxxxxxxxx', video_message)

4. AudioSendMessage

>>> audio_message = AudioSendMessage(
      original_content_url='https://example.com/original.m4a',
      duration=240000
    )
>>> line_bot_api.push_message('U006eef227b0fda8xxxxxxxxxxx', audio_message)

 

5. LocationSendMessage

>>> location_message = LocationSendMessage(
      title='location',
      address='Thailand',
      latitude=135.65910807942215,
      longitude=19.70372892916203
    )
>>> line_bot_api.push_message('U006eef227b0fda8xxxxxxxxxxx', location_message)

 

6. StickerSendMessage

>>> sticker_message = StickerSendMessage(
      package_id='1',
      sticker_id='1'
    )
>>> line_bot_api.push_message('U006eef227b0fda8xxxxxxxxxxx', sticker_message)

 

 

Reference:

 

 

Author: Suphakit Annoppornchai

Credit: https://saixiii.com

3 Thoughts to “บทที่6 วิธีใช้ LINE Python SDK ทำ LINE Bot ด้วย LINE API”

  1. […] บทที่6 วิธีใช้ LINE Python SDK ทำ LINE Bot ด้วย LINE Messaging A… […]

  2. […] บทที่6 วิธีใช้ LINE Python SDK ทำ LINE Bot ด้วย LINE Messaging A… […]

  3. […] บทที่6 วิธีใช้ LINE Python SDK ทำ LINE Bot ด้วย LINE Messaging A… […]

Leave a Reply