Kurs
Doğru yapıldığında, insan diliyle bir bilgisayarla etkileşim kurmak son derece güçlü ve bir o kadar da eğlencelidir. Mesajlaşma ve Ses Kontrollü cihazlar bir sonraki büyük platformlar ve sohbet tabanlı bilişim, etkileyici artırılmış ve sanal gerçeklik deneyimleri yaratmada önemli bir role sahip. Bu tür programları geliştirirken benzersiz zorluklar vardır; örneğin: chatbot'umu dış dünyaya nasıl açarım?
Bu eğitimde, 1 milyardan fazla aktif kullanıcısı olan Facebook Messenger üzerinde bir chatbot'u nasıl dağıtacağınızın adımlarını inceleyeceksiniz. Sadece birkaç satır kodla çok geniş bir kitleye ulaşabilirsiniz.
Bunu yapmak için 3 ana adım vardır. Şunları yapmanız gerekir:
- Facebook'tan gelen mesajları dinleyen bir sunucu oluşturmak (
flaskkullanarak) - Kullanıcılara geri mesaj gönderecek bir fonksiyon tanımlamak (
requestskullanarak) httpsbağlantısını yerel makinenize iletmek (ngrokkullanarak)
İnsan dilini makine talimatlarına dönüştürme hakkında daha fazla bilgi edinmek isterseniz, Python ile Chatbot Oluşturma DataCamp kursuna göz atın.
Bu yazıda ele almayacağınız konu ise botunuzun insanların ne söylediğini nasıl anlayacağı ve uygun şekilde nasıl yanıt vereceğidir. Bununla ilgili daha fazla bilgi edinmek için Rasa NLU, Rasa Core ve az önce bahsedilen DataCamp kursuna bakmalısınız.
Chatbot'unuzu bir http Sunucusuna Sarmalayın
İlk adım, Facebook tarafından gönderilen mesajları dinleyen, bu mesaja bir yanıt alan ve sonunda yanıtı Facebook'ta kullanıcıya geri gönderen bir http sunucusu oluşturmaktır. Bu sunucuyu oluşturmak için flask kullanacağız. Temel fikir şöyledir:
localhost:5000/webhookadresine gönderilen mesajları dinleyen birflaskuygulaması oluşturun. Facebook üzerinden mesaj gönderildiğinde, bu URL'yehttpisteği olarak ulaşacaktır.listen()fonksiyonu buhttpisteklerini işler ve geçerli bir Facebook mesajı içerip içermediğini kontrol eder- Mesaj geçerliyse
get_bot_response()fonksiyonu çağrılır ve yanıt Facebook Messenger'a geri gönderilir
Ek olarak, Facebook ile uygulamanız arasındaki ilk kimlik doğrulamayı yöneten verify_webhook() adlı bir fonksiyon oluşturacaksınız.
Nihai betik şu şekildedir (server.py adıyla kaydedin):
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"
Yukarıdaki betikte VERIFY_TOKEN ve PAGE_ACCESS_TOKEN değişkenleri henüz tanımlı değil — bu yüzden bunları ayarlamanız gerekecek. VERIFY_TOKEN herhangi bir dize olabilir; Facebook'a bu sunucunun mesaj almak istediğini bildiren bir tür parola olarak kullanılır. Uzun ve rastgele bir dize kullanmak iyi bir fikirdir. Terminalinizde openssl rand -base64 32 komutunu çalıştırarak bunu hızlıca yapabilirsiniz.
PAGE_ACCESS_TOKEN konusunda şimdilik endişelenmeyin — bunu aşağıda nasıl alacağınızı göreceksiniz!
Kullanıcılara Mesajları Geri Gönderin
Sırada, requests adlı bir Python kütüphanesini kullanarak yanıtı Facebook Messenger'a geri gönderen bir fonksiyon yazacaksınız. Özellikle, bir HTTP POST isteği oluşturan post() metodunu kullanırsınız. Bir POST isteği, bir sunucuya bilgi göndermenin tipik yoludur.
Fonksiyonunuz aşağıdaki gibi olmalıdır:
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()
https Uç Noktasını Dışa Açın ve Bir Facebook Sayfasına Bağlayın
localhost:5000 URL'si yalnızca çalışan sunucuyla aynı bilgisayarda oluşturulan istekler için çalışır. Bu nedenle Facebook'un sizin flask sunucunuza nasıl ulaşacağını belirtmeniz gerekir. Bunu yapmak için önce ngrok kurun.
Bu sayfaya gidin ve işletim sisteminize uygun sürümü kurun. Mac kullanıyorsanız ve homebrew varsa, ngrok'u kurmanın en hızlı yolu brew cask install ngrok komutudur.
Terminalinizde ngrok http 5000 ile ngrok sunucusunu başlatın. Bu, makinenize 5000 portundan iletilecek bir https uç noktası kuracaktır; örneğin https://51b6b3fa.ngrok.io.
Not: ngrok'tan çıkıp yeniden başlatırsanız, bu URL değişecektir.
Bir Facebook Uygulaması ve Sayfası Oluşturun
Bir sonraki adım Facebook'ta bir uygulama ve bir sayfa oluşturmaktır. Facebook tarafından iyi bir dokümantasyon sağlanmıştır, ancak burada ana adımları gözden geçireceksiniz.
Uygulamayı oluşturmak için buraya gidin ve
- My Apps -> Add a New App'e tıklayın ve bir ad girin
- uygulamanın kontrol paneline yönlendirileceksiniz
- Products altında Add a Product'ı bulun ve Messenger -> Set Up'a tıklayın
Sayfayı oluşturmak için şunları yapmalısınız:
- Messenger ayarlarına gidin, Token Generation bölümüne kadar kaydırın ve uygulamanız için yeni bir sayfa oluştur bağlantısına tıklayın
Bir sayfa oluşturduktan sonra, tekrar Token Generation ayarlarına gidin ve açılır menüden bu sayfayı seçin. Page Access Token'ı yukarıdaki server.py dosyasında PAGE_ACCESS_TOKEN için ayrılan yere kopyalayın.
Bot sunucunuzu başlatın
Artık her şeyi ayarladığınıza göre, chatbot sunucunuzu başlatma zamanı! Ayrı bir terminal sekmesinde şunu çalıştırın
FLASK_APP=server.py flask run
Webhook'u ayarlayın
Son olarak, webhook'unuzu Facebook geliştirici sayfasında kaydetmeniz gerekir.
- Yine Products içindeki Messenger sekmesine gidin ve Webhooks bölümüne kadar kaydırın, Setup Webhooks'a tıklayın
- Callback URL alanına ngrok URL'nizi girin; örneğin
https://51b6b3fa.ngrok.io/webhook. Bu noktadaflaskuygulamanızın çalışıyor olması önemlidir, çünkü bir sonraki adımdaverify_token()çağrılacaktır - Verify Token alanına
server.pydosyanızda belirttiğiniz değeri girin - Subscription Fields altında
messagesvemessaging_postbacks'in işaretli olduğundan emin olun Doğrula ve Kaydet'e tıklayın ve kimlik doğrulamayı gerçekleştirin
Önemli: Products -> Messenger'a geri dönün ve Webhook'unuzu sayfa olaylarına abone etmek için bir sayfa seçin altında sayfanızı seçip Subscribe'a tıklayın.
İşlem tamam!
Botunuz artık Facebook Messenger üzerinden mesaj göndermeye ve almaya hazır. Şu anda get_bot_response() fonksiyonunuz hâlâ oldukça basit ve henüz gerçek bir chatbot gibi hissettirmiyor! Chatbot oluşturma hakkında her şeyi öğrenmek için Python ile Chatbot Oluşturma DataCamp kursuna ve Python'da Chatterbot Kullanarak Chatbot Oluşturma eğitimine, ayrıca Rasa NLU ve Rasa Core Python kütüphanelerine göz atın.

