İlk Telegram Botunuzu Oluşturma: Adım Adım Kılavuz

Yayınlanan: 2022-03-11

Chatbotlar 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:

Telegram bot eğitimi - ekran görüntüsü örneği

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.

Heroku panosu ekran görüntüsü

Ş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

Telegram sohbet robotunun canlı versiyonu
Botun canlı versiyonu

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
İlgili: Bir Uygulama Değil, WhatsApp Sohbet Robotu Oluşturun