Начало работы
Как устроен интерфейс модуля, какие глобальные объекты доступны из JavaScript и как дождаться готовности перед обращением к API.
Здесь — основы, с которых начинается работа автора модуля: как устроен сгенерированный интерфейс, какие глобальные объекты вам доступны и как безопасно обращаться к API.
Как работает интерфейс
Интерфейс — это самостоятельная веб-страница. При открытии она проходит несколько автоматических шагов:
- Применяет оформление — восстанавливает сохранённые тему и язык, переводит подписи элементов.
- Восстанавливает состояние — подставляет в поля значения, которые пользователь вводил в прошлый раз.
- Готовит связь с движком — чтобы можно было запускать сценарий и обмениваться с ним данными.
- Включает интерактив — подсказки, выпадающие списки, условную видимость, кнопки запуска.
Всё это происходит без вашего участия. Вам остаётся собрать нужные элементы в конструкторе, а при необходимости — добавить собственную логику через API.
Взаимодействие интерфейса и сценария строится на трёх понятиях:
- Ресурсы — то, что пользователь вводит (интерфейс → сценарий).
- Переменные — рабочие значения внутри сценария.
- События — сигналы о том, что происходит (сценарий → интерфейс): новая запись в журнале, обновление статистики, изменение состояния.
Глобальные объекты
Внутри интерфейса всегда доступны:
| Объект | Назначение |
|---|---|
Engine.api | Основной фасад: движок, интерфейс, диалоги, файлы, события |
InterfaceRuntime | Низкоуровневые модули и хранилища KV / DB |
t(ключ, поУмолчанию) | Быстрый перевод строки по ключу локализации |
Пример использования всех трёх:
// Перевод строки
const label = t('startWorkflow', 'Запустить');
// Чтение значения ресурса через фасад
const res = Engine.api.ui.getResource('apiKey');
// Сохранение значения в хранилище
await InterfaceRuntime.KV.set('lastRun', Date.now());Куда писать свой код
Собственный JavaScript добавляется к интерфейсу как отдельный файл через менеджер ассетов в
конструкторе (подробнее — Работа с файлами (Assets)). Код выполняется на странице интерфейса и
имеет полный доступ к Engine.api и InterfaceRuntime.
Готовность интерфейса
Чтобы не обращаться к API раньше времени, дождитесь одного из сигналов:
- DOM-событие
interface:ready— интерфейс полностью инициализирован; - DOM-событие
engine:connected— установлена связь с движком (можно запускать сценарий и читать переменные).
// Интерфейс готов
document.addEventListener('interface:ready', () => {
Engine.api.ui.setLanguage('ru');
});
// Движок на связи
document.addEventListener('engine:connected', async () => {
const res = await Engine.api.engine.getAvailableTasks();
console.log('Активные задачи:', res.data);
});Если код обращается к движку в момент запуска и вы не уверены, что связь уже установлена, используйте
Engine.api.engine.whenConnected() — он дождётся подключения:
await Engine.api.engine.whenConnected(); // ждём связь с движком
await Engine.api.engine.startScenario(3); // теперь безопасно запускатьОсновное
Как собрать собственный модуль Multogram — интерфейс настроек и логику — и его публичный API: движок сценариев, хранилище, файлы, диалоги и события.
Основное
Как устроена веб-страница интерфейса: атрибуты разметки data-* для связи элементов с логикой и объект конфигурации window.interfaceConfig.