Всем привет,
Недавно столкнулся со следующей задачей:
При выполнении бизнес-процесса некоторых пользователей необходимо уведомлять о новых заданиях по СМС (не путаем задачи и задания).
Решение:
Сам код, размещаем в 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 ); } } } |