Search by

skeeks / cms-communication

skeeks-semenov

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

Homepage

Issues

Wiki

Type:yii2-extension

pkg:composer/skeeks/cms-communication

Statistics

Installs: 2

Dependents: 1

Suggesters: 0

Stars: 0

1.0.0 2026-10-22 11:24 UTC

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 на любом сервисе.

Установка

  1. composer require skeeks/cms-communication skeeks/cms-communication-imap, затем php yii cms/migrate.

  2. Задать ключ шифрования паролей ящиков — длинную случайную строку — в защищённых параметрах проекта или в окружении:

    // 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'] на стенде с копией боевой базы).

Пока не сделано: уведомления сотрудникам о новых письмах, папки и правила, удаление и перемещение писем на сервере, подписи и шаблоны ответов.