Top.Mail.Ru

Telegram Боты: Все, что вам нужно знать

Фун­кци­ональ­ность

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

Одной из главных функций телеграм-ботов является воз­можность ав­то­мати­чес­кой рассылки со­об­ще­ний. Это особенно полезно для пред­при­ятий и ор­га­низа­ций, которые могут ис­поль­зо­вать ботов для отправки уве­дом­ле­ний о новостях, акциях, скидках и других важных событиях. Такая фун­кци­ональ­ность поз­во­ля­ет сэ­коно­мить время и ресурсы, которые ранее были зат­ра­чены на ручную рассылку со­об­ще­ний.

Еще одной важной функцией телеграм-ботов является воз­можность создания групп и каналов и уп­равле­ния ими. Боты могут ис­полнять роль ад­ми­нис­тра­торов, кон­тро­лируя доступ поль­зо­вате­лей, мо­дери­руя контент и выполняя другие ад­ми­нис­тра­тив­ные задачи. Также боты могут пре­дос­тавлять до­пол­ни­тель­ные функции для учас­тни­ков групп и каналов, такие как опросы, го­лосо­вания, ро­зыг­ры­ши и многое другое.

Телеграм-боты также могут быть ис­поль­зо­ваны для по­луче­ния раз­личной ин­форма­ции. Например, боты могут пре­дос­тавлять ак­ту­аль­ную ин­форма­цию о погоде, курсах валют, рас­пи­сании тран­спор­та и других ин­те­ресу­ющих поль­зо­вате­лей данных. Такая фун­кци­ональ­ность поз­во­ля­ет поль­зо­вате­лям быстро получать нужную ин­форма­цию без не­об­хо­димос­ти искать ее в ин­терне­те или ис­поль­зо­вать другие ис­точни­ки.

Еще одной полезной функцией телеграм-ботов является воз­можность ин­тегра­ции с другими сер­ви­сами и плат­форма­ми. Боты могут быть нас­тро­ены для работы с API раз­личных сервисов, таких как со­ци­аль­ные сети, онлайн-магазины, бан­ков­ские системы и другие. Это поз­во­ля­ет поль­зо­вате­лям получать ин­форма­цию о заказах, балансе счета, сос­то­янии доставки и многом другом, не покидая Telegram.

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

Телеграм-боты также пред­ла­га­ют раз­личные инс­тру­мен­ты для вза­имо­дей­ствия с поль­зо­вате­лями. Например, боты могут ис­поль­зо­вать кла­ви­ату­ры, кнопки и другие элементы уп­равле­ния для об­легче­ния вза­имо­дей­ствия с поль­зо­вате­лем. Также боты могут при­менять раз­личные ал­го­рит­мы и ис­кусс­твен­ный ин­теллект для анализа и об­ра­бот­ки со­об­ще­ний от поль­зо­вате­лей, что поз­во­ля­ет им пре­дос­тавлять более точные и полезные ответы.

 

Огра­ниче­ния ботов

Одними из осо­бен­ностей ботов являются их ог­ра­ниче­ния на по­луче­ние ин­форма­ции или действий, которые они могут вы­пол­нять в процессе своей работы. Это поз­во­ля­ет защитить кон­фи­ден­ци­аль­ные данные поль­зо­вате­лей и пре­дот­вра­тить основные у­яз­ви­мос­ти, такие как по­луче­ние спама, пе­ресыл­ку ин­форма­ции в другие чаты и т. д.

         Основ­ны­ми ог­ра­ниче­ниями являются:

  1. Запрет на по­луче­ние истории пе­репис­ки, бот может лишь получить кон­крет­ное со­об­ще­ние или пост по его иден­ти­фика­тору, который уникален для каждого чата.

  2. Запрет на об­ра­бот­ку со­об­ще­ний в груп­по­вых чатах, если он не состоит в ад­ми­нис­тра­торах этого чата.

  3. Запрет на по­луче­ние ста­тис­ти­ки канала, если а­уди­тория канала менее 500 человек.

  4. Огра­ниче­ние на ко­личес­тво од­новре­мен­но ра­бота­ющих ботов с оди­нако­вым токеном: он может быть только один.

  5. Огра­ниче­ние на ко­личес­тво со­об­ще­ний: телеграм-боты могут иметь ог­ра­ниче­ние на ко­личес­тво со­об­ще­ний, которые они могут от­прав­лять в течение оп­ре­делен­но­го периода времени.

  6. Огра­ниче­ние на размер со­об­ще­ний: со­об­ще­ния, от­прав­ля­емые телеграм-ботом, могут быть ог­ра­ниче­ны по размеру.

  7. Огра­ниче­ние на ко­личес­тво запросов к API: если бот ис­поль­зу­ет API те­лег­ра­ма или другие внешние сервисы, су­щес­тву­ет ог­ра­ниче­ние на ко­личес­тво запросов, которые бот может делать в течение оп­ре­делен­но­го времени.

  8. Огра­ниче­ние на ис­поль­зо­вание ресурсов: телеграм-боты могут иметь ог­ра­ниче­ния на ис­поль­зо­вание ресурсов, такие как CPU и память.

 

Регис­тра­ция бота

При создании собс­твен­но­го бота его не­об­хо­димо сначала за­регис­три­ровать, следуя инс­трук­ции ниже.

  1. Найти главного бота BotFather https://t.me/BotFather и за­пус­тить его. Через него можно уп­равлять данными бота, добавить описание, аватар и т. д.



  2. Написать команду /newbot или выбрать из меню.




  3. Ввести отоб­ра­жа­емое имя.



  4. Ввести логин бота, который должен быть уни­каль­ным, длиной от 5 до 32 символов, со­дер­жать только ла­тин­ские буквы, цифры и нижнее под­черки­вание и обя­затель­но со­дер­жать «bot» в любом из двух видов «tetris_bot» или «TetrisBot».




  5. После чего BotFather создаст бота и пришлет все доступы к нему.




  6. Далее бот доступен по ссылке.




  7. И его уни­каль­ный токен.

Получив уни­каль­ный токен, можно прис­ту­пать к раз­ра­бот­ке основной логики бота, которую он должен вы­пол­нять.

Раз­ра­бот­ка

Прежде чем прис­ту­пить к раз­ра­бот­ке телеграм-бота, не­об­хо­димо оп­ре­делить­ся с языком прог­рамми­рова­ния и биб­ли­оте­кой, которая позволит получить доступ к API телеграм-бота. Можно ис­поль­зо­вать API напрямую и от­прав­лять запросы, но это является плохой прак­ти­кой и так делать не следует, только в кон­крет­ных уни­каль­ных случаях. В данной статье мы возьмем такой язык прог­рамми­рова­ния, как Python.

Самые по­пуляр­ные биб­ли­оте­ки для выб­ранно­го языка:

  1. AIOGram — довольно простая и пол­ностью асин­хрон­ная биб­ли­оте­ка для Telegram Bot API, на­писан­ная с ис­поль­зо­ванием asyncio и aiohttp.

    https://github.com/aiogram/aiogram

  2. python-telegram-bot — обертка, от которой не­воз­можно от­ка­зать­ся.

    https://github.com/python-telegram-bot/python-telegram-bot

  3. pyTelegramBotAPI — простая, но рас­ши­ря­емая ре­али­зация Python для Telegram Bot API.

    https://github.com/eternnoir/pyTelegramBotAPI

  4. TGramBot — частично ав­то­мати­чес­ки сге­нери­рован­ная и асин­хрон­ная плат­форма API Minimal Telegram Bot. https://github.com/KeralaBots/TGramBot

В рамках статьи была выбрана pyTelegramBotAPI из-за своей легкости и простоты.

Для начала нужно ус­та­новить со­от­ветс­тву­ющую биб­ли­оте­ку, делается это командой:

infinity_poling против webhook

Метод infinity_poling не­об­хо­димо ис­поль­зо­вать только для раз­ра­бот­ки и ни в коем случае не ис­поль­зо­вать при запуске на сервере. Для этой цели су­щес­тву­ют webhook.

При ис­поль­зо­вании infinity_poling про­ис­хо­дит пос­то­ян­ный опрос те­лег­ра­ма о том, есть ли какие-то из­ме­нения, свя­зан­ные с этим ботом, что может привести к тому, что телеграм через какое-то время оборвет связь и не­об­хо­димо будет его переза­пус­тить.

Одним из важных минусов ис­поль­зо­вания infinity_poling является то, что есть ог­ра­ниче­ния по ис­поль­зо­ванию infinity_poling на рос­сий­ских серверах. Не­об­хо­димо либо нас­тра­ивать прокси-сервер, который будет стоять где-то в другой стране, либо пос­то­ян­но бороться с тем, что бот будет пе­рес­та­вать работать.

В то время ис­поль­зо­вание webhook под­ра­зуме­ва­ет, что не мы будем пос­то­ян­но слать запрос в телеграм, а телеграм будет слать нам запрос, как только про­изой­дет об­новле­ние с нашим ботом. Поэтому для ре­али­зации под­дер­жки webhook не­об­хо­димо сначала сделать свой сервер для об­ра­бот­ки таких запросов. При этом ог­ра­ниче­ний на рос­сий­ские серверы уже нет, поэтому нас­тра­ивать прокси-сервер не нужно. Единс­твен­ный нез­на­читель­ный минус — это то, что не­об­хо­димо иметь доменное имя.

Ре­али­зовать веб-сервер можно любым удобным способом. В статье взят фрей­мворк Flask, но можно взять любой другой и адап­ти­ровать под него ре­али­зацию работы с webhook.

Как и в первом примере, не­об­хо­димо указать токен соз­данно­го бота, после чего идет строка с ука­зани­ем домена, где на­ходит­ся сервер по об­ра­бот­ке запроса, который приходит с те­лег­ра­ма и содержит в себе об­новле­ния для бота. Также нам не­об­хо­дим оп­ре­делен­ный endpoint, который не­пос­редс­твен­но и будет об­ра­баты­вать об­новле­ния с те­лег­ра­ма. Для этого ини­ци­али­зиру­ем сле­ду­ющие кон­стан­ты.

Создание объекта, с помощью которого будем получать доступ к боту, и объект для уп­равле­ния нашим сервером.

Дальше не­об­хо­димо очистить старый webhook у бота и задать новый. Часто очистка от старого webhook не про­ис­хо­дит мгно­вен­но, поэтому не­об­хо­димо добавить ис­кусс­твен­ное ожидание в виде time.sleep(1), что заставит наше при­ложе­ние ос­та­новить­ся на 1 секунду. За это время га­ран­ти­рован­но про­изой­дет очистка, а дальше задается webhook, на который телеграм будет слать об­новле­ния для соз­данно­го бота.

Теперь не­об­хо­димо ре­али­зовать endpoint по об­ра­бот­ке об­новле­ний. Сначала нужно получить об­новле­ния и де­коди­ровать их в UTF-8. После чего де­сери­али­зовать эти об­новле­ния в формат для об­новле­ния бота, а затем при­менить эти об­новле­ния к боту.