Интеграция виджета заявок

Как встроить виджет заявок AstraCRM на ваш сайт. Скопируйте сниппет, настройте пару атрибутов - готово. Исходники читать не нужно (да и не получится - поставляется как UMD-бандл).

Что внутри:


Быстрый старт

[!TIP] Готовый код для вставки можно скопировать из интерфейса AstraCRM: Настройки > Виджеты > Код вставки.

Два способа подключить:

Вариант A: Передать ключ через атрибут

<script src="https://cdn.astracrm.pro/widget/v1/astra-widget.umd.js"></script>

<astra-order-widget
  api-key="ВАШ_ПУБЛИЧНЫЙ_КЛЮЧ"
  mode="floating"
  position="bottom-right"
  button-text="Оставить заявку">
</astra-order-widget>

Вариант B: Использовать глобальную переменную (можно скопировать из CRM: Настройки → Виджеты)

<script>
  window.ASTRA_WIDGET_PUBLIC_KEY = 'ВАШ_ПУБЛИЧНЫЙ_КЛЮЧ';
</script>
<script src="https://cdn.astracrm.pro/widget/v1/astra-widget.umd.js"></script>

<astra-order-widget mode="floating" position="bottom-right"></astra-order-widget>

Всё. Виджет сам зарегистрируется и заработает.


Режимы работы

Плавающая кнопка

Кнопка, которая висит на странице и открывает форму по клику. Подходит для сценариев типа "свяжитесь с нами".

Позиции: bottom-right (по умолчанию), bottom-left, top-right, top-left, bottom-center, right-center, left-center.

Можно настроить текст и иконку кнопки:

<astra-order-widget
  api-key="..."
  mode="floating"
  position="bottom-center"
  button-text="Нужна помощь?"
  button-icon="message">
</astra-order-widget>

Доступные иконки: message (по умолчанию), users, star, clock, phone, chat (алиас message-square), message-square, map-pin, briefcase, user.

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

Рендерится прямо там, где вы его поставили, как обычная форма. Занимает всю ширину контейнера. Можно задать свой заголовок и подзаголовок.

<section class="contact">
  <h2>Заявка на услугу</h2>
  <astra-order-widget
    api-key="..."
    mode="embedded"
    theme="light"
    widget-title="Оставить заявку"
    widget-subtitle="Опишите проблему - мы перезвоним">
  </astra-order-widget>
</section>

Headless режим

Виджет берёт на себя валидацию и API-вызовы, а UI делаете вы сами. Идеально, когда нужен полный контроль над дизайном формы.

Включите mode="headless", после инициализации используйте __ASTRA_WIDGET_API__ на элементе. Есть и headless-бандл (astra-widget.headless.umd.js), если стили вообще не нужны.

Подробное руководство по headless: Headless-интеграция

Минимальный пример:

<script src="https://cdn.astracrm.pro/widget/v1/astra-widget.headless.umd.js"></script>
<astra-order-widget mode="headless" api-key="..."></astra-order-widget>
<script>
  const el = document.querySelector('astra-order-widget');
  el.addEventListener('widget:ready', async () => {
    const api = el.__ASTRA_WIDGET_API__;
    api.setFormData({ clientPhone: '79990000000', description: 'Нужен мастер' });
    if (api.isValid()) {
      const res = await api.submit();
      console.log('Создан заказ:', res.orderId);
    }
  }, { once: true });
</script>

Конфигурация через атрибуты

Атрибуты указываются на теге astra-order-widget. Большинство можно менять «на лету» - виджет отслеживает изменения.

АтрибутТип/значенияПо умолчаниюНазначение
api-keystring-Публичный ключ виджета. Либо задайте через window.ASTRA_WIDGET_PUBLIC_KEY. Без ключа будет ошибка “Missing widget public key”.
api-urlURL (полный, с /api/v1)https://api.astracrm.pro/api/v1Переопределить базовый URL API. Для атрибута /api/v1 не добавляется автоматически - укажите его сами.
modefloating · embedded · headlessfloatingРежим работы.
headlessboolean ("", true, 1, yes)falseАльтернативный флаг headless-режима (аналог mode="headless").
themelight · dark · autolightЦветовая тема. auto - автоматический выбор по системной теме (prefers-color-scheme).
localeen · ruenЯзык UI/сообщений.
required-fieldsCSV ключей формы (clientPhone,description,...)clientPhone,descriptionКакие поля обязательны дополнительно. Валидация всё равно требует валидный serviceId.
positionсм. список позицийbottom-rightПозиция плавающей кнопки (режим floating).
button-textstringавтотекст по localeТекст на кнопке (режим floating).
button-iconmessage · users · star · clock · phone · chat/message-square · map-pin · briefcase · usermessageИконка кнопки (режим floating).
widget-titlestringавтотекстЗаголовок формы (актуально для embedded/floating экрана приветствия).
widget-subtitlestringавтотекстПодзаголовок формы.
order-statedraft · distributingdraftСтатус заказа: draft = только сохранён, distributing = сразу отправлен работникам.
debugtrue · falsefalseПодробные логи событий и DOM‑ивенты.

Приоритет: явные атрибуты на теге > глобальные переменные window.*. Настройки виджета, приходящие с бэкенда (заголовок/подзаголовок/кнопка, mode/position, order-state, required-fields, locale), используются только как значения по умолчанию; если задали атрибут или меняете через headless updateConfig, берётся ваше значение. Брендинг/цвета и каталог всегда приходят с бэкенда.

[!NOTE] Только при инициализации: mode, headless, debug читаются один раз. Реактивно отслеживаются: api-key, api-url, locale, widget-title, widget-subtitle, theme, required-fields, position, button-text, button-icon, order-state.


Конфигурация

Всё работает из коробки. Просто скопируйте код из интерфейса AstraCRM (Виджеты → Встраивание → Код вставки) и вставьте. Виджет сам подключится к https://api.astracrm.pro/api/v1.

Если задаёте api-url вручную, укажите полный базовый URL сразу с /api/v1 - атрибут не дописывает путь автоматически. Всегда задайте api-key (или window.ASTRA_WIDGET_PUBLIC_KEY) до загрузки скрипта.


Статус заказа


Безопасность и сеть

Публичный ключ не секретный - он и должен быть в HTML. Все запросы идут по HTTPS, CORS обрабатывается автоматически на нашей стороне.

[!WARNING] Домен вашего сайта должен быть добавлен в белый список в настройках CRM, иначе запросы виджета будут заблокированы CORS.

Домены с кириллицей и поддомены


Локализация

Поставьте locale="en" или locale="ru" - язык интерфейса переключится. Заголовки всегда можно переопределить через widget-title и widget-subtitle.


Стилизация и темы

Используйте theme="light", theme="dark" или theme="auto" (авто подстраивается под системную тему). Нужна более тонкая настройка? Переопределите эти CSS-переменные:

astra-order-widget {
  /* ключевые цвета */
  --ow-primary: #3b82f6;
  --ow-secondary: #64748b;
  --ow-background: #ffffff;
  --ow-text: #1f2937;
  --ow-border: #e5e7eb;
  /* углы, тени и т.д. */
  --ow-border-radius: 12px;
  --ow-shadow-floating: 0 25px 50px -12px rgba(0,0,0,.25);
}

Переключение темы влияет на набор переменных и готовые utility‑классы внутри шадоу‑DOM виджета.


Поля формы и валидация

Что валидируется на клиенте (ошибка при отправке):

required-fields добавляет только фронтовую проверку “заполните поля” (по умолчанию clientPhone,description); при этом валидация всё равно отвергнет пустой/невалидный serviceId.


Процесс отправки

Виджет проходит через состояния: validating → submitting → processing → success|error.

При успехе вы получите orderId в ответе.


DOM события

Виджет выбрасывает кастомные события на сам элемент astra-order-widget (они всплывают вверх):

Пример:

const el = document.querySelector('astra-order-widget');
el.addEventListener('widget:submit-success', (e) => {
  console.log('Заказ создан:', e.detail.orderId);
});

Включите debug="true", чтобы видеть подробные логи событий в консоли.


Headless API - краткая справка

После того как виджет готов, API доступен как el.__ASTRA_WIDGET_API__.

Что можно делать:


Решение проблем


Поддержка браузеров

Работает в Chrome 90+, Firefox 88+, Safari 14+, Edge 90+ и мобильных браузерах (iOS Safari 14+, Chrome Mobile 90+).


Готовые сниппеты

Скопируйте из интерфейса AstraCRM (Виджеты → Встраивание → Код вставки):

<script>
  window.ASTRA_WIDGET_PUBLIC_KEY = 'pk_live_xxxxx';
</script>
<script src="https://cdn.astracrm.pro/widget/v1/astra-widget.umd.js"></script>

<!-- Плавающая кнопка -->
<astra-order-widget mode="floating" position="bottom-right" button-text="Оставить заявку"></astra-order-widget>

<!-- Встроенная форма -->
<astra-order-widget mode="embedded" theme="light" widget-title="Оставить заявку" widget-subtitle="Мы свяжемся с вами"></astra-order-widget>

Для headless режима без стилей:

<script src="https://cdn.astracrm.pro/widget/v1/astra-widget.headless.umd.js"></script>
<astra-order-widget mode="headless" api-key="..."></astra-order-widget>

Используйте, если нужен только программный API без загрузки стилей.