Инструкция: собираем и визуализируем статистику Telegram‑чатов с помощью инструментов Yandex Cloud
Рассказываем, как за несколько шагов собрать статистику по Telegram с помощью сервиса Yandex Cloud Functions и визуализировать её в Yandex DataLens.
Чтобы упростить задачу, воспользуемся скриптами, реализующими базовые функции в Yandex Cloud Functions. Для этого понадобится выполнить несколько команд в консоли.
Подготовка окружения
Нужно создать кластер ClickHouse с публичным доступом. Настройки описаны в данной статье. Также необходимо создать секрет с логином и паролем (ключи с именами user и pass) для базы данных с помощью Yandex Lockbox. Инструкция, как это сделать, есть в документации.
Для подготовки окружения сначала нужно сделать целевые таблицы. Скрипт для них представлен в этом файле. И установите на своё устройство Python 3.11 (или старше) и свежую версию Terraform, например по этой инструкции.
Если вы устанавливаете Terraform по инструкции выше — желательно выполнить шаги 1 и 2 из инструкции.
Затем нужно создать своё приложение на основе Telegram. Для этого:
- Зарегистрируйтесь в приложении Telegram и перейдите по ссылке. Введите свой номер телефона и код, полученный после этого в мессенджере.
- В следующем окне выберите API development tools и задайте параметры вашего приложения. Интерфейс не очень дружелюбен: он может без пояснений выдать сообщение ERROR (например, если введённое имя не соответствует требованиям системы). При успехе из полученной конфигурации вам понадобятся значения полей App api_id и App api_hash.
В свою очередь, из вашего облака понадобятся:
- Ваш Oauth‑токен для параметраyc‑oauth. Подробнее о формате здесь.
- Идентификатор вашего каталога вида b1gb…aa6s4 для параметра folder‑id.
FQDN хоста ClickHouse с публичным доступом вида XXX–XX.XX.yandexcloud.net для параметра ch‑host.
- Имя вашей БД для параметра ch‑db‑name.
С этими данными возвращаемся в консоль и копируем проект на своё устройство:
Переходим в директорию проекта и устанавливаем зависимости:
Запускаем скрипт подключения, подставляя значения параметров вместо <…>:
В некоторых случаях вместо Python в командах следует использовать Python3.
При выполнении нужно ввести дополнительные данные: номер телефона в международном формате и код подтверждения, который вы получите в Telegram. Взамен будет выдан secret id. Он будет доступен среди прочих секретов в Lockbox. Его идентификатор понадобится для параметра tg‑secret‑id на финальном шаге.
Чтобы получить идентификаторы чатов, выполняем скрипт, используя в том числе полученный идентификатор секрета:
Из полученного в результате списка выбираем нужные ID чатов. Далее вводим их через запятую для параметра dialog-ids.
После этого инициируем проект terraform командой terraform init.
Завершаем операцию самой масштабной командой построения плана. Подставляем полученные ранее значения вместо <…>. Для параметра ch-secret-id используем имя секрета, созданного в самом начале, с логином и паролем:
Применяем созданный план:
Если всё выполнено правильно, то появится новая версия функции. Можно выбрать её и перейти в редактор, чтобы посмотреть код.
Обратите внимание: на скриншоте есть ограничение по дате, начиная с которой будут выбираться исторические данные.
Пролистав вниз, можно увидеть переменные окружения, в том числе список идентификаторов каналов и чатов. Его в дальнейшем можно будет редактировать.
Готово! Теперь в вашей базе будут сохраняться данные из чатов. Вы можете изменять созданную функцию с помощью кнопки Создать версию — она находится в правом верхнем углу.
Для удобства визуализации в DataLens можно создать следующее представление:
Можно приступать к визуализации статистики в DataLens аналогично тому, как это описано в статье. Вы можете сделать это сами или воспользоваться шаблоном дашборда. Его можно развернуть из маркетплейса DataLens.
После разворачивания дашборда нужно будет в Подключении заменить реквизиты базы данных на ваши.
Таким образом, за несколько шагов мы собрали статистику Telegram‑чатов с помощью Yandex Cloud Functions и визуализировали результаты в Yandex DataLens. Теперь у вас есть готовый дашборд, которым вы можете поделиться с командой или клиентом.
Подписывайтесь на блог Yandex Cloud, чтобы узнавать еще больше новостей и историй об IT и бизнесе.
Другие истории наших партнеров и клиентов, которые активно читают наши подписчики:
Круто!
Что-то подобное, но для каналов можно собирать?
И у меня давний вопрос есть по навыку для Алисы. Куда только не обращался, никто не помог.
Есть телеграм-канал, хочу создать навык, который при активации будет зачитывать 1 или 2 публикации из канала за день (всего 2 поста в день, в зависимости от запроса читается один или оба, хотя можно было бы переспрашивать, но это детали). Как это можно сделать? Есть ли годный мануал для начинающего навыкостроителя? (-:
Здравствуйте, Вадим! Да, для каналов можно собрать подобное.
Для вашего сервиса/сайта вы можете разработать навык с помощью платформы https://dialogs.yandex.ru
Подробнее о Яндекс Диалогах и создании новых навыков для Алисы можно прочитать на нашем сайте: https://yandex.ru/dev/dialogs/alice/
спасибо за подробное объяснение ,так намного понятнее как все правильно делать
Выглядит роскошно, жаль, что нельзя без специальных знаний быстро интегрировать