К содержимому
Интеграции

Подключение Telegram

Обновлено

Бот и канал

Создайте отдельного бота для публичного канала через @BotFather командой /newbot. Полученный токен внесите в «Токен Telegram-бота», а username канала — в «Username канала».

Добавьте бота администратором канала. README продукта рекомендует дать право публикации сообщений, но сам плагин не отправляет посты в канал: в рабочем потоке он читает обновления и получает адреса файлов.

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

Как приходят публикации

При вызове хелпера без действующего кэша плагин обращается к Telegram методом getUpdates с allowed_updates = ['channel_post'] и limit = 100. Пагинации в цикле нет: один вызов получает одну порцию обновлений.

При получении публикаций используется offset на основе сохранённого update_id, однако в этой версии идентификатор обновления не сохраняется вместе с постом. Поэтому рассчитывать на корректное продвижение offset нельзя. Уже сохранённые сообщения повторно записываются по паре username и ID сообщения, а не добавляются как отдельные записи.

Получение всей истории канала и обработка изменений опубликованных сообщений не реализованы. Не обещается получение публикаций в момент отправки: запрос инициирует обращение к хелперу, с учётом кэша. При непосещаемой странице отдельной фоновой синхронизации нет.

Какие данные передаются и сохраняются

Направление Данные
Сервер магазина → Telegram API Токен бота в URL запроса; параметры allowed_updates, limit и при наличии offset для getUpdates. Для getFile — file_id.
Telegram → сервер магазина Публикации канала: текст или подпись, ID сообщения и чата, дата, данные вложений и другие поля ответа Telegram.
Хранение в магазине Настройки витрин в shop_ewshoptgposts_settings; публикации и JSON исходного сообщения в shop_ewshoptgposts_posts.
Витрина → браузер посетителя HTML карточек, ссылки на посты и прямые URL фотографий Telegram.
Браузер посетителя → Telegram Запрос изображения по прямому URL, если фотография выводится в карточке.

Плагин не копирует фотографии в локальное хранилище сайта. Он получает адрес через getFile и подставляет его в разметку. Формат адреса https://api.telegram.org/file/bot<TOKEN>/<file_path> содержит токен бота, поэтому при таком выводе токен доступен в исходном HTML страницы. Это свойство текущей реализации нужно учитывать до размещения блока на публичной витрине.

Обновление адресов фотографий

При отключённом кэше плагин запрашивает URL фотографий заново. При выдаче из кэша старше 3000 секунд он пытается обновить адреса фотографий. Это механизм обновления ссылок, а не фоновая проверка доступности каждого изображения.

Если фотографии перестали открываться, задайте «Кэш, секунд» = 0, сохраните настройки и откройте страницу с блоком. Если проблема сохраняется, разработчику следует проверить ответы Telegram в журнале shop/plugins.log.

PHP-методы для разработчика

В основном классе плагина есть публичные методы syncPosts($options) и cleanOldPosts($days = 30). Готовой кнопки синхронизации, CLI-команды или cron-обёртки для них нет. Это вызовы из собственного PHP-кода в загруженном окружении Webasyst.

$plugin = wa('shop')->getPlugin('ewshoptgposts');
$result = $plugin->syncPosts(array('storefront' => 'general'));

syncPosts() по умолчанию берёт общие настройки. Из опций он использует storefront; token и username берутся из настроек. В отличие от getPosts(), метод не добавляет @ к username: для согласованной записи с обычным выводом сохраните username с @.

Результат содержит success и message; при успехе есть count. Значение count — число выбранных из базы постов, максимум 100, а не число только что импортированных сообщений. Метод не сбрасывает кэш вывода. Ошибка Telegram, обработанная внутри API-клиента без исключения, не обязательно приводит к success = false.

Метод cleanOldPosts($days) удаляет из базы публикации старше указанного числа дней по дате публикации, сразу для всех каналов. По умолчанию — 30 дней. Автоматического вызова и очистки кэша в нём нет. Удаление плагина также удаляет обе его таблицы вместе с настройками и постами.

Ошибки и журнал

Плагин пишет ошибки запросов, сохранения и обновления URL в shop/plugins.log через waLog. В интерфейсе настроек нет отдельного результата проверки Telegram. Если getUpdates вернул ошибку, API-клиент всё равно может вернуть ранее сохранённые публикации из базы.