Skip to content

สร้าง LINE Bot ด้วย Python

สวัสดีผู้อ่านทุกท่านครับ บทความนี้ผมจะพาผู้อ่านไปสร้าง LINE Bot ด้วย Python กันครับ

หลังจากที่ผมเคยเขียนบทความ Python + Line api ไป ครบ 1 ปี ปัจจุบันนี้โมดูลนั้นไม่สามารถใช้งานได้แล้ว ผมขอประกาศยกเลิกการใช้งานบทความดังกล่าว

เมื่อวันที่ 29 กันยายนที่ผ่านมาทาง LINE ได้ประกาศเปิดตัว Messaging API (https://www.blognone.com/node/85927) ซึ่งใช่สำหรับการสร้าง Bot โต้ตอบกับผู้ใช้งาน และทาง LINE ได้ปล่อย SDK สำหรับภาษาต่าง ๆ ออกมา แต่ไม่มีภาษา Python

ผมได้ทำการศึกษา API และลองเขียน LINE Bot ด้วย Python แล้ว ทำตามบทความนี้เลยครับ

  • ก่อนอื่นเตรียม Host ที่รองรับการเชือมต่อ SSL ผ่าน Https พร้อมใบรับรองที่ถูกต้อง ผมเลือกใช้ heroku.com ในการ Host ไฟล์ Python
  • เข้าไปที่ business.line.me แล้วทำตามเอกสาร https://developers.line.me/messaging-api/getting-started
  • ลงมือเขียนโค้ด Python กันเลยครับ 😛
from flask import Flask, request
import json
import requests

app = Flask(__name__)

@app.route('/')
def index():
	return "Hello World!"
# ส่วน callback สำหรับ Webhook
@app.route('/callback', methods=['POST'])
def callback():
    json_line = request.get_json()
    json_line = json.dumps(json_line)
    decoded = json.loads(json_line)
    user = decoded["events"][0]['replyToken']
    #id=[d['replyToken'] for d in user][0]
    #print(json_line)
    print("ผู้ใช้:",user)
    sendText(user,'งง') # ส่งข้อความ งง
    return '',200

def sendText(user, text):
    LINE_API = 'https://api.line.me/v2/bot/message/reply'
    Authorization = 'Bearer ENTER_ACCESS_TOKEN' # ใส่ ENTER_ACCESS_TOKEN เข้าไป

    headers = {
        'Content-Type': 'application/json; charset=UTF-8',
        'Authorization':Authorization
    }

    data = json.dumps({
        "replyToken":user,
        "messages":[{
            "type":"text",
            "text":text
        }]
    })

    #print("ข้อมูล:",data)
    r = requests.post(LINE_API, headers=headers, data=data) # ส่งข้อมูล
    #print(r.text)

if __name__ == '__main__':
     app.run(debug=True)

อธิบาย

หลักการทำงาน LINE Messaging API
หลักการทำงาน LINE Messaging API

เมื่อเราวางไฟล์บน Host แล้ว เมื่อผู้ใช้งานส่งข้อความมา LINE จะทำการยิงข้อมูล Webhook ไปที่ลิงค์ที่กำหนด โดยข้อมูลเป็นข้อมูล json มีรายละอียดดังนี้

ภายใน events ส่วน replyToken เป็นส่วนที่ใช้ติดต่อกับผู้ใช้ เราต้องใช้ replyToken ในการส่งและรับข้อความ
type คือ ชนิดข้อมูลที่ส่งมา
timestamp เวลา
source แหล่งที่มา จะบอกรายละเอียดของผผู้ใช้งานและชนิดของผู้ใช้
message บอกข้อมูลที่ส่งมา สำหรับผู้สร้าง LINE Bot สามารถนำข้อมูลส่วนนี้ไปใช้งานในการเขียนเงื่อนไขโต้ตอบได้

ส่วน ENTER_ACCESS_TOKEN เอามาจาก Channel Access Token ในหน้า LINE Developers

หลังจากที่วาง Webhook URL ต้องกด verify หากขึ้นสีเขียวถือว่าใช้งานได้ แต่หากขึ้นสีแดงต้องแก้ไขครับ

ผลลัพธ์

โค้ดที่ผมเขียนในบทความนี้ ไม่ว่าผู้ใช้งานจะส่งข้อความอะไร Bot จะทำการส่งข้อความ "งง" กลับมา

สร้าง LINE Bot ด้วย Python

นอกจากส่งข้อความแล้วยังสามารถส่งข้อความ รูปภาพ เสียง และอื่น ๆ ได้ครับ ลองอ่านเอกสารกันดูนะครับ
อ่านเอกสาร API ได้ที่ https://devdocs.line.me/en/

ลองศึกษา API แล้วนำไปเขียน LINE Bot ด้วยภาษา Python กันนะครับ 😀

ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

33 thoughts on “สร้าง LINE Bot ด้วย Python

    1. wannaphong

      ได้มาจาก url สำหรับรันไฟล์ python ที่อัพโหลดขึ้นไปบน host ครับ

      Reply
  1. pittaya

    ถ้าผมมีเพื่อน 4,000 คนในไลน์ ต้องการส่งข้อความเดียวกันให้ทุกคน ควรทำอย่างไรครับ รบกวนแนะนำ

    Reply
  2. TTDN

    ผมวาง Webhook URL ต้องกด verify เป็นสีเขียวแล้วแต่ ในโค้ดภาษาpythonก็แก้ENTER_ACCESS_TOKENเป็นของผมแล้ว พอส่งข้อความไป
    มันตอบ "ขอบคุณสำหรับข้อความ! ขออภัย เราไม่สามารถตอบกลับผู้ใช้ เป็นส่วนตัวได้จากบัญชีนี้้ เเต่ว่าไม่ต้องห่วง เร็วๆนี้พวกเราจะส่งข้อความไปถึงคุณอีกมากมาย! "

    ปล.จะเป็นเพราะตอนนำไฟล์ไปวางบน HOST รึป่าวครับ ถ้ายังไงขอคำแนะนำด้วยนะครับ

    Reply
  3. PP

    มีเรื่องอยากจะสอบถามทางเจ้าของกระทู้ส่วนตัวค่ะ มีเรื่องจะสอบถามในเรื่องนี้เพิ่มเติมค่ะ

    Reply
  4. Natee

    สมัครแล้ว MID มัน หายไปอะ ช่วยแนะนำหน่อยครับ อยาก ทำจริงๆ ครับ
    ขอบคุณครับผม

    Reply
  5. จิรพันธุ์

    ผมจะใช้ตัว Raspberry Pi เป็น server เองอะครับ
    สงสัยว่า
    1. ถ้าจะเขียน Webhook โดยใช้ apache2.4 จะสามารถทำได้ใช่มั้ยครับ ถ้าหากผมมีโดเมนเนมที่เป็น Https ที่ ssl ถูกต้อง ??
    2.หากจะส่งข้อความ สติ๊กเกอร์ ไปยังกลุ่มผู้ใช้ หรือผู้ใช้ จะสามารถทำได้หรือไม่ครับ??
    -ขอบคุณครับ-

    Reply
    1. wannaphong

      1. สามารถทำได้ครับ
      2. ทำได้เฉพาะผู้ใช้อย่างเดียวครับ ไม่สามารถส่งไปยังกลุ่มผู้ใช้ได้ครับ

      Reply
      1. จิรพันธุ์

        พอจะมีตัวอย่างโค้ดของ python ที่ไม่ใช้ flask มั้ยครับ อ่าน docs แล้วส่วนใหญ่จะเป็นตัวอย่างบน flask พอมารันบน server apache มันทำงานไม่ได้ครับ

        Reply
  6. pipat

    อยากได้ bot พวก Comment Auto หรือ พวก Share Post Timeline ไปยัง Group ต่างๆ บน Line มีมั้ยครับ พี่

    ขอบคุณครับ

    Reply
      1. เต๋า

        ผมอยากเขียนบอทไลน์เเบบกันพวกลบกลุ่มนี้ต้องทำไงบ้างคับ
        ใครรู่สอนผมหน่อยคับแอด ไลน์มาก็ได้0876514013เต๋าคับขอบคุณมาก

        Reply
    1. wannaphong

      ไม่ได้ครับ หาก uid line ไม่ตรงกับที่รับข้อมูลมาจะส่งข้อมูลไม่ได้ครับ

      Reply
  7. Kazei

    ขอโทษฮะ ถ้าเกิดตอนสมัครแล้วเราใส่ไอดีไลน์หลักที่กำลังใช้ของเราเอง แล้วถ้ากดใช้ api อันนี้

    เมื่อเริ่มใช้ API แล้วจะไม่สามารถใช้บริการต่อไปนี้ และไม่สามารถแก้ไขการตั้งค่าได้ด้วยเช่นกัน

    - แชทแบบตัวต่อตัว
    - แอพ LINE@
    - Store Chat

    หากต้องการรับส่งข้อความผ่าน API จะต้องตั้งค่าแชนแนลที่ LINE Developers

    ถ้ากดตกลงไป ไลน์บัญชีที่เราเชื่อมไว้จะหายไหม ส่งข้อความคุยกับคนอื่นได้ตามปกติหรือเปล่า

    Reply
  8. เกมส์

    ทำไมบอท APl ถึงจำกัดเพื่อน 50 คนครับ>_<¦¦¦ แล้วมีวิธีไหนที่จะให้คนเพิ่มเพื่อนบอท APl. ได้มากกว่านี้ หรือต้องเสียค่าอะไรอีกแนะนำหน่อยน่ะครับ LINE ID:4G2017

    Reply
  9. บั้ม

    ขอถามหน่อยคับ พอจะมีวิธีรัน master line แบบใหม่ หรือเปล่าคับ
    เพราะแบบเก่า โมดูลถูกยกเลิกอ่ะคับ ช่วย หาไห้หน่อยนะคับ**

    Reply
  10. oat

    สามารถส่งรูปภาพที่อยู่ในเครื่องได้ไหมคับ โดยไม่ต้องใช้urlของรูปอ่คับ

    Reply
    1. ภัทรพร

      มีไลน์ หรืออะไรให้ติดต่อไหมคะ พอดี หนู ฝึกงานพี่ที่ทำงานให้เขียนโปรแกรมด้านนี้ไม่มีความรู้เลยคะ อ่านก็ไม่เข้าใจ รบกวนด้วยนะคะ

      Reply
  11. Saffile

    รบกวนถามครับผม
    คือผมเป็นมือใหม่เรื่องการสร้างเว็บและ deploy heroku ในภาษา Python
    ผมพยายามหาวิธีตามอินเทอร์เน็ต สุดท้าย deploy ได้ครับ
    แต่เว็บขึ้นว่า Failed to load resource: the server responded with a status of 503 (Service Unavailable)
    ตอนกด verify ก็มี 503 ครับ
    ผมไม่ทราบว่าทำผิดพลาดตรงไหนครับผม

    Reply

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องที่ต้องการถูกทำเครื่องหมาย *