การสร้าง bot messenger ของ facebook โดยใช้ pymessenger

แชร์ความรู้ภาษา Python ไพทอน การเขียนโปรแกรมภาษาไพทอน

Moderators: mindphp, ผู้ดูแลกระดาน

User avatar
jirawoot
PHP VIP Members
PHP VIP Members
Posts: 2737
Joined: 17/06/2019 10:30 am

การสร้าง bot messenger ของ facebook โดยใช้ pymessenger

Post by jirawoot »

สำหรับนักพัฒนาที่กำลังสนใจที่จะทำ bot ตอบ chat ในเพจของ facebook ด้วยภาษา python จะมีตัว package หรือ library ตัวหนึ่งมาแนะนำก็คือ pymessenger ซึ่งตัวทำการส่งข้อความเมื่อมีคน chat มายังเพจของเรา จะส่งผ่าน API ของ Facebook คือ Graph API จะใช้ร่วมกับ library flask เป็นจัดการฝ่าย web application
ข้ันตอนการใช้งานมีดังนี้

ทำการติดตั้ง flask และ pymessenger โดยใช้คำสั่งนี้

Code: Select all

pip install Flask
pip install pymessenger
จากนั้นทำการสร้างไฟล์ python มา เรียกใช้ library ทั้งสอง

Code: Select all

from flask import Flask, request
from pymessenger.bot import Bot
ทำการสร้าง route มา

Code: Select all

app = Flask(__name__)
@app.route("/", methods=['GET', 'POST'])
def hello():
    if request.method == 'GET':
        if request.args.get("hub.verify_token") == VERIFY_TOKEN:
            return request.args.get("hub.challenge")
        else:
            return 'Invalid verification token'
            
if __name__ == "__main__":
    app.run(port=5002, debug=True)
ทำการ connect กับ facebook โดยการสร้าง app ใน developers facebook

จากนั้นให้ไปที่ เมนู My Apps
Python Knowledge-1.png
Python Knowledge-1.png (19.47 KiB) Viewed 106 times
Python Knowledge-1.png
Python Knowledge-1.png (83.41 KiB) Viewed 106 times
ขั้นตอนต่อมา
Python Knowledge-2.png
Python Knowledge-2.png (119.13 KiB) Viewed 106 times
ให้ทำการ Set up ตัว messenger กับ webhooks มา
Python Knowledge-3.png
Python Knowledge-3.png (73.33 KiB) Viewed 106 times
ให้ไป ตั้งค่าต่างๆ ใน messenger กับ wedhooks
ไปที่ Access Tokens ทำการ add pages ถ้าไม่มีสามารถสร้างได้จากมุมขวาบน
Python Knowledge-1.png
Python Knowledge-1.png (55.95 KiB) Viewed 106 times
จากนั้นให้ทำการ add pages ที่สร้างมา
Python Knowledge-2.png
Python Knowledge-2.png (76.27 KiB) Viewed 106 times
จากนั้นไปที่ Webhooks
Python Knowledge-1.png
Python Knowledge-1.png (16.77 KiB) Viewed 106 times
ทำการนำ url มาใส่ จะต้องเป็น HTTPS เท่านั้น และตัว verify token เพื่อว่าตรงกันมั้ย
Python Knowledge-3.png
Python Knowledge-3.png (44.92 KiB) Viewed 106 times
Python Knowledge-1.png
Python Knowledge-1.png (55.46 KiB) Viewed 106 times

เมื่อทำทุกอย่างเสร็จแล้วให้เพิ่ม code ใน method hello ตามนี้

Code: Select all

ACCESS_TOKEN = "<TOKEN pages>"
VERIFY_TOKEN = "<VERIFY_TOKEN>"
bot = Bot(ACCESS_TOKEN)

@app.route("/", methods=['GET', 'POST'])
def hello():
    if request.method == 'POST':
        output = request.get_json()
        for event in output['entry']:
            messaging = event['messaging']
            for x in messaging:
                if x.get('message'):
                    recipient_id = x['sender']['id']
                    if x['message'].get('text'):
                        message = x['message']['text']
                        bot.send_text_message(recipient_id, message)
                    if x['message'].get('attachments'):
                        for att in x['message'].get('attachments'):
                            bot.send_attachment_url(recipient_id, att['type'], att['payload']['url'])
                else:
                    pass
        return "Success"
ACCESS_TOKEN ขอจาก app ใน developers facebook และ VERIFY_TOKEN จะต้องกำหนดให้ตรงกัน


full code

Code: Select all

from flask import Flask, request
from pymessenger.bot import Bot

app = Flask(__name__)

ACCESS_TOKEN = "EAATkd2BdopsBAHoEkqIB8Mk4qnA4YagiwKyvuRbkogItmd1PLMIT4MZAB5hlzGfeY5yLhZB13gZBydSWZA5gdvCS9hlBztbw1TZCco5sLZCyJAZAZCfUAblMlhiED04ye6xtZAQaF9cJiXBoHAjjN5KpZB1P9LCObFFDbYa2noC88PlldcbW9xmz3txZBby6bCyiIMZD"
VERIFY_TOKEN = "hello"
bot = Bot(ACCESS_TOKEN)


@app.route("/", methods=['GET', 'POST'])
def hello():
    if request.method == 'GET':
        if request.args.get("hub.verify_token") == VERIFY_TOKEN:
            return request.args.get("hub.challenge")
        else:
            return 'Invalid verification token'

    if request.method == 'POST':
        output = request.get_json()
        for event in output['entry']:
            messaging = event['messaging']
            for x in messaging:
                if x.get('message'):
                    recipient_id = x['sender']['id']
                    if x['message'].get('text'):
                        message = x['message']['text']
                        bot.send_text_message(recipient_id, message)
                    if x['message'].get('attachments'):
                        for att in x['message'].get('attachments'):
                            bot.send_attachment_url(recipient_id, att['type'], att['payload']['url'])
                else:
                    pass
        return "Success"


if __name__ == "__main__":
    app.run(port=5002, debug=True)
ผลที่ได้ จะทำการนำข้อความที่รับมาส่งกลับไปยังเจ้าของ chat ตามรูป สามารถกำหนดที่จะส่งกลับไปตามต้องการได้ที่ send_text_message
screenshot-www.facebook.com-2020.07.02-13_38_17 (1).png
screenshot-www.facebook.com-2020.07.02-13_38_17 (1).png (38.69 KiB) Viewed 106 times
อ้างอิง
https://developers.facebook.com/docs/messenger-platform/getting-started/app-setup
https://developers.facebook.com/docs/messenger-platform/getting-started/quick-start
https://stackoverflow.com/questions/53928278/facebook-messenger-chatbot-with-flask-and-pymessenger
https://developers.facebook.com/docs/graph-api/

  • Similar Topics
    Replies
    Views
    Last post

Return to “Python Knowledge”

Who is online

Users browsing this forum: facebook.com [Crawler] and 12 guests