// SendInbox — модуль для 1С:Предприятие 8 (REST API v1). // // Установка: создайте Общий модуль «SendInboxКлиент» (Сервер, Внешнее соединение) // и вставьте этот код. Ключ API: кабинет → Настройки → API-ключи. // // Пример использования: // Клиент = SendInboxКлиент.СоздатьКлиент("sk_live_ВАШ_КЛЮЧ"); // SendInboxКлиент.ОтправитьПисьмо(Клиент, "user@mail.ru", "Привет", // "Тест из 1С", "news@ваш-домен.ru"); // SendInboxКлиент.ДобавитьПодписчика(Клиент, "user@mail.ru", "Иван", "+79990000000"); // // Все функции возвращают Структуру/Соответствие (разобранный JSON) либо вызывают // исключение с текстом ошибки при HTTP-статусе вне диапазона 2xx. #Область ПрограммныйИнтерфейс // Создаёт «клиент» — структуру с ключом и базовым адресом. Функция СоздатьКлиент(КлючAPI, БазовыйАдрес = "app.working-esender.ru") Экспорт Клиент = Новый Структура; Клиент.Вставить("КлючAPI", КлючAPI); Клиент.Вставить("БазовыйАдрес", БазовыйАдрес); Клиент.Вставить("Таймаут", 30); Возврат Клиент; КонецФункции // Отправить транзакционное письмо. Функция ОтправитьПисьмо(Клиент, Кому, Тема, HTML, ОтКого) Экспорт Тело = Новый Структура; Тело.Вставить("to", Кому); Тело.Вставить("subject", Тема); Тело.Вставить("html", HTML); Тело.Вставить("fromEmail", ОтКого); Возврат ВыполнитьЗапрос(Клиент, "POST", "/api/v1/emails", Тело); КонецФункции // Добавить подписчика (при указании КодСписка — сразу в список). Функция ДобавитьПодписчика(Клиент, Email, Имя = "", Телефон = "", КодСписка = "") Экспорт Тело = Новый Структура; Тело.Вставить("email", Email); Если ЗначениеЗаполнено(Имя) Тогда Тело.Вставить("name", Имя); КонецЕсли; Если ЗначениеЗаполнено(Телефон) Тогда Тело.Вставить("phone", Телефон); КонецЕсли; Если ЗначениеЗаполнено(КодСписка) Тогда Тело.Вставить("list", КодСписка); КонецЕсли; Возврат ВыполнитьЗапрос(Клиент, "POST", "/api/v1/subscribers", Тело); КонецФункции // Список списков рассылки. Функция ПолучитьСписки(Клиент) Экспорт Возврат ВыполнитьЗапрос(Клиент, "GET", "/api/v1/lists", Неопределено); КонецФункции // Создать список рассылки. Функция СоздатьСписок(Клиент, Наименование) Экспорт Тело = Новый Структура("name", Наименование); Возврат ВыполнитьЗапрос(Клиент, "POST", "/api/v1/lists", Тело); КонецФункции // Запустить событийную автоматизацию (например, «оплачен заказ»). Функция ЗапуститьАвтоматизацию(Клиент, Событие, Email, Данные = Неопределено) Экспорт Тело = Новый Структура; Тело.Вставить("event", Событие); Тело.Вставить("email", Email); Тело.Вставить("data", ?(Данные = Неопределено, Новый Структура, Данные)); Возврат ВыполнитьЗапрос(Клиент, "POST", "/api/v1/automations/trigger", Тело); КонецФункции // Агрегаты аккаунта (отправлено/доставлено/открытия/клики/подписчики). Функция ПолучитьСтатистику(Клиент) Экспорт Возврат ВыполнитьЗапрос(Клиент, "GET", "/api/v1/stats", Неопределено); КонецФункции // Низкоуровневый запрос к API. Метод: GET/POST/PATCH/DELETE. Функция ВыполнитьЗапрос(Клиент, Метод, Путь, Тело) Экспорт Соединение = Новый HTTPСоединение( Клиент.БазовыйАдрес, 443, , , , Клиент.Таймаут, Новый ЗащищенноеСоединениеOpenSSL); Запрос = Новый HTTPЗапрос(Путь); Запрос.Заголовки.Вставить("Authorization", "Bearer " + Клиент.КлючAPI); Запрос.Заголовки.Вставить("Accept", "application/json"); Если Тело <> Неопределено Тогда Запрос.Заголовки.Вставить("Content-Type", "application/json"); Запрос.УстановитьТелоИзСтроки(ВСтрокуJSON(Тело), КодировкаТекста.UTF8); КонецЕсли; Ответ = Соединение.ВызватьHTTPМетод(Метод, Запрос); СтрокаОтвета = Ответ.ПолучитьТелоКакСтроку(); Результат = ?(ПустаяСтрока(СтрокаОтвета), Неопределено, ИзСтрокиJSON(СтрокаОтвета)); Если Ответ.КодСостояния < 200 ИЛИ Ответ.КодСостояния >= 300 Тогда ТекстОшибки = "HTTP " + Ответ.КодСостояния; Если ТипЗнч(Результат) = Тип("Соответствие") И Результат.Получить("error") <> Неопределено Тогда ТекстОшибки = Результат.Получить("error"); КонецЕсли; ВызватьИсключение "SendInbox: " + ТекстОшибки; КонецЕсли; Возврат Результат; КонецФункции #КонецОбласти #Область СлужебныеПроцедурыИФункции // Сериализация Структуры/Соответствия в строку JSON. Функция ВСтрокуJSON(Значение) Запись = Новый ЗаписьJSON; Запись.УстановитьСтроку(); ЗаписатьJSON(Запись, Значение); Возврат Запись.Закрыть(); КонецФункции // Разбор строки JSON в Соответствие/Массив. Функция ИзСтрокиJSON(Строка) Чтение = Новый ЧтениеJSON; Чтение.УстановитьСтроку(Строка); Результат = ПрочитатьJSON(Чтение); Чтение.Закрыть(); Возврат Результат; КонецФункции #КонецОбласти