Crearea primului tău robot Telegram: un ghid pas cu pas
Publicat: 2022-03-11Chatbot-urile sunt adesea prezentate ca o revoluție în modul în care utilizatorii interacționează cu tehnologia și afacerile. Au o interfață destul de simplă în comparație cu aplicațiile tradiționale, deoarece necesită doar utilizatorilor să chat, iar chatbot-ii ar trebui să înțeleagă și să facă orice cere utilizatorul de la ei, cel puțin în teorie.
Multe industrii își schimbă serviciile pentru clienți către sistemele de chatbot. Acest lucru se datorează scăderii uriașe a costurilor în comparație cu oamenii reali și, de asemenea, din cauza robusteții și a disponibilității constante. Chatbot-urile oferă un anumit grad de asistență utilizatorilor fără costuri suplimentare substanțiale.
Astăzi, chatboții sunt utilizați în multe scenarii, de la sarcini ușoare, cum ar fi afișarea datelor despre timp și vreme, până la operațiuni mai complexe, cum ar fi diagnosticarea medicală rudimentară și comunicarea/asistența cu clienții. Puteți concepe un chatbot care să vă ajute clienții atunci când vă pun anumite întrebări despre produsul dvs. sau puteți crea un chatbot de asistent personal care să se ocupe de sarcinile de bază și să vă reamintească când este timpul să mergeți la o întâlnire sau la sală.
Există o mulțime de opțiuni când vine vorba de unde vă puteți implementa chatbot-ul, iar una dintre cele mai comune utilizări sunt platformele de social media, deoarece majoritatea oamenilor le folosesc în mod regulat. Același lucru se poate spune despre aplicațiile de mesagerie instantanee, deși cu unele avertismente.
Telegram este una dintre cele mai populare platforme IM astăzi, deoarece vă permite să stocați mesaje pe cloud în loc de doar pe dispozitivul dvs. și se mândrește cu un suport bun pentru mai multe platforme, deoarece puteți avea Telegram pe Android, iOS, Windows și aproape orice altă platformă care poate suporta versiunea web. Construirea unui chatbot pe Telegram este destul de simplă și necesită câțiva pași, care durează foarte puțin timp. Chatbot-ul poate fi integrat în grupuri și canale Telegram și funcționează și singur.
În acest tutorial, vom crea un bot Telegram care vă oferă o imagine de avatar din Avataruri adorabile. Exemplul nostru va implica construirea unui bot folosind Flask și implementarea lui pe un server Heroku gratuit.
Pentru a finaliza acest tutorial, veți avea nevoie de Python 3 instalat pe sistemul dvs., precum și de abilități de codare Python. De asemenea, o bună înțelegere a modului în care funcționează aplicațiile ar fi un plus bun, dar nu o necesitate, deoarece vom parcurge majoritatea lucrurilor pe care le prezentăm în detaliu. De asemenea, aveți nevoie de Git instalat pe sistemul dvs.
Desigur, tutorialul necesită și un cont Telegram, care este gratuit. Vă puteți înscrie aici. Este necesar și un cont Heroku și îl puteți obține gratuit aici.
Dă viață botului tău Telegram
Pentru a crea un chatbot pe Telegram, trebuie să contactați BotFather, care este în esență un bot folosit pentru a crea alți roboți.
Comanda de care aveți nevoie este /newbot
, care duce la următorii pași pentru a vă crea bot:
Botul dvs. ar trebui să aibă două atribute: un nume și un nume de utilizator. Numele va apărea pentru botul dvs., în timp ce numele de utilizator va fi folosit pentru mențiuni și distribuire.
După ce ați ales numele botului și numele de utilizator – care trebuie să se termine cu „bot” – veți primi un mesaj care conține simbolul de acces și, evident, va trebui să salvați jetonul de acces și numele de utilizator pentru mai târziu, deoarece veți avea nevoie de ele.
Codați logica Chatbot
Vom folosi Ubuntu în acest tutorial. Pentru utilizatorii de Windows, majoritatea comenzilor de aici vor funcționa fără probleme, dar dacă vă confruntați cu probleme cu configurarea mediului virtual, vă rugăm să consultați acest link. În ceea ce privește utilizatorii de Mac, acest tutorial ar trebui să funcționeze bine.
Mai întâi, să creăm un mediu virtual. Vă ajută să izolați cerințele proiectului dvs. de mediul dvs. global Python.
$ python -m venv botenv/
Acum vom avea un director botenv/
care va conține toate bibliotecile Python pe care le vom folosi. Continuați și activați virtualenv
folosind următoarea comandă:
$ source botenv/bin/activate
Bibliotecile de care avem nevoie pentru botul nostru sunt:
- Flask: Un cadru web micro construit în Python.
- Python-telegram-bot: Un pachet Telegram în Python.
- Cereri: O bibliotecă http populară Python.
Le puteți instala în mediul virtual folosind comanda pip, după cum urmează:
(telebot) $ pip install flask (telebot) $ pip install python-telegram-bot (telebot) $ pip install requests
Acum haideți să răsfoim directorul nostru de proiecte.
. ├── app.py ├── telebot │ ├── credentials.py │ | . │ | you can build your engine here │ | . │ └── __init__.py └── botenv
În fișierul credentials.py
vom avea nevoie de trei variabile:
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"
Acum să revenim la app.py și să parcurgem codul pas cu pas:
# 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)
Acum avem obiectul bot care va fi folosit pentru orice acțiune pe care o solicităm să o efectueze bot.
# start the flask app app = Flask(__name__)
De asemenea, trebuie să legăm funcții de rute specifice. Cu alte cuvinte, trebuie să îi spunem lui Flask ce să facă atunci când este apelată o anumită adresă. Mai multe informații detaliate despre Flask și rute pot fi găsite aici.
În exemplul nostru, funcția de rută răspunde la o adresă URL care este practic /{token}
și aceasta este adresa URL pe care Telegram o va apela pentru a obține răspunsuri pentru mesajele trimise către bot.
@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'
Modul intuitiv de a face această funcție să funcționeze este că o vom apela în fiecare secundă, astfel încât să verifice dacă a sosit un mesaj nou, dar nu vom face asta. În schimb, vom folosi Webhook, care ne oferă o modalitate de a permite botului să ne apeleze serverul ori de câte ori este apelat un mesaj, astfel încât să nu fie nevoie să facem serverul nostru să sufere într-o buclă de timp în așteptarea unui mesaj.
Deci, vom crea o funcție pe care noi înșine trebuie să o apelăm pentru a activa Webhook-ul Telegramului, spunându-i, practic, Telegramului să apeleze un anumit link atunci când sosește un mesaj nou. Vom apela această funcție o singură dată, când vom crea prima dată botul. Dacă modificați linkul aplicației, atunci va trebui să rulați din nou această funcție cu noul link pe care îl aveți.
Traseul aici poate fi orice; tu ești cel care o va numi:
@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"
Acum că totul este setat, să facem doar o pagină de pornire elegantă, astfel încât să știm că motorul este pornit.
@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)
Să aruncăm o privire la versiunea completă a app.py:
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)
Acesta este ultimul fragment de cod pe care îl veți scrie în tutorialul nostru. Acum putem trece la ultimul pas, lansând aplicația noastră pe Heroku.

Lansați aplicația noastră pe Heroku
Avem nevoie de câteva lucruri înainte de a ne crea aplicația.
Heroku nu poate ști ce biblioteci folosește proiectul tău, așa că trebuie să îi spunem folosind fișierul requirements.txt
— o problemă comună este că scrii greșit cerințele, așa că fii atent — pentru a genera fișierul cerințe folosind pip:
pip freeze > requirements.txt
Acum aveți fișierul de cerințe gata de plecare.
Acum aveți nevoie de Procfile
care îi spune lui Heroku unde începe aplicația noastră, așa că creați un fișier Procfile
și adăugați următoarele:
web: gunicorn app:app
Un pas de respingere: puteți adăuga un fișier .gitignore
la proiectul dvs., astfel încât fișierele neutilizate să nu fie încărcate în depozit.
Din tabloul de bord Heroku, creați o nouă aplicație. După ce o faci, te va direcționa către pagina Implementare . Apoi, deschideți fila Setări într-o fereastră nouă și copiați domeniul aplicației care va fi ceva de genul https://appname.herokuapp.com/
și inserați-l în variabila URL din interiorul credentials.py
.
Acum, reveniți la fila Implementare și continuați cu pașii:
Notă: utilizatorii Windows și macOS pot urma pașii descriși aici.
Conectați-vă la Heroku:
$ heroku login
Vă rugăm să rețineți că această metodă se blochează uneori în waiting for login
, dacă vi se întâmplă acest lucru, încercați să vă conectați folosind:
$ heroku login -i
Inițializați un depozit Git în directorul nostru:
$ git init $ heroku git:remote -a {heroku-project-name}
Implementează aplicația:
$ git add . $ git commit -m "first commit" $ git push heroku master
În acest moment, veți vedea progresul construcției în terminalul dvs. Dacă totul a mers bine, vei vedea ceva de genul:
remote: -----> Launching... remote: Released v6 remote: https://project-name.herokuapp.com/ deployed to Heroku remote: remote: Verifying deploy... done.
Acum accesați pagina aplicației (linkul domeniului pe care l-ați copiat înainte) și adăugați la sfârșitul linkului /setwebhook
, astfel încât adresa să fie ceva de genul https://appname.herokuapp.com/setwebhook
. Dacă vedeți webhook setup ok
, înseamnă că sunteți gata de plecare!
Acum, vorbește cu botul tău
Finalizări, sfaturi și trucuri
Acum aveți botul Telegram în funcțiune, 24/7, fără a fi nevoie de intervenția dvs. Puteți adăuga orice logică doriți la bot, așa că, de exemplu, vă puteți face botul mai realist adăugând o stare de „tastare” și trimițând o stare de fotografie după cum urmează:
Următorul fragment de cod din funcția respond()
:
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)
După cum puteți vedea în fragment, am adăugat o acțiune de tastare atunci când suntem pe cale să trimitem informațiile despre bot care sunt în format text și am adăugat o acțiune de încărcare a fotografiei când suntem pe cale să trimitem o fotografie pentru a face botul mai realist . Mai multe acțiuni pot fi găsite aici.
De asemenea, puteți schimba imaginea și descrierea botului de pe canalul BotFather pentru a o face mai prietenoasă.
Multe mai multe exemple simple de telegram bots pot fi găsite pe pagina python-telegram-bot de pe GitHub.
Puteți să vă bazați pe botul nostru și să îl transformați în următorul robot super AI - tot ce trebuie să faceți este să vă integrați logica în funcția respond()
. De exemplu, logica dvs. poate fi într-un modul separat și poate fi apelată în interiorul funcției respond()
astfel:
. ├── app.py ├── telebot │ ├── credentials.py │ ├──ai.py │ | . │ | you can build your engine here │ | . │ └── __init__.py └── botenv
Și în interiorul ai .py:
def generate_smart_reply(text): # here we can do all our work return "this is a smart reply from the ai!"
Importați-l acum în aplicația .py:
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
Apoi apelați-l în interiorul codului respond()
.
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)
Acum puteți să vă puneți botul să funcționeze așa cum doriți - mergeți mai departe și creați următorul lucru important!
Sper că te-ai distrat construind primul tău bot Telegram.
Resurse aditionale
- Construirea unui Chatbot folosind Telegram și Python
- Configurați-vă Telegram Bot WebHook într-un mod simplu
- Depozitul Python-telegram-bot
- Implementarea cu Git pe Heroku
- Documentația Python Telegram Bot