วิธีทำ LINE BOT ด้วย LINE Python SDK
หลังจากบทที่แล้วได้บอกวิธีการติดตั้งเบื้องต้นสำหรับ LINE BOT Python กันไปแล้ว ตอนนี้เรามาดูรายละเอียดภายใน LINE Python library กันว่ามันใช้งานกันอย่างไร และมันทำงานตาม spec LINE API (Messaging API) ที่เราพูดถึงกันในบทที่แล้วหรือไม่
- บทที่1 เราสามารถติดตั้ง LINE Bot บน Linux ได้
- บทที่2 อธิบายการทำงานของ LINE Messaging API ที่เอามาใช้งาน
- บทที่3 ข้อกำหนดการใช้งานของ LINE API command
- บทที่4 การรับ Notification จาก LINE Server ด้วย Webhook
- บทที่5 ส่งข้อความผ่าน LINE API ด้วย cURL
รายละเอียดการติดตั้งทั้งหมดจะอยู่ในบทที่ 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
จากนั้นเข้าไปใน 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!'))
จะเห็นว่าง่ายนิดเดียวเองครับสำหรับการใช้ 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:
- ทำความเข้าใจ 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
[…] บทที่6 วิธีใช้ LINE Python SDK ทำ LINE Bot ด้วย LINE Messaging A… […]
[…] บทที่6 วิธีใช้ LINE Python SDK ทำ LINE Bot ด้วย LINE Messaging A… […]
[…] บทที่6 วิธีใช้ LINE Python SDK ทำ LINE Bot ด้วย LINE Messaging A… […]