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

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

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

ภาพประจำตัวสมาชิก
jirawoot
PHP VIP Members
PHP VIP Members
โพสต์: 3129
ลงทะเบียนเมื่อ: 17/06/2019 10:30 am

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

โพสต์ที่ยังไม่ได้อ่าน โดย jirawoot »

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

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

โค้ด: เลือกทั้งหมด

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

โค้ด: เลือกทั้งหมด

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

โค้ด: เลือกทั้งหมด

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

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

โค้ด: เลือกทั้งหมด

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

โค้ด: เลือกทั้งหมด

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 2441 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/
บุคคลทั่วไป

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

โพสต์ที่ยังไม่ได้อ่าน โดย บุคคลทั่วไป »

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

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

โค้ด: เลือกทั้งหมด

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

โค้ด: เลือกทั้งหมด

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

โค้ด: เลือกทั้งหมด

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
ขั้นตอนต่อมา
Python Knowledge-2.png
ให้ทำการ Set up ตัว messenger กับ webhooks มา
Python Knowledge-3.png
ให้ไป ตั้งค่าต่างๆ ใน messenger กับ wedhooks
ไปที่ Access Tokens ทำการ add pages ถ้าไม่มีสามารถสร้างได้จากมุมขวาบน
Python Knowledge-1.png
จากนั้นให้ทำการ add pages ที่สร้างมา
Python Knowledge-2.png

จากนั้นไปที่ Webhooks
Python Knowledge-1.png

ทำการนำ url มาใส่ จะต้องเป็น HTTPS เท่านั้น และตัว verify token เพื่อว่าตรงกันมั้ย
Python Knowledge-3.png
Python Knowledge-1.png


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

โค้ด: เลือกทั้งหมด

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

โค้ด: เลือกทั้งหมด

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

อ้างอิง
https://developers.facebook.com/docs/me ... /app-setup
https://developers.facebook.com/docs/me ... uick-start
https://stackoverflow.com/questions/539 ... ymessenger
https://developers.facebook.com/docs/graph-api/
ตอบกลับโพส
  • Similar Topics
    ตอบกลับ
    แสดง
    โพสต์ล่าสุด

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 49