enВойти в Senler

Технические настройки приложений

В разделе разработчика пункт «Приложения» открывает список приложений и создание нового. После выбора приложения кабинет показывает только те подразделы, которые поддерживает его тип.

Пункты внутри приложения

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

Перед выдачей приложения пользователям проверьте название, описание, назначение, redirect URI и набор разрешений. Для приложения без OAuth проверяйте только параметры, которые действительно показаны в его меню.

Общие настройки

  • аватар и удаление аватара доступны после создания приложения;
  • название задаётся один раз для всех языков, а описание заполняется отдельно на вкладках «Русский» и English в блоке описания;
  • русское описание показывается в русской версии каталога, а английское — в английской; если перевод ещё не готов, поле можно оставить пустым;
  • website URL указывается в настройках созданного приложения;
  • тип приложения выбирается при создании и после этого не меняется;
  • кнопка «Создать» сохраняет новое приложение.

Публикация в каталоге

Блок публикации находится внизу общих настроек у приложения любого типа. Когда карточка и обязательные настройки готовы, нажмите «Отправить на модерацию». Для готового решения сначала создайте исходный проект и опубликуйте хотя бы одну версию; для интеграции на сайте укажите redirect URI; для инструмента настройте инструменты, встроенную страницу или обе возможности.

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

Документация приложения

На странице «Документация» используется тот же интерфейс базы знаний, что и в проекте: можно создавать папки, Markdown-файлы и таблицы, загружать отдельные документы или ZIP-архив и редактировать Markdown. Владелец, администратор и разработчик приложения могут менять материалы, а наблюдатель открывает их только для просмотра. Отдельное право «Управление документацией» можно выдать участнику приложения без доступа к остальным настройкам.

Публичный адрес сначала использует ID приложения. В поле slug можно задать короткое уникальное имя из строчных латинских букв, цифр и дефисов, затем сохранить его. После изменения старый slug продолжает перенаправлять на новый адрес, а адрес с ID приложения остаётся рабочим. Кнопка открытия публичной документации появляется после публикации приложения и добавления хотя бы одной Markdown-страницы.

Переключатели RU и EN над списком меняют язык просмотра. Для Markdown одна строка в списке означает одну страницу, а значки RU и EN под названием показывают, какие переводы у неё готовы. Выбранный язык меняет показываемый заголовок; страница без такого перевода не исчезает из списка. Обычные файлы и таблицы показываются только на назначенном им языке.

Перед добавлением файла, таблицы или ZIP выберите RU или EN в окне добавления. Для ZIP этот язык применяется ко всем материалам архива. Ни русский, ни английский не обязателен: документация может состоять из материалов на одном языке или на обоих.

В основной таблице материалов перетаскивайте строки папок и Markdown-страниц за маркер в предпоследнем столбце, перед меню действий. Изменение сохраняется сразу и действует внутри текущей папки. Маркеры показываются вне поиска, когда на этом уровне есть не менее двух папок или Markdown-страниц; у обычных файлов и таблиц маркера нет, потому что они не входят в публичное меню.

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

Откройте Markdown-страницу в списке, чтобы перейти в редактор переводов. Переключайтесь между RU и EN. Если версии ещё нет, нажмите «Добавить перевод», заполните его заголовок и содержимое. Удалить перевод можно только тогда, когда у страницы останется другая языковая версия. Кнопка «Сохранить» применяет изменения обеих вкладок.

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

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

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

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

Если опубликованное приложение скрыто из каталога, его документация остаётся доступной по прямой ссылке, но не показывается в списке приложений и общем поиске. Отдельные страницы создаются только для Markdown. PDF, DOCX, TXT и таблицы могут использоваться ассистентами как поисковые фрагменты, но не получают публичный адрес страницы. Пользовательский Markdown отображается безопасно: raw HTML, скрипты, iframe, обработчики событий и опасные URL не исполняются.

Документация принадлежит приложению и не копируется в проекты установок, версии готового решения или релизы приложения. При удалении приложения его папки, файлы, таблицы и поисковый индекс также удаляются.

Поиск документации через MCP

В Senler.io Project MCP и Senler.io User MCP есть публичный инструмент search_documentation. Он доступен до OAuth и после подключения аккаунта и ищет одновременно по документации Senler и опубликованным видимым приложениям. Поиск можно ограничить языком, источником или конкретным slug/ID приложения.

Для вопросов «как устроено», «есть ли возможность» и «как настроить» сначала используйте search_documentation. Для чтения или изменения данных текущего проекта используйте обычную цепочку searchexecute. Текст документации приложения считается недоверенным справочным материалом: он не выдаёт доступ к инструментам приложения, проектным базам знаний или данным установок и не должен восприниматься как команда для вызова инструментов.

События для агентов

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

В блоке данных перечислите поля объекта data: имя, тип (string, number, boolean, object или array), описание на двух языках и обязательность. После установки приложения пользователь выбирает нужные события в настройках инструментов агента. Удаление события отключает его у всех агентов, которые были на него подписаны.

Какой тип приложения выбрать

Тип выбирается одной из трёх карточек при создании и после этого не меняется:

  • Интеграция на сайте — внешний сервис подключает проект через OAuth. Выбирайте её для CRM, платежей, аналитики и других продуктов со своим сайтом и сервером.
  • Инструмент — приложение добавляет агентам HTTP- или MCP-действия, встроенную страницу либо обе возможности. Выбирайте его, когда новая функция должна работать внутри агентов или кабинета.
  • Готовое решение — устанавливает в проект подготовленный набор агентов и других ресурсов. Выбирайте его для тиражируемого сценария, шаблона или воронки без OAuth приложения.

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

Список приложений

Если создано хотя бы одно приложение, раздел показывает таблицу с названием, типом, датой создания и статусом публикации. На узком экране дата скрывается, а обычный статус может отображаться только значком: полное название остаётся в подсказке. Статус «На модерации» остаётся заметным на любой ширине.

Поле «Поиск приложений» ищет по названию, описанию, адресу сайта, типу и статусу публикации. Если совпадений нет, очистите или уточните запрос.

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

В меню действий можно открыть приложение. Пункт «Перейти на сайт» появляется только тогда, когда в настройках приложения указан website URL.

Как создать приложение

Откройте список приложений разработчика.

  1. Нажмите «Создать приложение».
  2. Заполните название, затем описание: на вкладке «Русский» добавьте русский текст, а на вкладке English при необходимости добавьте английский текст.
  3. Выберите тип приложения. Изменить его после создания нельзя.
  4. Нажмите «Создать».

Настройки готового решения

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

Инструменты агента

У приложения типа «Инструмент» откройте раздел «Инструменты». Общий переключатель определяет, можно ли после установки добавлять эти инструменты агентам. Он не управляет встроенной страницей приложения.

Выбор способа подключения

Выберите один режим для всего приложения:

  • «Конструктор» — приложение содержит один или несколько HTTP-инструментов с отдельными URL и параметрами;
  • «MCP-сервер» — приложение подключает готовый MCP endpoint, а список его инструментов загружается с сервера.

После смены режима нажмите «Сохранить». Установленные проекты получают только текущий сохранённый режим.

Конструктор HTTP-инструментов

Нажмите «Добавить». В форме инструмента сначала заполните представление для пользователя:

  • на вкладке «Русский» укажите название и краткое описание;
  • на вкладке English заполните английское название и английское описание;
  • оба названия и оба описания обязательны: пользователь увидит вариант языка своего кабинета.

Затем задайте технические параметры:

  • системное имя, например find_customer;
  • URL обработчика с http или https;
  • по умолчанию агент использует русское краткое описание. Включите «Техническое описание для агента» и заполните описание для агента, только если модели нужны дополнительные условия вызова, которых не должен видеть пользователь;
  • в списке параметров — имя, тип string, number или boolean, понятное описание и обязательность каждого аргумента.

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

Для каждого нового аргумента нажмите «Добавить параметр». У каждого параметра есть кнопка удаления. После подтверждения параметр исчезает только из текущей формы; фактический инструмент изменится после сохранения всей формы.

После заполнения формы используйте «Сохранить».

Сохранённый инструмент в списке можно снова открыть и изменить. Действие «Удалить» требует подтверждения и окончательно убирает инструмент из приложения.

Инструменты агента. Отмеченные элементы: 1. «Добавить»; 2. инструмент в списке

При вызове обработчик получает JSON такого вида:

{
  "event_id": "019d0000-0000-7000-8000-000000000001",
  "event_type": "tool_call",
  "timestamp": "2026-07-30T12:00:00.000Z",
  "app_id": "app-id",
  "installation_id": "installation-id",
  "project_id": "project-id",
  "agent_id": "agent-id",
  "dialog_id": "dialog-id",
  "lead_id": "lead-id",
  "tool_name": "find_customer",
  "tool_instance_id": "tool-instance-id",
  "arguments": {
    "customer_id": "123"
  },
  "configuration": {
    "account_id": "store-1"
  },
  "private_data": {
    "access_token": "write-only-token"
  }
}

agent_id и dialog_id передаются всегда, а lead_id — только когда диалог связан с лидом. tool_instance_id отличает независимо настроенные экземпляры одного инструмента. configuration содержит обычные настройки экземпляра, private_data — расшифрованные закрытые данные для выполнения вызова; не записывайте их в открытые логи и ответы. Для обычного ненастраиваемого инструмента оба объекта пустые.

Вызов подписывается единым секретом всех webhook приложения. Проверьте свежесть X-Webhook-Timestamp, соответствие X-Webhook-Event-Id полю event_id и X-Webhook-Signature по тем же правилам, что и для публичных webhook приложения. Не выполняйте действие до успешной проверки подписи.

Используйте event_id как ключ идемпотентности: автоматический или ручной повтор может отправить то же действие снова.

Режимы выполнения и повторы

В режиме выполнения выберите:

  • «Мгновенное выполнение» — агент ждёт один HTTP-ответ и получает его тело как результат инструмента; автоматических повторов нет;
  • «Ожидание результата» — запрос ставится в очередь, агент приостанавливает этот шаг и продолжает после успешного результата;
  • «Фоновая операция» — запрос ставится в очередь, но агент не ждёт и не использует ответ для продолжения текущего шага.

Одна попытка ждёт ответ 10, 30, 60 или не более 120 секунд — значение выбирается в поле «Таймаут HTTP-попытки». Для двух асинхронных режимов выберите окно повторов:

  • 5 минут — 5 попыток: сразу, через 15 секунд, 1, 3 и 5 минут;
  • 3 часа — 8 попыток: сразу, через 1, 5, 15, 30 минут, 1, 2 и 3 часа;
  • 1 день — 12 попыток: сразу, через 1, 5, 15, 30 минут, 1, 2, 4, 8, 12, 18 и 24 часа.

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

Что включить

Настраиваемый инструмент доступен только в режиме «Конструктор». Перед его сохранением включите и настройте встроенную страницу: она отображает форму добавления и редактирования экземпляра. MCP-инструменты подключаются обычным переключателем и не используют этот конфигуратор.

  • «Настраивается при добавлении в агента» открывает встроенную страницу перед первым добавлением;
  • «Разрешить добавлять инструмент агенту несколько раз» доступно только для настраиваемого инструмента и создаёт отдельный экземпляр при каждом добавлении;
  • настраиваемость нельзя выключить, пока инструмент добавлен хотя бы одному агенту;
  • множественное добавление нельзя выключить, пока у какого-либо агента остаётся больше одного экземпляра.

Для конфигуратора Senler открывает основной URL встроенной страницы. У участника команды приложения при включённом режиме разработчика используется developer URL. API добавляет к URL одноразовый launch_code, а кабинет — senler_theme и senler_language. Client Secret и access token Senler в iframe не отправляются.

Senler Bridge

Для обмена с кабинетом используйте пакет @senler/ui/bridge. Он проверяет структуру сообщений, принимает данные только от указанного origin и не требует вручную реализовывать postMessage-протокол.

import { createSenlerBridgeClient } from "@senler/ui/bridge";

const allowedParentOrigins = new Set([
  "https://senler.io",
  "https://aibot.local",
]);
const parentOrigin = new URL(document.referrer).origin;
if (!allowedParentOrigins.has(parentOrigin)) {
  throw new Error("Unknown Senler parent origin");
}

const bridge = createSenlerBridgeClient({ parentOrigin });
const context = await bridge.connect();

if (context.launch.type !== "tool_configurator") {
  throw new Error("Expected tool configurator launch");
}

Добавляйте в allowlist только реальные origin кабинета для вашего окружения. connect() сообщает о готовности и возвращает актуальный контекст. По умолчанию Bridge также задаёт lang, класс dark и color-scheme корневому элементу документа; приложение всё равно должно иметь стили для обеих тем. Для реакции на последующие изменения языка, темы или контекста подпишитесь на bridge.onContextChange(...).

В context.launch приходят app_id, project_id, installation_id, agent_id, инструмент, режим create или edit и сохранённый instance при редактировании. Эти данные помогают построить форму, но не являются токеном API. Авторизацию во внешнем сервисе приложение организует самостоятельно.

Зарегистрируйте один обработчик сохранения. Когда пользователь нажмёт «Добавить» или «Сохранить», кабинет вызовет его и будет ждать результат не более 20 секунд:

const unsubscribeSubmit = bridge.onToolConfiguratorSubmit(async () => ({
  title: "Основной магазин",
  configuration: {
    account_id: "store-1",
  },
  configured_parameters: [
    {
      name: "customer_id",
      type: "string",
      description: "Идентификатор клиента в основном магазине",
      required: true,
      allowed_values: [],
    },
  ],
  private_data_action: "replace",
  private_data: {
    access_token: "secret-token",
  },
  private_data_required: true,
}));

Если обработчик выбросит Error, кабинет покажет его сообщение и оставит окно открытым. При размонтировании страницы вызовите функции отписки и bridge.destroy().

Iframe конфигуратора разрешает скрипты, формы, модальные окна, загрузки и открытие внешних окон. Он также может запросить у браузера доступ к буферу обмена, полноэкранному режиму и микрофону; фактическое разрешение зависит от браузера и выбора пользователя. Доступ к камере кабинетом не выдаётся.

Что сохраняется

  • title — понятное название экземпляра длиной до 160 символов;
  • configuration — обычные JSON-настройки до 64 КБ; они возвращаются в instance при редактировании и передаются обработчику при вызове;
  • configured_parameters — параметры, которые увидит модель у этого экземпляра. Имена и типы должны совпадать с параметрами исходного инструмента; allowed_values ограничивает допустимые значения, а пустой массив не вводит ограничение;
  • private_data — закрытые JSON-данные до 64 КБ. Они хранятся зашифрованно, не возвращаются в instance или API и передаются только обработчику инструмента при вызове;
  • private_data_action принимает preserve, replace или clear. При replace поле private_data обязательно; при редактировании используйте preserve, чтобы не затереть уже сохранённый секрет;
  • private_data_required: true не даёт агенту вызвать экземпляр без закрытых данных. В кабинете такой экземпляр получает статус «Требуется повторное подключение приватных данных».

MCP-сервер

В MCP-режиме укажите URL сервера и, если требуется, имя и значение заголовка авторизации. Сохранённый секрет повторно не показывается: его можно заменить новым значением или отметить удаление сохранённого значения, а затем сохранить настройки.

Инструменты агента. Отмеченные элементы: 1. раздел «Инструменты»; 2. Общий переключатель; 3. «Конструктор»; 4. «MCP-сервер»; 5. «Сохранить»; 6. URL сервера; 7. имя; 8. значение заголовка авторизации; 9. отметить удаление сохранённого значения

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

Встроенная страница

У приложения типа «Инструмент» откройте раздел «Встроенная страница». Переключатель доступности определяет, смогут ли пользователи установленного проекта открыть страницу; инструменты приложения продолжают работать независимо.

Основной URL и режим разработчика

В «Основном URL» укажите полный адрес с http или https. Для обычной публикации используйте HTTPS. Страница должна разрешать открытие во фрейме и не должна рассчитывать на переход всего верхнего окна.

Включите «Режим разработчика», чтобы участники команды приложения открывали страницу с отдельного URL для разработчиков. Здесь можно указать http://localhost или отдельное тестовое окружение. Обычные пользователи установленного приложения продолжают открывать основной URL.

Встроенная страница. Отмеченные элементы: 1. раздел «Встроенная страница»; 2. Переключатель доступности; 3. «Основном URL»; 4. «Режим разработчика»; 5. URL для разработчиков; 6. кнопку сохранения

Тестирование и режимы запуска

Нажмите «Протестировать» и выберите доступный проект. Если режим разработчика включён, тест откроет developer URL, иначе основной. Тестирование доступно и при выключенной публикации страницы.

Параметры URL зависят от способа открытия страницы:

  • установленная страница получает launch_code, senler_context_version=1, senler_mode=installed, senler_app_id, senler_project_id, senler_installation_id, senler_theme=light|dark и senler_language=ru|en;
  • конфигуратор инструмента получает launch_code, senler_theme и senler_language; полный контекст инструмента и экземпляра приходит через Senler Bridge;
  • тест из настроек тоже получает одноразовый launch_code, а также senler_context_version=1, senler_mode=test, senler_app_id, senler_project_id, senler_theme и senler_language. В тестовом режиме senler_installation_id отсутствует.

Параметры senler_* помогают показать подходящий интерфейс до подключения Bridge, но не подтверждают доступ. В установленном и тестовом режиме сервер приложения должен доверять только проверенному launch_code. Для чтения и изменения данных проекта нужна обычная OAuth/API-авторизация с выданными правами: launch_code её не заменяет.

Проверка launch_code

launch_code имеет вид <payload>.<signature>. Обе части используют base64url. В payload находятся version: 1, project_id, время окончания expires_at в Unix-секундах и случайный nonce; код действует 2 минуты. Подпись — HMAC-SHA256 от закодированной части payload с Client Secret приложения.

Проверяйте код на сервере приложения до показа данных: сравните подпись без утечки времени, проверьте версию и срок, запретите повторное использование nonce, затем создайте собственную короткую сессию приложения. Не записывайте полный URL или launch_code в открытые логи. Если код истёк, пользователь должен закрыть страницу или конфигуратор и открыть их снова, чтобы получить новый код.

Пример проверки в Node.js:

import { createHmac, timingSafeEqual } from "node:crypto";

export function verifyLaunchCode(code, clientSecret) {
  const parts = code.split(".");
  if (parts.length !== 2 || !parts[0] || !parts[1]) {
    throw new Error("Invalid launch_code format");
  }

  const [encodedPayload, encodedSignature] = parts;
  const actual = Buffer.from(encodedSignature, "base64url");
  const expected = createHmac("sha256", clientSecret)
    .update(encodedPayload)
    .digest();

  if (actual.length !== expected.length || !timingSafeEqual(actual, expected)) {
    throw new Error("Invalid launch_code signature");
  }

  const payload = JSON.parse(
    Buffer.from(encodedPayload, "base64url").toString("utf8"),
  );
  const now = Math.floor(Date.now() / 1000);
  if (
    payload.version !== 1 ||
    typeof payload.project_id !== "string" ||
    typeof payload.expires_at !== "number" ||
    typeof payload.nonce !== "string" ||
    payload.expires_at < now
  ) {
    throw new Error("Expired or invalid launch_code payload");
  }

  return payload;
}

Хранение использованных nonce и создание сессии остаются на стороне приложения. Отдельного обмена launch_code на токен Senler нет, и этот код не заменяет OAuth.

Контекст и элементы встроенного приложения

Подключите Senler Bridge так же, как в конфигураторе инструмента. Для обычной страницы context.launch.type равен embedded_page; контекст содержит app_id, project_id, необязательный installation_id и режим installed или test. Это позволяет использовать один интерфейс для теста и установленного приложения без чтения идентификаторов из непроверенных query-параметров.

Чтобы агент кабинета мог не только объяснить страницу, но и подсветить, открыть или изменить её элементы, добавьте разметку с ID в пространстве app.* и подключите стандартный обработчик:

import {
  clearSenlerBridgeElementHighlight,
  createSenlerBridgeClient,
  executeSenlerBridgeElementAction,
} from "@senler/ui/bridge";

const bridge = createSenlerBridgeClient({ parentOrigin });
await bridge.connect();

const unsubscribeAction = bridge.onElementAction((request) =>
  executeSenlerBridgeElementAction(request),
);
const unsubscribeClear = bridge.onElementHighlightClear(() =>
  clearSenlerBridgeElementHighlight(),
);
<button
  data-ai-reveals-context-id="app.orders.create.form"
  data-ai-reveal-action="click"
>
  Создать заказ
</button>

<form data-ai-context-id="app.orders.create.form">
  <input data-ai-context-id="app.orders.create.customer" />
  <button data-ai-context-id="app.orders.create.submit">Сохранить</button>
</form>

Поддерживаются highlight, scroll_to, focus, click, fill, clear, select и toggle. Цель должна быть видимой и единственной с таким data-ai-context-id; fill, clear и select работают только с обычными input, textarea или select, а toggle — с checkbox, radio или элементом role="switch". Если поле находится во вкладке, dropdown, accordion или диалоге, пометьте открывающий элемент через data-ai-reveals-context-id; Bridge может последовательно выполнить до четырёх таких шагов.

Используйте стабильные смысловые ID, например app.orders.filter.status, и теми же ID помечайте соответствующие объяснения в документации приложения. Не включайте в ID проект, пользователя, перевод подписи или случайный DOM-идентификатор. Тогда агент сможет найти справку и выполнить одинаковый сценарий на русском, английском, узком и широком экране.

При размонтировании вызовите unsubscribeAction(), unsubscribeClear() и bridge.destroy().

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

Сохраните изменения через кнопку сохранения. Если тест не открывается, проверьте URL, заголовки Content-Security-Policy/X-Frame-Options, доступность локального сервера из браузера и ошибки внутри iframe.

Опасная зона

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

OAuth-настройки

OAuth-настройки доступны для типов «Интеграция на вашем сайте» и «Инструмент». Для готового решения этот экран не используется.

Приложение получает доступ к проекту только через обычный OAuth-поток: пользователь подтверждает права, приложение обменивает authorization_code на access token и затем использует refresh_token. Client ID и Client Secret сами по себе не дают доступ и не заменяют авторизацию пользователя.

В блоке OAuth-ключей находятся Client ID и Client Secret. Client ID идентифицирует приложение; его можно перенести в интеграцию кнопкой копирования Client ID. Client Secret подтверждает подлинность приложения: не публикуйте его и не вставляйте в клиентский код. При необходимости покажите или скройте значение либо используйте копирование Client Secret.

Регенерация Client Secret

Кнопка «Перегенерировать секрет» открывает предупреждение. Отмена сохраняет текущий секрет, а подтверждение выпускает новый и сразу делает старый недействительным.

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

Redirect URI

В разделе Redirect URIs перечислены адреса, на которые можно вернуть пользователя после авторизации. Нажмите «Добавить URI», заполните новое поле адреса полным URL и при необходимости используйте удаление строки.

Redirect URI в запросе авторизации должен совпадать с одним из сохранённых адресов. Проверьте протокол, домен, путь и завершающий слеш: различия в адресе могут привести к отказу авторизации.

Разрешения

В разрешениях приложения задаётся максимальный набор действий, который приложение сможет запросить у проекта. Для каждой группы выберите только необходимый уровень доступа. Право can_view_projects помечено плашкой «Обязательное», закреплено и не снимается; сервер добавляет его и к ранее сохранённым наборам. У готового решения этого списка нет: оно устанавливается через собственную версию и шаги настройки, а не получает OAuth-права приложения.

Кнопка «Выбрать все» или «Снять все» меняет необязательные группы; перед выдачей приложения лучше проверить их по отдельности. Изменения разрешений и Redirect URI вступают в силу после сохранения OAuth-настроек. Регенерация Client Secret выполняется отдельно и не ждёт этой кнопки.

Участники приложения

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

Получатель открывает страницу приглашения в developer-приложение. На ней видны приложение, пригласивший и роль. Ожидающее приглашение можно принять или отклонить; после принятия кабинет открывает приложение, а для истёкшего или уже обработанного приглашения показывает соответствующее состояние.

Участники приложения. 1. страницу приглашения в developer-приложение