меню
- -
Элементарная отправка СМС сообщений из 1С-Битрикс

Элементарная отправка СМС сообщений из 1С-Битрикс

6 минут
🙈 ∞
Элементарная отправка SMS сообщений из Bitrix

... или с любого другого сайта.

UPD 20.06.2019: в 2019 году у 1С-Битрикс появился встроенный механизм смс-рассылок, но на данный момент доступны только три сервиса: sms.ru, смс-ассистент и twilio. Данная статья покажет как можно рассылать смс сообщения через другие сервисы, если по каким-то причинам вам не подходят вышеперечисленные. Если у вас нет встроенного механизма отправки СМС, обновите свой 1С-Битрикс.
UPD 01.05.2026: в 2026 году статья не утратила свою актуальность. СМС рассылки - стандарт де-факто в пользовательской авторизации, а также применимы для уведомлений вашим клиентам в условиях блокировок мессенджеров.

Область применения СМС сообщений очень широка:

  • рассылка рекламных акций пользователям,
  • восстановление пароля при утере,
  • подтверждение действий,
  • уведомление администратора о важных событиях и тд.

Возможности ограничиваются только воображением (или нуждами бизнеса). Но что самое крутое - элементарная реализации. Всего пара-тройка строчек кода и мы с вами отправим первое тестовое сообщение.

Давайте придумаем себе задачку (так будет интереснее). Пусть при каждой регистрации пользователя на сайте, ему уходит подтверждение на телефон.

Все что будет описано ниже - применимо к Битриксу, но, в целом, может быть адаптировано к любой другой CMS.

Разобьем задачку на 3 этапа:

  1. Нужно отслеживать событие регистрации пользователя на сайте (тут будет много специфичного для 1С-Битрикс кода);
  2. Регистрация на сервисе, осуществляющем рассылку (нужно понимать, что отправка SMS - дело не бесплатное);
  3. Непосредственно добавление кода отправки SMS в наш обработчик события.

Итак, поехали.

1. Событие регистрации пользователя

Обратимся к пользовательской документации 1С-Битрикс. Существует 2 события, которые срабатывают после добавления пользователя: OnAfterUserAdd и OnAfterUserRegister. Про разницу можно почитать в документации, останавливаться на этом не будем.

Нам нужен OnAfterUserRegister (хотя ни кто не мешает вам создать обработчик на оба события, если у вас пользователи не регистрируются, а могут быть добавлены, например, другими пользователями).

Разместим на произвольной странице компонент регистрации и настроим его:

<?$APPLICATION->IncludeComponent(
"bitrix:main.register",
"",
Array(
"AUTH" => "Y",
"COMPOSITE_FRAME_MODE" => "A",
"COMPOSITE_FRAME_TYPE" => "AUTO",
"REQUIRED_FIELDS" => array("EMAIL","PERSONAL_PHONE"),
"SET_TITLE" => "Y",
"SHOW_FIELDS" => array("EMAIL","NAME","LAST_NAME","PERSONAL_BIRTHDAY","PERSONAL_PHONE"),
"SUCCESS_PAGE" => "",
"USER_PROPERTY" => array(),
"USER_PROPERTY_NAME" => "",
"USE_BACKURL" => "Y"
)
);?>

Как вы видите, телефон (PERSONAL_PHONE) является обязательным полем. Так мы гарантируем отправку SMS всем и каждому.

Создадим файл init.php (если еще не создан) в папке /local/php_interface/.

Теперь напишем обработчик события:

// Регистрируем обработчик события регистрации пользователя
AddEventHandler("main", "OnBeforeUserRegister", Array("EventHunter", "OnBeforeUserRegisterHandler"));

class EventHunter
{
    // Непосредственно обработчик, который принимает поля пользователя
    function OnBeforeUserRegisterHandler(&$arFields) {
        //    Если регистрация успешна и поле заполнено
        if (($arFields['USER_ID'] > 0) && (isset($arFields['PERSONAL_PHONE']))) {

        }
    }
}
Подготовительный этап завершен. Переходим к следующему.

2. Сервис рассылки

Вообще, рассылка SMS уже давно стала тривиальной задачей, а рынок наводнили сотни всевозможных сервисов. Все они поголовно предлагают свой API, супер выгодные тарифы и прочие бонусы. Для нашего примера я буду использовать сервис SMS-центр. Мне он понравился сравнительно невысокими ценами, поддержкой множества протоколов (в том числе SMTP, SOAP) и простотой использования. К слову, у них есть свой модуль для Bitrix, но мы же с вами программисты, мы все сделаем сами :)

Итак, переходим по ссылке и регистрируемся. Мне после регистрации на счет зачислили 10 рублей. Для тестирования качества обслуживания волне хватит.

Если все готово, смело переходим к следующему шагу и готовимся удивляться.

3. Отправка SMS

Теперь давайте добавим код отправки SMS в наш обработчик. Для нашего примера мы реализуем отправку через https (curl).

// Регистрируем обработчик события регистрации пользователя
AddEventHandler("main", "OnBeforeUserRegister", Array("EventHunter", "OnBeforeUserRegisterHandler"));

class EventHunter
{
    // Непосредственно обработчик, который принимает поля пользователя
    function OnBeforeUserRegisterHandler(&$arFields) {
        // Если регистрация успешна и поле заполнено
        if (($arFields['USER_ID'] > 0) && (isset($arFields['PERSONAL_PHONE']))) {

            // Формируем сообщение
            $message = "Добро пожаловать на сайт!";

            // Собираем поля
            $fields = array(
                'login' => SMSC_LOGIN, // Ваш логин SMS-центр
                'psw' => SMSC_PASS, // Ваш пароль SMS-центр
                'phones' => $arFields['PERSONAL_PHONE'], // Поле Телефон, заполненное пользователем
                'mes' => $message, // Отсылаемое сообщение
                'charset' => LANG_CHARSET, // Кодировка сайта
            );

            // Формируем URL для отправки запроса
            $url = 'https://smsc.ru/sys/send.php?' . http_build_query($fields);

            // Инициализация сеанса
            $curl = curl_init($url);

            curl_setopt($curl, CURLOPT_HEADER, 1); // Читать заголовок
            curl_setopt($curl, CURLOPT_NOBODY, 1); // Читать заголовок без тела
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // Не выводить на экран

            // Выполнение запроса
            $result = curl_exec($curl);

            // Завершение сеанса
            curl_close($curl);

        }
    }
 }

И... это все. Серьезно. Весь код занял меньше 20 строк (без учета пробелов, скобок и комментариев). Естественно, для облегчения понимания, код был намеренно упрощен. В конце концов, это статья про простую отправку SMS :)

Думаю, всем понятно, что где-то выше нужно инициировать две константы: SMSC_LOGIN и SMSC_PASS - ваши логин и пароль от SMS-центра. Для 1С-Битрикс я бы прописал их в файле dbconn.php, либо вывел в отдельный файл, подключаемый в init.php.

Читайте также: 7 смертных грехов разработки на 1С-Битрикс

LANG_CHARSET - константа Bitrix, содержащая кодировку текущего сайта. По умолчанию API SMS-центра работает с Windows-1251, что по-моему немного странно и не удобно. Ну да ладно.

$arFields['PERSONAL_PHONE'] - поле "Телефон", заполненное пользователем.

Описание остальных полей можно прочитать в официальной документации. Там есть много интересного, например, добавив cost=1, SMS не будет выслано, но будет возвращена стоимость отправки сообщения. На реальном проекте неплохо было бы проверять, а не дорого ли стоит отправка. Кто знает, из какой страны регистрируется пользователь и какой у него оператор :)

Статья из подборки 1С-Битрикс Разработка сайтов
Обсудим проект? Напиши в Телеграм, Whatsapp или ВК
Telegram
+
tg
Мы в Telegram Читай первым уникальный контент
+
Подпишись на наш Телеграм канал