skeeks / cms-communication
Communications for SkeekS CMS CRM: mailboxes, messenger bots, conversations, client notifications and mailings linked to leads, companies and clients
Package info
github.com/skeeks-cms/cms-communication
Type:yii2-extension
pkg:composer/skeeks/cms-communication
Requires
- php: >=8.0
- skeeks/cms: ^6.4.9.60
- skeeks/cms-backend: ^2.1.1.15
- skeeks/cms-job: ^1.4.0
- symfony/mime: ^6.4 || ^7.0
- zbateson/mail-mime-parser: ^3.0 || ^4.0
Requires (Dev)
None
Suggests
- skeeks/cms-agent: periodic polling of mailboxes and bots
- skeeks/cms-communication-imap: IMAP/SMTP mailboxes
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-10-22 11:27:14 UTC
README
skeeks/cms-communication собирает переписку с клиентами в CRM: почтовые
ящики, боты мессенджеров, уведомления клиентам и рассылки. Каждое письмо и
сообщение связывается с лидом, компанией, клиентом или любой другой сущностью
CRM и появляется в их ленте рядом со звонками, задачами и комментариями.
Версия 1.0 — почта. Боты, уведомления клиентам и рассылки — следующие этапы. Согласованная архитектура и этапы — в ARCHITECTURE.md, правила разработки — в AGENTS.md, изменения — в CHANGELOG.md.
Каналы подключаются отдельными пакетами-драйверами:
skeeks/cms-communication-imap— почтовые ящики по IMAP/SMTP на любом сервисе.
Установка
-
composer require skeeks/cms-communication skeeks/cms-communication-imap, затемphp yii cms/migrate. -
Задать ключ шифрования паролей ящиков — длинную случайную строку — в защищённых параметрах проекта или в окружении:
// params, не попадающие в репозиторий 'cms-communication' => ['secretKey' => '...'],
или переменная окружения
CMS_COMMUNICATION_SECRET_KEY. Без ключа пароли сохранить нельзя. Если ключ сменить, сохранённые пароли перестанут расшифровываться — их придётся ввести заново.
Что есть в админке
-
Настройки → Почтовые ящики — одна форма: адрес, имя отправителя, логин и пароль приложения. Логин по умолчанию равен адресу, серверы IMAP/SMTP подставляются сами для Яндекса, Mail.ru, Gmail, Rambler, Outlook и для корпоративных доменов на их почте (по MX). Пароль после сохранения не показывается; пустое поле при правке оставляет прежний. В карточке ящика — «Проверить подключение», «Получить письма», вкладка «Доступ сотрудников»: чтение (все письма / только связанные с его лидами, компаниями и клиентами / нет), отправка (на любой адрес / только своим / нет), ящик по умолчанию, управление ящиком, ответственный; вкладка «Сбор писем» — собрать письма за больший срок (до всех писем ящика), они считаются прочитанными. У ящика могут быть свои настройки хранения файлов.
-
Настройки → Настройки почты: «Хранение файлов» (по умолчанию «Минимальный»: картинки и вложения остаются в ящике и загружаются при открытии; «Экономный», «Полный», «Выборочно», предел размера, сроки хранения копий), «Сохранить файлы в CRM» (загрузить файлы уже полученных писем насовсем), «Очистка файлов» (удалить копии по условиям).
-
Редкий случай — несколько адресов приходят в один логин (алиасы, пересылка в папки): в форме ящика выбрать «Письма приходят в другой ящик». Подключения отдельно доступны по адресу
cmsCommunication/admin-cms-comm-connection. -
Почта (главное меню) — как почтовая программа: слева папки «Все письма», «Мои клиенты» (привязанные к лидам, компаниям, клиентам), «Без привязки» и «Входящие»/«Отправленные» каждого ящика с чтением «всё»; в середине список, справа письмо с ответом. Поиск по теме, адресам и тексту. Отметки «прочитано» у каждого сотрудника свои; на телефоне — одна колонка. Вкладка «Таблица» — прежний список.
-
Написать письмо — кнопка у email в карточках лида, компании и клиента. Отправитель — ящики, с которых сотрудник может писать; письмо попадает в ленту карточки.
-
В карточке подключения — «Проверить подключение» (сразу входит на IMAP и SMTP и показывает ответ серверов) и «Получить письма».
Ящиками и подключениями пока управляют администраторы.
Как это работает
- Приём — фоновая задача
comm.mail.pollна полосеcommunication, по расписаниюcms-agentраз в 2 минуты (comm.mail.poll-all; после установки выполнитьphp yii cmsAgent/init). Забираются «Входящие» и «Отправленные», при первом приёме — последние 30 дней (communication.initialDays). - Письмо хранится один раз, даже если лежит в нескольких ящиках. Привязка к лиду (новому или в работе), компании и клиенту — по точному совпадению адреса; ответы с другого адреса привязываются по цепочке. Внутренняя переписка (все участники — наши адреса и адреса на доменах наших ящиков) не привязывается.
- Отправка — задача
comm.mail.send: SMTP ящика, затем копия в «Отправленные», если сервер не сохранил её сам. Письмо с неизвестным исходом не отправляется повторно. - Нужен обработчик очереди:
php yii cms-job/worker --queue=communication(или общий диспетчерcms-job/worker). communication.allowedRecipientsограничивает получателей (например['@skeeks.com']на стенде с копией боевой базы).
Пока не сделано: уведомления сотрудникам о новых письмах, папки и правила, удаление и перемещение писем на сервере, подписи и шаблоны ответов.