Остались вопросы? Комьюнити Yandex DataLens поможет!
Здесь вы можете найти ответы на популярные вопросы, спросить совета у других пользователей и наших экспертов, а также будете в курсе новостей сервиса.
С помощью сервиса Yandex Cloud Functions вы можете собрать статистику Telegram-чатов и визуализировать её в Yandex DataLens. Рассказываем, как за несколько шагов реализовать эту интеграцию.
В предыдущих статьях мы описали варианты загрузки имеющихся данных PostgreSQL и ClickHouse для обработки и визуализации в Yandex DataLens. А сейчас давайте рассмотрим вариант с извлечением и поставкой данных на serverless‑технологиях.
Для упрощения задачи воспользуемся скриптами
Для задачи потребуется создать кластер ClickHouse с публичным доступом. Настройки описаны в данной статье. Также нужно будет создать секрет с логином и паролем (ключи с именами user и pass) для базы данных с помощью Yandex Lockbox. Инструкция, как это сделать, есть в документации.
Для подготовки окружения сначала нужно создать целевые таблицы. Скрипт для них представлен в этом файле
Затем нужно создать своё приложение на основе Telegram
Зарегистрируйтесь в приложении Telegram и перейдите по ссылке https://my.telegram.org
В следующем окне выберите API development toolsERROR
(например, если введенное имя не соответствует требованиям системы). При успехе из полученной конфигурации вам понадобятся значения полей App api_id и App api_hash.
В свою очередь из вашего облака понадобятся:
Ваш Oauth‑токен. Подробнее о формате здесь.
Идентификатор вашего каталога вида b1gb…aa6s4.
С этими данными возвращаемся в консоль и копируем проект на свое устройство:
git clone https://github.com/handgunman/yc-sltg-stats
Переходим в директорию проекта и устанавливаем зависимости:
pip install -r ./src/requirements.txt
Сохраняем токен, идентификатор и хеш приложения Telegram в переменные окружения YC_TOKEN, TG_API_ID, TG_API_HASH и запускаем скрипт подключения, подставляя значения параметров вместо <…>:
python3 secrets/create_secrets.py --yc-folder-id <…> --ch-user <…> --ch-pass <…>
В некоторых случаях вместо Python в командах следует использовать Python3.
При выполнении нужно ввести дополнительные данные — номер телефона в международном формате и код подтверждения, который вы получите в Telegram. Взамен будут выданы идентификаторы созданных секретов, которые станут доступны среди прочих секретов в Lockbox, и идентификатор созданной сессии. Нужно создать переменные окружения TF_VAR_TG_SECRET_ID
, TF_VAR_CH_CREDS_SECRET_ID
, TF_VAR_CH_SECRET_ID
, поместив в них соответствующие идентификаторы секретов.
Чтобы получить идентификаторы чатов, выполняем скрипт, используя в том числе полученный идентификатор секрета:
python3 src/list_groups.py --tg-secret-id <идентификатор секрета>
Из полученного в результате списка выбираем нужные ID чатов. Далее разделяем их запятыми и сохраняем в переменной окружения TF_VAR_DIALOG_IDS
.
Переходим в директорию pull
задаем дополнительные переменные окружения TF_VAR_CH_HOST
, TF_VAR_CH_DB_NAME
и инициализируем проект terraform-командой terraform init
.
Применяем созданный план.
terraform apply -var folder_id=<идентификатор каталога>
Если всё выполнено правильно, то создастся новая версия функции. Можно выбрать её и перейти в редактор, чтобы посмотреть код.
Обратите внимание: на скриншоте есть ограничение по дате, начиная с которой будут выбираться исторические данные.
Пролистав вниз, можно увидеть переменные окружения, в том числе список идентификаторов каналов и чатов. Его в дальнейшем можно будет редактировать.
Готово! Теперь в вашей базе будут сохраняться данные из чатов. Вы можете изменять созданную функцию с помощью кнопки Создать версию (она находится в правом верхнем углу).
Для удобства визуализации в DataLens можно создать следующее представление:
CREATE OR REPLACE VIEW all_messages AS
SELECT
g.name, --название группы
p.username, --имя пользователя
m.dt, --дата и время
m.group_id, --идентификатор группы
m.message_id, --идентификатор сообщения
m.user_id, --идентификатор пользователя
m.message_text, --сообщение
m.is_forwarded, --пересланное
m.reply_to, --идентификатор сообщения на которое ответ
m.topic_id, --идентификатор темы
t.title, --заголовок темы
p.is_bot --это бот
FROM messages m
JOIN groups g ON g.group_id = m.group_id
JOIN participants p ON p.user_id = m.user_id
JOIN topics t ON t.group_id = m.group_id AND t.topic_id = m.topic_id
Можно приступать к визуализации статистики в DataLens аналогично тому, как это описано в статье. Вы можете сделать это сами или воспользоваться шаблоном дашборда
После разворачивания дашборда нужно будет в Подключении заменить реквизиты базы данных на ваши.
Таким образом, за несколько шагов мы собрали статистику Telegram‑чатов с помощью Yandex Cloud Functions и визуализировали результаты в Yandex DataLens. Вы увидели, что это не так сложно, как кажется. Теперь у вас есть готовый дашборд, которым вы можете поделиться с командой или клиентом.
Остались вопросы? Комьюнити Yandex DataLens поможет!
Здесь вы можете найти ответы на популярные вопросы, спросить совета у других пользователей и наших экспертов, а также будете в курсе новостей сервиса.