Битрикс24. Входящая почта без единого почтового ящика.

Одной из важнейших функций Битрикс24 является ведение работы с клиентами (CRM). В свою очередь, хорошая CRM  должна позволять удобно вести диалог с клиентами и отображать историю работы с ним.

Надо сказать, что ведение истории работы с клиентами в CRM, выполнено в Битрикс24 на должном уровне. Реализовано хранение транзакций по клиентам, ведение электронной переписки через электронную почту. При весьма не сложной настройке - реализовано хранение и привязка входящих писем и привязка их к карточкам клиентов (интеграция с почтой). Однако, как известно, стандартный функционал не всегда удовлетворяет специфические требования конечных пользователей. Так произошло и у нашего очередного англоязычного  клиента.

Дело в том, что интеграция и обработка входящей почты в Битрикс, ведется через единый почтовый ящик. То есть вся входящая почта должна приходить сперва на общий ящик, sale@client.com, а потом может быть переадресована на персональные почтовые ящики сотрудников службы работы с клиентами. Я не буду судить о правильности или неправильности подхода с общим почтовым ящиком для всей корреспонденции, однако конкретно данного клиента такой подход не устроил. Он хотел, чтобы почта обрабатывалась не с одного общего, а с набора персональных почтовых ящиков.

Реализация подобного механизма оказалась весьма не сложной. Все что необходимо сделать - зарегистрировать почтовые ящики в системе и назначить им правило обработки почты. Для этого нужно зайти в  раздел контрольной панели Битрикс:

Сервисы -> Почта -> Почтовые ящики

И зарегистрировать Системные почтовые ящики сотрудников:

04ea80cbe27dc78f2be4fcbb8b0b21bd.PNG

Далее, для каждого почтового ящика необходимо создать правило обработки входящей почты. Для этого перейдите в

Сервисы -> Почта -> Правила


И создайте новое правило (ручная настройка):

c1aa7603a64d9d8c11893c3a236a3b01.PNG

Выберите нужный почтовый ящик, введите название правила и отметьте пункт "Применять при событиях: При получении почты". Затем перейдите во вкладку Действия, и в поле Действия на PHP скрипте введите код:


$_SERVER["DOCUMENT_ROOT"]='ПУТЬ К КОРНЮ ФАЙЛОВОЙ СИСТЕМЫ САЙТА';

require_once($_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/main/include/prolog_before.php");

CModule::IncludeModule('main');
CModule::IncludeModule('crm');
global $DB;

$mail=CCrmMailHelper::ParseEmail($arMessageFields['FIELD_FROM']);


$strSql = "SELECT * FROM b_crm_dp_comm_mcd WHERE TYPE='EMAIL' and VALUE='".$mail['EMAIL']."'";


$sqlres = $DB->Query($strSql, false);

if($arElement = $sqlres->GetNext())
{
$res=CCrmEMail::EmailMessageAdd($arMessageFields, array());
COption::SetOptionString("main","bedrosova_check_activity","Y");
}
 
Несколько комментариев по коду:

1. В почтовых правилах не заполняется переменная DOCUMENT_ROOT, поэтому ее нужно указать вручную..
2. Для регистрации входящего письма и привязке его к карточке клиента мы используем Битриксовский класс CCrmEmail.
3. Правило распространяется на все входящие письма, поэтому если их не отсеивать, то в ленту начнут попадать письма, не относящиеся к переписке с клиентами. Для избежания этого мы проверяем адрес отправителя по базе уже зарегистрированных почтовых ящиков в таблице b_crm_dp_comm_mcd. Письма обрабатываются только если там были найдены совпадения.
4. По какой-то причине, письма с  вложениями регистрируются Битриксовским классом как новые активити, но не постятся в Живую ленту, пока активити не будет просмотрено. Для обработки этого мы после получения новой почты ставим флаг, и периодически проверяем его. Если он стоит - то обновляем все новые активити. Они после этого появляются в Живой ленте.