Настроим OkoCRM под ваш бизнес
Экономим ваше время и забираем внедрение CRM на себя
Заказать консультацию

Виджеты OkoCRM

Дата изменения: 7.05.2026

Виджет — это пользовательское расширение OkoCRM, которое подключается к карточкам сделок, контактов и компаний и расширяет интерфейс CRM собственными кнопками, окнами и страницами.

Что такое виджет и для чего он нужен

Виджет — это набор файлов (JavaScript, CSS, Handlebars-шаблоны, конфигурация, изображения), который загружается в OkoCRM и исполняется внутри интерфейса CRM через Widget API. Виджет может:

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

Личные и публичные виджеты

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

Личные виджеты

Публичные виджеты

Техническое описание виджета

Структура файлов

Виджет — это папка с определенной структурой:

/
  config.json          # Конфигурация виджета (обязательно)
  script.js            # Главный скрипт — ES-модуль с default export (обязательно)
  logo.png             # Иконка виджета (опционально)
  templates/           # Handlebars-шаблоны (.hbs) (опционально)
    modal.hbs
    more_settings.hbs
    page.hbs
  styles/              # CSS-стили для шаблонов (опционально)
    modal.css
    more_settings.css
    page.css

Имена шаблонов и стилей не ограничены приведёнными — можно создавать собственные (например, templates/row.hbs, styles/row.css) и подключать их через widgetApi.getTemplate('row') и widgetApi.linkStyle('row').

Также можно указать отдельную иконку для каждой позиции.

config.json

Декларативное описание виджета: идентификатор, версия, поля настроек и иконки позиций. Пример:

{
    "id": "<widget-id>",
    "author": "Автор",
    "version": "1.0.0",
    "settings": {
        "links": [
            { "title": "Документация", "url": "https://example.com" }
        ],
        "text": "Описание виджета для страницы настроек",
        "fields": [
            {
                "name": "field_name",
                "type": "text",
                "label": "Название поля",
                "required": true
            }
        ]
    },
    "icons": {
        "lead.main":        "logo.png",
        "contact.main":     "logo.png",
        "company.main":     "logo.png",
        "sidebar":          "sidebar.png",
        "pipeline_action":  "action.png"
    },
    "pipeline_action": {
        "title": "Название автодействия",
        "text": "Короткое описание автодействия",
        "webhook_url": "https://api.example.com/v3/create_template",
        "fields": [
            {
                "name": "user_id",
                "data": "users",
                "type": "select",
                "label": "Пример выбора пользователя"
            },
            {
                "name": "template",
                "type": "textarea",
                "label": "Пример шаблона",
                "required": true
            }
        ]
    },
}

Описание полей config.json:

ПолеОписание
idУникальный идентификатор виджета (slug) (например: example-calculator) (обязательное)
authorАвтор виджета (обязательное)
versionВерсия по semver (обязательное)
settings.linksМассив ссылок на странице настроек виджета
settings.textТекстовое описание виджета на странице настроек
settings.fieldsПоля настроек: name, type, label, required
iconsИконки виджета для позиций — пути относительно папки виджета
pipeline_action.titleКороткое название автодействия (обязательное, если используется pipeline_action)
pipeline_action.textТекст в модалке автодействия, дополнительная информация
pipeline_action.webhook_urlАдрес, на который отправляется запрос после выполнения автодействия (обязательно, если используется pipeline_action)
pipeline_action.fieldsМассив полей для автодействия: type, name, label, data, multiple, required

script.js

Главный скрипт-файл виджета — ES-модуль с default export. Функция получает два аргумента: widgetApi (взаимодействие с CRM) и settingsApi (доступ к настройкам и идентификаторам виджета).

export default async function (widgetApi, settingsApi) {
  // Подписки на события, отрисовка позиций, бизнес-логика виджета
}

Шаблоны и стили

Весь HTML описывается в Handlebars-шаблонах templates/*.hbs. Шаблон загружается асинхронно и компилируется в функцию, которой можно передать данные:

const template = await widgetApi.getTemplate('modal');
const html = template({ title: 'Заголовок', items: [...] });

Стили подключаются через widgetApi.linkStyle('modal') — будет загружен файл styles/modal.css. CSS-классы внутри стилей обязательно должны иметь префикс:
widget-<widget-id>-

Позиции

Все позиции (кроме settings) обёрнуты в элемент с data-атрибутами data-widget-position и data-widget-ulid. Это позволяет найти нужную позицию селектором, например:
[data-widget-position="pipeline_action"][data-widget-ulid="WIDGET_ULID"].
Это полезно, если требуется обновить данные в полях позиции, например, в открытом автодействии.

Позиции settings (настройки подключения в интеграциях) и pipeline_action (автодействие) отрисовываются автоматически.
Остальные позиции необходимо отрисовывать самостоятельно (например, получив событие lead.opened).
Различают два вида позиций:

Автодействия (правила)

Виджет может добавлять собственные автодействия (правила) для сделок. Автодействие описывается в config.json в поле pipeline_action.

Описание pipeline_action

ПолеОписаниеОбязательное
titleКороткое название автодействияда
textТекст в модалке автодействия, дополнительная информациянет
webhook_urlАдрес, на который отправляется запрос после выполнения автодействия. Должен начинаться с https://да
fieldsМассив полей для автодействиянет

Поля (pipeline_action.fields)

Массив объектов с описанием полей формы автодействия.

СвойствоОписаниеОбязательное
labelНазвание поля. Не более 100 символов.да
typeТип поля: text, textarea, select, checkboxда
nameИмя поля для формы. Сохраняется в базе с префиксом params, например: params[user_id]нет
dataИсточник данных (только для select): users (пользователи), queues (очереди пользователей), pipelines (воронки продаж), stages (этапы воронок продаж)нет
multipleПоле имеет несколько значений (только для select)нет
requiredПоле становится обязательным для автодействиянет

Иконка автодействия

Иконка для автодействия указывается в config.json в поле icons (только в случае использования pipeline_action):

"icons": {
    ...
    "pipeline_action": "action.png",
    ...
}

Вспомогательные библиотеки

Ограничения

Правила и соглашения

Общие требования

Наверх
Продолжая использовать сайт, Вы даете согласие на обработку файлов cookies в соответствии с Политикой обработки персональных данных.
Я согласен