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

Виджеты OkoCRM

Виджет — это пользовательское расширение 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": "Author Name",
  "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":      "logo.png"
  }
}
ПолеОписание
idУникальный идентификатор виджета (slug) (например: example-calculator)
authorАвтор виджета
versionВерсия по semver
settings.linksМассив ссылок на странице настроек виджета
settings.textТекстовое описание виджета на странице настроек
settings.fieldsПоля настроек: name, type, label, required
iconsИконки виджета для позиций — пути относительно папки виджета

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>-

Позиции отрисовки

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

Встроенные библиотеки

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

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