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

Источники данных

Укажите веб-адрес один раз, нажмите нужное значение, и команда будет читать его в реальном времени.

01Что такое источник данных

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

Источник данных: это веб-адрес, который вы сохраняете один раз. Когда зритель запускает команду, которая на него ссылается, бот обращается к этому адресу, извлекает одно значение из ответа и произносит его в чате. Погода, игровая статистика, длина очереди на вашем собственном сервере: если это отвечает по https и возвращает JSON или текст, команда может это прочитать.

Одна команда, одно живое значение.

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

Сейчас в Монреале {urlfetch:weather}°C.

Токен называет источник, а не значение. Место, откуда бот берёт значение, сохранено в самом источнике в виде пути: адреса внутри ответа. Ответ это здание, current это этаж, temperature_2m это дверь. Запишите всё с точками, и получится current.temperature_2m. Третий раздел делает эти клики за вас, и аналогия на этом заканчивает свою работу.

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

02Добавьте источник из редактора команд

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

Всё происходит в разделе Команды, в редакторе, который открывается рядом со списком ваших команд.

  1. Поставьте курсор там, где будет значение

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

  2. Откройте палитру

    Под ответом, рядом с метками {user} и {args}, есть плашка Источник данных.

  3. Создайте новый

    + Новый источник данных открывает окно Добавить источник данных: «Укажите веб-API, получите один реальный ответ, затем нажмите на значение, которое хотите показать в чате.»

  4. Назовите его и вставьте адрес

    Отображаемое имя нужно для вас. Оно автоматически превращается в Имя источника данных, то есть слово, которое попадает в токен: «Строчные буквы, цифры и подчёркивания. Используется внутри {urlfetch:name}.» Затем Веб-адрес: https, до 512 символов.

  5. Получите один реальный ответ

    Получить пример вызывает ваш API по-настоящему, примерно раз в 10 секунд. Если ответ приходит в виде, который окно не умеет читать, нажмите или вставьте ответ вручную и вставьте ответ сами.

  6. Нажмите на значение, затем добавьте источник

    Ответ превращается в дерево под подсказкой «Нажмите на значение, которое хотите показать в чате.» Нажмите temperature_2m, и окно покажет Показывается current.temperature_2m. Добавить источник сохраняет всё, а строка в палитре вставляет {urlfetch:weather} на место курсора.

  • Отображаемое имя: это то, что вы видите в списках. Оно автоматически превращается в имя источника данных ниже.
  • Имя источника данных: это слово в токене: строчные буквы, цифры и подчёркивания, до 32 символов.
  • Веб-адрес: https, абсолютный, до 512 символов. Бот отправляет его ровно так, как введено, каждый раз.
  • «Получить пример» делает настоящий запрос к вашему API. Примерно один тест каждые 10 секунд.
  • Нажатие на значение сохраняет его путь в источнике. «Использовать весь ответ» переключает на обычный текст.
Окно «Добавить источник данных» с уже выбранным значением.

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

  • Плашка «Источник данных» стоит вместе с метками токенов под полем «Ответ», рядом со «Счётчиком».
  • Каждая строка показывает путь, сохранённый в источнике, или «Обычный текст», если выводится весь ответ.
  • «+ Новый источник данных» открывает окно, не теряя команду, которую вы пишете.
Плашка «Источник данных» открыта рядом с метками токенов.
Совет В канале может храниться 20 источников данных. Дальше редактор показывает «Вы достигли лимита в 20 источников данных для вашего канала. Удалите один, чтобы освободить место.» Удаление требует двух нажатий, а сервер называет команды, которые ссылаются на источник, прежде чем его удалить: «Эти команды ссылаются на него. При удалении они потеряют эти данные:».

03Выбор значения

с первого взглядаПуть: это точки между шагами. Нажмите значение и смотрите, как токен записывается сам.

Вот то же дерево, что и в панели управления, с теми же правилами. Кликабельны только значения; ветка вроде current содержит другие вещи, поэтому не может завершать путь. Измените ответ слева, и дерево следует за ним. Это самый быстрый способ порепетировать со своим API до сохранения чего-либо.

Нажмите значение
Дерево появляется после разбора JSON.
Грамматика путей, та самая, которую редактор проверяет при сохранении.
ПравилоЧто это значит
Точки между шагамиcurrent.temperature_2m открывает current, затем достаёт из него temperature_2m.
Списки используют голые цифрыitems.0.name указывает на первый элемент. Квадратные скобки не входят в грамматику.
ГлубинаДо 8 шагов. Дальше дерево отказывает в значении: «Глубже 8 уровней. Выберите что-нибудь ближе к началу.»
Каждый шагБуквы, цифры, подчёркивание и дефис, до 64 символов каждый.
Конец путиУказывает на значение: текст, число, true или false. Остановка на объекте, списке или пустом поле считается сломанным источником данных, и чат показывает ваш |default или сам токен, если его нет.
Путь внутри токенаИмеет приоритет над сохранённым в источнике. {urlfetch:weather.current.wind_speed_10m} читает другое значение по тому же адресу.
ИмяБез учёта регистра. {URLFETCH:Weather} и {urlfetch:weather} указывают на один и тот же источник.
ЗначениеОчищается, обрезается, затем режется по 100 байтам, прежде чем попасть в чат.
Совет Один сохранённый адрес может питать несколько команд. Сохраните {urlfetch:weather} на current.temperature_2m для !weather, затем напишите {urlfetch:weather.current.wind_speed_10m} в !wind. Тот же источник, тот же бюджет из 20 источников данных, два разных ответа.

04API, которым нужен ключ

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

Некоторым API нужен ключ, прежде чем они ответят. Добавьте его один раз в Настройках, в панели Ключи API: метку до 32 символов, чтобы потом его узнавать, и сам секрет, до 512 символов, затем Добавить ключ. В подсказке на самой панели всё сказано предельно ясно: «Ключи API, которые ваши источники данных отправляют с каждым запросом. Пользователи с общим доступом могут использовать их, но никогда не увидят их значения.»

Секрет шифруется до записи и больше никогда не показывается. Вам остаются метка и последние 4 символа, чтобы отличить два ключа, когда вы меняете один из них. Когда у источника данных есть ключ, бот отправляет его в заголовке Authorization: Bearer при каждом запросе, а сам адрес остаётся чистым.

В окне «Добавить источник данных» выберите ключ в поле Ключ API. «Ключ не требуется» подходит для большинства публичных API. Если сохранённых ключей пока нет, поле говорит «Ключей API пока нет. Добавьте ключ в Настройках, затем выберите его здесь.», а ссылка Открыть ключи API ведёт в Настройки.

Внимание Не держите ключ в Веб-адресе и в ответе команды. Адрес хранится как текст, и любой, у кого есть доступ к панели управления, может его прочитать, а ответ уходит в чат, где его видят все. Если ваш API принимает ключ только как параметр URL, считайте этот ключ публичным и меняйте его по расписанию.

05Лимиты и задержки

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

Цифры ниже действуют в эксплуатации. Кэш вы заметите первым: ответ, который бот уже получил, повторно используется 30 секунд, поэтому команда, запущенная 40 раз за минуту, всё равно обращается к вашему API только дважды.

Одинаково на всех тарифах.
ЛимитЗначение
Источников данных на канал20.
Источников данных в одном ответе3. Редактор отказывается сохранить четвёртый.
Веб-адресТолько https, абсолютный, до 512 символов.
Отклоняемые адресаIP-адреса в виде литералов, localhost и всё, что заканчивается на .local или .internal. Проверяется при сохранении и при каждом запросе.
Размер ответаБот читает до 1 МиБ ответа, измеряется после распаковки.
Размер примераРедактор показывает дерево только для примера читаемого текста размером до 128 КБ. Больший или нечитаемый ответ даёт «API ответил, но его ответ не удалось прочитать автоматически. Вставьте его ниже вручную.» Вставленный пример больше 128 КБ даёт «Этот пример превышает 128 КБ. Вставьте более короткий.»
Тип содержимогоapplication/json или text/*.
ТаймаутыAPI получает 2,5 секунды, сервис запросов 3 секунды, а бот перестаёт ждать через 3,5 секунды.
КэшХороший ответ хранится 30 секунд. Отказ, например 404 или путь, который ничего не нашёл, хранится 15 секунд. Сбой не кэшируется.
Запросов на канал6 в минуту, по всем вашим источникам данных.
Запросов на источник данных30 в минуту.
Запросов на хост API120 в минуту, с учётом всех каналов, которые указывают на этот хост.
ПеренаправленияДо 3 переходов, каждый остаётся на https.
Хост, который постоянно падаетПять ошибок транспорта подряд, и этот хост отдыхает 60 секунд.
«Получить пример»Примерно один тест каждые 10 секунд: «Слишком много тестов. Каждый вызывает настоящий API. Подождите около 10 секунд и попробуйте снова.»
Источников данных, на которые ссылаются ваши команды
Запросов, которые реально получает ваш API
2 в минуту
Отданы из кэша на 30 секунд
10 в минуту
Отклонено лимитом 6 в минуту
0 в минуту

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

Примечание В чате две секунды ожидания бота уже долго. Если ваш API медленный, ждите пустого места вместо значения во время загруженного эфира: напишите фразу так, чтобы она читалась и без числа, или добавьте запасной вариант после вертикальной черты.

06Что показывает чат при сбое

с первого взглядаСбой оставляет пустое место или ваш запасной вариант. Источник, который не может ответить, показывает ваш |default или сам токен, если его нет.

Команда никогда не замолкает из-за источника данных. Остаток фразы всё равно уходит, а значение остаётся пустым, если только вы не написали запасной вариант после вертикальной черты: {urlfetch:weather|недоступно} выведет «недоступно», когда получение не удалось. Источник, который приостановлен, отсутствует или не может выдать значение, работает так же: чат и таймеры показывают значение |default токена. Без |default чат выводит токен как есть, как его ввели, поэтому голый {urlfetch:weather} в чате означает «проверьте этот источник данных».

Что произошлоЧто показывает чат
API отказал, ограничил вас, вернул ошибку, ответил дольше, чем бот ждёт, путь ничего не нашёл, или сообщение является повтором более старогоНичего вместо значения или текст вашего |запасного варианта.
Источник приостановлен, отсутствует, никогда не был сохранён или не смог выдать значениеТекст вашего |запасного варианта. Без него токен выводится как есть: {urlfetch:weather}.
#your_channel

PrincessBarney!weather

ItsBagelBotСейчас в Монреале °C.

Ваш ключ отклонён или эндпоинт отклонил запрос. Проверьте в панели управления, и вы получите тот же вердикт: «API отклонил запрос. Проверьте URL и выберите нужный ключ в поле «Ключ API», если этот API его требует.»

Совет Напишите запасной вариант для всего, что может сломаться во время эфира: {urlfetch:weather|недоступно}. Тогда медленный API прочитается как «недоступно», а не как дыра в предложении.

Если что-то пошло не так

Что вы видитеЧто это значитЧто делать
API отклонил запрос. Проверьте URL и выберите нужный ключ в поле «Ключ API», если этот API его требует.API отклонил проверку: неверный или отсутствующий ключ, либо неверный адрес.Проверьте веб-адрес. Если API требует ключ, добавьте его в Настройках в разделе «Ключи API», выберите в поле «Ключ API» и проверьте снова.
Превышен лимит запросов. Подождите немного и повторите тест.Достигнут лимит запросов.Подождите минуту и повторите тест.
API вернул ошибку. Чат ничего не выводит, если только у токена нет |default: {urlfetch:имя|default}.API ответил ошибкой.Проверьте состояние API или добавьте запасной вариант после вертикальной черты.
Время ожидания API истекло. Чат ничего не выводит, если только у токена нет |default: {urlfetch:имя|default}.API ответил дольше, чем бот ждёт.Попробуйте ещё раз и добавьте запасной вариант после вертикальной черты.
Этот источник данных не смог выдать значение. Пока это так, в чате отображается значение |default токена, если оно задано, иначе {urlfetch:name} как введено. Проверьте веб-адрес и ключ API, затем снова нажмите «Получить пример».Источник приостановлен, либо его путь или адрес не дают значения.Возобновите источник, если он приостановлен. Иначе исправьте адрес или ключ, получите пример и заново нажмите на значение.
Сервис запросов не ответил. Попробуйте ещё раз через минуту.Сервис, который обращается к вашему API, не ответил вовремя.Подождите немного и повторите тест.
API ответил, но его ответ не удалось прочитать автоматически. Вставьте его ниже вручную.Ответ не является читаемым текстом или превышает 128 КБ.Нажмите «или вставьте ответ вручную» и вставьте настоящий ответ сами.
Это некорректный JSON. Исправьте его, и дерево появится здесь.Вставленный пример не является JSON.Вставьте ответ заново, от первой фигурной скобки до последней.
Этот пример превышает 128 КБ. Вставьте более короткий.Вставленный пример слишком велик для дерева.Вставьте меньший фрагмент ответа.
Слишком много тестов. Каждый вызывает настоящий API. Подождите около 10 секунд и попробуйте снова.«Получить пример» разрешает примерно один тест каждые 10 секунд.Подождите 10 секунд.
Вы достигли лимита в 20 источников данных для вашего канала. Удалите один, чтобы освободить место.В канале хранится 20 источников данных.Удалите источник, который вы больше не используете.
Источник данных с именем «name» уже существует.Другой источник уже использует это имя.Выберите другое имя или измените существующий источник.
Сообщение таймера может ссылаться не более чем на 3 различных полученных значения ({urlfetch:…}).Сообщения таймеров ограничены 3 источниками данных.Укажите меньше источников в сообщении таймера.
Голый {urlfetch:name} в чатеИсточник приостановлен, отсутствует или не может выдать значение, а у токена нет |default. Токены сверх лимита на одно сообщение тоже остаются голыми.Откройте команду, проверьте, что имя совпадает с сохранённым источником, и возобновите его, если он приостановлен. Добавьте |default, чтобы чат показывал запасной вариант.

07Чего источник не сделает

с первого взглядаГраницы на одном экране, прежде чем строить вокруг источника команду.
  • Адрес фиксируется при сохранении. {args} и {user} внутри веб-адреса остаются без изменений, поэтому зритель не может направить запрос на ваш API.
  • Запросы выполняются методом GET, а заголовки задавать не вам. Единственный, который добавляет бот, это Authorization: Bearer, и только если у источника есть ключ.
  • Токены раскрываются в ответах пользовательских команд, после проверок прав, эфира и кулдауна, а также в сообщениях таймеров, при каждом срабатывании. Сообщение таймера может ссылаться не более чем на 3 разных источника данных. Счётчики не трогают токен.
  • Повторно воспроизведённое сообщение чата никогда не запрашивает данные дважды. Если бот перечитывает старое событие, чат получает пустое место (или ваш запасной вариант), а не второй вызов вашего API.
  • Частные и локальные адреса отсекаются с обоих концов: при сохранении и снова во время запроса.
Совет Укажите один и тот же источник дважды в одном ответе, и бот получит данные только один раз. Напишите {urlfetch:weather} в предложении, а {urlfetch:weather.current.wind_speed_10m} сразу после него: два значения, один запрос, один запрос из вашей квоты.
Примечание Проверено 12 октября 2026 года.