Как ограничить доступ к боту telegram
Перейти к содержимому

Как ограничить доступ к боту telegram

  • автор:

 

Запретить добавление бота Telegram в любую группу или канал (разрешить добавление его в группы / каналы из белого списка)

Насколько я читал документы Telegram Bot API, Telegram никоим образом не ограничивает вызовы вашего обратного вызова веб-перехватчика.

Я создаю Telegram Bot, который будет доступен только для групп и каналов, которые я внесу в белый список.

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

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

Как указать группы и каналы, в которые можно добавить бота Telegram.

Авторизация в Telegram

Иногда нужно ограничить доступ к боту для определенного круга лиц.

Есть два способа реализовать это:

  • Создать логин и пароль, которые будут вводить пользователи
  • Ограничить доступ для определенного списка пользователей. Именно эту опцию мы рассмотрим в статье

Чтобы собрать список пользователей, для которых доступен бот, нужно собрать их username.

Username пользователя Telegram – это уникальный идентификатор аккаунта. Посмотреть его можно в настройках Telegram (Настройки –> Изменить профиль –> Имя пользователя). Либо вы можете попросить пользователей написать чат-боту. Так вы автоматически соберете их юзернеймы, отправив их себе в Telegram сообщением либо в Google Таблицу с помощью сервиса IFTTT.

Обратите внимание: Username – это не имя пользователя

Внимание! Если у вас в сценарии есть глобальный блок Интенты, то бот будет предоставлять пользователю информацию согласно реакциям из этого глобального блока. Решение – каждый раз после глобального блока проверять юзернейм пользователя.

Ограничить доступ средствами сценария

Вы можете настроить бот так, чтобы доступ к нему имели только определенные пользователи. Например те, username которых прописан в сценарии. Для этого в блоке Условия пропишите: $rawRequest.message.from.username === «username»

вместо username укажите юзернейм нужного пользователя (идентификатор аккаунта Telegram)

Если их username входит в список, то бот будет приветствовать их, а если нет, то сообщит, что доступ запрещен:

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

Либо можете отправлять данные в Google Таблицу с помощью сервиса IFTTT.

Используем Google Таблицы

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

Создайте Google Таблицу со списком юзернеймов

Первым делом создайте Google Таблицу со списком юзернеймов пользователей, которые будут иметь доступ к боту:

В таблице нужно перечислять именно юзернеймы пользователей (идентификаторы их аккаунтов), а не имена или телефоны

Опубликуйте таблицу

Чтобы опубликовать Google Таблицу, откройте меню Файл —> Опубликовать в веб (File —> Publish to the web). Откроется окно, в котором нужно просто нажать на кнопку Опубликовать (Publish).

Создайте новый блок Условия

Создайте блок Условия со следующим содержимым:

 

Свяжите блок Условия с HTTP-запросом

Свяжите блок Условия с HTTP-запросом:

Содержимое HTTP-запроса

Укажите URL вида:

  • Параметр <название_листа> указан внизу таблицы на вкладке листа таблицы.
  • Параметр <id_таблицы> вы можете получить из URL таблицы:

На вкладке RESPONSE добавьте переменную $users со значением _.findWhere($httpResponse, ) .

telegram authorize 1

Создайте новую связь с блоком Условия

Создайте связь с блоком Условия, в котором написано просто: $users .

Если в переменной $users что-то будет, то бот будет приветствовать пользователя, если нет – «Доступ запрещен». Вот как будет выглядеть цепочка экранов:

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

Как ограничить доступ к боту Telegram

Когда я отправляю сообщение своему Telegram-боту, он отвечает без проблем.

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

Как я могу это сделать?

4 ответа

Поскольку этот вопрос связан с python-telegram-bot, информация ниже связана с ним:

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

Чтобы ограничить доступ конкретному пользователю, вам нужно добавить Filters.user(username=»@telegramusername») при инициализации обработчика, например:

dispatcher.add_handler(CommandHandler(«start», text_callback, Filters.user(username=»@username»)))

Этот обработчик примет команду /start только от пользователя с именем пользователя @username .

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

Фильтровать сообщения по полю update.message.from.id

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

Чтобы просмотреть последние обновления, вы вызываете метод getUpdates. Это делается путем отправки HTTP-запроса GET на URL-адрес https://api.telegram.org/bot $TOKEN/getUpdates Где $TOKEN — это токен, предоставленный BotFather. Что-то типа:

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

У меня работает фильтрация по update.message.chat_id . Чтобы найти свой идентификатор чата, отправьте сообщение своему боту и перейдите к

Где $TOKEN — токен бота, предоставленный BotFather, как указано в ответе fdicarlo, где вы можете найти идентификатор чата в структуре json.

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *