Перейти к основному содержимому

Авторизация в 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 → Share → Publish to web). Откроется окно, в котором нужно просто нажать на кнопку Опубликовать (Publish).

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

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

$login = $rawRequest.message.from.username

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

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

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

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

https://tools.aimylogic.com/api/googlesheet2json?sheet=<название_листа>&id=<id_таблицы>

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

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

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

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

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