Бот в Телеграм с прозрачными кнопками

Сегодня мы дадим ответы на многочисленные вопросы, из разряда:

Как делать отложенный пост?
Как добавить красивую ссылку?
Как смотреть статистику?
Как добавить эмодзи?
Как добавить кнопки к посту?
И тому подобное….

Данная статья станет практической инструкцией как возможно сделать хороший пост в telegram со всеми вытекающими.
Мы будем использовать прекрасного бота под названием «controllerbot»

Навигация по статье «controllerbot — Мануал»

  • Как добавить канал и подключить к нему бота?
  • Как создать и оформить пост в формате «markdown» и «HTML»?
  • Как к посту добавить фото, реакции и URL-кнопки?
  • Как создать отложенный пост?
  • Как редактировать опубликованный пост?
  • Как изменить время, удалить или просмотреть отложенный поста?
  • Как просмотреть статистику канала?

Добавление канала и подключение бота

Для начала мы добавим контроллер бот в свой телеграм, для этого мы переходим по ссылке — https://t.me/ControllerBot открывается диалоговое окно с активной кнопкой «START«, кликаем на нее.

Как сделать меню в боте Телеграм | Меню с кнопками в Телеграм

После чего для нас открывается меню с активными кнопками:
— Создать пост.
— Каналы.
— Настройки.
— Управление постами.
— Статистика.
— Написать нам.

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

Для добавления нового канала нам необходимо «подключить нового бота»

(подключить нового бота)

В следующем сообщение от контроллер бота мы получаем короткую инструкцию по подключению бота к своему каналу — Выполняем ее.

Еще по теме:  Где папка Telegram на Андроид 11

Чтобы подключить бот, вам нужно выполнить три действия:

Важно: не подключайте боты, которые используются в других сервисах (Manybot, Chatfuel и другие).

(отправьте команду /newbot)

(Введите название бота)

(скопируйте token бота)

(пришлите token бота)

Telegram Web App bot: разбор и аспекты безопасности June 14, 2022 on Savely Krasovsky’s blog

Виды кнопок

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

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

TL;DR

Мэллори: Привет Боб, я Алиса, дай мне информацию о балансе и сделай перевод на имя Мэллори.

Боб: Пожалуйста, Алиса, всё готово.

Мэллори: Привет Боб, я Алиса, дай мне информацию о балансе и сделай перевод на имя Мэллори.

Боб: Предоставьте, пожалуйста, валидную подпись Алисы.

Мэллори разводит руками

То есть нужно это затем, чтобы произвести безопасную аутентификацию (проверку подлинности запроса) и авторизацию (понять, что к боту пришла именно Алиса, а не Мэллори).

Без этой валидации бот сможет предоставлять критически важную информацию (например, вы делаете онлайн-банкинг в боте) просто по ID пользователя Telegram.

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

Валидация, к слову, не совсем тривиальная. Разработчики Telegram, как обычно, не поленились и вместо проверенного стандарта JSON Web Token (JWT), реализовали свой собственный велосипед, да ещё и на базе обычного HMAC-SHA256 (то есть HS256 будь у нас JWT-токен). В результате initData представляет собой URL-encoded строку query-параметров. Для корректной валидации которой требуется следующая цепочка шагов:

  1. Декодируем строку, используя URL-encoding (важно, иначе значение с ключом user останется не декодированным).
  2. Полученные пары ключ-значения сортируем в алфавитном порядке.
  3. Исключаем ключ hash
  4. Из полученных пар составляем тело вида: auth_date=nquery_id=nuser= . Важно сохранить значение с ключом user в чистом JSON.
  5. Берем хэш от токена вашего бота с помощью алгоритма HMAC-SHA256 с ключом WebAppData .
  6. Берем хэш от полученного в шаге 4 тела с помощью того же алгоритма, а в качестве ключа используем хэш, полученный ранее в виде последовательности байтов (а не hex-репрезентации!).
  7. Преобразуем полученный хэш в hex-строку и сравниваем со значением ключа hash .
Еще по теме:  Где искать фото присланные на Телеграм

По аналогии с JWT, если валидация прошла успешно, пользователя можно считать аутентифицированным и переходить к авторизации с помощью предоставленного payload (в нашем случае это id в объекте user ).

Вид такого сообщения

— требуется собственный бэкенд для веб-части для валидации initData и работы с пользователем

Keyboard-кнопка

С первым и вторым способом всё понятно: вы получаете от Telegram подобие готового токена и поэтому реализация собственной аутентификации и авторизации не требуется, требуется только валидация.

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

Однако при использовании этого способа появляется возможность использовать метод Telegram.WebApp.sendData() , который позволяет отправить сообщение боту напрямую, а тот предоставит его вам через long-polling или вебхуки. Стоит учесть, что после успешного выполнения веб-окно автоматически закроется, а бот отрапортует сервисным сообщением Вы успешно передали данные боту кнопкой «Test button».

Поэтому Telegram позиционирует этот способ как удобный способ сделать гибкую веб-форму ввода с полями типа date picker . Вернуть значения формы можно с помощью метода Telegram.WebApp.sendData() .

Нужно понимать, что в JS-файле этот метод является лишь прослойкой, само значение, переданное в sendData() отправляются далее через MTProto-метод sendWebAppData . Методы MTProto невозможно использовать без авторизации в Telegram, поэтому тут мессенджер берет безопасность полностью на себя.

В этом заключается плюс этого метода.

+ удобно для заполнения сравнительно простых форм ввода
+ наличие собственного бэкенда для Web-части не требуется

— initData не приходит, возможность авторизовать пользователя на своём бэкенде (даже если он есть) отсутствует
— отправить информацию боту можно только 1 раз

Еще по теме:  Боты для просмотра инстаграмм в Телеграмм

Кнопка в меню вложений

Есть также четвертый способ, который технически не отличается от первого и второго (только дополнительными полями в initData ), но в этом случае бот добавляется в меню вложений.

Вид такого сообщения

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

Источник: krasovs.ky

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