Как разрешить боту доступ к сообщениям telegram

Обновлено: 19.09.2024

Falcon Space - это платформа для создания веб-решений с управлением через SQL. Все создается и управляется на SQL. Телеграм бот управляется полностью 1 хранимой процедурой на SQL!

2. В web.config / AppSettings настраиваем следующие параметры:

3. В таблице as_users добавляем 2 поля:

4. Создаем хранимую процедуру такого вида (в разделе Системный SQL / Telegram Bot):

  • SELECT 1 - Result и Msg
  • SELECT 2 - набор команд для telegram (актуально если SELECT1.Result=1). Type, Text, ChatID, replyMessageID, DisableNotification, Channel, ButtonsJSON, parseMode

5. Проверяем, что работает бот. Подписываемся на него в telegram и выполняем /start (при этом мы получим отклик Привет. ). Если нет отклика, значит бот не запущен. Попробуйте его перезапустить в разделе Системный SQL (Старт телеграм бот).

6. Чтобы подписать пользователя на некие действия, необходимо сначала чтобы он указал свой телеграм в профиле (поле as_users.telegram). Затем он должен сделать любую команду в телеграме, отправив боту к примеру /start

Хранение привязки чата к пользователю системы

Использование бота

  • В телеграм находим бота (например, наш бот FalconSpaceBot)
  • Пишем ему /start для инициализации (осуществляется привязка вашего пользователя к чату).
  • Выполняем различные команды, например /getupdates - если команда прописана в чате, то она будет обработана и выдан ответ.

Включение/выключение бота

Бот включается при запуске всего веб приложения (Global.asax/app_start).

Чтобы его выключить в вручную можно из-под админа использовать команду (перейти на URL) /Controls/Stuff/StopTelegramBot

Для включения - /Controls/Stuff/StartTelegramBot

Детали реализации бота

Howto по Telegram боту

Не работает бот Telegram. Что делать?

  1. Проверьте что прокси прописан в web.config
  2. Проверьте что прокси не просрочен
  3. Проверьте что бот в целом отвечает.на ваши команды в телеграм (если не отвечает)
  4. Попробуйте запустить заново бота /Controls/Stuff/StartTelegramBot (либо перезапустите пул приложения в IIS)
  5. Проверьте as_trace (коды TG и Exception). В нем пишутся ошибки и инициализация и завершение потока бота.
  6. Сделать as_print в процедуре и посмотреть попадает ли туда бот.
  7. Бот может остановиться если вы запущена локальная отладка (в этом случае возникает конфликт обновлений, поэтому необходимо отключать бота при локальном запуске - в web.config убирать токен).
  8. Бот может падать если выключается автоматически пул IIS. Необходимо его настроить так, чтобы он не отключался при простое.

Для этого используем Внешнее действие (в формах и др элементах) с кодом telegram.

У пользователя должны быть корректно проставлены поля telegram (заносится сначала вручную для пользователя его логин) и telegramChatID(проставляется автоматически при первом обращении юзера к боту через Телеграм) в as_users. Также можно указать имя в виде '@username' - тогда отправка будет по логину телеграма (если он есть в tg_settings).

buttonsJSON задает настройки кнопок.

ВАЖНО! Необходима реализация процедуры tg_getChatID:

Для этого используем символ "-" и chatID в параметре to

Примечание: бот необязательно должен быть администратором группы.

Для этого используем Внешнее действие (в формах и др элементах) с кодом telegram.

Бот должен быть добавлен администратором в канал при этом.

ВАЖНО! Необходима реализация процедуры tg_getChatID

Как сделать рассылку пользователям при сохранении формы.

Как работать с кнопками Телеграм

Кнопки могут быть либо Inline (в чате при ответе), либо Reply(внизу под чатом).

Кнопки передаются в виде JSON в параметре SELECT 2 ButtonsJSON:

Для Inline кнопок указываем:

  • Text - название кнопки.
  • CallbackData - данные для передачи в процедуру
  • Url - если указан, то кнопка будет открывать указанный адрес. ВАЖНО! Вводите корректный URL, иначе будет исключение и вся исходная команда не будет работать.

Для reply кнопок команда используется в поле text. Также для них есть 2 настройки:

  • ResizeKeyboard - Requests clients to resize the keyboard.
  • OneTimeKeyboard - Requests clients to hide the keyboard as soon as it’s been used.

В процедуру для инлайн кнопок будет передаваться как команда поле callbackData, а для reply кнопок - поле text.

Дополнительная информация о кнопках Телеграм:

Выбираем символ, на страницу символа берем его код UTF16 LE

В SQL используем этот код следующим образом:

Для этого используется параметр paseMode='html' (это значение используется по умолчанию).

Есть альтернативные способы разметки - default, markdown, markdownv2.

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

Пользователь переходит на бота и нажимает там кнопку Запустить. При этом ваша команда /start должна учитывать что в этом случае придет она как /start 1

Т.е. используем left () для определения команды start, а не точное соответствие.

Многоступенчатые команды в боте

Для этого используются следующие поля в tg_settings:

  1. currentCommand - текущая рабочая команда (в рамках которой пользователь вводит данные).
  2. currentCommandStep - текущий шаг в команде (для определения какой текст вывести в рамках команды).
  3. currentCommandData - здесь накапливаются данные по выполнению команды.

Пример кода такой команды:

В примере указан полный код процедуры бота с обработкой start, меню и бизнес-логикой ступенчатой команды. Также в коде есть пример как использовать Эмоджи в боте.

Для работы модуля вам не нужно специально программировать бота. Достаточно просто создать его, добавить в телеграм-канал и правильно настроить компоненты Appmaster Studio.

Используем, простите за тавтологию, бота для управления ботами — BotFather от Telegram.

Введите в поле поиска юзернейм «botfather» — скорее всего, он будет первым в списке (1). Обратите внимание, что у официального бота есть голубой подтверждающий значок с галочкой возле имени (2). Ниже в поиске выйдет множество других, с такими же названиями и похожими юзернеймами — просто игнорируйте их, они вам не нужны.

Кликните на бота, чтобы открыть чат с ним (1), и нажмите Start (2).

  • команду /newbot (1);
  • название вашего бота, оно может быть любым (2);
  • уникальный юзернейм, по которому его можно легко найти (3).

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

Не сообщайте токен авторизации бота посторонним и не выкладывайте в публичный доступ. Если токен был рассекречен, вы можете отозвать его (команда /revoke) и сгенерировать новый (команда /token).

Для интеграции с Appmaster.io вам осталось только добавить бота в телеграм-канал. Но вы можете настроить его, чтобы добавить дополнительные функции. Больше информации о том, что такое бот, что он умеет делать и как его настроить — на официальном сайте Telegram. Там есть как общая информация, так и инструкции для разработчиков.

Чтобы создать канал, зайдите в меню вашей учетной записи и нажмите «New Channel».

Введите название канала, если хотите — добавьте описание (1). Нажмите Create (2).

Выберите, будет ваш канал публичным — public или закрытым — private (1). Введите уникальную ссылку, по которой его можно будет найти (2). Сохраните изменения (3).

Сразу после создания канала Telegram предложит добавить в него новых пользователей. Начните вводить юзернейм вашего бота — он отобразится в поиске (1). Кликните по нему (2).

Ваш бот отобразится в списке пользователей на добавление (1). Нажмите Add, чтобы закончить настройку (2).

Вы можете добавить бота и после создания канала. Чтобы добавить бота в уже созданный канал, откройте настройки (1) и нажмите Add Users (2). Дальше — те же действия, что и в предыдущем пункте.

Адрес канала есть в общей информации о нем — Channel Info. Чтобы открыть окно с информацией, зайдите в настройки или просто кликните по названию канала.

Отлично, теперь вы готовы подключать бота в ваше приложение. Переходите в Appmaster Studio.

Хоть и с большим запозданием, публикую шпаргалку по telegram bot api, может, будет полезна.

Прикладываю официальную документацию, и готовый набор методов для работы с telegram. Обработку тестировал на 8.3.15.1747.

В тексте я буду давать ссылки на вторую документацию т.к. для ее просмотра не нужны премудрости для обхода блокировок.


В клиенте telegram ищем бота BotFather

Далее отправляем ему команды

/start
/newbot
Представление имени моего бота
unikalnoe_imya_bot
После этого бот выдаст нам данные для подключения, а именно токен вида 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11


Скринами




Соединение

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

Код создания соединения :

Прокси

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

Я специально буду повторять блоки кода, дабы Вы копировали сразу рабочий вариант, конечно это все нужно обернуть в функции и процедуры

Метод getMe вернет в теле ответа JSON структуру

"ok":true - Означает, что авторизация прошла успешно и Ваш токен валидный.

Short polling - это классическая схема, когда отправляя запрос мы сразу получаем результат его выполнения.

т.е. вы заводите РС с обработанными update_id и каждый раз анализируете - обработан полученный id или нет. Можно завести константу с последним обработанным update_id и сравнивать ее на < или > с полученным

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

Для переключения режима обмена на вебхуки существует метод InlineKeyboardMarkup

Загрузка полученных файлов

Для этого существует GET-метод

Ответ сервиса getFile

При этом запросе сервер ответит, что все Ок


Показ привью отправленной ссылки можно отключить с помощью параметра disable_web_page_preview

Для этого нужно к запросу добавить строку &disable_web_page_preview=true

Кнопки (клавиатуры)

У метода sendMessage есть еще один очень интересный параметр - reply_markup, который отвечает за быстрые ответы.

Кнопка - это объект InlineKeyboardButton, у которого только одно обязательное поле - text

Есть еще ряд полей, основное из которых - callback_data. Это данные, которые будут отправлены после нажатия кнопки пользователем. Сюда можно записывать идентификаторы из 1С (документа или справочника), числа и т.д. для последующей обработки.

Второй полезный параметр - url, в котором указывается ссылка, которая будет открыта при нажатии на кнопку

Пример JSON-описания клавиатуры


KeyboardButton с основным полем text, данный объект можно не использовать и сразу формировать массив строк.

Еще один важный параметр клавиатуры, но не обязательным, является resize_keyboard, который отвечает за "авто высоту" кнопок.

По умолчанию данный параметр установлен в false и клавиатура растягивается на высоту основной клавиатуры, что выглядит громоздко (см. скрин в примере).

Еще один опциональный параметр - one_time_keyboard, который при установке в true скрывает клавиатуру после нажатия кнопки.


ReplyKeyboardHide - Своего рода команда управления видимостью для клавиатуры

Отправка контактов

Метод похож на sendMessage за исключением нескольких обязательных полей:

phone_number - строковое представление телефонного номера

first_name - Имя контакта


Отправка документов (файлов)

За отправку файлов отвечает POST-метод

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

Для решения этой проблемы у 1С есть метод ОбъединитьФайлы, который объединяет переданный в него массив файлов в один.

Разделим шаблон на части - певая это текст до %СодержимоеФайла%, а вторая это текст после %СодержимоеФайла%. Запишем эти 2 текста в файлы и используем ОбъединитьФайлы подсунув между текстовиками отправляемый файл.


Telegram API vs Telegram Bot API

Рассказываю по порядку.

Телеграм использует собственный протокол шифрования MTProto. MTProto API (он же Telegram API) — это API, через который ваше приложение Телеграм связывается с сервером. Telegram API полностью открыт, так что любой разработчик может написать свой клиент мессенджера.

Для написания ботов был создан Telegram Bot API — надстройка над Telegram API. Перевод с официального сайта:

Почему-то мало кто знает о том, что Телеграм боты могут работать напрямую через Telegram API. Более того, таким образом можно даже обойти некоторые ограничения, которые даёт Bot API.

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

На чём пишут Телеграм-ботоы

Бот должен уметь отправлять запросы Телеграм-серверу и получать от него апдейты (updates, обновления).

Как получать апдейты в Bot API

Получать апдейты можно одним из двух способов:

Поллинг — просто регулярно отправлять запрос к серверу Телеграма для получения обновлений,

Вебхук — сделать так, чтобы Телеграм сам отправлял запросы по нужному URL.

Если вы попробуете загуглить, как написать Телеграм-бота на Python, вам предложат воспользоваться библиотеками python-telegram-bot и telebot. Но не стоит.

Ну, если вы только хотите познакомиться с разработкой ботов и написать своего hello-world-бота, то можете, конечно использовать и их. Но эти библиотеки могут далеко не всё. Среди разработчиков ботов лучшей библиотекой для ботов на Python считается aiogram. Она асинхронная, использует декораторы и содержит удобные инструменты для разработки. Ещё был хороший Rocketgram, но он давно не обновлялся.

Также ботов часто пишут на JavaScript, для этого обычно используется Telegraf. Библиотеки есть и для многих других языков, но используют их реже.

Пример кода бота

Если вы хотите получить какое-то представление о том, как вообще выглядит код бота, вот вам пример использования на aiogram с его странички на GitHub:

Этот бот будет отвечать на команды /start и и /restart.

Создание бота

Единственная информация о Телеграм-ботах, которой в интернете полным-полно: как создать бота. Это делается через специального бота BotFather. Когда вы создадите бота, BotFather даст вам его токен. Токен выглядит примерно так: 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw . Именно с помощью токена вы сможете управлять ботом.

"<yoastmark

Один пользователь может создать до 20 ботов.

В BotFather удобно управлять ботами своими командой /mybots .

Юзернеймы

При создании бота нужно выбрать юзернейм. После этого поменять его будет очень сложно.

Как поменять юзернейм бота

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

Для этого бот должен (внезапно) быть рабочим, а также поддерживать английский язык.

Принято использовать такой формат обращения в поддержку:

Если вы везунчик 9999 lvl — вам ответят.

Оформление бота

Открыв бота, пользователи могут увидеть его профиль.

Телеграм боты - что необходимо знать программисту

Оформление бота настраивается в BotFather: меню /mybots → Edit Bot . Там можно изменить:

Информация (About) — это текст, который будет виден в профиле бота.

Аватарка. Аватарки ботов, в отличие от аватарок пользователей и чатов, не могут быть анимированными. Только картинки.

Команды — тут имеются ввиду подсказки команд в боте. Подробнее о командах ниже.

Inline Placeholder — об инлайн-режиме см. ниже.

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

Запуск бота пользователем

В Телеграме можно делиться файлами до 2 ГБ, но в Bot API более жесткие лимиты: боты могут скачивать файлы до 20 МБ и отправлять файлы до 50 МБ.

Работа с файлами в Bot API

Если бот уже загрузил файл на сервер Телеграма, то он может использовать file_id, чтобы отправлять этот файл.

Загружать файл на сервер можно в том числе и по URL файла.

Куда может писать бот

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

Боты не могут писать другим ботам.

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

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

Телеграм боты - что необходимо знать программисту

Как боты добавляют кнопки

Подробнее о кнопках тоже

Супергруппы

На самом деле многие группы в Телеграме являются супергруппами.

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

Со временем, видимо, решили, что это неудобная концепция. Теперь обычная группа становится супергруппой, когда у группы меняются какие-нибудь настройки (подробнее тут). Вот такой костыль.

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

id пользователей и чатов

У каждого пользователя, бота, группы, канала в Телеграме есть собственный id. Различать чаты в коде бота следует именно по id, потому что он никогда не меняется.

В токене бота первая часть — это его id. Например, токен 110201874:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw принадлежит боту с id 110201874 .

В Bot API перед id супергрупп и каналов пишется -100. Так, id 1356415630 превращается в -1001356415630 . Осторожно: вы не сможете сохранить это значение в 32-битный тип числа.

Команды — о них в следующем пункте.

Телеграм боты - что необходимо знать программисту

Я включил Privacy mode, а он не работает

Нужно удалить бота из группы и добавить заново.

Это могло нарушить работу антиспам- и других ботов.

Сейчас баг уже исправлен.

Команды

Команды подсвечиваются как ссылки: нажатие отправляет команду в чат.

Телеграм боты - что необходимо знать программисту

Телеграм боты - что необходимо знать программисту

Разметка в Telegram API (Телеграм боты)

Способы выделения текста:

Жирный текст

Моноширинный текст ("в строке" и "блоком")

Кнопки

Инлайн-кнопки

URL button — кнопка с ссылкой.

Switch to inline button. Кнопка для переключения в инлайн-режим (об инлайн-режиме см. ниже). Кнопка может открывать инлайн в том же чате или открывать меню для выбора чата. Можно указать в кнопке запрос, который появится рядом с никнеймом бота при нажатии на кнопку.

Дополнительные виды кнопок

Login URL button — специальная кнопка для авторизации пользователей на сайте. Использовалась, например, в официальном боте @discussbot (до добавления нативных комментариев в Телеграм).

Клавиатурные кнопки

Есть другой тип кнопок: keyboard buttons. Они отображаются вместо клавиатуры как подсказки. При нажатии на такую кнопку пользователь просто отправит этот текст.

При этом в личных чатах с помощью кнопки можно:

Запросить номер телефона пользователя,

Запросить геолокацию пользователя,

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

Телеграм боты - что необходимо знать программисту

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

Ещё о кнопках

Показать клавиатурные кнопки,

Убрать все клавиатурные кнопки,

Таким образом, нельзя показать оба типа кнопок одновременно.

Взаимодействие с ботом

Ссылки на Телеграм боты.

Юзернеймы ботов работают так же, как и любые другие юзернеймы в Телеграме: бота @examplebot можно открыть по ссылке t.me/examplebot.

Также существует прямая ссылка: tg://resolve?domain=examplebot

Подробнее о ссылках tg://

Такие ссылки могут не только заменять ссылки t.me, но и задавать свои действия. Например, tg://settings открывает настройки.

Список известных таких ссылок есть канале @DeepLink.

Ссылка на добавление в группу

По ссылке t.me/examplebot?startgroup=true у пользователя откроется меню: выбор группы для добавления бота.

Прямая ссылка: tg://resolve?domain=examplebot&startgroup=true

Диплинки

По ссылке t.me/examplebot?start=<ваш текст> пользователь может запустить бота с каким-то стартовым параметром ( <ваш текст> ).

Как это выглядит:

При переходе по ссылке бот открывается как обычно.

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

Прямая ссылка: tg://resolve?domain=examplebot&start=<ваш текст>

Инлайн-режим. Телеграм боты.

Инлайн-режим (inline mode) — это специальный режим работы бота, с помощью которого пользователь может использовать бота во всех чатах.

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

Результаты инлайн-режима

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

Сеткой. Удобно для выдачи картинок.

  • Вертикальным списком. Удобно для выдачи текста.

Можно совмещать два типа, но корректно отображается это только на Telegram Desktop.

Телеграм боты - что необходимо знать программисту

Приватность и геопозиция в инлайне

Inline feedback

Inline feedback — это апдейты о выбранных инлайн-результатах. Включаются через BotFather.

Телеграм боты - что необходимо знать программисту

Создание наборов стикеров для телеграм ботов

Боты (и только боты!) могут создавать наборы стикеров. При этом каждый набор стикеров должен принадлежать какому-то пользователю. Посмотреть свои наборы стикеров пользователь может с помощью бота @Stickers.

Телеграм боты. Платежи

Телеграм предоставляет ботам возможность принимать платежи от пользователей. Это делается через провайдеров ЮMoney, Сбербанк, Stripe и ещё 7.

Эта возможность используются редко, потому что для использования провайдеров нужно юридическое лицо.

Платежи, к тому же, не работают на iOS из-за ограничений Apple.

HTML-игры в ботах

Telegram Login Widget

Вы можете добавить на свой сайт авторизацию через Телеграм. Процесс авторизации будет проходить так:

Пользователь должен будет ввести свой номер телефона.

Бот Telegram попросит подтвердить вход.

Телеграм боты - что необходимо знать программисту

Telegram Login Widget не связан с Login URL button (см. раздел про кнопки выше), а является его альтернативой.

Разработка Телеграм ботов

Какие апдейты можно получать

Получение апдейтов: Bot API vs Telegram API

Если вы получили апдейт в Bot API, то второй раз вы его уже не получите.

В Telegram API это не так: пользователь может пользоваться мессенджером через несколько клиентов, каждый из которых должен получать апдейты.

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

Ограничения Bot API не позволяют сделать то же самое.

Лимиты

Конечно, на запросы к серверу существуют лимиты. В Bots FAQ на сайте Telegram названы следующие:

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

Другие известные ограничения в Telegram собраны на limits.tginfo.me — см. раздел про ботов.

Рассылка по пользователям

30 пользователям в секунду.

Смена владельца бота

Осенью 2020 года появилась возможность передавать ботов другому человеку. Это можно сделать в настройках бота в BotFather. Для этого на вашем аккаунте должна быть включена двухфакторная авторизация — не менее, чем за 7 дней до передачи. Передать бота можно только пользователю, который что-либо ему писал.

Локальный сервер Bot API

Также осенью 2020 года исходники Bot API выложили на GitHub. Теперь вы можете поднять собственный сервер Bot API. На GitHub перечислены следующие преимущества:

Скачивание файлов с сервера без ограничения (ограничение на отправку файлов пользователями в Телеграме — 2 ГБ),

Загрузка файлов на сервер до 2000 МБ,

Загрузка файлов на сервер с помощью локального пути и URI файла,

Использование любого локального IP-адреса для вебхука,

Использование любого порта для вебхука,

Возможность увеличить максимальное число соединений до 100000,

Получение локального пути файла вместо загрузки файла с сервера.

Юзерботы

В начале статьи я рассказывал о том, что такое Telegram API и Telegram Bot API.

Юзерботов следует использовать аккуратно: за большую подозрительную активность аккаунт могут ограничить или забанить.

Заключение. Телеграм боты

Я постарался собрать в одном месте и структурировать информацию о всех возможностях Телеграм-ботов. Большое спасибо vanutp, NToneE и Grinrill за помощь с фактами. Если мы что-то забыли — пишите, исправлю.

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

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

Читайте также: