Как да създадете Telegram бот с Python от нулата

  • Ботовете в Telegram са автоматизирани акаунти, които реагират на команди и съобщения чрез официалния API.
  • За да ги програмирате на Python, ви е необходим BotFather токен, вашият чат ID и среда с библиотеки като requests, bs4 и python-telegram-bot.
  • Възможно е да се автоматизират задачи като ежедневно изпращане на цени на биткойн, като се комбинира уеб скрейпинг и планиране на задачи.
  • Добре проектиран бот може да бъде интегриран в групи, компании и работни потоци без код и дори да служи като основа за бизнес модели.

Много потребители на Telegramрано или късно те възникват Създайте свой собствен бот за автоматизиране на задачиМожете да отговаряте на съобщения или просто да променяте кода. Добрата новина е, че не е нужно да сте инженер или да имате мега сървър у дома. Създайте Telegram бот с Python Просто изисква малко търпение и всеотдайност.

В това ръководство ще научите Как да създадете Telegram бот с Python стъпка по стъпка От нулата. Ще разгледаме какво точно е бот, как да получите известния токен с BotFather, как да настроите средата на вашия компютър, как да накарате бота си да изпрати първото си съобщение, как да програмирате команди и дори как да извличате данни в реално време (например цената на Bitcoin) и автоматично да ги изпращате в чата си всеки ден.

Какво е Telegram бот и какви видове съществуват

Ботът в Telegram е по същество специален акаунт, контролиран от програма, вместо от човекТази програма се свързва със сървърите на Telegram чрез своя API и е в състояние да чете какво е написано в чатовете, където е налична, и да отговаря със съобщения, бутони, анкети, файлове или всяко действие, което сте програмирали.

Идеята е, че ботът може реагира на команди или съобщения и изпълнявайте специфични задачи без човешка намеса: изпращайте напомняния, показвайте информация от база данни, управлявайте резервации, модерирайте групи, играйте с GIF файлове, контролирайте интелигентни светлини или действайте като 24/7 асистент за онлайн бизнес.

В Telegram има два основни начина за взаимодействие с ботове, за които може би искате да знаете:

  • „Нормални“ ботове, базирани на команди. Потребителят въвежда команди, които започват с „/“, като например /start, /help o /list_languagesи ботът отговаря с конкретно действие. Те са идеални за менюта, ЧЗВ, системи за резервации или всеки друг насочен работен процес.
  • Вградени ботове. Вместо да използва „/“, потребителят пише @nombre_del_bot директно във всеки чат, последвано от текстово съобщение. Ботът отговаря „онлайн“, предлагайки резултати, например @gif за търсене на анимирани GIF файлове, свързани с ключова дума.

В допълнение към тях, можете да имате и ботове, които Те реагират „спонтанно“ към написаното в група. Например, откриване на обиди, за да се действа като антиспам, поздравяване на нови членове или прилагане на правила за модериране, без някой да въвежда изрична команда.

Телеграм бот

Защо ботовете в Telegram станаха толкова популярни

Една от причините, поради които ботовете в Telegram се увеличиха рязко, е, че платформата предлага... Много отворен API с практически никакви ограничения за разработчицитеНе е нужно да искате специални разрешения или да преминавате през безкрайни проверки, както е в други приложения за съобщения. Просто говорите с BotFather, създавате своя бот и за секунди имате готов за употреба токен.

Тази свобода позволи на ботовете да процъфтяват за почти всичко: управление на групи и канали, стартиране на анкети, контрол на процесите в електронната търговия, свързване с външни услуги, получаване на данни в реално време или дори обработка на вътрешни задачи на компанията (включване в екипа, известия, поддръжка на работни процеси и др.).

Също така помага, че API-то на бота е много лесно за разбиранеМожете да работите на ниско ниво, използвайки HTTPS заявки за https://api.telegram.org/botTOKEN/METHOD_NAME или разчитайте на книжарници като python-телеграма-бот, pyTelegramBotAPI или подобни библиотеки в Node.js, които абстрахират много от сложността.

В реалния свят това се превръща в голямо разнообразие от приложения. От ботове за времето или цените на криптовалутите до цялостни системи за обслужване на клиенти, образователни ботове, известия за фондовия пазар или интеграции с инструменти като Google Calendar, Trello, корпоративни CRM и много други.

Създайте бот с BotFather и вземете токена

Преди да докоснете и един ред код, трябва да уведомите Telegram за съществуването на вашия бот. Това се прави чрез @BotFather, който е официалният бот в Telegram за регистриране и конфигуриране на ботовеЦелият процес се извършва от самото приложение, както на мобилни устройства, така и на настолни компютри.

Основните стъпки за регистриране на вашия бот са много прости и винаги включват тази поредица от съобщения с BotFather, които се обработват така, сякаш чатите с друг потребител:

  • Отворете Telegram, въведете в лентата за търсене @BotFather и влезте в потвърдения разговор (той има синя отметка).
  • Натиснете „Старт“ или въведете /start за да видите списъка с наличните команди.
  • Стартирайте командата /newbotBotFather първо ще ви поиска показвано име (какво потребителите ще видят в профила) и след това потребителско име което трябва да завършва на bot и не може да започва с число.

Например, можете да използвате „Цена на BTC“ като име и нещо подобно btc_daily_update_botСлед като изпълните стъпките, BotFather ще ви изпрати съобщение с няколко препоръки, URL адреса t.me/tu_usuario_bot и преди всичко а Токен за достъп до API.

Тозият токен има формат, подобен на този: 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw И това е ключът, който позволява на вашия код да се представя за вашия бот пред сървърите на Telegram, така че Отнасяйте се с него като с тайна: не го публикувайте в GitHub и не го споделяйте никъде другаде..

От BotFather можете също персонализирайте вашия бот с други полезни команди:

  • /setdescription да добавите кратко описание, което ще се вижда, когато се отвори чатът на бота.
  • /setabouttext за биографията, видима в профила.
  • /setuserpic да кача профилна снимка, която не изглежда толкова безлична.
  • /mybots за да видите всички ботове, които сте създали, и да ги редактирате.
  • /setcommands или „Редактиране на команди“, за да дефинирате списъка с команди, които вашият бот ще разбере (например, start - Inicia la conversación).

С това вече имате създадена „обвивка“. E ботът съществува в Telegram, има име, описание, изображение и, най-важното, уникален токен за свързване от вашия кодСледващата стъпка е да го оживим с Python.

Python Excel

Подгответе Python средата и създайте проекта

Въпреки че можете да програмирате ботове в Telegram на много езици, Python е една от най-удобните опции Благодарение на простия си синтаксис и броя на наличните библиотеки. За да следвате този урок, трябва да сте инсталирали Python 3 на вашия компютър и, разбира се, приложението Telegram (на мобилно устройство или настолен компютър).

Като най-добра практика е идеално винаги да се работи в рамките на виртуална среда (venv)По този начин избягвате смесването на зависимости между проектите. От папката, където ще създавате бота си, можете да направите нещо подобно в Windows:

py -m venv venv
.\venv\Scripts\activate

В macOS или Linux командата за активиране се променя леко, но идеята е същата: Създайте изолиран балон, където можете да инсталирате само библиотеките, които вашият бот ще използва.След като средата е активирана, е време да инсталирате необходимите пакети с pip.

В зависимост от желания от вас подход, има два доста често срещани пътя за започване на работа с Telegram ботове в Python и си струва да ги познавате, за да изберете този, който най-добре отговаря на вашия проект:

  • Работа директно със заявки и HTTP API. Вие ръчно създавате URL адреси от типа https://api.telegram.org/botTOKEN/sendMessageИзпращате GET или POST заявки с requests и обработвате отговорите в JSON.
  • Използвайте библиотека като python-telegram-bot. Тази библиотека абстрахира API и ви предоставя обекти от високо ниво, като например Updater, Dispatcher, CommandHandler o CallbackContext да работи с команди и съобщения по много по-организиран начин.

Ако искате по-структуриран бот с команди като /start А за мащабируем дизайн, трябва да добавите и библиотеката python-телеграма-боткойто се инсталира с една проста команда:

pip install python-telegram-bot

Накарайте бота да изпрати първото си съобщение, използвайки Telegram API

Нека започнем с основите: Накарайте вашия бот да изпраща съобщение до вашия собствен чат в Telegram Директно използване на HTTP API. Това ще ви помогне да разберете как се конструират заявките, преди да усложнявате нещата с повече функции.

За да може ботът да ви пише, са му необходими две ключови неща: жетон, който BotFather ти даде и вие идентификатор на чатПолучаването на вашия чат ID е много лесно, ако следвате внимателно този процес:

  1. Отворете чата с вашия бот в Telegram чрез линка t.me/tu_usuario_bot или като го потърсите по потребителското му име.
  2. Въведете командата /start така че да има поне едно съобщение в историята.
  3. Въведете URL адреса във вашия браузър:
    https://api.telegram.org/botTU_TOKEN/getUpdates

Чрез достъп до този адрес, API ще върне JSON обект, съдържащ последните съобщения, свързани с вашия бот. Вътре ще видите полета като "update_id", "message_id" и, много важно, Кампо "chat" с вашите "id"Това число (нещо подобно) 68xxxxxxx) е вашият личен идентификатор за чат, който ще използваме, за да изпращаме съобщения директно до вашия разговор.

С токена и идентификатора за чат в ръка, можете да дефинирате във файла си .py минимална функция, която конструира съответния URL адрес и стартира заявката с requests.getМетодът, който ще извикаме в Telegram API, е sendMessageкойто приема параметри като chat_id, text и режимът на форматиране (например, parse_mode=Markdown).

Типичната структура на тази функция, опростена, би била нещо подобно, където можете ясно да видите как е конструиран URL адресът и как се извършва API повикването с необходимите данни:

def bot_send_text(bot_message):
bot_token = 'YOUR_TOKEN'
bot_chatID = 'YOUR_CHAT_ID'
send_text = 'https://api.telegram.org/bot' + bot_token + '/sendMessage?chat_id=' + bot_chatID + '&parse_mode=Markdown&text=' + bot_message
response = requests.get(send_text)
return response

Извън функцията, можете да опитате да изпратите тестово съобщение, като създадете променлива и стартирате файла с Python. Ако всичко е конфигурирано правилно, Ще видите съобщение като „Здравей, Telegram!“ в чата на вашия бот. за секунди.

test_bot = bot_send_text('¡Hola, Telegram!')

телеграма

Планиране на повтарящи се съобщения с график

Следващото нещо, което вероятно ще искате да направите, е автоматизирайте изпращането на този отчет, така че той да пристига всеки ден в определен час без да се налага да изпълнявате каквото и да било ръчно. Библиотеката е много удобна за това. schedule, което ви позволява да планирате задачи по много четим начин.

Con schedule Можете да кажете на скрипта си неща като „изпълни функцията report Веднъж дневно в 08:00 ч. сутринта, след което го оставете да работи в безкраен цикъл, проверявайки за чакащи задачи. Докато програмата продължава да работи, вашият бот ще действа в указаното време.

Типичният блок за въвеждане на скрипт, използващ шаблона if __name__ == '__main__'Ето как би изглеждало, за да се поддържа ботът включен и внимателен към планираните задачи:

if __name__ == '__main__':
schedule.every().day.at("08:00").do(report)
while True:
schedule.run_pending()

Важно е да използвате този тип автоматизация с Използвайте здрав разум, за да избегнете злоупотреба с уебсайта, който извличате.Няма смисъл да се правят заявки всяка секунда за данни, до които може да се осъществи достъп например веднъж на ден или дори на всеки час. Ако претоварите целевия сървър, ще се стигне до блокиране.

Имайте предвид, че работейки по този начин, вашият бот ще работи само докато имате скриптът, изпълняван на вашия компютърАко затворите терминала или изключите компютъра, ботът ще спре да изпраща планирани съобщения. За да го поддържате активен 24/7, най-добре е да качите кода на сървър или облачна услуга.

Проектирайте структуриран бот, използвайки библиотеката python-telegram-bot

С разрастването на проекта ви, работата единствено с HTTP заявки може да стане хаотична. Тук се намесва библиотеката. python-telegram-bot, който организира кода около обекти и обработчици на команди и това прави живота ви много по-лесен.

Тази библиотека е базирана на няколко ключови концепции: обектът Updater, който е отговорен за комуникацията със сървърите на Telegram и изпращането на отговори, и dispatcherкоето би било нещо като „ухото“ на бота, винаги слушащо входящите съобщения и решаващо коя функция да изпълни, когато влезе определена команда или текст.

Най-чистият начин да работите с вашия токен е да го изолирате в конфигурационен модул, например в пакет, наречен config къде запазвате файл auth.py с променлива token. По този начин, Не качвате токена в хранилището и можете да добавите файла към вашия .gitignore. за да се избегне плашене.

Много минимален първи скелет на вашия файл bot.pyИзползвайки библиотеката, може да изглежда по следния начин, където създаването на Updater и как се получава dispatcher свързани:

from telegram.ext import Updater
from config.auth import token

ако __name__ == '__ main__':
актуализатор = Актуализиращ(токен=токен, use_context=Вярно)
диспечер = updater.dispatcher

Ако стартирате този файл такъв, какъвто е, ще видите, че скриптът просто завършва без грешки, но все още не прави нищо полезно, защото не сте му казали как да реагира на съобщенията. Следващата стъпка е да добавите регистриране на събития и дефинирайте функции, които действат като „обработчици“ за командите, които искате да поддържате, обикновено започвайки с /start.

Стандартната библиотека на Python logging Това ви позволява да имате подробен контрол върху случващото се във вашия бот: какви команди се получават, дали възникнат грешки и т.н. Настройката му е толкова проста, колкото дефинирането на изходен формат и минимално ниво на сериозност за съобщенията:

import logging
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)
logger = logging.getLogger('MiPrimerBot')

С тази настройка ще посочите, че искате да виждате съобщения за ниво на екрана. INFO отсега нататък (ИНФО, ПРЕДУПРЕЖДЕНИЕ, ГРЕШКА, КРИТИЧНО) и всеки ред да включва датата, името на регистратора, нивото и обяснителния текст на събитието, което записвате.

Отговорете на командата /start с персонализиран манипулатор

За да направите бота си нещо повече от просто декоративна фигура, трябва дефиниране на функции, които се изпълняват при получаване на определена командаТези функции се наричат ​​„обработчици“ и винаги получават обект като аргумент. update и context.

Параметър update Това представлява входящото съобщение (независимо дали е команда, обикновен текст и т.н.) и включва данни като чата, потребителя и съдържанието на съобщението. Параметърът context Той представлява самия бот, с методи за отговаряне, изпращане на снимки и т.н. Обикновено регистрира, когато е получена команда, и отговаря с текстово съобщение.

Много прост пример за манипулатор на командата /start Би било нещо подобно, където логовете записват, че командата е получена и отговор се изпраща до същия чат, от който е изпратена:

from telegram.ext import CallbackContext

def start(актуализация: Актуализация, контекст: CallbackContext):
logger.info('Получих команда за стартиране')
контекст.бот.изпрати_съобщение(
chat_id=актуализация.съобщение.chat_id,
текст="Аз съм от Херес де ла Фронтера, родното място на фино шери, картезианските коне и световната столица на мотоциклетизма"
)

След като вече сте дефинирали функцията, трябва да кажете на dispatcher че го използва, когато командата пристигне /startЗа това се използва обектът. CommandHandler, който съпоставя текст на команда (без наклонена черта) с функцията, отговорна за обработката ѝ.

Регистрацията в диспечера е много проста и лесна за разбиране: „Когато получите командата за стартиране, изпълнете функцията за стартиране“Кодът, необходим за записване на това поведение, би изглеждал по следния начин в основния блок:

from telegram.ext import CommandHandler

ако __name__ == '__ main__':
актуализатор = Актуализиращ(токен=токен, use_context=Вярно)
диспечер = updater.dispatcher
диспечер.add_handler(CommandHandler('старт', старт))
актуализатор.старт_анкетиране()
актуализатор.idle()

Последните два реда са изключително важни: start_polling() Това кара бота редовно да пита сървърите на Telegram за нови съобщения (метод, известен като анкетиране) и idle() Това поддържа програмата работеща, докато не я спрете ръчно с Ctrl+C в конзолата.

Ако сега бягате python bot.py и в Телеграм пишеш /start Вашият бот трябва да показва съобщението, което сте програмирали в манипулатора, в допълнение към съответните записи в лога за всяка получена команда.

Опции за хостинг и работа на вашия бот 24/7

Важен детайл, който често се пренебрегва, е, че Telegram не изпълнява вашия кодТехните сървъри съхраняват само съобщения и предоставят API, но програмата, която контролира вашия бот, трябва да работи някъде, независимо дали е вашият собствен компютър, VPS или услуга за облачен хостинг.

Ако само тествате, можете Поддържайте бота работещ на вашата локална машина Стига конзолата да е отворена. Но ако искате тя да е достъпна за потребителите 24/7, рано или късно ще трябва да я качите в среда, която е винаги включена и има добра свързаност.

Сред най-често срещаните опции за малки и средни проекти ще намерите платформи като повторете, направи o DigitalOceanВсеки от тях има своите предимства по отношение на лекота на използване и цена. Най-общо казано, може да се окажете в ситуация, подобна на тази:

повторете Да Просто е, чудесно е за начинаещи
направи Да Материали
DigitalOcean Не Прост, мощен и просторен

За прости и обучителни ботове, безплатните нива на някои услуги обикновено са достатъчни, въпреки че е препоръчително да следите ограниченията върху времето за изпълнение, консумацията на процесор или изходящите връзки, така че ботът да не се срине, без да забележите.

На ниво технологичен стек, нормалният подход е да се избере Питон с библиотеки като python-telegram-bot, ако предпочитате яснота и обширна документация, или чрез Node.js с решения като Telegraf.js или node-telegram-bot-api, ако вече идвате от света на JavaScript и искате да се интегрирате с други проекти в тази екосистема.

Алтернативи без код и професионално използване на ботове

Ако програмирането не е вашето призвание или просто искате да Изградете работещ бот на пълна скорост За да валидирате идея, имате на разположение няколко платформи без код, които ви позволяват да създавате разговорни потоци с визуални блокове, без да докосвате нито един ред Python.

Инструменти като Manybot, Chatfuel, Tars, Make (преди Integromat), n8n или интеграции с Google Sheets и Airtable ви позволяват да Дефинирайте логика на въпроси и отговори, формуляри, навигационни менюта или връзки към други услуги използвайки графични интерфейси. Те са идеални за MVP, бързи тестове или проекти, където ботът не е нужно да прави прекалено напреднали неща.

Основната разлика в сравнение с разработването със собствен код е, че при тези решения жертвате известна гъвкавост в замяна на скорост и простота. Когато се нуждаете от по-сложни функционалности, много специфични интеграции или пълен контрол върху логиката, обичайният подход е направете скока към сериозно програмиран бот.

На бизнес ниво, ботът в Telegram може да се превърне в ключов инструмент за обслужване на клиенти 24/7, автоматизиране на повтарящи се процеси или събиране на структурирани данни без да претоварвате екипа. Помислете за задачи като отговаряне на често задавани въпроси, управление на проследяването на поръчки, стартиране на анкети за удовлетвореност, включване на нови студенти в онлайн академия или обработка на резервации в ресторант.

Можете също така да разгледате бизнес модели около ботове: премиум достъп до определени функции чрез абонамент, платени образователни ботове, ексклузивно съдържание, интеграция с електронна търговия или партньорски препоръки с проследяващи връзки, като винаги спазвате разпоредбите за защита на данните и условията за ползване на Telegram.