Описание
Чат на сайте, ответы — из мессенджера
Посетитель пишет в окно чата в углу сайта. Сообщение вместе с именем и телефоном приходит в вашу рабочую группу в Telegram или MAX. Менеджер отвечает там же — свайп по сообщению, написал, отправил. Клиент видит ответ в том же окне на сайте.
Так работает переписка, к которой все давно привыкли. Не нужна отдельная CRM-панель, не нужно держать открытой вкладку с чатами, не нужно устанавливать приложение оператора. Заявки видит вся смена, отвечает тот, кто свободен, история остаётся в группе.
Как это выглядит для менеджера
- В группу приходит: «💬 Сообщение с сайта · Мария · +7 900 000-00-00 · Сколько стоит доставка до Воронежа?»
- Менеджер отвечает на это сообщение реплаем: «Здравствуйте! До Воронежа 450 рублей».
- Хочет дописать — следующие пару минут можно писать без реплая, уйдёт тому же клиенту.
- Клиент прислал фото — менеджер отвечает фото или видео тем же реплаем.
Написали в группу, не ответив никому? Бот тут же подскажет: «Не понял, кому это. Ответьте на сообщение клиента». Сообщение никуда не уйдёт. Обсуждать заявки между собой в той же группе можно свободно.
Два мессенджера, один плагин
Telegram — через бота @BotFather за две минуты. MAX — через бота с business.max.ru. Можно подключить оба сразу: заявка уйдёт в обе группы, ответить достаточно в одной. Для сайтов, где Telegram недоступен, есть поле для собственного прокси Bot API — плагин пойдёт через него без правок кода.
Отдельно про MAX: его серверы подписаны сертификатами Минцифры, и на многих хостингах запросы к нему падают с ошибкой TLS. Плагин это знает: находит нужный сертификат сам, а если не находит — показывает в диагностике, что делать. Именно на этом обычно застревают самодельные интеграции с MAX.
Фото и видео в обе стороны
Клиент прикрепляет к сообщению фото (jpg, png, webp, gif до 8 МБ) или видео (mp4, mov, webm до 50 МБ). Менеджер присылает в ответ картинку или ролик — клиент видит их в чате, видео с перемоткой. Файлы проверяются по содержимому, а не по расширению, и хранятся в закрытой папке на вашем сервере под случайными именами — прямой ссылки на них нет, отдаются только владельцу диалога.
Не ломает сайт и не ломается от сайта
Виджет живёт в изолированном shadow root: стили темы на него не влияют, его стили не задевают страницу. Ни один класс, идентификатор или скрипт не пересекается с чужими. jQuery на фронте не используется. Работает с оптимизаторами LiteSpeed Cache, WP Rocket, Autoptimize — сам исключает себя из отложенной загрузки скриптов и сам сбрасывает кэш страниц при изменении настроек, чтобы посетители видели их сразу, а не через сутки.
Переписка хранится в отдельных таблицах базы, а не в опциях WordPress, и удаляется по истечении заданного срока вместе с файлами. При удалении плагина всё вычищается: таблицы, настройки, файлы, задания.
Безопасность
- Токен бота никогда не покидает сервер — ни в разметке, ни в ссылках на файлы.
- Вебхуки закрыты секретами: подделать ответ менеджера извне нельзя.
- Диалог привязан к браузеру через httpOnly-куку; чужую переписку не прочитать перебором.
- Ловушка для ботов и проверка времени заполнения — на сервере, а не в JavaScript.
- Ограничение частоты по IP: сообщения, загрузки, создание сессий.
- Согласие на обработку персональных данных и ссылка на политику — для работы по 152-ФЗ.
Настраивается без разработчика
Шесть вкладок в админке: подключение, внешний вид, форма и поведение, диалоги, диагностика, инструкция. Цвет и положение кнопки — с живым предпросмотром. Проверка канала показывает не «поле заполнено», а «бот отвечает, чат доступен, приём ответов включён и ведёт на верный адрес». Журнал событий с причинами, если что-то не дошло. Инструкция для менеджера — два предложения, её можно просто показать сотрудникам.
Аналитика
Три цели — открыли чат, оставили контакты, написали ещё раз — уходят в Яндекс Метрику и Google Analytics, которые уже стоят на сайте. Имя цели задаётся своё, регистр сохраняется. Достаточно указать номер счётчика.
Для разработчиков
Пространство имён WebVozdux\CosmoAir\Contact, ни одной глобальной функции. Хуки: cosmoair_contact_message_sent, cosmoair_contact_manager_replied, cosmoair_contact_should_render, cosmoair_contact_after_purge. Каналы за интерфейсом — добавить третий мессенджер можно одним классом. Собственные таблицы, REST-эндпоинты под своим пространством имён, ключи транзиентов с префиксом. Покрыт тестами: логика, безопасность, рендер админки, виджет в реальном DOM, сквозной прогон по HTTP.
Требования
- WordPress 5.6+, PHP 7.4+ (проверено до 8.4)
- HTTPS и доступный REST API — иначе мессенджеры не смогут доставить ответы
- Бот в Telegram и/или MAX (создаётся бесплатно за пару минут, инструкция внутри)
Что в комплекте
- Плагин с автообновлением подписок при апгрейде
- Скрипт переноса настроек с CosmoAir Contact 1.x
- Сквозной тест по HTTP: одна команда — и известно, работает ли всё, включая ответ из мессенджера
- Проба инфраструктуры для MAX: DNS, TLS, полный путь файла до чата — до того как первый клиент нажмёт скрепку
