[Коробка Битрикс24] Клиенты в разных временных зонах: отправляем смс с правильным временем

В одном из проектов на коробочной версии Битрикс24 была следующая задача: отправлять клиентам смс о времени записи на встречу. Филиальная сеть организации достаточно большая, филиалы находятся в разных часовых поясах. Клиенты соответственно тоже.
Возникает проблема: как отправить клиенту смс с «правильным» временем встречи.

Бизнес-процесс

Стандартный бизнес-процесс обработки сделки следующий: единый колл-центр работает с лидами, договаривается с клиентом о дате и времени встречи, указывает филиал, в котором будет происходить встреча (выбирает из пользовательского поля типа список), вносит дату встречи и конвертирует лида в сделку. На основании поля Филиал происходит назначение ответственного за сделку.Дата встречи в сделке хранится в пользовательском поле (в нашем примере UF_CRM_1444018). Битрикс24 достаточно хорошо работает с временными зонами. Если менеджер внесет дату встречи в Москве например, на 12 часов дня, то все пользователи в данной временной зоне видят дату как 12 часов. Но при этом пользователи в Уфе «увидят» эту дату как 14 часов. На сервере время уфимское (+2 часа к Москве).

Для отправки смс использовались бизнес-процессы, что, в принципе, логично. Но если в текст сообщения просто подставить значение пользовательского поля, то получалась путаница.
Решение следующее:
В бизнес-процессе добавляем переменные:
Var_Time_Cons -переменная типа строка для хранения времени консультации.
Var_Diff_Time- переменная типа Список для хранения разницы филиала с Уфой.

Для каждого филиала настраивается блок изменения переменных:

Настройка-параметров-смс.png

Кроме разницы во времени указывается адрес и телефон филиала, в котором будет происходить встреча. Для формирования времени встречи в смс используется блок «PHP код». Код следующий:


 CTimeZone::Disable();
if(CModule::IncludeModule("crm")){    $arFilter = array('=ID' =>'{=Document:ID}');    $dbRes = CCrmDeal::GetList(array(), $arFilter)->Fetch();    $TimeCons =($dbRes[UF_CRM_1444018]);    $rootActivity = $this->GetRootActivity();    $TimeCorrect=intval($rootActivity->GetVariable("Var_Diff_Time"));    if ($stmp = MakeTimeStamp($TimeCons, "DD.MM.YYYY HH:MI:SS")){       $stmp=$stmp+$TimeCorrect*3600;       $TimeCons=date("d.m.Y", $stmp)." в ".date("H:i:s", $stmp);    } } $rootActivity->SetVariable("Var_Time_Cons",$TimeCons); CTimeZone::Enable();

Немного пояснения по коду: CTimeZone::Disable();- отключаем временные зоны. Фактически, всю дальнейшую работу со временем мы будем проводить «на времени сервера». В конце не забываем включить обратно с помощью CTimeZone::Enable();
$arFilter = array(‘=ID’ =>'{=Document:ID}’);
$dbRes = CCrmDeal::GetList(array(), $arFilter)->Fetch();
$TimeCons =($dbRes[UF_CRM_1444018]);
В переменной $TimeCons сохраняем значение пользовательского поля UF_CRM_1444018, в котором, как мы помним, хранится время встречи.

Далее с помощью MakeTimeStamp($TimeCons, «DD.MM.YYYY HH:MI:SS»)) переводим время в формат TimeStamp, и производим корректировку времени в соответствии с переменной Var_Diff_Time: $stmp=$stmp+$TimeCorrect*3600;.
Ну а с помощью $TimeCons=date(«d.m.Y», $stmp).» в «.date(«H:i:s», $stmp); формируем уже переменную для отправки смс, причем в смс время встречи будет в формате «27.11.2017 в 12:00».
$rootActivity->SetVariable(«Var_Time_Cons»,$TimeCons); — помещаем полученное время в переменную бизнес-процесса.

Заказать услугу

Если вам кажется, что все написанное сложно, и этот инструмент не для вас - доверьте работу профессионалам. Заполните форму ниже, и получите персональное предложение.

Возврат к списку