Сегодня мы дадим ответы на многочисленные вопросы, из разряда:
Как делать отложенный пост?
Как добавить красивую ссылку?
Как смотреть статистику?
Как добавить эмодзи?
Как добавить кнопки к посту?
И тому подобное….
Данная статья станет практической инструкцией как возможно сделать хороший пост в telegram со всеми вытекающими.
Мы будем использовать прекрасного бота под названием «controllerbot»
Навигация по статье «controllerbot — Мануал»
- Как добавить канал и подключить к нему бота?
- Как создать и оформить пост в формате «markdown» и «HTML»?
- Как к посту добавить фото, реакции и URL-кнопки?
- Как создать отложенный пост?
- Как редактировать опубликованный пост?
- Как изменить время, удалить или просмотреть отложенный поста?
- Как просмотреть статистику канала?
Добавление канала и подключение бота
Для начала мы добавим контроллер бот в свой телеграм, для этого мы переходим по ссылке — https://t.me/ControllerBot открывается диалоговое окно с активной кнопкой «START«, кликаем на нее.
Как сделать меню в боте Телеграм | Меню с кнопками в Телеграм
После чего для нас открывается меню с активными кнопками:
— Создать пост.
— Каналы.
— Настройки.
— Управление постами.
— Статистика.
— Написать нам.
Дальше мы пройдемся по каждому пункту отдельно, а сейчас давайте подключим Контроллер бот к своему каналу.
Нажимаем на кнопку «Каналы» контроллер бот предлагает нам «добавить новый канал» кликаем.
Для добавления нового канала нам необходимо «подключить нового бота»
(подключить нового бота)
В следующем сообщение от контроллер бота мы получаем короткую инструкцию по подключению бота к своему каналу — Выполняем ее.
Чтобы подключить бот, вам нужно выполнить три действия:
Важно: не подключайте боты, которые используются в других сервисах (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-параметров. Для корректной валидации которой требуется следующая цепочка шагов:
- Декодируем строку, используя URL-encoding (важно, иначе значение с ключом user останется не декодированным).
- Полученные пары ключ-значения сортируем в алфавитном порядке.
- Исключаем ключ hash
- Из полученных пар составляем тело вида: auth_date=nquery_id=nuser= . Важно сохранить значение с ключом user в чистом JSON.
- Берем хэш от токена вашего бота с помощью алгоритма HMAC-SHA256 с ключом WebAppData .
- Берем хэш от полученного в шаге 4 тела с помощью того же алгоритма, а в качестве ключа используем хэш, полученный ранее в виде последовательности байтов (а не hex-репрезентации!).
- Преобразуем полученный хэш в 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