Разработка модуля уведомлений 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Разработка модуля уведомлений 1С-Битрикс
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1173
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    745
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Разработка модуля уведомлений 1С-Битрикс

Стандартный механизм \Bitrix\Main\Mail\Event::send() покрывает базовые сценарии: письмо после регистрации, подтверждение заказа. Но как только бизнес хочет push-уведомления, Telegram, WhatsApp, SMS — и всё это с единым журналом доставки, статусами и ретраями — штатный инструмент заканчивается. Каждый новый канал подключается по-разному, логи разбросаны, тестировать сложно.

Архитектура модуля

Модуль vendor.notifications строится на концепции канала (channel) и события (event). Событие — это то, что произошло в системе. Канал — способ доставки. Одно событие может рассылаться через несколько каналов одновременно.

Таблицы ORM:

  • b_vendor_notif_event — типы событий: id, code, name, description, default_channels (JSON), is_active
  • b_vendor_notif_template — шаблоны сообщений: id, event_code, channel, subject, body, body_html, lang, variables_schema
  • b_vendor_notif_queue — очередь отправки: id, event_code, channel, recipient, payload (JSON), status (pending/sent/failed), attempts, created_at, sent_at, error
  • b_vendor_notif_subscription — подписки пользователей: id, user_id, event_code, channel, is_active

Каналы доставки

Каждый канал реализует интерфейс ChannelInterface:

interface ChannelInterface
{
    public function getName(): string;
    public function send(Notification $notification): SendResult;
    public function supports(string $recipient): bool;
}

Реализации:

  • EmailChannel — через \Bitrix\Main\Mail\Mail::send() с собственными SMTP-настройками или через PHPMailer
  • SmsChannel — адаптеры под разных провайдеров (SMS.ru, SMSC, Twilio): унифицированный интерфейс, провайдер — параметр конфигурации
  • TelegramChannel — Telegram Bot API, метод sendMessage, поддержка Markdown и inline-кнопок
  • PushChannel — веб-push через Web Push Protocol (библиотека web-push-php), подписки хранятся в b_vendor_notif_push_subscription
  • InternalChannel — внутренние уведомления в личном кабинете, хранятся в b_vendor_notif_inbox, отображаются на сайте через AJAX

Диспетчер событий

Отправка уведомления из кода — одна строка:

\Vendor\Notifications\Dispatcher::dispatch('order_paid', [
    'user_id'      => $userId,
    'order_id'     => $orderId,
    'order_sum'    => $order->getPrice(),
    'order_number' => $order->getField('ACCOUNT_NUMBER'),
]);

Диспетчер сам определяет, через какие каналы отправлять (по настройкам события), формирует сообщения из шаблонов, подставляет переменные и кладёт задачи в b_vendor_notif_queue.

Асинхронная отправка и ретраи

Немедленная отправка в момент события — плохая практика: HTTP-запрос к Telegram может зависнуть, блокируя сохранение заказа. Очередь обрабатывается агентом Битрикс:

// В инсталляторе модуля
\CAgent::AddAgent(
    '\Vendor\Notifications\QueueProcessor::run();',
    'vendor.notifications',
    'N',
    60, // каждые 60 секунд
);

public static function run(): string
{
    $items = NotifQueueTable::getList([
        'filter' => ['STATUS' => 'pending', '<=ATTEMPTS' => 3],
        'limit'  => 50,
        'order'  => ['CREATED_AT' => 'ASC'],
    ])->fetchAll();

    foreach ($items as $item) {
        $channel = ChannelRegistry::get($item['CHANNEL']);
        $result  = $channel->send(Notification::fromQueue($item));

        if ($result->isSuccess()) {
            NotifQueueTable::update($item['ID'], ['STATUS' => 'sent', 'SENT_AT' => new DateTime()]);
        } else {
            NotifQueueTable::update($item['ID'], [
                'ATTEMPTS' => $item['ATTEMPTS'] + 1,
                'STATUS'   => $item['ATTEMPTS'] >= 3 ? 'failed' : 'pending',
                'ERROR'    => $result->getError(),
            ]);
        }
    }

    return '\Vendor\Notifications\QueueProcessor::run();';
}

После 3 неудачных попыток задача переводится в статус failed и попадает в дашборд для ручного разбора.

Управление подписками пользователя

В личном кабинете пользователь видит список доступных событий и может отключить отдельные каналы. Настройки хранятся в b_vendor_notif_subscription. Диспетчер перед постановкой в очередь проверяет, не отписан ли пользователь от данного типа уведомлений на данном канале.

Шаблонизация

Тело сообщения формируется через Twig. Переменные передаются из payload события. В шаблонах доступны фильтры: |price — форматирование суммы, |date — локализованная дата. HTML-письма поддерживают inline-стили через Emogrifier.

Административный интерфейс

  • Список событий с настройкой каналов по умолчанию
  • Редактор шаблонов с предпросмотром (подстановка тестовых переменных)
  • Журнал отправки с фильтрацией по статусу, каналу, дате, получателю
  • Статистика доставляемости по каналам
  • Тестовая отправка уведомления на указанный адрес

Сроки разработки

Этап Срок
Архитектура, ORM-таблицы, интерфейсы каналов 2 дня
Email и SMS каналы 2 дня
Telegram и Push каналы 2 дня
Внутренние уведомления (inbox) 1 день
Диспетчер, очередь, агент ретраев 2 дня
Управление подписками пользователя 1 день
Шаблонизатор (Twig + Emogrifier) 1 день
Административный интерфейс + журнал 2 дня
Тестирование 1 день

Итого: 14 рабочих дней. Подключение дополнительных каналов (Viber, VK, WhatsApp Business API) — по 1–2 дня на канал.