Реализация отправки Email через SendPulse API








Описана реализация отправки Email с использованием API и применением очереди отправки как пример для программистов (вариант компоновка блоков в контексте конкретного сервиса).

Вводные:

1. Нужна рассылка уведомлений клиентам о заказах

2. Конфигурация УТ 11.4

3. Отсутствие умения верстать HTML письма.

4. Сервис отправки выбран потому что у него есть:

4.1 нормальная документация на HTTP API https://sendpulse.com/ru/integrations/api/smtp

4.2 адекватная тех поддержка

4.3 бесплатный пакет (ограничение отправка со списка email, отправка с домена по платным подпискам)

Реализация:

Выбрал вариант реализации в виде расширения в котором:

1. Добавил справочник с настройками подсистемы, чтобы в коде настройки не фиксировать, для работы с сервисом беру первую не помеченную на удаление запись.

1.1 Настройка доступа на стороне SendPulse

"Необходимые для получения ключа параметры можно найти в настройках аккаунта, во вкладке API."

2. Добавил перечисление ТипыОтправлений и регистр сведений СоответствиеМакетов, для фиксации настроек компоновки для каждого типа отправлений, макеты формируются на стороне сервиса и в них прописываются нужные параметры.

1.2 Настройка макетов на стороне SendPulse

Макеты создаются по документации https://sendpulse.com/ru/knowledge-base/email-service/email-create/create-own-template

Получение ID макета и использование переменных.

ID макета можно получить из адресной строки при редактировании сохраненного макета.

Переменные обозначаются "{{}}".

3. Для хранения очередью добавил перечисление СостояниеОтправлений и Регистр сведений ОчередьОтправкиУведомлений

Формирование очереди:

Доработал процедуру "При записи" в документе "Заказ клиента" и РС "СостоянияЗаказовКлиентов"

 

 Процедура в РС СостоянияЗаказовКлиентов

Реализация обработки изменения заказа зависит от специфики работы компании.

Отправка очереди:

Запросом выбираю все записи с состоянием "создано" и обрабатываю:

 

 Код процедуры отправки

 

Аутентификация на сервере:

Для отправки рабочих сообщений используется Bearer токен. Токен храню в переменной модуля.

 

 Код получения токена

 

Формирование сообщения:

Документация по структуре данных https://sendpulse.com/ru/integrations/api/smtp

 

Код формирования 

В общем формирую соответствие, которое сериализую в JSON и отправляю на сервер. Заполнение отправителя, получателя зависит от конфигурации и специфики работы компании. 

Вложения  реализовываются через Base64 строку.

 

 Код реализации вложения для УТ 11.4

 

Отправка данных:

Сериализую соответствие данных и отправляю POST запросом, проверяю на коды ошибок и по результату делаю запись в очередь отправки.

 

Код реализации отправки данных

 

Протухшие записи:

Бывают ситуации что очередь не отправляется по техническим причинам, а отправлять неактуальные данные не нужно.

Если дата создания записи очереди меньше чем ТекущаяДата() — КоличествоДнейАктуальностиПисьма то помечаю её как ошибочную.

Отладка:

Для отладки использую параметр настройки "Тест" при которой письма отправляются отправителю и выводятся сообщения о ошибках HTTP запросов.

Обработка ошибок:

При ошибках формирования письма и отправки обновляю запись очереди сообщений устанавливая состояние "Ошибка" и записываю в реквизит "СообщениеОбОшибке"

Подрезка очереди:

Использую параметр настроек "КоличествоДнейИстории" и Удаляю все записи с датой создания меньше ТекущаядДата() — КоличествоДнейИстории

 

 Код подрезки

Автоматический запуск:

Реализовано в виде внешней обработки (как формировать регламентные задания кодом не нашел, с обработкой реализуется просто, работает стабильно).

 

 Код модуля обработки

 

Итог:

1. Работающие уведомления по email, которых хватает для базовой работы отдела продаж.

2. Клиент может изменять макеты по своему усмотрению.

3. Добавление новых типов сообщений и формирования параметров под них относительно просто.

4. История отправки хранится в личном кабинете сервиса, разбор ситуации с отсутствием доставки решаем.

 

В реализации использовались наработки из //infostart.ru/public/717412/

Благодарю за внимание.

5 Comments

  1. volokitinac

    Замер скорости отправки через http и через ИнтернетПочта делали ?

    Reply
  2. malikov_pro

    (1) Замеры по скорости не делал. Для текущей инсталляции хватает. Если без вложений запрос маленький и обрабатывается относительно быстро.

    Решал вопрос про перенос верстки на сторонний сервис, дополнительно и аналитику получаем по просмотрам сообщений и переходам.

    ИнтернетПочта по SMTP отправляет, с ним вариант воспользоваться сервисом шаблонов с него взять верстку скомпоновать локально и отправить по SMTP, но нагрузка на сервер 1С и трафик с него будет больше.

    Reply
  3. spy-83

    Здравствуйте

    Отличный разбор.

    можно глянуть код функции

    ОтправитьДанные(СоответствиеДанные, Выборка);

    спасибо

    Reply
  4. malikov_pro

    (3) Добавил в статью раздел «Отправка данных»

    Reply
  5. spy-83

    (4) Благодарю

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *