Дополнительные возможности
Custom CSS, звук уведомлений, mini app, stories, email bridge, перевод сообщений.
Custom CSS
advanced.custom_css — произвольная строка CSS, которая инжектится в <head> страницы посетителя как отдельный <style>-тег с id sh-widget-custom-styles. Перерендеривается при применении нового конфига; пустая строка очищает стили.
/* Убрать тень панели */
#sh-widget-panel { box-shadow: none !important; }
/* Поменять шрифт на Inter (предполагается, что он уже подключён) */
#sh-widget-panel * { font-family: "Inter", sans-serif; }
/* Свой цвет акцента вместо общего */
.sh-btn { background: #ff5722 !important; }Звук уведомлений
Когда визитёр получает сообщение от оператора по WS, виджет может проиграть короткий звук. По умолчанию выключен — autoplay-аудио без согласия раздражает посетителей и провоцирует жалобы.
enabled = true.| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
| advanced.sound.enabled | boolean | false | Включить проигрывание. |
| advanced.sound.url | string | — | URL аудиофайла (mp3/wav/ogg, до 200KB после энкодинга в data-URL). Загружается через builder. Если URL пустой — звук не играет даже при enabled = true. |
Mini App
Встроенный iframe внутри панели — например, личный кабинет пользователя, конфигуратор продукта, статус доставки. Открывается в отдельной вкладке виджета.
X-Frame-Options/frame-ancestors — иначе браузер откажется его рендерить.true, виджет добавляет к URL iframe'а query ?token=<visitor_session>. Ваш миниапп может использовать этот токен для авторизации.| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
| tabs.miniapp_enabled | boolean | false | Показывать ли вкладку «Mini App» в нижней навигации. |
| miniapp.url | string | — | URL iframe'а. Должен возвращать корректные X-Frame-Options/frame-ancestors — иначе браузер откажется его рендерить. |
| miniapp.title | string | "App" | Заголовок вкладки в нижней навигации. |
| miniapp.icon | string | — | Имя иконки из Lucide (по умолчанию используется стрелка-расширение). Подсказки — в lucide.dev. |
| miniapp.height_px | number | 480 | Высота iframe'а в десктопной панели (на мобиле всегда fullscreen). |
| miniapp.auth_token_passthrough | boolean | false | Если true, виджет добавляет к URL iframe'а query ?token=<visitor_session>. Ваш миниапп может использовать этот токен для авторизации. |
Stories
Лента «сториз» в верхней части news-tab, как в Instagram/Telegram. Каждая история — это анонс с обложкой, который посетитель раскрывает кликом. Контент управляется через SettingsAnnouncements.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
| stories.enabled | boolean | false | Показывать ли story-strip в news-tab. |
| stories.max_visible | number (1-30) | 6 | Сколько обложек видно без горизонтального скролла. |
Email bridge
Когда посетитель пишет в виджет вне рабочих часов, имеет смысл переадресовать диалог на email — чтобы команда увидела вопрос утром, а не «потеряла» его. Email bridge делает именно это.
4 — здравый дефолт; ниже и форварды получат ваши же операторы за обедом.| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
| email_bridge.enabled | boolean | false | Master-выключатель. |
| email_bridge.required_offline_hours | number (1-168) | 4 | Сколько часов оффлайна до того, как тикет автоматически форвардится на email. 4 — здравый дефолт; ниже и форварды получат ваши же операторы за обедом. |
| email_bridge.label | string | "Email для ответа" | Подпись поля «email» в prechat-форме виджета. |
| email_bridge.hint | string | "Пришлём ответ на почту" | Подсказка под полем. |
| email_bridge.bridge_channel_id | string | — | UUID email-канала из SettingsChannels, через который форвардятся тикеты. Если не задан — будет fallback на первый активный email-канал воркспейса. |
| email_bridge.auto_ack | { enabled, subject, body } | — | Автоответное письмо посетителю сразу после того, как тикет ушёл на email. По умолчанию выключено. |
Перевод сообщений
Если ваши операторы и посетители говорят на разных языках, виджет может «инверсивно» переводить — оператор видит свой язык, посетитель свой, реальное сообщение в БД хранится в оригинале с переводом в кэше.
false, нужно знать язык заранее — обычно подходит для closed-context чатов.navigator.language визитёра.| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
| advanced.translate.enabled | boolean | false | Включить. |
| advanced.translate.auto_detect_source | boolean | true | Определять язык сообщения автоматически (Google Translate detect-API). Если false, нужно знать язык заранее — обычно подходит для closed-context чатов. |
| advanced.translate.operator_target_locale | string | "ru" | На какой язык переводить входящие для операторов. |
| advanced.translate.visitor_target_locale | string | — | На какой язык переводить ответы операторов для посетителя. Если не задан — берётся из navigator.language визитёра. |
| advanced.translate.monthly_token_budget | number | 1_000_000 | Лимит токенов на месяц (Google биллит ~1 токен на 1 символ). При исчерпании перевод тихо отключается до следующего месяца. |