Перейти к содержимому

Как обновить бота в телеграм

  • автор:

Bot API: часто задаваемые вопросы

Если вы незнакомы с ботами в Telegram, рекомендуется сначала прочитать ознакомительную статью.

Также, возможно, вас заинтересует описание Bot API.

Общие вопросы

Как я могу создать бота?

Создание бота для Telegram крайне простое, однако, вам понадобится кое-какой опыт в программировании. Для работы вашего бота вам необходимо осуществить первоначальную настройку через бота @BotFather, а затем подключить его к вашему серверу через API.

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

Можно посмотреть примеры кода?

Вот два бота-образца, написанных на PHP:

  • Hello Bot: демонстрация основных возможностей Bot API.
  • Simple Poll bot: более сложный бот, поддерживающий оба способа получения обновлений (long-polling и вебхуки).

Примечание

Многие разработчики создают своих ботов с открытым исходным кодом. Мы собираем их на специальной странице.

Добавьте в ботов фичу X!

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

Если у вас есть мысли по этому поводу, вы можете высказать их пользователю @BotSupport (на английском).

Какие сообщения может получать мой бот?

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

  • Сообщение было ответом боту или нажатием на его клавиатуру
  • В сообщении есть @упоминание бота по его имени пользователя
  • В сообщении содержится общая команда (напр., /start ) или команда, предназначающаяся вашему боту (напр., /start@YourBot )
  • Сообщение является служебным (о смене названия группы, выходе кого-либо из чата, и т. д.)

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

  • Сообщений от других ботов
  • Команд для других ботов (напр., /start@NotYourBot )
  • Ответов на сообщения от других ботов, за исключением случаев, когда в сообщении содержится @упоминание вашего бота.

Почему мой бот не видит сообщений от других ботов?

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

Получение обновлений

Как можно получать обновления?

На текущий момент доступно два способа. Вы можете использовать либо опрос, либо вебхуки. Обратите внимание: если вы используете вебхуки, метод getUpdates работать не будет.

Принципиальное отличие: при опросе вашему приложению самому нужно запрашивать обновления у API, а используя вебхуки — сервера Telegram будут отправлять на ваш сервер каждое обновление с помощью HTTPS POST-запроса.

Предупреждение

Вебхуки могут работать только через HTTPS, допустимо использование самозаверенного сертификата.

Доступные порты: 443, 80, 88, 8443.

Опрос всегда выдаёт один и тот же результат!

Метод getUpdates выдаёт 100 последних неподтверждённых обновлений. Чтобы подтвердить обновление, используйте параметр offset при вызове getUpdates вот так:

offset = update_id последнего обработанного обновления + 1

Все обновления с update_id меньшим или равным offset будут отмечены как подтверждённые и не будут больше возвращаться сервером.

У меня проблема с вебхуками

Если вы успешно задали адрес вебхука, но не получаете обновлений, убедитесь, что:

  • SSL-сертификат вашего вебхука валиден и корректен
  • При использовании самозаверенного сертификата, вы передаёте его публичный ключ в поле certificate метода setWebhook. Необходимо загружать InputFile , отправка строки не сработает.
  • Ваш вебхук работает на одном из допустимых портов: 443, 80, 88, 8443.

У меня проблема с самозаверенным сертификатом

Ознакомьтесь с инструкцией по созданию сертификатов. Если после прочтения у вас остались вопросы, напишите пользователю @BotSupport.

Как мне убедиться, что запросы идут с серверов Telegram?

Для этого включите ваш токен в адрес вебхука, примерно так:

https://example.com/your_token

Так как никто посторонний не знает вашего токена, запросы на этот адрес смогут отсылать только сервера Telegram.

Как делать запросы в HTTP-ответах к обновлениям?

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

Всякий раз при получении обновления на вебхук, у вас есть два варианта:

Прямой запрос

2. Ответить напрямую, указав метод в виде JSON в HTTP-ответе:

Ответ в запросе

Примечание

Пример реализации этой возможности на PHP можно посмотреть в коде HelloBot.

Обработка медиафайлов

Как скачивать файлы?

Для этого используйте метод getFile .

Предупреждение

Этот метод работает только для файлов объёмом до 20 МБ.

Как закачать большой файл?

На текущий момент боты могут отправлять файлы объёмом до 50 МБ, так что крупные файлы отправить не получится. Возможно, это ограничение будет снято в будущем.

Как долго хранится file_id у файлов?

file_id у отправленных вашим ботом файлов будут удалены после отправления нескольких тысяч файлов.

Для принятых файлов file_id можно считать вечным и неизменным.

Массовая рассылка

Каков лимит сообщений в секунду?

При работе с отдельным чатом, избегайте отправки более 1 сообщения в секунду. Конечно, допустимы небольшие пики, но со временем вы начнёте получать ошибку 429.

При рассылке уведомлений нескольким пользователям, API не позволит отправлять более 30 сообщений в секунду. Для преодоления этого лимита вам необходимо разбить отправку на части с большим интервалом между собой (около 8-12 часов).

При работе с группой ограничение установлено на 20 сообщений в минуту.

Как получить список всех подписчиков моего бота?

К сожалению, пока сделать это встроенными методами нельзя. Возможно, в будущем будут добавлены пару строк для управления подписчиками.

Чтобы максимально эффективно рассылать сообщения, вам необходимо разбивать отправку на несколько частей с интервалом в 8-12 часов. Также недопустимо отправление более 30 сообщений разным пользователям в секунду — иначе вы будете получать ошибку 429.

Сайт про Telegram на русском (неофициальный).

Здесь собраны приложения на базе MTProto, переведена некоторая документация с официального сайта, а также работает Webogram.

Смена токена Telegram бота

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

Чтобы обезопасить себя, рекомендуем обновлять токены ваших Telegram ботов в следующих случаях:

  • смена сервиса для создания ботов,
  • после работы сторонних специалистов в ваших аккаунтах,
  • после создания нового кабинета на платформе с использованием тех же ботов.

Инструкция по обновлению токена Telegram бота

❗❗❗Важно! Чтобы в работе бота не возникло сбоев из-за обновления токена, сначала полностью изучите данную инструкцию. Обновление токена безопасно для цепочки, если сделать все действия достаточно быстро. Рекомендуем выбрать время, когда в ваших цепочках не планируется массовая отправка сообщений.

Откройте Telegram, проверьте что выбран аккаунт, который является владельцем бота. Найдите бота @BotFather.

Наберите команду /mybots, чтобы увидеть список ваших ботов, и выберете нужный. Нажмите на кнопку API Token, далее Revoke current token. Нажмите на новый токен, чтобы он скопировался.

Если вы пока не пользуетесь ботом и вам нужно только исключить возможность несанкционированного доступа, то этого достаточно.

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

Переподключение Telegram бота в BotHelp

Зайдите в ваш кабинет BotHelp в раздел Настройки — Каналы.

Найдите нужного бота. Нажмите на кнопку ⁝ затем Отключить канал

Появится окно с предупреждением, подтвердите действие.

Канал отключен, теперь необходимо подключить его заново.

Нажмите на кнопку Добавить новый канал в появившемся окне выберете Telegram и ниже вставьте новый токен, который предоставил вам бот @BotFater. Нажмите Добавить канал.

Чтобы проверить корректность подключения, напишите что-либо своему боту. Затем найдите себя в разделе Диалоги и отправьте сообщение себе от имени бота. Если сообщения пришли в обе стороны, то бот полностью исправен.

Если вы не нашли ответ на свой вопрос, задайте его нам в чате внутри кабинета либо напишите на hello@bothelp.io ��

Получите 14 дней полного функционала платформы для создания рассылок, автоворонок и чат-ботов BotHelp.

Глава 2 Добавляем боту поддержку команд и фильтры сообщений, класс Updater

В этой главе мы разберёмся как оживить нашего бота и добавим ему поддержку команд, а также познакомимся с классом Updater .

В ходе главы мы напишем нескольких простых ботов, последний будет по заданной дате и коду страны определять является ли день в данной стране выходным или рабочим согласно производственного календаря. Но, как и прежде цель книги ознакомить вас с интерфейсом пакета telegram.bot для решения ваших собственных задач.

2.3 Класс Updater

Updater — это класс, который упрощает вам разработку телеграм бота, и использует под капотом класс Dispetcher . Назначение класса Updater заключается в том, что бы получить обновления от бота (в предыдущей главе мы использовали для этой цели метод getUpdates() ), и передать их далее в Dispetcher .

В свою очередь Dispetcher содержит в себе созданные вами обработчики, т.е. объекты класса Handler .

2.4 Handlers — обработчики

С помощью обработчиков вы добавляете в Dispetcher реакции бота на различные события. На момент написания книги в telegram.bot добавлены следующие типы обработчиков:

  • MessageHandler — Обработчик сообщений
  • CommandHandler — Обработчик команд
  • CallbackQueryHandler — Обработчик данных отправляемых из Inline клавиатур
  • ErrorHandler — Обработчик ошибок при запросе обновлений от бота

2.5 Добавляем первую команду боту, обработчик команд

Если вы никогда ранее не использовали ботов, и не в курсе, что такое команда, то команды боту необходимо отправлять с помощью прямого слеша / в качестве префикса.

Начнём мы с простых команд, т.е. научим нашего бота здороваться по команде /hi .

library(telegram.bot) # создаём экземпляр класса Updater updater  Updater('ТОКЕН ВАШЕГО БОТА') # Пишем метод для приветсвия say_hello  function(bot, update)  # Имя пользователя с которым надо поздароваться user_name  update$effective_user()$first_name # Отправка приветственного сообщения bot$sendMessage(update$from_chat_id(), text = paste0("Моё почтение, ", user_name, "!"), parse_mode = "Markdown") > # создаём обработчик hi_hendler  CommandHandler('hi', say_hello) # добаляем обработчик в диспетчер updater  updater + hi_hendler # запускаем бота updater$start_polling()

Запустите приведённый выше пример кода, предварительно заменив ‘ТОКЕН ВАШЕГО БОТА’ на реальный токен, который вы получили при создании бота через BotFather.

Метод start_polling() класса Updater , который используется в конце кода, запускает бесконечный цикл запроса и обработки обновлений от бота.

Мы написали боту метод say_hello() . Методами бота являются функции с двумя обязательными аргументами:

  • bot — объект бота, с помощью которого вы можете выполнять любые, доступные боту операции: отправлять сообщения, удалять сообщения, и так далее.
  • update — полученное от пользоватя сообщение (обновление бота).

Внутри кода метода вы можете обращаться и к боту, и к обновлению. С методами бота мы познакомились в первой главе, теперь давайте я вкратце опишу методы, доступные в приходящих обновлениях:

  • from_chat_id() — получить идентификатор чата, из которого боту было отправлено сообщение
  • from_user_id() — получить идентификатор пользователя, который отправил боту сообщение
  • effective_chat() — получить подробную информацию о чате, из которого бот получил сообщение
  • effective_message() — получить подробную информацию о сообщение, включая текс, вложения и т.д.
  • effective_user() — получить подробную информацию о пользователе, который отправил сообщение

Теперь откроем телеграм, и напишем нашему боту первую команду /hi .

Теперь наш бот понимает команду /hi , и умеет с нами здороваться.

Схематически процесс построения такого простейшего бота можно изобразить следующим образом.

  1. Создаём экземпляр класса Updater ;
  2. Создаём методы, т.е. функции которые будет выполнять наш бот. В примере кода это функция say_hello() . Функции, которые вами будут использоваться как методы бота должны иметь два обязательных аргумента — bot и update, и один необязательный — args. Аргумент bot, это и есть ваш бот, с его помощью вы можете отвечать на сообщения, отправлять сообщения, или использовать любые другие доступные боту методы. Аргумент update это то, что бот получил от пользователя, по сути, то что в первой главе мы получали методом getUpdates() . Аргумент args позволяет вам обрабатывать дополнительные данные отправленные пользователем вместе с командой, к этой теме мы ещё вернёмся немного позже;
  3. Создаём обработчики, т.е. связываем какие-то действия пользователя с созданными на прошлом шаге методами. По сути обработчик это триггер, событие которое вызывает какую-то функцию бота. В нашем примере таким триггером является отправка команды /hi , и реализуется командой hi_hendler
  4. Далее добавляем созданный обработчик в диспетчер нашего экземпляра класса Updater . Добавлять обработчики можно несколькими способами, в примере выше я использовал простейший, с помощью знака + , т.е. updater
  5. Запускаем бота с помощью команды start_polling() .

2.6 Обработчик текстовых сообщений и фильтры

Как отправлять боту команды мы разобрались, но иногда нам требуется, что бы бот реагировал не только на команды, но и на какие-то обычные, текстовые сообщения. Для этого необходимо использовать обработчики сообщений — MessageHandler.

Обычный MessageHandler будет реагировать на абсолютно все входящие сообщения. Поэтому зачастую обработчики сообщений используются вместе с фильтрами. Давайте научим бота здороваться не только по команде /hi , но и всегда, когда в сообщении отправленном боту встречается одно из следующих слов: привет, здравствуй, салют, хай, бонжур.

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

library(telegram.bot) # создаём экземпляр класса Updater updater  Updater('ТОКЕН ВАШЕГО БОТА') # Пишем метод для приветсвия ## команда приветвия say_hello  function(bot, update)  # Имя пользователя с которым надо поздароваться user_name  update$effective_user()$first_name # Отправляем приветсвенное сообщение bot$sendMessage(update$from_chat_id(), text = paste0("Моё почтение, ", user_name, "!"), parse_mode = "Markdown", reply_to_message_id = update$message$message_id) > # создаём фильтры MessageFilters$hi  BaseFilter(function(message)  # проверяем, встречается ли в тексте сообщения слова: привет, здравствуй, салют, хай, бонжур grepl(x = message$text, pattern = 'привет|здравствуй|салют|хай|бонжур', ignore.case = TRUE) > ) # создаём обработчик hi_hendler  CommandHandler('hi', say_hello) # обработчик команды hi hi_txt_hnd  MessageHandler(say_hello, filters = MessageFilters$hi) # добаляем обработчики в диспетчер updater  updater + hi_hendler + hi_txt_hnd # запускаем бота updater$start_polling()

Запустите приведённый выше пример кода, предварительно заменив ‘ТОКЕН ВАШЕГО БОТА’ на реальный токен, который вы получили при создании бота через BotFather.

Теперь попробуем отправить боту несколько сообщений, в которых будут встречаться перечисленные ранее слова приветствия:

Итак, в первую очередь мы научили бота не просто здороваться, а отвечать на приветствие. Сделали мы это с помощью аргумента reply_to_message_id, который доступен в методе sendMessage() , в который необходимо передать id сообщения на которое требуется ответить. Получить id сообщения можно вот так: update$message$message_id .

Но главное, что мы сделали — добавили боту фильтр с помощью функции BaseFilter() :

# создаём фильтры MessageFilters$hi  BaseFilter( # анонимная фильтрующая функция function(message)  # проверяем, встречается ли в тексте сообщения слова приветствия grepl(x = message$text, pattern = 'привет|здравствуй|салют|хай|бонжур', ignore.case = TRUE) > )

Как вы могли заметить, фильтры необходимо добавлять в объект MessageFilters, в котором изначально уже есть небольшой набор готовых фильтров. В нашем примере в объект MessageFilters мы добавили элемент hi, это новый фильтр.

В функцию BaseFilter() вам необходимо передать фильтрующую функцию. По сути, фильтр — это просто функция, которая получает экземпляр сообщения и возвращает TRUE или FALSE. В нашем примере, мы написали простейшую функцию, которая с помощью базовой функции grepl() проверяет текст сообщения, и если он соответствует регулярному выражению привет|здравствуй|салют|хай|бонжур возвращает TRUE.

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

updater  updater + hi_hendler + hi_txt_hnd

Как я уже писал выше, в пакете telegram.bot и объекте MessageFilters уже есть набор встроенных фильтров, которые вы можете использовать:

  • all — Все сообщения
  • text — Текстовые сообщения
  • command — Команды, т.е. сообщения которые начинаются на /
  • reply — Сообщения, которые являются ответом на другое сообщение
  • audio — Сообщения в которых содержится аудио файл
  • document — Сообщения с отправленным документом
  • photo — Сообщения с отправленными изображениями
  • sticker — Сообщения с отправленным стикером
  • video — Сообщения с видео
  • voice — Голосовые сообщения
  • contact — Сообщения в которых содержится контант телеграм пользователя
  • location — Сообщения с геолокацией
  • venue — Пересылаемые сообщения
  • game — Игры

Если вы хотите совместить некоторые фильтры в одном обработчике просто используйте знак | — в качестве логического ИЛИ, и знак & в качестве логического И. Например, если вы хотите что бы бот вызывал один и тот же метод когда он получает видео, изображение или документ используйте следующий пример создания обработчика сообщений:

handler  MessageHandler(callback, MessageFilters$video | MessageFilters$photo | MessageFilters$document )

2.7 Добавление команд с параметрами

Мы уже знаем, что такое команды, как их создавать и как заставить бота выполнить нужную команду. Но в некоторых случаях помимо названия команды, нам необходимо передать некоторые данные для её выполнения.

Ниже пример бота, который по заданной дате и стране возвращает вам тип дня из производственного календаря.

Приведённый ниже бот использует API производственного календаря isdayoff.ru.

library(telegram.bot) # создаём экземпляр класса Updater updater  Updater('ТОКЕН ВАШЕГО БОТА') # Пишем метод для приветсвия ## команда приветвия check_date  function(bot, update, args)  # входящие данные day  args[1] # дата country  args[2] # страна # проверка введённых параметров if ( !grepl('\\d-\\d-\\d', day) )  # Send Custom Keyboard bot$sendMessage(update$from_chat_id(), text = paste0(day, " - некорреткная дата, введите дату в формате ГГГГ-ММ-ДД"), parse_mode = "Markdown") > else  day  as.Date(day) # переводим в формат POSIXtl y  format(day, "%Y") m  format(day, "%m") d  format(day, "%d") > # страна для проверки ## проверяем задана ли страна ## если не задана устанавливаем ru if ( ! country %in% c('ru', 'ua', 'by', 'kz', 'us') )  # Send Custom Keyboard bot$sendMessage(update$from_chat_id(), text = paste0(country, " - некорретктный код страны, возможнные значения: ru, by, kz, ua, us. Запрошены данные по России."), parse_mode = "Markdown") country  'ru' > # запрос данных из API # компоновка HTTP запроса url  paste0("https://isdayoff.ru/api/getdata?", "year va">y, "&", "month va">m, "&", "day va">d, "&", "cc va">country, "&", "pre=1&", "covid=1") # получаем ответ res  readLines(url) # интрепретация ответа out  switch(res, "0" = "Рабочий день", "1" = "Нерабочий день", "2" = "Сокращённый рабочий день", "4" = "covid-19", "100" = "Ошибка в дате", "101" = "Данные не найдены", "199" = "Ошибка сервиса") # отправляем сообщение bot$sendMessage(update$from_chat_id(), text = paste0(day, " - ", out), parse_mode = "Markdown") > # создаём обработчик date_hendler  CommandHandler('check_date', check_date, pass_args = TRUE) # добаляем обработчик в диспетчер updater  updater + date_hendler # запускаем бота updater$start_polling()

Запустите приведённый выше пример кода, предварительно заменив ‘ТОКЕН ВАШЕГО БОТА’ на реальный токен, который вы получили при создании бота через BotFather.

Мы создали бота, который в арсенале имеет всего один метод check_date , данный метод вызывается одноимённой командой.

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

Что бы создаваемый нами метод принимал дополнительные параметры вместе с командой, используйте аргумент pass_args = TRUE в функции CommandHandler() , и при создании метода, помимо обязательных аргументов bot, update создайте опциональный — args. Созданный таким образом метод будет принимать параметры, которые вы передаёте боту после названия команды. Параметры необходимо между собой разделять пробелом, в метод они поступят в виде текстового вектора.

Давайте запустим, и протестируем нашего бота.

2.8 Запускаем бота в фоновом режиме

Последний шаг который нам осталось выполнить — запустить бота в фоновом режиме.

Для этого следуйте по описанному ниже алгоритму:

  1. Сохраните код бота в файл с расширением R. При работе в RStudio это делается через меню File, командой Save As….
  2. Добавьте путь к папке bin, которая в свою очередь находится в папке в которую вы установили язык R в переменную Path, инструкция тут.
  3. Создайте обычный текстовый файл, в котором пропишите 1 строку: R CMD BATCH C:\Users\Alsey\Documents\my_bot.R . Вместо *C:_bot.R* пропишите путь к своему скрипту бота. При этом важно, что бы в пути не встречалась кириллица и пробелы, т.к. это может вызвать проблемы при запуске бота. Сохраните его, и замените его расширение с txt на bat.
  4. Откройте планировщик заданий Windows, есть множество способов это сделать, например откройте любую папку и в адресс введите %windir%\system32\taskschd.msc /s . Другие способы запуска можно найти тут.
  5. В верхнем правом меню планировщика нажмите “Создать задачу…”.
  6. На вкладке “Общие” задайте произвольное имя вашей задаче, и переключатель перевидите в состояние “Выполнять для всех пользователей”.
  7. Перейдите на вкладку “Действия”, нажмите “Создать”. В поле “Программа или сценарий” нажмите “Обзор”, найдите созданный на втором шаге bat файл, и нажмите ОК.
  8. Жмём ОК, при необходимости вводим пароль от вашей учётной записи операционной системы.
  9. Находим в планировщике созданную задачу, выделяем и в нижнем правом углу жмём кнопку “Выполнить”.

Наш бот запущен в фоновом режиме, и будет работать до тех пор, пока вы не остановите задачу, или не выключите ваш ПК или сервер на котором его запустили.

2.9 Как добавить бота в группу

Для того, что бы использовать бота в публичных или закрытых группах, изначально проверьте соответвующую настройку в BotFather. По умолчанию эта настройка должна быть включена. Находится она тут: /mybots -> @bot_username -> Bot Settings -> Allow Groups?. Если настройка включена то вы увидите следующее сообщение:

Далее добааляете бота в нужные группы и используете его через команды. Если вам необходимо сделать так, что бы бот прослушивал не только команды, но и все сообщения в группе, то вам необходимо назначить его администратором, посе чего вы увидите что бот имеет доступ ко всем сообщениям.

2.10 Как добавить описание команд в интерфейс бота

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

Выглядеть это будет вот так:

Делается это через BotFather -> @bot_username -> Edit Bot -> Edit Commands. Далее просто передаёте название команды и через тире их описание:

command1 - Description command2 - Another description

2.11 Заключение

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

В следующей главе речь пойдёт о том, как добавить боту клавиатуру, для более удобной работы.

Подписываетесь на мой telegram и youtube каналы.

2.12 Тесты и задания

2.12.1 Тесты

Для закрепления материла рекомендую вам пройти тест доступный по ссылке.

2.12.2 Задания

  1. Создайте бота, который будет по команде /sum и переданное в качестве дополнительных параметров произвольное количество перечисленных через пробел чисел, возвращать их сумму.

Если вы всё сделали правильно результат должен быть таким:

Как обновить Телеграм-бота на Heroku?

Vi3v

Эмм.
01. Перейти на dashboard.heroku.com/apps
02. Выбрать вашего бота
03. Далее Deploy
04. Пролистать вниз и
05. Нажать на Deploy Branch
Если чуть выше нажать на Enable Automatic Deploys, то при каждом обновлении бота на гитхабе heroku будет сам разворачивать новую версию у себя.

Ответ написан более трёх лет назад

Как обновить Телеграм-бота на Heroku?

Vi3v

Эмм.
01. Перейти на dashboard.heroku.com/apps
02. Выбрать вашего бота
03. Далее Deploy
04. Пролистать вниз и
05. Нажать на Deploy Branch
Если чуть выше нажать на Enable Automatic Deploys, то при каждом обновлении бота на гитхабе heroku будет сам разворачивать новую версию у себя.

Ответ написан более трёх лет назад

Как обновить подключение к боту Телеграм?

Иногда требуется обновить токен у бота Telegram. Например, когда он не пересылает новые посты в наш сервис для репоста в другие соцсети или когда нужно отвязать бота от других сервисов.

репост из Инстаграм в Телеграм

  1. Перейдите в приложении Telegram в диалог с ботом: BotFather.
  2. Отправьте ему команду /mybots .
  3. В списке ботов выберите нужного и кликните по нему.
  4. Появятся кнопки. Кликните по API Token.
  5. Появится кнопка Revoke API Token. Кликните по ней.
  6. Скопируйте новый token, который Вам даст @BotFather на страницу прикрепления аккаунта в поле «Bot token» (на скриншоте ниже выделен красной рамкой).
  7. Нажмите на зеленую кнопку «Подключить бота».
  8. Если у вас есть каналы репоста из Телеграм, то перейдите к ним. И под каналом кликните по ссылке «Вернуть управление».

Напишите нам в форму онлайн (синяя кнопка внизу страницы) или на email support@onemorepost.ru, если будут вопросы по работе сервиса. Будем рады помочь с настройкой!

Bot API: часто задаваемые вопросы

Если вы незнакомы с ботами в Telegram, рекомендуется сначала прочитать ознакомительную статью.

Также, возможно, вас заинтересует описание Bot API.

Общие вопросы

Как я могу создать бота?

Создание бота для Telegram крайне простое, однако, вам понадобится кое-какой опыт в программировании. Для работы вашего бота вам необходимо осуществить первоначальную настройку через бота @BotFather, а затем подключить его к вашему серверу через API.

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

Можно посмотреть примеры кода?

Вот два бота-образца, написанных на PHP:

  • Hello Bot: демонстрация основных возможностей Bot API.
  • Simple Poll bot: более сложный бот, поддерживающий оба способа получения обновлений (long-polling и вебхуки).

Примечание

Многие разработчики создают своих ботов с открытым исходным кодом. Мы собираем их на специальной странице.

Добавьте в ботов фичу X!

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

Если у вас есть мысли по этому поводу, вы можете высказать их пользователю @BotSupport (на английском).

Какие сообщения может получать мой бот?

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

  • Сообщение было ответом боту или нажатием на его клавиатуру
  • В сообщении есть @упоминание бота по его имени пользователя
  • В сообщении содержится общая команда (напр., /start ) или команда, предназначающаяся вашему боту (напр., /start@YourBot )
  • Сообщение является служебным (о смене названия группы, выходе кого-либо из чата, и т. д.)

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

  • Сообщений от других ботов
  • Команд для других ботов (напр., /start@NotYourBot )
  • Ответов на сообщения от других ботов, за исключением случаев, когда в сообщении содержится @упоминание вашего бота.

Почему мой бот не видит сообщений от других ботов?

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

Получение обновлений

Как можно получать обновления?

На текущий момент доступно два способа. Вы можете использовать либо опрос, либо вебхуки. Обратите внимание: если вы используете вебхуки, метод getUpdates работать не будет.

Принципиальное отличие: при опросе вашему приложению самому нужно запрашивать обновления у API, а используя вебхуки — сервера Telegram будут отправлять на ваш сервер каждое обновление с помощью HTTPS POST-запроса.

Предупреждение

Вебхуки могут работать только через HTTPS, допустимо использование самозаверенного сертификата.

Доступные порты: 443, 80, 88, 8443.

Опрос всегда выдаёт один и тот же результат!

Метод getUpdates выдаёт 100 последних неподтверждённых обновлений. Чтобы подтвердить обновление, используйте параметр offset при вызове getUpdates вот так:

offset = update_id последнего обработанного обновления + 1

Все обновления с update_id меньшим или равным offset будут отмечены как подтверждённые и не будут больше возвращаться сервером.

У меня проблема с вебхуками

Если вы успешно задали адрес вебхука, но не получаете обновлений, убедитесь, что:

  • SSL-сертификат вашего вебхука валиден и корректен
  • При использовании самозаверенного сертификата, вы передаёте его публичный ключ в поле certificate метода setWebhook. Необходимо загружать InputFile , отправка строки не сработает.
  • Ваш вебхук работает на одном из допустимых портов: 443, 80, 88, 8443.

У меня проблема с самозаверенным сертификатом

Ознакомьтесь с инструкцией по созданию сертификатов. Если после прочтения у вас остались вопросы, напишите пользователю @BotSupport.

Как мне убедиться, что запросы идут с серверов Telegram?

Для этого включите ваш токен в адрес вебхука, примерно так:

https://example.com/your_token

Так как никто посторонний не знает вашего токена, запросы на этот адрес смогут отсылать только сервера Telegram.

Как делать запросы в HTTP-ответах к обновлениям?

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

Всякий раз при получении обновления на вебхук, у вас есть два варианта:

Прямой запрос

2. Ответить напрямую, указав метод в виде JSON в HTTP-ответе:

Ответ в запросе

Примечание

Пример реализации этой возможности на PHP можно посмотреть в коде HelloBot.

Обработка медиафайлов

Как скачивать файлы?

Для этого используйте метод getFile .

Предупреждение

Этот метод работает только для файлов объёмом до 20 МБ.

Как закачать большой файл?

На текущий момент боты могут отправлять файлы объёмом до 50 МБ, так что крупные файлы отправить не получится. Возможно, это ограничение будет снято в будущем.

Как долго хранится file_id у файлов?

file_id у отправленных вашим ботом файлов будут удалены после отправления нескольких тысяч файлов.

Для принятых файлов file_id можно считать вечным и неизменным.

Массовая рассылка

Каков лимит сообщений в секунду?

При работе с отдельным чатом, избегайте отправки более 1 сообщения в секунду. Конечно, допустимы небольшие пики, но со временем вы начнёте получать ошибку 429.

При рассылке уведомлений нескольким пользователям, API не позволит отправлять более 30 сообщений в секунду. Для преодоления этого лимита вам необходимо разбить отправку на части с большим интервалом между собой (около 8-12 часов).

При работе с группой ограничение установлено на 20 сообщений в минуту.

Как получить список всех подписчиков моего бота?

К сожалению, пока сделать это встроенными методами нельзя. Возможно, в будущем будут добавлены пару строк для управления подписчиками.

Чтобы максимально эффективно рассылать сообщения, вам необходимо разбивать отправку на несколько частей с интервалом в 8-12 часов. Также недопустимо отправление более 30 сообщений разным пользователям в секунду — иначе вы будете получать ошибку 429.

Сайт про Telegram на русском (неофициальный).

Здесь собраны приложения на базе MTProto, переведена некоторая документация с официального сайта, а также работает Webogram.

Смена токена Telegram бота

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

Чтобы обезопасить себя, рекомендуем обновлять токены ваших Telegram ботов в следующих случаях:

  • смена сервиса для создания ботов,
  • после работы сторонних специалистов в ваших аккаунтах,
  • после создания нового кабинета на платформе с использованием тех же ботов.

Инструкция по обновлению токена Telegram бота

❗❗❗Важно! Чтобы в работе бота не возникло сбоев из-за обновления токена, сначала полностью изучите данную инструкцию. Обновление токена безопасно для цепочки, если сделать все действия достаточно быстро. Рекомендуем выбрать время, когда в ваших цепочках не планируется массовая отправка сообщений.

Откройте Telegram, проверьте что выбран аккаунт, который является владельцем бота. Найдите бота @BotFather.

Наберите команду /mybots, чтобы увидеть список ваших ботов, и выберете нужный. Нажмите на кнопку API Token, далее Revoke current token. Нажмите на новый токен, чтобы он скопировался.

Если вы пока не пользуетесь ботом и вам нужно только исключить возможность несанкционированного доступа, то этого достаточно.

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

Переподключение Telegram бота в BotHelp

Зайдите в ваш кабинет BotHelp в раздел Настройки — Каналы.

Найдите нужного бота. Нажмите на кнопку ⁝ затем Отключить канал

Появится окно с предупреждением, подтвердите действие.

Канал отключен, теперь необходимо подключить его заново.

Нажмите на кнопку Добавить новый канал в появившемся окне выберете Telegram и ниже вставьте новый токен, который предоставил вам бот @BotFater. Нажмите Добавить канал.

Чтобы проверить корректность подключения, напишите что-либо своему боту. Затем найдите себя в разделе Диалоги и отправьте сообщение себе от имени бота. Если сообщения пришли в обе стороны, то бот полностью исправен.

Если вы не нашли ответ на свой вопрос, задайте его нам в чате внутри кабинета либо напишите на hello@bothelp.io ��

Получите 14 дней полного функционала платформы для создания рассылок, автоворонок и чат-ботов BotHelp.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *