Giới thiệu
Gần đây, tôi đã bắt đầu khám phá thế giới của chatbot, và bước tiếp theo là tạo một bot Messenger. Tôi nghĩ rằng mình chỉ cần làm theo một vài bước với sự hướng dẫn của ChatGPT... nhưng tôi đã bỏ lỡ một điểm rất quan trọng.
👉 Để tạo một bot Messenger, bạn cần có một trang doanh nghiệp thuộc loại ứng dụng BUSINESS của Meta.
Tôi đã không biết điều đó. Tôi đã tạo các ứng dụng Meta và chọn bất cứ loại nào ngoài loại đúng — và đó là nơi mà vòng lặp bắt đầu.
Cạm bẫy trong việc tạo ứng dụng
Một trong những cạm bẫy lớn là: khi bạn đã tạo một ứng dụng, bạn không thể thay đổi loại của nó. Tôi đã vào Bảng điều khiển ứng dụng, cố gắng thêm Messenger dưới mục “Thêm sản phẩm”… nhưng nút thần kỳ đã biến mất.
Tôi đã thử mọi thứ — cài đặt khác nhau, tìm kiếm không ngừng, thậm chí đã lướt web để tìm câu trả lời. Không có gì. Ngày trôi qua.
Và rồi tôi đã tìm thấy kho báu ẩn giấu 🗝️:
Khi tạo một ứng dụng, bạn cần chọn Khác → Doanh nghiệp. Chỉ cần như vậy thôi. Nếu bạn bỏ lỡ bước này, Messenger sẽ không bao giờ hiện ra như một tùy chọn.
Bạn có thể tạo một ứng dụng mới tại đây:
developers.facebook.com/apps
Khi bắt đầu tạo ứng dụng, trong phần Trường hợp sử dụng, chọn Khác.
Sau đó nhấn Tiếp theo và chọn loại Doanh nghiệp.
Đây là điều kỳ diệu mà tôi đã bỏ lỡ. Sau khi tìm ra điều này, tôi cuối cùng đã có thể tiến về phía trước! 🎉
Tạo Page Access Token
Tiếp theo, bạn cần tạo một Page Access Token từ Graph API Explorer
và đảm bảo chọn trang doanh nghiệp của bạn — điều này là bắt buộc.
Sau đó, bạn có thể thêm Messenger như một sản phẩm trong ứng dụng của bạn.
Ngoài ra, hãy thiết lập một Verify Token (bạn có thể tự viết). Hãy cẩn thận lưu nó ở nơi an toàn và không bao giờ chia sẻ nó.
Ngrok — Kết nối cục bộ
Chuyến hành trình chưa kết thúc ở đây. Bây giờ bạn cần ngrok. Khi bạn chạy bot cục bộ, Facebook không thể truy cập localhost. Ngrok tạo ra một đường hầm HTTPS bảo mật đến máy của bạn để Messenger có thể giao tiếp với bot của bạn.
Cách cài đặt ngrok
- Tải xuống từ ngrok.com
- Giải nén/Cài đặt nó
- Xác thực một lần với tài khoản ngrok của bạn:
bash
ngrok config add-authtoken YOUR_AUTH_TOKEN
Sau khi chạy tập lệnh bot của bạn:
python
from flask import Flask, request
import requests
import json
app = Flask(__name__)
PAGE_ACCESS_TOKEN = "PAGE_ACCESS_TOKEN"
VERIFY_TOKEN = "VERIFY_TOKEN"
# Bot sẽ tìm kiếm một sự khớp chính xác, không phân biệt chữ hoa chữ thường.
qa_database = {
"xin chào": "Chào bạn! Tôi là bot Messenger và tôi đang trong quá trình phát triển. Tôi không thể trả lời bất kỳ câu hỏi nào chưa.",
}
# --- Route gốc để kiểm tra ---
@app.route("/", methods=["GET"])
def home():
return "Bot Messenger đang hoạt động!"
# --- Route webhook cho Facebook ---
@app.route("/webhook", methods=["GET", "POST"])
def webhook():
if request.method == "GET":
# Xác minh
token_sent = request.args.get("hub.verify_token")
return verify_fb_token(token_sent)
else:
# Xử lý tin nhắn
output = request.get_json()
for event in output.get("entry", []):
for messaging_event in event.get("messaging", []):
sender_id = messaging_event["sender"]["id"]
if messaging_event.get("message"):
message_text = messaging_event["message"].get("text")
if message_text:
message_text_lower = message_text.lower().strip()
response_text = qa_database.get(message_text_lower)
if response_text:
send_message(sender_id, response_text)
else:
default_response = "Xin lỗi, tôi không hiểu câu hỏi đó. Bạn có thể thử hỏi một trong những câu sau:\n\n"
for q in qa_database.keys():
default_response += f"- {q}\n"
send_message(sender_id, default_response)
return "Tin nhắn đã được xử lý", 200
def verify_fb_token(token_sent):
if token_sent == VERIFY_TOKEN:
return request.args.get("hub.challenge")
return "Mã xác minh không hợp lệ"
def send_message(recipient_id, text):
"""Gửi tin nhắn trở lại cho người dùng Facebook Messenger"""
url = "https://graph.facebook.com/v21.0/me/messages"
params = {"access_token": PAGE_ACCESS_TOKEN}
headers = {"Content-Type": "application/json"}
data = {
"recipient": {"id": recipient_id},
"message": {"text": text}
}
response = requests.post(url, params=params, headers=headers, json=data)
if response.status_code != 200:
print(f"Lỗi khi gửi tin nhắn: {response.text}")
if __name__ == "__main__":
app.run(port=5000)
Nhấn vào liên kết bên dưới và bạn sẽ thấy Bot đang hoạt động!
Bây giờ mở một terminal mới và nhập:
bash
ngrok http 5000
Bạn sẽ nhận được một liên kết như:
https://qwerty123.ngrok-free.app/
Dán URL vào Bảng điều khiển ứng dụng Meta → Messenger → Webhooks như sau:
https://qwerty123.ngrok-free.app/webhook
sau đó nhấn Xác minh.
⚠️ Nếu bạn đang sử dụng phiên bản miễn phí của ngrok, liên kết sẽ thay đổi mỗi lần bạn khởi động lại nó. Điều này có nghĩa là bạn sẽ cần cập nhật URL Callback trong ứng dụng Meta của mình mỗi khi chạy bot.
💡 Mẹo: Để kiểm tra, tôi đã lưu tất cả các token của mình trong một tệp riêng config.py và nhập chúng vào tập lệnh bot của mình:
python
# config.py
VERIFY_TOKEN = "my_secret_token"
PAGE_ACCESS_TOKEN = "your_page_access_token_here"
Sau đó trong mã bot chính của bạn:
python
from config import VERIFY_TOKEN, PAGE_ACCESS_TOKEN
Điều này giữ cho các token của bạn ra khỏi tập lệnh chính, làm cho nó an toàn hơn và dễ quản lý hơn.
Những điểm cần lưu ý:
- Những lỗi nhỏ trong thiết lập có thể khiến bạn mất hàng ngày.
- Lập kế hoạch là rất quan trọng.
- Giữ cho các token của bạn an toàn.
- Sử dụng ngrok cho việc kiểm tra cục bộ.
- Kiểm tra kỹ loại ứng dụng của bạn.
Các thực hành tốt nhất
- Luôn thiết lập môi trường phát triển an toàn và bảo mật.
- Sử dụng các công cụ giám sát để theo dõi hoạt động của bot.
- Thường xuyên kiểm tra và nâng cấp mã nguồn.
Những cạm bẫy phổ biến
- Bỏ qua việc xác minh token có thể dẫn đến lỗi kết nối.
- Không sử dụng loại ứng dụng đúng có thể làm mất thời gian.
Mẹo hiệu suất
- Tối ưu hóa mã nguồn để bot phản hồi nhanh hơn.
- Sử dụng caching cho các câu trả lời thường gặp để giảm tải cho server.
Giải quyết sự cố
- Nếu bot không phản hồi, kiểm tra kết nối ngrok và các token.
- Đảm bảo rằng tất cả các endpoint đều được cấu hình đúng.
Kết luận
Việc tạo một bot Messenger có thể trở thành một trải nghiệm thú vị nếu bạn biết những điều cần tránh. Hãy nhớ rằng, lập kế hoạch và cẩn thận trong từng bước là rất quan trọng. Bây giờ, hãy bắt đầu tạo bot của riêng bạn và khám phá tiềm năng của nó!