Интеграция 1С:Предприятия и email-сервиса sendpulse

Email-сервисы — это сервисы в интернете, которые позволяют вести базу электронных адресов, осуществлять тематические рассылки, и т.д. У большинства современных сервисов есть API интерфейс. С одним из таких сервисов у меня была задача сделать обмен: https://sendpulse.com. Описание API у них есть, но, как оказалось, при попытке интеграции с 1С подводных камней больше, чем абзацев в том описании. Я потратил пару дней, надеюсь, кому-то поможет моя публикация, и время будет сэкономлено.

В обработке реализованы функции:

  • получение ключа;
  • получение списка адресных книг;
  • получение списка адресов из книги;
  • добавление адреса в книгу;
  • удаление адреса из книги.

Для работы нужна обработка JSON: //infostart.ru/public/119601/ (мои благодарности автору).

Благодарности также //infostart.ru/public/310693/ за решение нескольких неожиданных проблем с POST запросом.

 

Изменения 13.08.2024 :

добавил версию для 8.3, где используются новые объекты, в частности, для работы с JSON

 

Изменения 08.11.2024 :

Изменил версию 8.3 так, чтобы обработка работала и с новыми подверсиями.

20 Comments

  1. mkostya

    SMS ки не умеет отправлять из 1С?

    Reply
  2. bulpi

    (1)

    Нет. В API такого нет. И еще много чего нет 🙁

    Reply
  3. pavel-rosa

    Скачал обработку, что-то не работает, пишет при получении ключа «Код ответа=400». Хотя при выполнении обычной формы html, все работает:

    <html>

    <form method=»POST» action=»https://api.sendpulse.com/oauth/access_token»>

    <input type=text name=»grant_type» value=»client_credentials»>

    <input type=text name=»client_id» value=»XXX»>

    <input type=text name=»client_secret» value=»XXX»>

    <input type=submit>

    </form>

    </html>

    Reply
  4. bulpi

    (3)

    Вот их описание API

    https://sendpulse.com/ru/integrations/api

    Там есть коды ошибок , код 400 :

    «Не существует такого пользователя SMTP. Вам необходимо создать аккаунт в SMTP сервисе.»

    Похоже, неверный client_id

    У меня все работает, только что проверил.

    Reply
  5. grin_64

    Взял из источника http://forum.aeroion.ru/topic446.html

    Это работает:

    //Тело POST-запроса
    Параметр1 = «client_credentials»;
    Параметр2 = «XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX»;
    Параметр3 = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX»;
    ТелоPOSTЗапроса = «»;
    ТелоPOSTЗапроса = ТелоPOSTЗапроса + «&grant_type=» + Параметр1;
    ТелоPOSTЗапроса = ТелоPOSTЗапроса + «&client_id=» + Параметр2;
    ТелоPOSTЗапроса = ТелоPOSTЗапроса + «&client_secret=» + Параметр3;
    
    //POST-запрос на сервер-приёмник
    СерверПриемник = «api.sendpulse.com»; //имя сервера без протокола (http) и порта
    АдресСтраницыНаСервере = «/oauth/access_token»; //
    
    ЗаголовкиHTTP = Новый Соответствие;
    ЗаголовкиHTTP.Вставить(«Content-Type», «application/x-www-form-urlencoded»);
    
    ЗащищенноеСоединение = Истина;
    
    Таймаут = 120;
    SSL =  ?(ЗащищенноеСоединение, Новый ЗащищенноеСоединениеOpenSSL(), Неопределено);
    НТТР = Новый HTTPСоединение(СерверПриемник, , , , , Таймаут, SSL);
    
    ВыхИмя=ПолучитьИмяВременногоФайла(«txt»);
    
    Попытка
    //Формируем HTTP запрос
    ЗапросHTTP = Новый HTTPЗапрос(АдресСтраницыНаСервере, ЗаголовкиHTTP);
    ЗапросHTTP.УстановитьТелоИзСтроки(ТелоPOSTЗапроса); //Устанавливает строку, из которого будет прочитано тело POST-запроса.
    
    //Ответ от сервера получим в возвращаемом значении типа HTTPОтвет
    ОтветHTTP = НТТР.ОтправитьДляОбработки(ЗапросHTTP, ВыхИмя);
    Исключение
    ТекстСообщения = НСтр(«ru = ‘Неудачная попытка соединения с ‘»)  + СерверПриемник + «: » + ОписаниеОшибки();
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
    Возврат;
    КонецПопытки;
    
    Если ОтветHTTP.КодСостояния = 200 Тогда
    Чтение=Новый  ЧтениеJSON;
    Чтение.ОткрытьФайл(ВыхИмя);
    Мас=ПрочитатьJSON(Чтение,Истина);
    
    Ключ=Мас[«access_token»];  //ключ годен 1 час
    
    Иначе
    Сообщить(«Сервер вернул код ответа: » + ОтветHTTP.КодСостояния);
    КонецЕсли;

    Показать

    Reply
  6. bulpi

    (5)

    Написано то же самое, что и в моей обработке, но другими словами. Если это работает, то моя тоже работает.

    Reply
  7. Shalom23

    Здравствуйте, меня зовут александр, нужна ваша помощь с 1с. Вас порекомендовали. Я с прокопьевска. Можем встретиться?89134051580

    Reply
  8. Shalom23

    (3)Павел свяжитесь пожалуйста со мной по тел 89134051580. Нужна ваша помощь по 1с, платно соответсвенно. Нужно помочь с внедрением на производстве.

    Reply
  9. bulpi

    (7)

    1)Это нужно писать не сюда.

    2)Я ответил в чате.

    Reply
  10. user858310

    Вылазит ошибка 400.

    Писал в тех поддержку sendpulse говорят параметры передаются не правильно для получения токкена не в Body , а в head

    Reply
  11. bulpi

    (10)

    1)Какой версие

    Reply
  12. bulpi

    (10)

    Извините.

    1)Какой версией обработки пользуетесь ?

    2)Если для 8.2, то первый вариант обработки действительно был с другим порядком авторизации. Потом у них на сервере порядок авторизации сменили, и я заменил обработку. Уже давно в публикации новая версия для 8.2. Для 8.3 с самого начала версия была с новым порядком авторизации

    3)Мои клиенты активно работают с sendpulse. Только что проверил обе версии обработки, обе работают.

    4)Если новая версия у Вас не работает, давайте спишемся, z по TeamViewer посмотрю, мне любопытно

    bulpi@ukr.net

    Reply
  13. bulpi

    Как оказалось, в новых подверсиях 8.3 нужно явно указывать в методе УстановитьТелоИзСтроки объекта HTTPЗапрос параметр ИспользованиеByteOrderMark.НеИспользовать. Выложил новую версию обработки.

    Reply
  14. user727369

    не работает в версии 8.3.12.1616

    Reply
  15. user727369

    не работает в версии 8.3.12.1616

    +json выдал

    Reply
  16. bulpi

    (15)

    Вы , похоже, пытаетесь использовать версию для 8.2. В версии для 8.3 используются встроенные функции работы с JSON

    Reply
  17. Rovan

    Взял эту обработку — получение ключа — работает! Спасибо!

    Сам дописал блок отправки письма но идет ошибка

    Код ответа=400 {«error_code»:10,»message»:»Empty «From» email»}

    &email=[

    {

    «text»: «Hello!»,

    «html»: «<p>Hello!</p>»,

    «subject»: «Hello!»,

    «from»: {

    «name»: «****»,

    «email»: ****»

    },

    «to»: [

    {

    «name»: «***f»,

    «email»: «****@yandex.ru»

    }

    ]

    }

    Reply
  18. bulpi

    (17)

    А откуда Вы взяли, что такой метод существует ? Я внимательно просмотрел описание API https://sendpulse.ua/integrations/api/bulk-email и не нашел метода для отправки одиночного письма без кампании.

    Reply
  19. Rovan
  20. bulpi

    (19)

    В личном кабинете на закладке Smtp заполнили анкету ? Email отправителя в анкете совпадает с тем, что Вы пишете в методе :

    «from»: {

    «name»: «****»,

    «email»: ****»

    },

    ?

    Reply

Leave a Comment

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