Ленты

Ленты позволяют автоматически публиковать новый контент из внешних источников в Discord.

Поддерживаются:

  • RSS и Atom;
  • YouTube;
  • Twitch.

Настройка выполняется на странице «Ленты».

Каждая лента состоит из двух частей:

  • источник — откуда бот получает новые записи;
  • получатель — куда и в каком виде они публикуются.

Один источник может иметь несколько получателей.

Например, один YouTube-канал можно одновременно публиковать:

  • в #новости — все новые видео;
  • в #релизы — только видео, подходящие под заданные правила.

При этом сам YouTube-канал бот проверяет только один раз.

У каждого получателя могут быть собственные:

  • Discord-канал;
  • оформление сообщения;
  • роль для упоминания;
  • правила отбора;
  • расписание публикации.

Поддерживаемые источники

ТипЧто нужно указатьКак бот получает новые записи
RSS / AtomПрямую ссылку на источник, например https://example.com/feed.xmlПериодически проверяет источник, обычно примерно раз в 5 минут.
YouTubeСсылку на канал, например youtube.com/@handle или youtube.com/channel/UC...Получает push-уведомления от YouTube и дополнительно выполняет обычный опрос.
TwitchСсылку twitch.tv/имя или логин каналаПериодически проверяет, начался ли эфир.

Для YouTube не нужно самостоятельно искать ссылку вида feeds/videos.xml. Бот преобразует ссылку на канал в нужный источник автоматически.

Для Twitch на стороне владельца бота должны быть настроены ключи Twitch Helix. Без них Twitch-ленты не смогут получать данные.

Первая проверка

После создания источника бот не публикует уже существующие записи.

Первая проверка используется только для запоминания текущего состояния источника.

Это предотвращает ситуацию, когда после подключения старого RSS-блога бот сразу публикует весь его архив.

Новые публикации начнут появляться только после того, как источник выпустит следующую запись.

Как добавить ленту

  1. Откройте страницу «Ленты».
  2. Нажмите Новая лента.
  3. Выберите тип источника.
  4. Вставьте адрес.
  5. Выберите Discord-канал для публикации.
  6. При необходимости выберите роль для упоминания.
  7. Настройте оформление, правила и расписание.
  8. Сохраните ленту.

После первой проверки в панели появится время последнего обращения к источнику.

Название ленты

Название используется для удобства администратора.

Оно отображается:

  • в панели;
  • в журнале;
  • в аналитике.

Само по себе название не добавляется в Discord-сообщение.

Если оно должно отображаться в публикации, используйте переменную:

{{route.name}}

Она всегда содержит название, указанное у этого получателя.

Переменная {{source.name}} содержит название самого источника. Оно задаётся при создании ленты и в дальнейшем не меняется вместе с названием получателя. У разных получателей одного источника {{source.name}} будет одинаковой, а {{route.name}} — своей.

Несколько получателей

Кнопка Канал у источника добавляет ещё одного получателя. Откроется окно Новый канал доставки.

Например:

  • #новости получает все записи;
  • #релизы получает только записи со словом «релиз»;
  • #важное публикует записи только в рабочее время.

Источник при этом остаётся один.

Дублирование получателя

Кнопка Дублировать копирует настройки получателя в другой Discord-канал.

Копируются настройки публикации, но не история доставок.

Новый получатель начинает вести собственную историю независимо от исходного.

Правила отбора

Правила позволяют решить, должна ли конкретная запись публиковаться.

Если правила не настроены, публикуются все новые записи.

Условие состоит из:

  1. поля;
  2. операции сравнения;
  3. значения.

Доступные поля

Можно проверять:

  • заголовок;
  • описание;
  • автора;
  • ссылку;
  • тип ленты;
  • тип события.

Доступные сравнения

Поддерживаются:

  • содержит;
  • не содержит;
  • равно;
  • не равно;
  • начинается с;
  • заканчивается на;
  • заполнено;
  • не заполнено.

Группы условий

Условия можно объединять через:

  • И;
  • ИЛИ;
  • НЕ.

Группы можно вкладывать друг в друга до восьми уровней.

Под конструктором отображается текстовое описание правила.

Например:

заголовок содержит «релиз» И автор не равен «бот»

Правила работают одинаково для RSS, YouTube и Twitch.

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

Что происходит после изменения правил

Изменения правил могут повлиять на записи, которые ещё ожидают публикации.

Если сделать правила строже, ожидающая запись может быть отсеяна до отправки.

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

Это предотвращает массовую публикацию старого контента после снятия фильтра.

Оформление сообщения

Получатель может отправлять запись:

  • обычным текстом;
  • карточкой Discord.

Для карточки можно настроить:

  • цвет;
  • заголовок;
  • описание;
  • изображение;
  • нижний текст.

Переменные

В шаблонах используются переменные в двойных фигурных скобках.

ПеременнаяЧто подставляется
{{event.title}}Заголовок записи
{{event.url}}Ссылка на запись
{{event.author}}Автор
{{event.description}}Описание
{{event.thumbnail_url}}Изображение или превью
{{event.published_at}}Дата публикации
{{source.name}}Название источника в панели
{{source.url}}Адрес источника
{{route.name}}Название получателя
{{mention.role}}Упоминание выбранной роли

Например:

Новое видео от {{event.author}}: {{event.title}}
{{event.url}}

Если указать неизвестную переменную, панель не позволит сохранить конфигурацию.

Старые переменные с одинарными фигурными скобками также продолжают поддерживаться:

  • {title};
  • {url};
  • {channel};
  • {role}.

Для новых шаблонов рекомендуется использовать новый синтаксис {{...}}.

Шаблоны сообщений

Оформление можно сохранить как отдельный шаблон и использовать сразу у нескольких получателей.

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

Это удобно, если несколько лент должны использовать одинаковый дизайн.

Упоминания ролей

Для получателя можно выбрать роль, которая будет упоминаться при публикации.

Упоминание @everyone через содержимое внешней ленты запрещено.

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

Для автоматического упоминания используется только заранее выбранная роль.

Расписание публикации

По умолчанию новые записи публикуются сразу.

Кнопка с часами у получателя открывает настройки расписания.

Доступны три режима.

Сразу

Запись публикуется сразу после обнаружения и прохождения правил.

Тихие часы

Позволяют указать время, когда публикации отправлять нельзя.

Например:

23:00–08:00

Записи в это время не удаляются.

Они остаются в очереди и отправляются после окончания тихих часов.

Можно также выбрать дни недели.

Например, чтобы публиковать только:

Пн–Пт, 09:00–18:00

нужно разрешить дни с понедельника по пятницу и закрыть период с 18:00 до 09:00.

Дайджест

Несколько записей накапливаются и затем отправляются одним сообщением.

Дайджест можно настроить:

  • через каждые N минут;
  • на определённый час.

Допустимый интервал — от 15 минут до 24 часов.

Один дайджест содержит не больше 20 записей.

Часовой пояс

Для расписания используется часовой пояс по имени, например:

Europe/Moscow

Используется именно региональный часовой пояс, а не постоянное смещение UTC.

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

Панель показывает примерное время публикации записи, если она появилась прямо сейчас.

Ожидание по расписанию

Если запись находится в тихих часах или ожидает дайджест, это не считается ошибкой доставки.

В такой ситуации:

  • попытка отправки не расходуется;
  • код ошибки не создаётся;
  • счётчик повторов не увеличивается.

Проверка без публикации

Кнопка Проверить позволяет протестировать одну запись без отправки сообщения в Discord.

Во время проверки бот прогоняет запись через:

  1. источник;
  2. правила;
  3. шаблон;
  4. получателя.

Панель показывает:

  • пройдёт ли запись правила;
  • где она остановится;
  • как будет выглядеть итоговое сообщение.

Тест:

  • ничего не публикует;
  • не добавляет запись в историю доставок;
  • не изменяет состояние опроса источника.

Для теста можно:

  • использовать последнюю запись из журнала;
  • загрузить актуальную запись из источника.

Для Twitch загрузка непосредственно из панели недоступна, поскольку ключи Helix находятся в процессе бота.

Состояние ленты

В блоке Состояние можно проверить, работает ли источник и его получатели.

Источник и получатель проверяются отдельно.

Например, источник может нормально получать новые записи, но публикация не будет работать из-за удалённого Discord-канала.

Состояния источника

СостояниеЧто означает
Не проверялсяИсточник только создан. Первая проверка запомнит текущие записи, но не опубликует их.
ЧитаетсяИсточник работает нормально.
Давно без новых записейИсточник отвечает, но новых записей не было более трёх интервалов проверки.
Временно недоступенПроизошла сетевая ошибка или сервер вернул временную ошибку 5xx. Бот попробует снова автоматически.
СломанИсточник вернул 403, 404, 410 или завершились пять последовательных неудачных проверок. Требуется вмешательство администратора.
ВыключенПроверка источника отключена вручную.

Состояние получателя

Панель также проверяет проблемы конкретного получателя.

Например:

  • Discord-канал удалён;
  • выбранная роль удалена;
  • отсутствует шаблон;
  • удалён набор правил;
  • записи давно не доставляются;
  • расписание настроено так, что публикация никогда не разрешается.

Для каждой найденной проблемы панель показывает подсказку.

Проверить сейчас

Кнопка Проверить сейчас просит бота выполнить проверку источника раньше запланированного времени.

Сама веб-панель при этом источник не загружает.

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

Специальной кнопки для сброса состояния уже прочитанных записей нет.

Такой сброс мог бы привести к повторной публикации уже отправленного контента.

Журнал доставки

Журнал содержит историю обработки записей.

Его можно фильтровать:

  • по статусу;
  • по источнику;
  • по получателю;
  • по датам.

Доступны статусы:

СтатусЧто означает
ОтправленоСообщение успешно опубликовано.
Отсеяно правиламиЗапись не прошла заданные фильтры.
ЖдётЗапись ожидает расписание, дайджест или повторную попытку.
Не доставленоВсе попытки закончились неудачей либо обнаружена постоянная ошибка.

Просмотр одной доставки

Для каждой доставки можно открыть подробности.

Там показываются:

  • число попыток;
  • ошибки;
  • ссылка на Discord-сообщение, если публикация состоялась;
  • результат обработки по текущим настройкам.

Последний пункт рассчитывается заново.

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

Панель отмечает такое различие.

Повторные попытки

Временные ошибки повторяются автоматически.

К ним относятся:

  • Discord 429;
  • ошибки Discord 5xx;
  • сетевые сбои.

Пауза между попытками постепенно увеличивается:

  • примерно от одной минуты;
  • максимум до одного часа;
  • с небольшим случайным отклонением.

Всего выполняется до шести попыток.

После последней неудачи доставка получает статус Не доставлено.

Постоянные ошибки

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

Например:

  • Discord-канал удалён;
  • у бота нет разрешения отправлять сообщения.

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

Ручные повторы:

  • записываются в аудит;
  • ограничиваются по частоте.

Порядок публикаций

Внутри одного получателя записи публикуются по порядку.

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

Это предотвращает появление публикаций в неправильном порядке.

Черновики и публикация

Раздел Снимок конфигурации позволяет подготовить изменения без немедленного применения.

Сохранить как черновик

Изменения сохраняются отдельно и пока не влияют на работающие ленты.

Опубликовать

Черновик проверяется и целиком становится рабочей конфигурацией.

Перед публикацией панель показывает список изменений.

Потенциально опасные действия, например удаление получателя вместе с его историей доставок, отмечаются отдельно.

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

Рабочая конфигурация при этом останется прежней.

История конфигурации

Каждая опубликованная версия сохраняется.

Старую версию можно:

  • открыть;
  • сравнить с текущей;
  • использовать для отката.

Откат не удаляет более новые версии из истории.

Вместо этого создаётся новая конфигурация на основе выбранного старого снимка.

Перед применением она снова проходит проверку.

Например, старая версия может больше не работать, если используемый в ней Discord-канал был удалён.

Изменения вне черновика

Если настройки были изменены обычными формами, панель обнаружит, что рабочая конфигурация отличается от последнего снимка.

В таком случае создаётся новая версия, отражающая текущее рабочее состояние.

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

Вместо этого будет показана ошибка конфликта.

Экспорт конфигурации

Конфигурацию лент можно выгрузить в файл.

В него входят:

  • источники;
  • получатели;
  • правила;
  • шаблоны;
  • расписания.

В экспорт не входят:

  • полученные события;
  • история доставок;
  • секретные ключи и токены.

Импорт на другой сервер

Импорт выполняется через отдельное окно с пошаговой настройкой.

Discord-каналы и роли необходимо сопоставить вручную.

ID каналов и ролей одного сервера нельзя безопасно использовать на другом сервере.

Пока все необходимые объекты не сопоставлены, импортированная конфигурация остаётся черновиком.

Импорт никогда не публикует настройки автоматически.

После импорта необходимо:

  1. проверить сопоставления;
  2. проверить конфигурацию;
  3. сравнить изменения;
  4. вручную нажать Опубликовать.

Заготовки

Доступны готовые конфигурации, например:

  • Анонсы YouTube;
  • Эфиры Twitch;
  • Новости RSS.

Они проходят тот же процесс, что и обычный импорт.

Незаполненные места обозначаются значениями вроде:

@channel

Такая конфигурация не пройдёт проверку, пока администратор не выберет реальные объекты.

Повторный импорт на тот же сервер

Если ранее экспортированный файл импортируется обратно на тот же сервер, система пытается сопоставить уже существующие объекты.

Это позволяет:

  • не создавать одинаковые получатели повторно;
  • сохранить их историю доставок.

Аналитика

Для лент доступна статистика за:

  • 7 дней;
  • 30 дней;
  • 90 дней.

Границы суток в аналитике рассчитываются по UTC.

Панель показывает:

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

Также доступна разбивка:

  • по источникам;
  • по получателям;
  • по причинам ошибок.

Задержка публикации

Задержка считается от момента появления записи до момента появления сообщения в Discord.

Она не измеряет только длительность запроса к API Discord.

Отфильтрованные записи

Записи со статусом Отсеяно правилами не считаются ошибками или потерянными публикациями.

Они отображаются в аналитике отдельно.

Исторические данные проверок

Статистика проверок источников ведётся только с версии бота, в которой эта функция была добавлена.

Для более старых периодов данные могут отсутствовать.

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

Срок хранения данных

ДанныеСрок хранения
События и доставкиБессрочно
История попыток завершённых доставок30 дней
Диагностическая копия записи14 дней
Обработанная очередь YouTube Push7 дней
Суточная статистика проверок источников400 дней

События и доставки используются в том числе для защиты от повторной публикации.

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

Ограничения

ОграничениеЗначение
Записей одному получателю за один цикл5
Записей в одном дайджесте20
Попыток доставки6
Интервал дайджестаОт 15 минут до 24 часов
Вложенность правил8 уровней
Размер файла импорта256 КБ
Источников в одном файле импорта50
Получателей в одном файле импорта200

Частые вопросы

Добавил ленту, но ничего не публикуется

Первая проверка только запоминает существующие записи.

Бот начнёт публиковать со следующей новой записи источника.

Новые записи есть, но сообщений в Discord нет

Откройте блок Состояние.

Проверьте:

  • существует ли канал;
  • не удалена ли роль;
  • существует ли используемый шаблон;
  • существует ли набор правил;
  • разрешает ли расписание публикацию.

Если состояние не показывает проблему, используйте кнопку Проверить.

Она покажет, на каком этапе запись перестаёт проходить.

Источник имеет статус «Сломан»

Источник вернул:

  • 403;
  • 404;
  • 410;

либо произошло пять последовательных ошибок.

Проверьте адрес источника.

Например, RSS-адрес мог измениться после переноса сайта.

Сообщения приходят пачкой

Скорее всего, у получателя включён режим Дайджест.

Откройте расписание и выберите режим Сразу, если каждую запись нужно публиковать отдельно.

Пишет «расписание никогда не открывается»

Проверьте настройки расписания.

Например:

  • может быть не выбран ни один день недели;
  • у дайджеста может отсутствовать и интервал, и время отправки.

До исправления настройки новые записи будут оставаться в очереди.

Роль перестала упоминаться

Если выбранная роль была удалена, публикации продолжат отправляться без упоминания.

Информация об этом появится в состоянии получателя.

YouTube публикуется с задержкой

В нормальном режиме новые видео могут приходить через push-уведомления.

Если push-подписка ещё не подтверждена или перестала действовать, бот продолжает проверять канал обычным опросом.

Из-за этого публикация может появляться позже.

Дополнительная настройка обычно не требуется.

Я удалил получателя. Можно восстановить его историю?

Нет.

При удалении получателя удаляется и его история доставки.

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