Всем привет,
Недавно столкнулся со следующей задачей:
При выполнении бизнес-процесса некоторых пользователей необходимо уведомлять о новых заданиях по СМС (не путаем задачи и задания).
Решение:
Сам код, размещаем в init.php.
Недавно столкнулся со следующей задачей:
При выполнении бизнес-процесса некоторых пользователей необходимо уведомлять о новых заданиях по СМС (не путаем задачи и задания).
Решение:
- Для пользователей, вводим отдельную группу.
- Навешиваем обработчик на добавление задания.
- Если ответственный состоит в группе, то отправляем ему СМС.
- Дата начала - тут понятно, дата когда СМС будет отправлена. Можно сразу, а можно и через час.
- Дата актуальности - время, в течение которого наш сервис будет пытаться доставить СМС.
- Разрешенный интервал отправки - Время, когда СМС может быть доставлено. Если мы разрешаем интервал с 8.00-20.00, а СМС будет отправлено в 22.00, то доставится оно в 8.00 следующего дня. Очень удобно, чтоб не получать СМС ночью =)
Сам код, размещаем в init.php.
// отправка СМС при добавлении задания
AddEventHandler("bizproc", "OnTaskAdd", Array("MyClass", "OnTaskAdd"));
class MyClass{
function OnTaskAdd($ID, $arFields)
{
CModule::IncludeModule("rarus.sms4b");
global $SMS4B;
$groupID = 13; //ИД группы, для которой включено оповещение по СМС в бизнес процессах
$arFields["USERS"] = (array)$arFields["USERS"];
//достави всех пользователей группы
$filter = Array(
"GROUPS_ID" => Array($groupID)
);
$rsUsers = CUser::GetList(($by="ID"), ($order="asc"), $filter);
while ($arUser = $rsUsers->Fetch())
{
$arUserGroup[] = $arUser["ID"];
}
//посмотрели кому из них надо отправить СМС
$sendSmsm = array_intersect($arFields["USERS"], $arUserGroup);
//Достали мобильные телефоны
foreach ($sendSmsm as $userID)
{
$arPhones[] = $SMS4B->SearchUserPhone($userID);
}
//отправили СМС
if (count($arPhones) > 0 )
{
$text = $arFields["NAME"];
$SMS4B->SendSmsPack(
$text,
$arPhones,
false,
date("Y-m-d H:i:s", getmicrotime()+10), //дата начала отправки. +10сек от текущего момента
date("Y-m-d H:i:s", getmicrotime()+60*60*24), //дата актуальности - сутки
"IU" //разрешенный интервал отправки. с 8-00 до 20-00
);
}
}
}
|