Line bot

การทำ LINE Bot (Chatbot) ด้วย Python

ก่อนที่จะเข้าสู่วิธีการ ทำ LINE Bot เราต้องขออ้างอิงบทความก่อน วิธีสมัคร LINE Business Center และ LINE@ เนื่องจากการทำ LINE bot ครั้งนี้จะเป็นแบบ Official API แล้วเพราะทาง LINE เองเป็นคนเขียน document ออกมาเอง ไม่เหมือนในบทความก่อนหน้านี้ที่ เราไป hack API เค้ามาใช้ (สร้าง LINE Bot Unofficial) จึงจะเป็นต้องใช้ ID Line@ account ในการเปิดขอใช้ Messaging API กับทาง LINE

 

หลักการทำงานของ LINE Bot

line bot api

ในส่วน flow การทำงานที่ทาง LINE ได้ให้ API มานั้น หลักการคือเราต้องมี server พร้อมทั้งติดตั้ง webserver เอาไว้ก่อน ในกรณีทีเราต้องการให้ LINE Bot เราสามารถรับคำสังได้ เพราะตัว official นี้จะแตกต่างจาก version hack อันเก่าของเรา เพราะของเก่าเราใช้วิธีเข้าไป fetch เอาข้อมูล message ที่อยู่ใน queue ของ LINE Id นั้น แต่ของใหม่ทาง LINE จะ push message ที่มีคนส่งหา LINE Id เรา มายัง server ของเราให้เองเลย (เรียกว่า Realtime มาก) หรือเรียกอีกอย่างว่า Webhook เป็นผลให้เราต้องที URL ส่งให้ LINE เพื่อที่เค้าจะเรียกมาที่ URL นั้นได้ เท่านั้นยังไม่พอ เพื่อความปลอดภัยเราต้องทำ URL เป็น https ที่เป็น cert แบบถูกต้องด้วย (ห้ามเป็น self signed) และที่สำคัญเราไม่จำเป็นต้องใช้ user/pass ในการ authen แล้ว แต่เปลี่ยนมาใช้ Channel Access Token ที่ทาง LINE ให้มาเป็นตัว auten แทน

 

ขั้นตอนการทำ LINE Bot (Official)

อย่างที่บอกเราต้องมี Linux Server ที่ Install Webserver ไว้พร้อมแล้ว หรือจะ Install LAMP เลยก็ได้ พร้อมทั้ง Flask flamwork สำหรับทำ web application ด้วย Python รวมถึงต้องจด domain name ซึ่งถ้าไม่อยากเสียเงินก็ใช้ DDNS ก็ได้ครับแล้ว configure IP มาที่ Server ที่บ้านเราเอง จากนั้นก็สมัคร SSL domain (https) ก่อน ซึ่งในเว็ปเรามีการสอนวิธีการทำไว้หมดแล้วสำหรับผู้ที่ยังไม่มี

 

เมื่อมี Server ที่ Install และ Configure webserver จนได้ URL ที่เป็น https ของเราเองมาแล้ว (ในที่นี้ของผมคือ https://saixiii.com) ก็มาเริ่ม ทำ LINE Bot กันได้เลย

1. ทำการสมัคร messaging API

Link : https://business.line.me/en/   คลิกที่ Messaging API

linebot-1

 

2. เลือก Start Using Developer Trial

linebot-2

 

3. กรอกข้อมูล ตั้งชื่อ Account แล้วใส่รูป Profile รวมถึงรายละเอียดต่างๆ แล้วกด “OK”

linebot-3

4. หลังจากข้อมูลครบถ้วนถูกต้อง ก็จะได้รับ LINE@ Account และคลิกที่ “LINE@ Manager”

linebot5

 

5. ในหน้า LINE@ Manager ให้กด Bot Settings หรือ การตั้งค่า Bot

linebot-6

 

6. เปิด Enable API (ระบบจำเป็นต้องปิด 1-1 Chat และ ไม่สามารถใช้ App ของ LINE@ ได้)

linebot-7

 

7. เลือก “LINE Developer” เพื่อเข้าไป Configure ค่าของ Bot

linebot-9

 

8. สักเกตุที่ Channel Secret ให้กด “Show” จะแสดง Channel key ออกมา ให้เราเก็บค่านี้ไว้

linebot-10

linebot-11

 

9. ตรง Webhook URL ให้ใส่  URL https ที่เราได้ทำไว้ แล้วต่อท้ายด้วย /Callback

อย่างของผม URL คือ https://saixiii.com ก็ใส่เป็น https://saixiii.com/callback

 

10. ตรงส่วนของ Channel Access Token ให้เราเก็บค่านี้ไว้ เพราะจะเอาไว้ใช้ Authen Bot

linebot13

 

ตั้งแต่ส่วนนี้ไปจะเป็นการติดตั้ง Python และ ทำ LINE Bot บน Linux

11. SSH เข้าไปที่ Server แล้วทำการ Install Python Line package

$ pip install line-bot-sdk

 

12. ทำการ download ตัวอย่าง echobot มาลองเล่นดูจาก link ด้านล่าง

Link: https://github.com/Saixiii/line-bot-sdk-python/blob/master/examples/flask-kitchensink/app.py

บรรทัดที่ 45,46 ทำการแก้ไขค่า channel_secrect และ channel_access_token ที่เราได้จาก LINE Developer มาใส่แทน

channel_secret = os.getenv('LINE_CHANNEL_SECRET', None)
channel_access_token = os.getenv('LINE_CHANNEL_ACCESS_TOKEN', None)

เป็น

channel_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
channel_access_token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

สร้าง file ชื่อว่า __init__.py และไว้ที่ path app ของ flask ที่เรา set ไว้ (จากบทความ Flask คืออะไร Python Flask คือ framwork สำหรับทำ web application)

 

13. ลอง test โดนเข้าไป web browser แล้วไป URL webhook ของเรา

https://yourdomain.com/callback

ถ้าได้ผลเป็น Method Not Allowed แสดงว่า configure Apache และ Flask ถูกต้องแล้ว

callback

 

เสร็จเรียบร้อยแล้ว ซึ่ง LINE Bot ตัวนี้นอกจาก echo text message แล้ว sticker ก็ยังตอบกลับด้วย รวมถึงสามารถ auto join group ได้ด้วย และมี command เฉพาะเสริมให้ถ้าพิมพ์ keyword เช่น

  • profile   – จะส่งชื่อของเรา รวมถึง status ของเรากลับมา
  • bye – คือการไล่บอทออกจากกลุ่ม บอทจะ leave group เอง

 

สำหรับผู้ที่สนใจต่อข้อมูล LINE API เชิงลึกอ่านต่อในบทต่อไปทางนี้ครับ

บทที่2 เรียนรู้ LINE API คืออะไร ทำ LINE Bot ผ่าน LINE Messaging API (Official)

 

Reference:

 

Author: Suphakit Annoppornchai

Credit: https://saixiii.com

8 Thoughts to “บทที่1 ทำ LINE Bot สามารถโต้ตอบ หรือ Chatbot ด้วย Python (Official)”

  1. […] บทที่1 ทำ LINE Bot สามารถโต้ตอบ หรือ Chatbot ด้ว… […]

  2. […] ต่อจากบทความ บทที่1 ทำ LINE Bot สามารถโต้ตอบ หรือ Chatbot ด้ว… เรามาทำความเข้าใจให้มากขึ้นถึงวิธีการใช้ API เพื่อนำไปต่อยอดใช้งานกับ bot ของเราได้มากขึ้น เริ่มต้นจากทำความรู้จักกับ Messaging API ก่อน […]

  3. […] บทที่ 1 ที่เราติดตั้ง ทำ LINE Bot ไปแล้ว […]

  4. […] บทที่1 ทำ LINE Bot สามารถโต้ตอบ หรือ Chatbot ด้ว… […]

  5. […] บทที่1 เราสามารถติดตั้ง LINE Bot บน Linux ได้ […]

  6. […] บทที่1 ทำ LINE Bot สามารถโต้ตอบ หรือ Chatbot ด้ว… […]

  7. […] บทที่1 เราสามารถติดตั้ง LINE Bot บน Linux ได้ […]

  8. khao_lek

    ผมมีปัญหาว่าผมจะใช้งาน python sdk ทำ line bot แต่ผมทดลองทำ หน้าเว็บด้วย flask ซึ่งมันสามารถ run ได้ และเรียกใช้งานได้
    แต่ผมไป verify ทาง line ปรากฏว่าขึ้น An error occurred when sending the webhook. ครับ ผมเลยไม่สามารถตรวจสอบได้ว่าทำไม หรือเกิดจากอะไร เพราะหน้า cmd ที่ run โค๊ด ก็ไม่ขึ้นว่ามีอะไรเข้ามาบ้าง แต่ที่ผมทดสอบเปิดผ่าน browser ปรากฏว่ามี log แสดงไว้ครับ
    รบกวนช่วยชี้แนะด้วยครับ

    ตัวอย่างโค๊ดคือ

    # -*- coding: utf-8 -*-
    #!flask/bin/python
    import ssl
    from flask import Flask
    app = Flask(__name__)

    @app.route(“/”)
    def hello():
    return “Hello World!”
    #enddef

    @app.route(“/callback”)
    @app.route(“/callback/”)
    def callback():
    return “”
    #enddef

    if __name__ == ‘__main__’:
    context = (‘filecrt.crt’,’filekey.key’)
    app.run(host=’lineapp.devdev.com’,port=443, ssl_context=context, threaded=True)
    #end if

Leave a Reply