Kursus
Jika dilakukan dengan benar, berinteraksi dengan komputer melalui bahasa manusia sangatlah kuat dan juga cukup menyenangkan. Perangkat Pesan dan Kendali Suara adalah platform besar berikutnya, dan komputasi percakapan berperan penting dalam menciptakan pengalaman realitas tertambah dan virtual yang menarik. Ada sejumlah tantangan unik dalam membangun program seperti ini, misalnya: bagaimana cara membuat chatbot saya dapat diakses dari luar?
Dalam tutorial ini, Anda akan melalui langkah-langkah yang diperlukan untuk mendeploy chatbot di Facebook Messenger, yang memiliki lebih dari 1 miliar pengguna aktif. Anda dapat menjangkau audiens yang sangat besar hanya dengan beberapa baris kode.
Ada 3 langkah utama untuk menyelesaikannya. Anda perlu:
- membuat server yang mendengarkan pesan dari Facebook (menggunakan
flask) - mendefinisikan fungsi untuk mengirim pesan kembali ke pengguna (menggunakan
requests) - meneruskan koneksi
httpske mesin lokal Anda (menggunakanngrok)
Jika Anda ingin tahu lebih lanjut tentang cara mengubah bahasa manusia menjadi instruksi mesin, lihat kursus DataCamp Building Chatbots in Python.
Perhatikan bahwa yang tidak akan Anda bahas dalam tulisan ini adalah bagaimana bot Anda dapat memahami apa yang dikatakan orang dan merespons dengan tepat. Untuk mempelajari lebih lanjut tentang hal itu, Anda sebaiknya melihat Rasa NLU, Rasa Core, dan kursus DataCamp yang baru saja disebutkan.
Bungkus Chatbot Anda dalam Server http
Langkah pertama adalah membuat server http yang mendengarkan pesan yang dikirim oleh Facebook, mendapatkan respons terhadap pesan tersebut, dan akhirnya mengirimkan respons kembali ke pengguna di Facebook. Kita akan menggunakan flask untuk membuat server ini. Gagasan dasarnya adalah sebagai berikut:
- Buat aplikasi
flaskyang mendengarkan pesan yang dikirim kelocalhost:5000/webhook. Saat pesan dikirim di Facebook, pesan tersebut akan tiba sebagai permintaanhttpke URL ini. - Fungsi
listen()menangani permintaanhttpini dan memeriksa bahwa permintaan tersebut berisi pesan Facebook yang valid - Jika pesannya valid, fungsi
get_bot_response()dipanggil dan respons dikirim kembali ke Facebook Messenger
Selain itu, Anda akan membuat fungsi bernama verify_webhook() yang menangani autentikasi awal antara Facebook dan aplikasi Anda.
Skrip finalnya seperti ini (simpan sebagai 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>"
def get_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)
def verify_webhook(req):
if req.args.get("hub.verify_token") == VERIFY_TOKEN:
return req.args.get("hub.challenge")
else:
return "incorrect"
def respond(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)
def is_user_message(message):
"""Check if the message is a message from the user"""
return (message.get('message') and
message['message'].get('text') and
not message['message'].get("is_echo"))
@app.route("/webhook")
def listen():
"""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"
Pada skrip di atas variabel VERIFY_TOKEN dan PAGE_ACCESS_TOKEN belum ditetapkan — jadi Anda harus mengisinya. VERIFY_TOKEN bisa berupa string apa saja, digunakan sebagai semacam kata sandi untuk memberi tahu Facebook bahwa server ini ingin menerima pesan. Sebaiknya gunakan string acak yang panjang. Anda dapat melakukannya dengan cepat dengan menjalankan openssl rand -base64 32 di terminal Anda.
Jangan khawatir dulu tentang PAGE_ACCESS_TOKEN — Anda akan melihat cara mendapatkannya di bawah!
Kirim Pesan Kembali ke Pengguna
Selanjutnya, Anda akan menulis fungsi yang mengirim respons kembali ke Facebook Messenger menggunakan pustaka Python bernama requests. Secara khusus, Anda menggunakan metode post(), yang membuat permintaan HTTP POST. Permintaan POST adalah cara umum untuk mengirim informasi ke server.
Fungsi Anda seharusnya terlihat seperti ini:
import requests
def send_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()
Ekspos Endpoint https dan Sambungkan Halaman Facebook
URL localhost:5000 hanya berfungsi untuk permintaan yang dibuat pada komputer yang sama dengan server yang berjalan. Jadi Anda perlu memberi tahu Facebook bagaimana cara menjangkau server flask Anda. Untuk melakukannya, pertama pasang ngrok.
Buka halaman ini dan instal versi untuk sistem operasi Anda. Jika Anda menggunakan Mac dan memiliki homebrew, cara tercepat untuk memasang ngrok adalah dengan brew cask install ngrok.
Mulai server ngrok di terminal Anda dengan ngrok http 5000. Ini akan menyiapkan endpoint https yang diteruskan ke mesin Anda pada port 5000, misalnya https://51b6b3fa.ngrok.io.
Catatan bahwa jika Anda keluar dari ngrok dan memulai ulang, URL ini akan berubah.
Buat Aplikasi dan Halaman Facebook
Langkah berikutnya adalah membuat aplikasi dan halaman di Facebook. Dokumentasi yang baik tersedia dari Facebook tetapi Anda akan menelusuri langkah-langkah utamanya di sini.
Untuk membuat aplikasi, pergi ke sini dan
- klik My Apps -> Add a New App dan masukkan nama
- Anda akan diarahkan ke dasbor untuk aplikasi tersebut
- di bawah Products, temukan Add a Product dan klik Messenger -> Set Up
Untuk membuat halaman, Anda harus:
- pergi ke pengaturan untuk Messenger, gulir ke bawah ke Token Generation dan klik tautan untuk create a new page untuk aplikasi Anda
Setelah Anda membuat halaman, kembali ke pengaturan Token Generation dan pilih halaman ini dari menu tarik-turun. Salin Page Access Token ke placeholder untuk PAGE_ACCESS_TOKEN di server.py di atas.
Mulai server bot Anda
Sekarang setelah semuanya siap, saatnya menjalankan server chatbot Anda! Di tab terminal terpisah, jalankan
FLASK_APP=server.py flask run
Siapkan webhook
Terakhir, Anda perlu mendaftarkan webhook di halaman pengembang Facebook.
- Buka tab Messenger di Products lagi dan gulir ke bawah ke Webhooks, klik Setup Webhooks
- Pada Callback URL masukkan URL ngrok Anda, misalnya,
https://51b6b3fa.ngrok.io/webhook. Penting bahwa aplikasiflaskAnda sedang berjalan pada tahap ini, karenaverify_token()akan dipanggil pada langkah berikutnya - Pada kolom Verify Token, masukkan nilai yang Anda tetapkan di file
server.py - Di Subscription Fields pastikan
messagesdanmessaging_postbacksdicentang Klik Verify and Save untuk melakukan autentikasi
Penting: Kembali ke Products -> Messenger, dan di bawah Select a page to subscribe your webhook to the page events pilih halaman Anda dan klik Subscribe.
Selesai!
Bot Anda sekarang siap mengirim dan menerima pesan melalui Facebook Messenger. Saat ini, fungsi get_bot_response() Anda masih cukup sederhana, dan belum terasa seperti chatbot sungguhan! Untuk mempelajari semua tentang membangun chatbot, lihat kursus DataCamp Building Chatbots in Python dan tutorial Building a Chatbot using Chatterbot in Python, serta pustaka Python Rasa NLU dan Rasa Core.

