Khi được làm đúng cách, tương tác với máy tính bằng ngôn ngữ tự nhiên vừa mạnh mẽ vừa thú vị. Thiết bị Nhắn tin và Điều khiển bằng giọng nói là những nền tảng lớn tiếp theo, và điện toán hội thoại sẽ đóng vai trò quan trọng trong việc tạo ra trải nghiệm thực tế tăng cường và thực tế ảo hấp dẫn. Có nhiều thách thức riêng khi xây dựng các chương trình như vậy, chẳng hạn: làm thế nào để chatbot của tôi có thể truy cập được từ bên ngoài?
Trong hướng dẫn này, bạn sẽ đi qua các bước cần thiết để triển khai một chatbot trên Facebook Messenger, nền tảng có hơn 1 tỷ người dùng hoạt động. Bạn có thể tiếp cận một lượng khán giả khổng lồ chỉ với vài dòng mã.
Có 3 bước chính để thực hiện điều này. Bạn cần:
tạo một máy chủ lắng nghe tin nhắn từ Facebook (dùng flask)
xác định một hàm để gửi tin nhắn phản hồi cho người dùng (dùng requests)
chuyển tiếp một kết nối https tới máy cục bộ của bạn (dùng ngrok)
Nếu bạn muốn tìm hiểu thêm về cách chuyển ngôn ngữ tự nhiên thành chỉ thị cho máy, hãy xem khóa học Xây dựng Chatbot bằng Python trên DataCamp.
Lưu ý rằng bài viết này sẽ không đề cập đến việc làm sao để bot của bạn hiểu được người dùng nói gì và phản hồi phù hợp. Để tìm hiểu thêm, bạn nên xem Rasa NLU, Rasa Core, và khóa học DataCamp vừa được nhắc đến.
Đóng gói Chatbot của bạn trong một Máy chủ http
Bước đầu tiên là tạo một máy chủ http lắng nghe các tin nhắn do Facebook gửi tới, lấy phản hồi cho tin nhắn đó, và cuối cùng gửi phản hồi lại cho người dùng trên Facebook. Chúng ta sẽ dùng flask để tạo máy chủ này. Ý tưởng cơ bản như sau:
Tạo một ứng dụng flask lắng nghe các tin nhắn gửi tới localhost:5000/webhook. Khi tin nhắn được gửi trên Facebook, chúng sẽ đến dưới dạng các yêu cầu http tới URL này.
Hàm listen() xử lý các yêu cầu http này và kiểm tra xem chúng có chứa một tin nhắn Facebook hợp lệ hay không
Nếu tin nhắn hợp lệ, hàm get_bot_response() được gọi và phản hồi được gửi lại Facebook Messenger
Ngoài ra, bạn sẽ tạo một hàm tên verify_webhook() để xử lý bước xác thực ban đầu giữa Facebook và ứng dụng của bạn.
Tập lệnh cuối cùng như sau (lưu với tên server.py):
from flask import Flask, request
app = Flask(__name__)
FB_API_URL ='https://graph.facebook.com/v2.6/me/messages'
VERIFY_TOKEN =''# <paste your verify token here>
PAGE_ACCESS_TOKEN =''# paste your page access token here>"defget_bot_response(message):"""This is just a dummy function, returning a variation of what
the user said. Replace this function with one connected to chatbot."""return"This is a dummy response to '{}'".format(message)defverify_webhook(req):if req.args.get("hub.verify_token")== VERIFY_TOKEN:return req.args.get("hub.challenge")else:return"incorrect"defrespond(sender, message):"""Formulate a response to the user and
pass it on to a function that sends it."""
response = get_bot_response(message)
send_message(sender, response)defis_user_message(message):"""Check if the message is a message from the user"""return(message.get('message')and
message['message'].get('text')andnot message['message'].get("is_echo"))@app.route("/webhook")deflisten():"""This is the main function flask uses to
listen at the `/webhook` endpoint"""if request.method =='GET':return verify_webhook(request)if request.method =='POST':
payload = request.json
event = payload['entry'][0]['messaging']for x in event:if is_user_message(x):
text = x['message']['text']
sender_id = x['sender']['id']
respond(sender_id, text)return"ok"Được hỗ trợ bởi
Trong tập lệnh trên, các biến VERIFY_TOKEN và PAGE_ACCESS_TOKEN chưa được thiết lập — vì vậy bạn sẽ phải gán giá trị cho chúng. VERIFY_TOKEN có thể là bất kỳ chuỗi nào, nó được dùng như một dạng mật khẩu để cho Facebook biết rằng máy chủ này muốn nhận tin nhắn. Nên dùng một chuỗi ngẫu nhiên dài. Bạn có thể tạo nhanh bằng cách chạy openssl rand -base64 32 trong terminal.
Chưa cần lo về PAGE_ACCESS_TOKEN — bạn sẽ xem cách lấy nó ở bên dưới!
Gửi tin nhắn phản hồi cho người dùng
Tiếp theo, bạn sẽ viết một hàm gửi phản hồi về Facebook Messenger bằng thư viện Python tên requests. Cụ thể, bạn dùng phương thức post(), phương thức tạo một yêu cầu HTTP POST. Yêu cầu POST là cách điển hình để gửi thông tin tới máy chủ.
Hàm của bạn sẽ như sau:
import requests
defsend_message(recipient_id, text):"""Send a response to Facebook"""
payload ={'message':{'text': text
},'recipient':{'id': recipient_id
},'notification_type':'regular'}
auth ={'access_token': PAGE_ACCESS_TOKEN
}
response = requests.post(
FB_API_URL,
params=auth,
json=payload
)return response.json()Được hỗ trợ bởi
Công khai một điểm cuối https và kết nối Trang Facebook
URL localhost:5000 chỉ hoạt động cho các yêu cầu được tạo trên cùng máy tính đang chạy máy chủ. Vì vậy bạn cần cho Facebook biết cách truy cập máy chủ flask của mình. Để làm việc này, trước hết hãy cài đặt ngrok.
Truy cập trang này và cài đặt phiên bản phù hợp với hệ điều hành của bạn. Nếu bạn dùng Mac và có homebrew, cách nhanh nhất để cài ngrok là dùng brew cask install ngrok.
Khởi động máy chủ ngrok trong terminal với ngrok http 5000. Lệnh này sẽ thiết lập một điểm cuối https chuyển tiếp tới máy của bạn ở cổng 5000, ví dụ https://51b6b3fa.ngrok.io.
Lưu ý rằng nếu bạn thoát ngrok và khởi động lại, URL này sẽ thay đổi.
Tạo Ứng dụng và Trang Facebook
Bước tiếp theo là tạo một ứng dụng và một trang trên Facebook. Facebook có tài liệu hướng dẫn rất tốt tại đây, nhưng bạn sẽ đi qua các bước chính ngay sau đây.
bạn sẽ được chuyển hướng đến bảng điều khiển của ứng dụng
trong mục Products, tìm Add a Product và nhấp Messenger -> Set Up
Để tạo trang, bạn cần:
vào phần cài đặt cho Messenger, cuộn xuống Token Generation và nhấp vào liên kết để create a new page cho ứng dụng của bạn
Sau khi tạo trang, quay lại phần cài đặt Token Generation và chọn trang này từ menu thả xuống. Sao chép Page Access Token vào chỗ dành cho PAGE_ACCESS_TOKEN trong server.py ở trên.
Khởi động máy chủ bot của bạn
Bây giờ mọi thứ đã sẵn sàng, đã đến lúc khởi động máy chủ chatbot! Trong một thẻ tab terminal khác, chạy
Cuối cùng, bạn cần đăng ký webhook trên trang dành cho nhà phát triển Facebook.
Quay lại tab Messenger trong mục Products và cuộn xuống Webhooks, nhấp Setup Webhooks
Tại Callback URL, nhập URL ngrok của bạn, ví dụ https://51b6b3fa.ngrok.io/webhook. Quan trọng là ứng dụng flask của bạn đang chạy ở thời điểm này, vì verify_token() sẽ được gọi ở bước tiếp theo
Trong trường Verify Token, nhập giá trị bạn đã chỉ định trong tệp server.py
Ở Subscription Fields đảm bảo đã chọn messages và messaging_postbacks rồi Click Verify and Save để thực hiện xác thực
Quan trọng: Quay lại Products -> Messenger, và dưới mục Select a page to subscribe your webhook to the page events chọn trang của bạn và nhấp Subscribe.
Hoàn tất!
Bot của bạn giờ đã sẵn sàng để gửi và nhận tin nhắn qua Facebook Messenger. Hiện tại, hàm get_bot_response() vẫn còn khá đơn giản và chưa giống một chatbot thực thụ! Để học đầy đủ về xây dựng chatbot, hãy xem khóa học Xây dựng Chatbot bằng Python trên DataCamp và hướng dẫn Xây dựng Chatbot dùng Chatterbot trong Python, cũng như các thư viện Python Rasa NLU và Rasa Core.
Khi được làm đúng cách, tương tác với máy tính bằng ngôn ngữ tự nhiên vừa mạnh mẽ vừa thú vị. Thiết bị Nhắn tin và Điều khiển bằng giọng nói là những nền tảng lớn tiếp theo, và điện toán hội thoại sẽ đóng vai trò quan trọng trong việc tạo ra trải nghiệm thực tế tăng cường và thực tế ảo hấp dẫn. Có nhiều thách thức riêng khi xây dựng các chương trình như vậy, chẳng hạn: làm thế nào để chatbot của tôi có thể truy cập được từ bên ngoài?
Trong hướng dẫn này, bạn sẽ đi qua các bước cần thiết để triển khai một chatbot trên Facebook Messenger, nền tảng có hơn 1 tỷ người dùng hoạt động. Bạn có thể tiếp cận một lượng khán giả khổng lồ chỉ với vài dòng mã.
Có 3 bước chính để thực hiện điều này. Bạn cần:
flask)requests)httpstới máy cục bộ của bạn (dùngngrok)Nếu bạn muốn tìm hiểu thêm về cách chuyển ngôn ngữ tự nhiên thành chỉ thị cho máy, hãy xem khóa học Xây dựng Chatbot bằng Python trên DataCamp.
Lưu ý rằng bài viết này sẽ không đề cập đến việc làm sao để bot của bạn hiểu được người dùng nói gì và phản hồi phù hợp. Để tìm hiểu thêm, bạn nên xem Rasa NLU, Rasa Core, và khóa học DataCamp vừa được nhắc đến.
Đóng gói Chatbot của bạn trong một Máy chủ
httpBước đầu tiên là tạo một máy chủ
httplắng nghe các tin nhắn do Facebook gửi tới, lấy phản hồi cho tin nhắn đó, và cuối cùng gửi phản hồi lại cho người dùng trên Facebook. Chúng ta sẽ dùngflaskđể tạo máy chủ này. Ý tưởng cơ bản như sau:flasklắng nghe các tin nhắn gửi tớilocalhost:5000/webhook. Khi tin nhắn được gửi trên Facebook, chúng sẽ đến dưới dạng các yêu cầuhttptới URL này.listen()xử lý các yêu cầuhttpnày và kiểm tra xem chúng có chứa một tin nhắn Facebook hợp lệ hay khôngget_bot_response()được gọi và phản hồi được gửi lại Facebook MessengerNgoài ra, bạn sẽ tạo một hàm tên
verify_webhook()để xử lý bước xác thực ban đầu giữa Facebook và ứng dụng của bạn.Tập lệnh cuối cùng như sau (lưu với tên
server.py):Trong tập lệnh trên, các biến
VERIFY_TOKENvàPAGE_ACCESS_TOKENchưa được thiết lập — vì vậy bạn sẽ phải gán giá trị cho chúng.VERIFY_TOKENcó thể là bất kỳ chuỗi nào, nó được dùng như một dạng mật khẩu để cho Facebook biết rằng máy chủ này muốn nhận tin nhắn. Nên dùng một chuỗi ngẫu nhiên dài. Bạn có thể tạo nhanh bằng cách chạyopenssl rand -base64 32trong terminal.Chưa cần lo về
PAGE_ACCESS_TOKEN— bạn sẽ xem cách lấy nó ở bên dưới!Gửi tin nhắn phản hồi cho người dùng
Tiếp theo, bạn sẽ viết một hàm gửi phản hồi về Facebook Messenger bằng thư viện Python tên
requests. Cụ thể, bạn dùng phương thứcpost(), phương thức tạo một yêu cầuHTTP POST. Yêu cầuPOSTlà cách điển hình để gửi thông tin tới máy chủ.Hàm của bạn sẽ như sau:
Công khai một điểm cuối
httpsvà kết nối Trang FacebookURL
localhost:5000chỉ hoạt động cho các yêu cầu được tạo trên cùng máy tính đang chạy máy chủ. Vì vậy bạn cần cho Facebook biết cách truy cập máy chủflaskcủa mình. Để làm việc này, trước hết hãy cài đặtngrok.Truy cập trang này và cài đặt phiên bản phù hợp với hệ điều hành của bạn. Nếu bạn dùng Mac và có
homebrew, cách nhanh nhất để càingroklà dùngbrew cask install ngrok.Khởi động máy chủ ngrok trong terminal với
ngrok http 5000. Lệnh này sẽ thiết lập một điểm cuốihttpschuyển tiếp tới máy của bạn ở cổng5000, ví dụhttps://51b6b3fa.ngrok.io.Lưu ý rằng nếu bạn thoát
ngrokvà khởi động lại, URL này sẽ thay đổi.Tạo Ứng dụng và Trang Facebook
Bước tiếp theo là tạo một ứng dụng và một trang trên Facebook. Facebook có tài liệu hướng dẫn rất tốt tại đây, nhưng bạn sẽ đi qua các bước chính ngay sau đây.
Để tạo ứng dụng, vào đây và
Để tạo trang, bạn cần:
Sau khi tạo trang, quay lại phần cài đặt Token Generation và chọn trang này từ menu thả xuống. Sao chép Page Access Token vào chỗ dành cho
PAGE_ACCESS_TOKENtrongserver.pyở trên.Khởi động máy chủ bot của bạn
Bây giờ mọi thứ đã sẵn sàng, đã đến lúc khởi động máy chủ chatbot! Trong một thẻ tab terminal khác, chạy
Thiết lập webhook
Cuối cùng, bạn cần đăng ký webhook trên trang dành cho nhà phát triển Facebook.
https://51b6b3fa.ngrok.io/webhook. Quan trọng là ứng dụngflaskcủa bạn đang chạy ở thời điểm này, vìverify_token()sẽ được gọi ở bước tiếp theoserver.pymessagesvàmessaging_postbacksrồi Click Verify and Save để thực hiện xác thựcQuan trọng: Quay lại Products -> Messenger, và dưới mục Select a page to subscribe your webhook to the page events chọn trang của bạn và nhấp Subscribe.
Hoàn tất!
Bot của bạn giờ đã sẵn sàng để gửi và nhận tin nhắn qua Facebook Messenger. Hiện tại, hàm
get_bot_response()vẫn còn khá đơn giản và chưa giống một chatbot thực thụ! Để học đầy đủ về xây dựng chatbot, hãy xem khóa học Xây dựng Chatbot bằng Python trên DataCamp và hướng dẫn Xây dựng Chatbot dùng Chatterbot trong Python, cũng như các thư viện Python Rasa NLU và Rasa Core.