Почему тормозит бот в Телеграмме

Вы создаёте ботов в телеграме? Даже если нет, полезно будет знать о некоторых моментах, касающихся разработки телеграм-ботов. Никакого кода не будет, только картинки и описание 5 распространённых ошибок, которые меня — заядлого педанта в области разработки простых интерфейсов — раздражают

8814 просмотров

Ботов, которых я буду рассматривать, я нашёл в поиске по vc.ru.

1. Кнопки, которые крепятся к сообщениям, и кнопки, которые крепятся к клавиатуре, должны выполнять те функции, для которых предназначены (негласно).

Суть кнопок, которые крепятся к клавиатуре (как на скриншоте) — быстрый ввод. Вместо того, чтобы заставлять пользователя вводить определённую фразу или слово, можно сделать специальную кнопку как раз в том месте, где располагается клавиатура. Из-за того, что во многих ботах ввод пользователя проверяется по точному совпадению отправленного им сообщения, такие кнопки сильно упрощают взаимодействие с ботом, организовывая эффективный диалог, который можно будет перечитать. Если же получающийся диалог не несёт смысла, значит кнопки используются неправильно — как в боте на скриншоте: в нём эти кнопки используются для организации навигации по боту. Одну часть этих кнопок можно заменить на команды, другую часть — на кнопки, крепящиеся к сообщению. Например, как организовано в официальном боте:

Telegram Bot is not working

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

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

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

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

3. Нажатие на кнопки, крепящиеся к сообщению, нельзя оставлять без ответа.

В документации так и написано:

NOTE: After the user presses a callback button, Telegram clients will display a progress bar until you call answerCallbackQuery. It is, therefore, necessary to react by calling answerCallbackQuery even if no notification to the user is needed (e.g., without specifying any of the optional parameters).

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

Еще по теме:  К какому году относятся данные Телеграммы

# Бот для заработка в телеграмме ссылка в описании #

4. Сообщения, предполагающие ожидание, не должны оставаться на виду после отправки результата пользователю.

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

Во-вторых, если срок обновления и удаления истечёт, то сообщение останется висеть в чате, и ничего с ним не сделать. Поэтому не стоит отправлять сообщения, которые собираетесь обновлять через долгий срок. Но если срок предполагается короткий, то сообщение нужно, разумеется, обновить, а не присылать следующее, как на скриншоте выше. Либо (ради уведомлений конечно) написать такой текст, в котором не подразумевается, что он будет изменён («По окончании обработки мы пришлём результат в ответном сообщении», ну или типа того).

5. Не плените пользователей, не становитесь спамерами.

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

Поэтому уважайте своих пользователей и не делайте подозрительных действий для телеграма типа массовых рассылок. Тех, кто заблокировал бота, помечайте флагом в базе как недоступных. Если хотите сделать рассылку, отправляйте сообщения не всем пользователям, а только активным за последние n часов или суток (если их не так много).

Максимум можно отправить 30 сообщений в секунду (про каналы точно не могу сказать, я делаю только диалоговых ботов, но там сильно меньше). Если превысить лимит, бот перестанет получать запросы — попадёт в стоп-лист на некоторое время. Ограничение можно увеличить через техподдержку в случае необходимости (или свой сервер поднять).

Было трудно найти ботов, в которых именно описанные ошибки, потому что почти в каждом встречаются все сразу, и акцентировать внимание на чём-то определённом не получилось бы. Я буду продолжать эту и подобные темы в следующих статьях, поэтому если есть боты на проверку, предлагайте — так будет даже проще.

Источник: vc.ru

Из-за чего могут быть задержки у telegram бота?

Бот написан на asp.net core (c вебхуками). Проблема состоит в том, что если ботом продолжительное время никто не пользуется, он начинает отвечать на первый запрос после этого продолжительного времени с задержкой. При этом задержка как будто бы пропорциональна этому времени. Например, если не отправлять запросов боту в течении 3 часов, создается задержка на первый запрос около 2-3 секунд, после этого все встает на свои места. Сталкивался ли кто-нибудь с такой проблемой? Структура моего проекта примерно такая как тут

  • Вопрос задан более двух лет назад
  • 108 просмотров
Еще по теме:  Скам обменник бот в ТГ

1 комментарий

Средний 1 комментарий

vabka

1. Это может зависеть от хостинга. Например на бесплатном heroku вроде гасится приложение, если долго в него никто не слал запросы — тогда первый запрос как раз будет долгим из-за запуска контейнера и прогрева приложения.
2. Это может сам телеграм тормозить

Решения вопроса 0
Ответы на вопрос 1

Wyrd

Архитектор

Рискну предположить что вы запускаете вашего бота на IIS, если это так то проблема вероятнее всего в настройках IIS App Pool Recycling — по умолчанию IIS перезапускает приложение раз в день + (при)останавливает его если в течении 20 минут не был обработан ни один запрос. Запуск после этого как раз занимает несколько секунд.

Вот тут картинка как это отключить, там есть нюансы поэтому лучше почитать комментарии — https://stackoverflow.com/questions/51348433/iis-1.

Ещё вы пишете что время запуска зависит от времени простоя.. надеюсь вам показалось, потому что представить как такое возможно сложновато 🙂 Хотя — если у вас приложение читает много данных с диска при старте — возможно виноват дисковый кеш (чем дольше простой тем меньше вероятность найти данные в кеше и тем больший объём надо считать с диска при старте).

Источник: qna.habr.com

Создатели ботов в Telegram жалуются на ограниченность и нестабильность Bot API

Создатели ботов в Telegram жалуются на ограниченность и нестабильность Bot APIСоздатели ботов в Telegram жалуются на ограниченность и нестабильность Bot API

Многие ценят Telegram за удобство, надёжность, функциональность и, конечно же, ботов. С помощью них можно значительно расширить возможности мессенджера. Однако разработчики всё чаще жалуются на периодические сбои в Bot API.

Во время недавнего сбоя нагрузка на серверы бота составляла менее 20%, поэтому разработчик заподозрил что-то неладное с Bot API. Чтобы подтвердить свою догадку, он отправил два вызова getUpdates с offset: -1 . Они должны были возвращать последнее сообщение и сбрасывать беклог апдейтов, но оба раза Никита получил сообщения 33-х минутной давности.

График, демонстрирующий среднее время между моментом, когда пользователь отправил сообщение, и моментом, когда Telegram доставил это сообщение боту, только подтвердил его правоту. Согласно данным, оно составило как раз 34 минуты:

В разговоре с «Кодом Дурова», Никита подтвердил этот факт и чуть подробнее рассказал о проблеме:

Сбои в Bot API бывают примерно раз в месяц, по какой причине — мне неизвестно. Полгода назад пытался доказать гипотезу, что сбои происходят по моей вине, но так и не смог — судя по всей статистике, нагрузка на мои серверы никогда не превышала 70%, а на все сообщения от Bot API все мои боты отвечают мгновенно — и сразу запрашивают следующие.

Серверы у меня все стоят в Амстердаме, задержка до серверов Bot API была меньше 1.2 миллисекунды, то есть говорят серверы почти в реальном времени. Путем исключения, я могу основательно заявить, что если задержки в ботах и есть у того же Войси — то они на стороне Telegram.

По крайней мере, я падений не заметил, но в Bot API можно круто развернуться по функционалу.

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

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

Мне на данный момент хватает работы через вебхуки, потому падений каких-то не замечаю — так понимаю, сейчас (и обычно) падает через getUpdates. Хотелось бы, конечно, куда более обширного Bot API. Как минимум, официальной поддержки всех методов TL самого Telegram (как у юзерботов).

Если говорить конкретней и не так широко — неплохо было бы иметь возможность получать список подписчиков непосредственно через Bot API (разумеется, там, где бот установлен в администраторах канала). Аналогично — доступ к истории постов канала.
Есть некоторые моменты, которых тоже не хватает в работе ботов (для постинга, например), но этого функционала еще и нет в самом Telegram — прикреплять опросы к тексту, например, вместо отдельных постов.

Еще по теме:  База где можно прочитать переписку в Телеграм

В общем, лично на мне скупость BotApi не особо отражается — так, хотелки для pet-projects, ибо я использую все возможности внутреннего user-api, работая с юзерботами, раз уж альтернатив нет.

— Сергей Цветаев, основатель сервиса аналитики Telegram-каналов Telemetr.me

Мало просто выложить продукт в open source, нужно ещё построить процесс вокруг этого. Клиенты все давно открыты, много PR было принято от сторонних разработчиков? Единицы, и то связаны в основном с документацией, локализацией (ранних версий) и фиксов опечаток.

Понятно, что Bot API бежит на tdlib, но этого явно недостаточно, так как для функционирования и масштабирования нужны ещё вспомогательные сервисы в виде очередей и баз данных. А зная любовь Telegram к разработке in house решений, нужно ещё и их открыть, получается.

Tdlib — библиотека для реализации Telegram клиентов. Они в доке к ней где-то пишут этот факт.

Нестабильность работы и слабое развитие Bot API наводят на мысль, что для команды Telegram это задача, как минимум, не первостепенной важности. В любом случае, разработчики и создатели ботов всегда готовы помочь, но этому мешает закрытость Bot API. Проблему отсутствия прямого канала общения с командой мессенджера подчеркнул Никита Колмогоров:

Но главных претензий три:
1. Нестабильность Bot API и уже почти постоянные сбои;
2. Закрытость разработчиков Bot API и отсутствие диалогов с разработчиками ботов;
3. Полное забвение программы грантов для разработчиков ботов.

Командой мессенджера был объявлен конкурс для разработчиков ботов. Однако из обещанного $1 млн победители поделили между собой всего лишь $200 000. Этап был завершён 12 января 2018 года, и Telegram больше не возвращался к этому конкурсу.

Источник: kod.ru

Рейтинг
( Пока оценок нет )
Загрузка ...