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

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

Какой-то бот
Какой-то бот

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

Официальный бот
Официальный бот

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

Какой-то бот
Какой-то бот

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

Hidden text

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

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

Комментарии (17)


  1. numb
    10.12.2023 12:42

    Про рассылку и свой сервер, можно чуть подробнее?


    1. Ipatov_e
      10.12.2023 12:42

      Документация: https://core.telegram.org/bots/api#using-a-local-bot-api-server

      Исходники сервера: https://github.com/tdlib/telegram-bot-api

      Лимиты на работу с файлами до 2Гб увеличиваются, вместо 20мб. Плюс исходники сервера доступны, можно доработать и скомпилировать. Так же и лимиты по запросам увеличиваются.


      1. r_anisimov Автор
        10.12.2023 12:42

        Это сервер ботов, ограничения он не снимает. По-прежнему нельзя будет кучу сообщений отправлять. Увеличивается порог для параметра max_connections и на объём файлов, в остальном всё через серверы телеграма идёт, поэтому те же лимиты.


        1. Ipatov_e
          10.12.2023 12:42

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


          1. r_anisimov Автор
            10.12.2023 12:42

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


    1. r_anisimov Автор
      10.12.2023 12:42

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


  1. Ipatov_e
    10.12.2023 12:42

    Сложные меню и интерфейсы ботов можно выносить в webview, телеграм уже давно их разрешает встраивать.

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

    Пример(тестовый бот): https://t.me/restaurant_OWL_ExampleBot

    Пример(тестовый мини апп): https://t.me/restaurant_OWL_ExampleBot/restaraunt

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


    1. r_anisimov Автор
      10.12.2023 12:42

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


      1. Ipatov_e
        10.12.2023 12:42

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

        Думаю, что телеграму стоит оба направления развивать – и вебвью и сам интерфейс внутри бота


  1. beduin01
    10.12.2023 12:42

    Нахрена нужны боты если можно делать нормальные сайты?


    1. Ipatov_e
      10.12.2023 12:42

      А зачем нужны мотоциклы, если есть автомобили? Боты и сайты – это разные инструменты, у каждого свое применение. Бот внутри мессенджера, чтобы его запустить, достаточно телеграм открыть. Так же бот умеет уведомления отправлять в мессенджер, меньше шансов потерять уведомление, чем письмо от сайта или пуш от приложения.


      1. beduin01
        10.12.2023 12:42

        Про мотоциклы на дорогах вопрос большой. По идее их не должно быть.

        Бот внутри месседжера … зачем пытаться совместить чат с тем что чатом не является.


    1. r_anisimov Автор
      10.12.2023 12:42

      Не нужны. Но раз они есть, приходится пользоваться.


      1. beduin01
        10.12.2023 12:42

        Проблема наличия мотоциклов на дорогах должна быть решена законодательно.

        Проблема ботов решается игнорированием подобных сервисов.


        1. r_anisimov Автор
          10.12.2023 12:42

          Игнорируйте, мне пока не хочется.


    1. ddruganov
      10.12.2023 12:42

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

      Мне проще зайти в бота, тыкнуть одну кнопку и все увидеть/передать, потому что там сессия всегда активна


    1. timypro
      10.12.2023 12:42

      А нахрена нужны сайты, если есть нормальные боты?)

      Ты напоминаешь мне одного знакомого моей подруги, который яро ей доказывал, что одно лучше другого: объяснял крутые преимущества сайтов, и "жестокие" минусы чат-ботов.

      Один нюанс - моя подруга не особо разбиралась в IT, и когда я решил в лс лично поведать у него эти плюсы и минусы - оказалось, что треть всего этого не имеет смысла, а всë остальное выдумано... Да и он, как оказалось, может похвастаться только тем, что закончил техникум по специальности веб разработчика, и уже 3 года не может найти себе работу

      На самом-то деле, ответ прост - в кодинге все средства хороши, самое главное уметь ими грамотно пользоваться