İlk Telegram Botunuzu Oluşturma: Adım Adım Kılavuz
Yayınlanan: 2022-03-11Chatbotlar genellikle kullanıcıların teknoloji ve işletmelerle etkileşim kurma biçiminde bir devrim olarak lanse edilir. Geleneksel uygulamalara kıyasla oldukça basit bir arayüze sahipler, çünkü yalnızca kullanıcıların sohbet etmesini gerektiriyor ve sohbet robotlarının, en azından teoride, kullanıcının onlardan ne talep ettiğini anlaması ve yapması gerekiyor.
Birçok endüstri, müşteri hizmetlerini chatbot sistemlerine kaydırıyor. Bunun nedeni, gerçek insanlara kıyasla maliyetteki büyük düşüş ve ayrıca sağlamlık ve sürekli kullanılabilirliktir. Chatbotlar, önemli bir ek maliyet olmaksızın bir dereceye kadar kullanıcı desteği sunar.
Günümüzde sohbet robotları, zaman ve hava durumu verilerinin görüntülenmesi gibi basit görevlerden temel tıbbi teşhis ve müşteri iletişimi/destek gibi daha karmaşık işlemlere kadar birçok senaryoda kullanılmaktadır. Müşterilerinize ürününüz hakkında belirli sorular sorduklarında yardımcı olacak bir sohbet robotu tasarlayabilir veya temel görevleri yerine getirebilen ve bir toplantıya veya spor salonuna gitme zamanı geldiğinde size hatırlatan kişisel bir yardımcı sohbet robotu oluşturabilirsiniz.
Sohbet robotunuzu nereye yerleştirebileceğiniz konusunda birçok seçenek vardır ve en yaygın kullanımlarından biri, çoğu insan bunları düzenli olarak kullandığından sosyal medya platformlarıdır. Aynı şey, bazı uyarılarla birlikte, anlık mesajlaşma uygulamaları için de söylenebilir.
Telegram, mesajları yalnızca cihazınız yerine bulutta depolamanıza izin verdiği ve Telegram'ı Android, iOS, Windows ve hemen hemen her yerde kullanabileceğiniz için iyi bir çoklu platform desteğine sahip olduğu için günümüzün en popüler IM platformlarından biridir. web sürümünü destekleyebilecek başka herhangi bir platform. Telegram'da bir sohbet robotu oluşturmak oldukça basittir ve tamamlanması çok az zaman alan birkaç adım gerektirir. Chatbot, Telegram gruplarına ve kanallarına entegre edilebilir ve kendi başına da çalışır.
Bu eğitimde, size Adorable Avatar'lardan bir avatar görüntüsü veren bir Telegram botu oluşturacağız. Örneğimiz, Flask kullanarak bir bot oluşturmayı ve onu ücretsiz bir Heroku sunucusuna yerleştirmeyi içerecektir.
Bu öğreticiyi tamamlamak için sisteminizde yüklü Python 3'e ve ayrıca Python kodlama becerilerine ihtiyacınız olacak. Ayrıca, uygulamaların nasıl çalıştığını iyi anlamak iyi bir ek olabilir, ancak sunduğumuz şeylerin çoğunu ayrıntılı olarak inceleyeceğimiz için şart değil. Ayrıca sisteminizde Git'in kurulu olması gerekir.
Tabii ki, öğretici ayrıca ücretsiz bir Telegram hesabı gerektirir. Buradan kayıt olabilirsiniz. Bir Heroku hesabı da gereklidir ve buradan ücretsiz olarak alabilirsiniz.
Telegram Botunuzu Hayata Geçirmek
Telegram'da bir sohbet robotu oluşturmak için, esasen başka botlar oluşturmak için kullanılan bir bot olan BotFather ile iletişime geçmeniz gerekir.
İhtiyacınız olan komut /newbot
ve bu, botunuzu oluşturmak için aşağıdaki adımlara yol açar:
Botunuzun iki özelliği olmalıdır: bir ad ve bir kullanıcı adı. Ad, botunuz için görünecek, kullanıcı adı ise bahsetme ve paylaşım için kullanılacak.
"bot" ile bitmesi gereken bot adınızı ve kullanıcı adınızı seçtikten sonra, erişim jetonunuzu içeren bir mesaj alacaksınız ve açıkçası erişim jetonunuzu ve kullanıcı adınızı daha sonra ihtiyaç duyacağınız için kaydetmeniz gerekecek.
Chatbot Mantığını Kodlayın
Bu eğitimde Ubuntu kullanacağız. Windows kullanıcıları için buradaki komutların çoğu sorunsuz çalışacaktır, ancak sanal ortam kurulumunda herhangi bir sorunla karşılaşırsanız lütfen bu bağlantıya bakın. Mac kullanıcılarına gelince, bu eğitim gayet iyi çalışmalıdır.
Öncelikle sanal bir ortam oluşturalım. Projenizin gereksinimlerini global Python ortamınızdan ayırmanıza yardımcı olur.
$ python -m venv botenv/
Şimdi kullanacağımız tüm Python kitaplıklarını içeren bir botenv/
dizini olacak. Devam edin ve aşağıdaki komutu kullanarak virtualenv
etkinleştirin:
$ source botenv/bin/activate
Botumuz için ihtiyacımız olan kütüphaneler:
- Flask: Python'da yerleşik bir mikro web çerçevesi.
- Python-telegram-bot: Python'da bir Telegram sarmalayıcı.
- İstekler: Popüler bir Python http kitaplığı.
Bunları pip komutunu kullanarak sanal ortama aşağıdaki gibi kurabilirsiniz:
(telebot) $ pip install flask (telebot) $ pip install python-telegram-bot (telebot) $ pip install requests
Şimdi proje dizinimize göz atalım.
. ├── app.py ├── telebot │ ├── credentials.py │ | . │ | you can build your engine here │ | . │ └── __init__.py └── botenv
credentials.py
dosyasında üç değişkene ihtiyacımız olacak:
bot_token = "here goes your access token from BotFather" bot_user_name = "the username you entered" URL = "the heroku app link that we will create later"
Şimdi app.py dosyamıza geri dönelim ve kodu adım adım inceleyelim:
# import everything from flask import Flask, request import telegram from telebot.credentials import bot_token, bot_user_name,URL
global bot global TOKEN TOKEN = bot_token bot = telegram.Bot(token=TOKEN)
Artık botun gerçekleştirmesini istediğimiz herhangi bir eylem için kullanılacak bot nesnesine sahibiz.
# start the flask app app = Flask(__name__)
Ayrıca işlevleri belirli rotalara bağlamamız gerekir. Başka bir deyişle, belirli bir adres arandığında ne yapacağını Flask'a söylememiz gerekiyor. Flask ve rotalar hakkında daha detaylı bilgiyi burada bulabilirsiniz.
Örneğimizde, rota işlevi temel olarak /{token}
olan bir URL'ye yanıt verir ve bu, Telegram'ın bota gönderilen mesajlara yanıt almak için arayacağı URL'dir.
@app.route('/{}'.format(TOKEN), methods=['POST']) def respond(): # retrieve the message in JSON and then transform it to Telegram object update = telegram.Update.de_json(request.get_json(force=True), bot) chat_id = update.message.chat.id msg_id = update.message.message_id # Telegram understands UTF-8, so encode text for unicode compatibility text = update.message.text.encode('utf-8').decode() # for debugging purposes only print("got text message :", text) # the first time you chat with the bot AKA the welcoming message if text == "/start": # print the welcoming message bot_welcome = """ Welcome to coolAvatar bot, the bot is using the service from http://avatars.adorable.io/ to generate cool looking avatars based on the name you enter so please enter a name and the bot will reply with an avatar for your name. """ # send the welcoming message bot.sendMessage(chat_id=chat_id, text=bot_welcome, reply_to_message_id=msg_id) else: try: # clear the message we got from any non alphabets text = re.sub(r"\W", "_", text) # create the api link for the avatar based on http://avatars.adorable.io/ url = "https://api.adorable.io/avatars/285/{}.png".format(text.strip()) # reply with a photo to the name the user sent, # note that you can send photos by url and telegram will fetch it for you bot.sendPhoto(chat_id=chat_id, photo=url, reply_to_message_id=msg_id) except Exception: # if things went wrong bot.sendMessage(chat_id=chat_id, text="There was a problem in the name you used, please enter different name", reply_to_message_id=msg_id) return 'ok'
Bu işlevi çalıştırmanın sezgisel yolu, onu her saniye arayacağız, böylece yeni bir mesajın gelip gelmediğini kontrol edeceğiz, ancak bunu yapmayacağız. Bunun yerine, bir mesaj çağrıldığında botun sunucumuzu aramasına izin vermenin bir yolunu sağlayan Webhook'u kullanacağız, böylece bir mesajın gelmesini beklerken sunucumuzun bir süre döngüsünde acı çekmesine gerek kalmaz.
Bu nedenle, Telegram'ın Webhook'unu etkinleştirmek için kendimizin çağırmamız gereken bir işlevi yapacağız, temel olarak Telegram'a yeni bir mesaj geldiğinde belirli bir bağlantıyı aramasını söyleyeceğiz. Botu ilk oluşturduğumuzda bu işlevi yalnızca bir kez çağıracağız. Uygulama bağlantısını değiştirirseniz, bu işlevi sahip olduğunuz yeni bağlantıyla tekrar çalıştırmanız gerekecektir.
Buradaki rota herhangi bir şey olabilir; onu arayacak olan sensin:
@app.route('/setwebhook', methods=['GET', 'POST']) def set_webhook(): # we use the bot object to link the bot to our app which live # in the link provided by URL s = bot.setWebhook('{URL}{HOOK}'.format(URL=URL, HOOK=TOKEN)) # something to let us know things work if s: return "webhook setup ok" else: return "webhook setup failed"
Artık her şey ayarlandığına göre, motorun çalıştığını anlamamız için süslü bir ana sayfa yapalım.
@app.route('/') def index(): return '.' if __name__ == '__main__': # note the threaded arg which allow # your app to have more than one thread app.run(threaded=True)
App.py'nin tam sürümüne bir göz atalım:
import re from flask import Flask, request import telegram from telebot.credentials import bot_token, bot_user_name,URL global bot global TOKEN TOKEN = bot_token bot = telegram.Bot(token=TOKEN) app = Flask(__name__) @app.route('/{}'.format(TOKEN), methods=['POST']) def respond(): # retrieve the message in JSON and then transform it to Telegram object update = telegram.Update.de_json(request.get_json(force=True), bot) chat_id = update.message.chat.id msg_id = update.message.message_id # Telegram understands UTF-8, so encode text for unicode compatibility text = update.message.text.encode('utf-8').decode() # for debugging purposes only print("got text message :", text) # the first time you chat with the bot AKA the welcoming message if text == "/start": # print the welcoming message bot_welcome = """ Welcome to coolAvatar bot, the bot is using the service from http://avatars.adorable.io/ to generate cool looking avatars based on the name you enter so please enter a name and the bot will reply with an avatar for your name. """ # send the welcoming message bot.sendMessage(chat_id=chat_id, text=bot_welcome, reply_to_message_id=msg_id) else: try: # clear the message we got from any non alphabets text = re.sub(r"\W", "_", text) # create the api link for the avatar based on http://avatars.adorable.io/ url = "https://api.adorable.io/avatars/285/{}.png".format(text.strip()) # reply with a photo to the name the user sent, # note that you can send photos by url and telegram will fetch it for you bot.sendPhoto(chat_id=chat_id, photo=url, reply_to_message_id=msg_id) except Exception: # if things went wrong bot.sendMessage(chat_id=chat_id, text="There was a problem in the name you used, please enter different name", reply_to_message_id=msg_id) return 'ok' @app.route('/set_webhook', methods=['GET', 'POST']) def set_webhook(): s = bot.setWebhook('{URL}{HOOK}'.format(URL=URL, HOOK=TOKEN)) if s: return "webhook setup ok" else: return "webhook setup failed" @app.route('/') def index(): return '.' if __name__ == '__main__': app.run(threaded=True)
Bu, öğreticimizde yazacağınız son kod parçası. Artık uygulamamızı Heroku'da başlatarak son adıma geçebiliriz.

Uygulamamızı Heroku'da Başlatın
Uygulamamızı yapmadan önce birkaç şeye ihtiyacımız var.
Heroku, projenizin hangi kitaplıkları kullandığını bilemez, bu nedenle, gereksinimler dosyasını pip kullanarak oluşturmak için requirements.txt
dosyasını kullanarak söylemeliyiz—genel bir sorun gereksinimleri yanlış yazmanızdır, bu nedenle dikkatli olun:
pip freeze > requirements.txt
Artık ihtiyaç dosyanız kullanıma hazır.
Şimdi, Heroku'ya uygulamamızın nerede başladığını söyleyen Procfile
ihtiyacınız var, bu nedenle bir Procfile
dosyası oluşturun ve aşağıdakileri ekleyin:
web: gunicorn app:app
Geri dönme adımı: Kullanılmayan dosyaların havuza yüklenmemesi için projenize bir .gitignore
dosyası ekleyebilirsiniz.
Heroku kontrol panelinizden yeni bir uygulama oluşturun. Bunu yaptığınızda, sizi Dağıtım sayfasına yönlendirecektir. Ardından, Ayarlar sekmesini yeni bir pencerede açın ve https://appname.herokuapp.com/
gibi bir şey olacak uygulamanın etki alanını kopyalayın ve bunu credentials.py
içindeki URL değişkenine yapıştırın.
Şimdi, Dağıt sekmesine geri dönün ve aşağıdaki adımlarla devam edin:
Not: Windows ve macOS kullanıcıları burada açıklanan adımları takip edebilir.
Heroku'da oturum açın:
$ heroku login
Lütfen bu yöntemin bazen waiting for login
takıldığını unutmayın, bu size olursa, aşağıdakileri kullanarak oturum açmayı deneyin:
$ heroku login -i
Dizinimizde bir Git deposu başlatın:
$ git init $ heroku git:remote -a {heroku-project-name}
Uygulamayı dağıtın:
$ git add . $ git commit -m "first commit" $ git push heroku master
Bu noktada, terminalinizde bina ilerlemesini göreceksiniz. Her şey yolunda giderse, şöyle bir şey göreceksiniz:
remote: -----> Launching... remote: Released v6 remote: https://project-name.herokuapp.com/ deployed to Heroku remote: remote: Verifying deploy... done.
Şimdi uygulama sayfasına gidin (daha önce kopyaladığınız etki alanının bağlantısı) ve bağlantının sonuna /setwebhook
ekleyin, böylece adres https://appname.herokuapp.com/setwebhook
gibi bir şey olacaktır. webhook setup ok
olduğunu görürseniz, bu, gitmeye hazır olduğunuz anlamına gelir!
Şimdi Git Botunuzla Konuşun
Son Rötuşlar, İpuçları ve Püf Noktaları
Artık Telegram botunuz, müdahalenize gerek kalmadan 7/24 çalışır durumda. Bot'a istediğiniz mantığı ekleyebilir, yani örneğin aşağıdaki gibi bir "yazma" durumu ekleyerek ve bir fotoğraf durumu göndererek botunuzu daha gerçekçi hale getirebilirsiniz:
respond()
işlevinden sonraki kod parçacığı:
if text == "/start": # print the welcoming message bot_welcome = """ Welcome to coolAvatar bot, the bot is using the service from http://avatars.adorable.io/ to generate cool looking avatars based on the name you enter so please enter a name and the bot will reply with an avatar for your name. """ # send the welcoming message bot.sendChatAction(chat_id=chat_id, action="typing") sleep(1.5) bot.sendMessage(chat_id=chat_id, text=bot_welcome, reply_to_message_id=msg_id) else: try: # clear the message we got from any non alphabets text = re.sub(r"\W", "_", text) # create the api link for the avatar based on http://avatars.adorable.io/ url = "https://api.adorable.io/avatars/285/{}.png".format(text.strip()) # reply with a photo to the name the user sent, # note that you can send photos by url and telegram will fetch it for you bot.sendChatAction(chat_id=chat_id, action="upload_photo") sleep(2) bot.sendPhoto(chat_id=chat_id, photo=url, reply_to_message_id=msg_id) except Exception: # if things went wrong bot.sendMessage(chat_id=chat_id, text="There was a problem in the name you used, please enter different name", reply_to_message_id=msg_id)
Snippet'te görebileceğiniz gibi, botla ilgili bilgileri metin formatında göndermek üzereyken bir yazma eylemi ekledik ve bir fotoğraf gönderirken bir fotoğraf yükleme eylemi ekledik botu daha gerçekçi hale getirmek için . Daha fazla eylem burada bulunabilir.
Ayrıca daha kolay hale getirmek için BotFather kanalından bot görüntüsünü ve açıklamasını değiştirebilirsiniz.
GitHub'daki python-telegram-bot sayfasında daha birçok basit telgraf botu örneği bulunabilir.
Botumuzu geliştirebilir ve onu bir sonraki süper AI botu yapabilirsiniz; tek yapmanız gereken mantığınızı respond()
işlevine entegre etmektir. Örneğin, mantığınız ayrı bir modülde olabilir ve şu şekilde respond()
işlevinin içinde çağrılabilir:
. ├── app.py ├── telebot │ ├── credentials.py │ ├──ai.py │ | . │ | you can build your engine here │ | . │ └── __init__.py └── botenv
Ve ai .py'nin içinde:
def generate_smart_reply(text): # here we can do all our work return "this is a smart reply from the ai!"
Şimdi .py uygulamasında içe aktarın:
import re from time import sleep from flask import Flask, request import telegram From telebot.ai import generate_smart_reply from telebot.credentials import bot_token, bot_user_name,URL
Ardından, onu respond()
kodunun içinde arayın.
def respond(): # retrieve the message in JSON and then transform it to Telegram object update = telegram.Update.de_json(request.get_json(force=True), bot) chat_id = update.message.chat.id msg_id = update.message.message_id # Telegram understands UTF-8, so encode text for unicode compatibility text = update.message.text.encode('utf-8').decode() # for debugging purposes only print("got text message :", text) # here call your smart reply message reply = generate_smart_reply(text) bot.sendMessage(chat_id=chat_id, text=reply, reply_to_message_id=msg_id)
Artık botunuzun istediğiniz gibi çalışmasını sağlayabilirsiniz - devam edin ve bir sonraki büyük şeyi yaratın!
Umarım ilk Telegram botunuzu oluştururken eğlenmişsinizdir.
Ek kaynaklar
- Telegram ve Python kullanarak Chatbot oluşturma
- Telegram Bot WebHook'unuzu kolay yoldan ayarlama
- Python-telgraf-bot Deposu
- Heroku'da Git ile dağıtma
- Python Telegram Bot belgeleri