+7 8512 41-41-61

Отправляем SMS-уведомления в 1C-Битрикс на примере событий смены статуса заказа

Небольшой метод для перехвата отправки почтовых сообщений и отправки их через смс на примере обработки статусов заказов.

Чтобы указать, что это не обычное письмо, указываем в качестве адреса получателя #SMS#. Идентификатор заказа в таком случае можно передать в поле Тема. Сообщение составляется как обычно, с возможностью использования всех доступных переменных Следующий код обрабатывает данные сообщения при их отправке.

<?php
	AddEventHandler('main', 'OnBeforeEventSend', array('Handlers', 'OnBeforeEventSend'));
	class Handlers {
		public static function OnBeforeEventSend(&$arFields, &$arFieldsMail) {
			if ($arFieldsMail['EMAIL_TO'] == '#SMS#') {
				CModule::IncludeModule('sale');

				//получаем идентификатор заказа поля заказа
				$oid = intval($arFields['ORDER_ID']);
				$res = CSaleOrder::GetByID($oid);

				//получаем идентификатор пользователя из заказа и его телефон из профиля
				$uid = $res['USER_ID'];
				$user = CUser::GetList($by = 'id', $order = 'asc', array('ID'=>$uid), array(
					'FIELDS' => array('PERSONAL_PHONE'),
				))->Fetch();
				$phone = preg_replace('/[^\d]/', '', $user['PERSONAL_PHONE']);

				//создаем массив замен и сообщение
				$replaces = array();
				foreach ($arFields as $code => $prop) $replaces['#'.$code.'#'] = $prop;
				$replaces['#ORDER_ID#'] = $oid;
				$message = str_replace(array_keys($replaces), array_values($replaces), $arFieldsMail['MESSAGE']);

				//отправляем sms CSMS:Send - метод API для отправки СМС. Он может быть абсолютно другой, но суть остается та же - получает на входе сообщение и телефон.
				if ($phone && $message) CSMS::Send($message, $phone);

				//запрещаем отправку письма
				return false;
			}
			return true;
		}
	}
?>
23 Сентября 2014
|
Краснов Игорь
|
Просмотров: 20728