/v2/Api/Transactionals/{ID} POST
Позволяет отправить заранее созданное транзакционное письмо одному подписчику. Транзакционное письмо идентифицируется по ID.
Формат данных
Параметры запроса:
| Параметр | Тип | Описание |
|---|---|---|
| ID | integer | ID транзакционного сообщения. Обязательная часть адреса. |
Данные в запросе передаются для отправки транзакционного письма одному подписчику. Транзакционное письмо идентифицируется по параметру {ID} в URL. При этом подписчик должен быть в любом из листов аккаунта.
Элементы тега Data:
| Элемент/атрибут | Тип | Описание |
|---|---|---|
| ReturnGuid | boolean | Если установлен в true позволяет получить GUID (global unique identifier) отправляемого письма. Необязательное.По умолчанию false. |
| Receiver | complex | Определяет подписчика, который получит транзакционное письмо. |
| Snippets | complex | Набор «Составляющих» (далее по тексту Сниппетов, см: Сниппеты), которые являются фрагментами HTML и будут использоваться в теле/теме письма и так далее. Необязательный. |
| Attachments | complex | Набор «Вложений», которые являются дополнительными вложениями, такими как кодированые PDF файлы, и другое. Необязательный. |
Элементы тега Receiver:
| Элемент/атрибут | Тип | Описание |
|---|---|---|
| Id | integer | Идентификатор подписчика. Необязательный*. |
| string | Емейл подписчика. Необязательный*. | |
| EmailMd5 | string | MD5-хеш адреса электронной почты подписчика. Необязательный. |
| ListId | integer | Идентификатор листа подписчика. Используется для определения листа используемого для отправки. Это полезно, если подписчик присутствует в нескольких листах. Если не задано, будет использоваться первый найденный лист. Не обязательный. |
| Bcc | string | Адрес электронной почты, на который будет отправляться скрытая копия сообщения. Необязательный. |
*Для идентификации подписчика должен быть указан либо ID, либо Email. Если указан Email, то подписчик с этим Email должен существовать в базе данных ES. Если оба поля указаны, то ID имеет приоритет.
Элементы тега Snippets:
| Элемент/атрибут | Тип | Описание |
|---|---|---|
| Name | string | Имя Сниппета*. |
| Value | string | Значение Сниппета**. |
* Имя Сниппета связывается с тегом, который можно будет использовать в тексте сообщения, его теме и других полях сообщения.
Пример: если имя Сниппета «mySnippet», то его значение будет подставлено в сообщение на место тега
*[tr_mySnippet]*.
** Сниппеты могут содержать HTML-теги (если используется секция CDATA, смотрите пример запроса) и теги персонализации (например, *[subscriber_attribute_age]*). Динамический контент не будет работать внутри Сниппетов.
Элементы тега Attachment:
| Элемент/атрибут | Тип | Описание |
|---|---|---|
| FileName | string | Имя файла вложения, например infosheet.pdf. Должно быть уникальным (2 файла не должны иметь одинаковые имена). Обязательный. |
| MimeType | string | Тип файла по стандарту MIME, например "application/pdf". Если не указан, будет использован тип "application/octet-stream". Необязательный.Тип MIME влияет на то, как различные почтовые клиенты будут обрабатывать вложения, поэтому лучше всего всегда указывать правильный тип* |
| Content | string | Содержимое файла вложения. Должно быть кодировано в Base64**. См. пример запроса. Обязательный. |
*Типы MIME для различных типов файлов смотрите здесь: http://ru.wikipedia.org/wiki/Список_MIME-типов
**Кодирование в Base64 доступно для большинства языков программирования. Для дополнительной информации смотрите http://ru.wikipedia.org/wiki/Base64
Попытка отправки неактивного или удаленного сообщения вернет ошибку. Если указанный подписчик не найден в базе или отписан от всех листов, также вернется ошибка.
Ответ
По умолчанию возвращается пустой формат ответа с кодом "201 - Created". Однако, если указан флаг ReturnGuid можно получть XML ответ с GUID отправленного транзакционного письма.
Элементы тега Data
| Элемент/атрибут | Тип | Описание |
|---|---|---|
| Содержимое элемента Data | string | GUID (global unique identifier) письма |
Примеры
Запрос с использованием двух сниппетов, подписчик определяется по емейлу:
POST https://api.esv2.com/v2/Api/Transactionals/id_сообщения HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: application/xml;charset=UTF-8
User-Agent: Jakarta Commons-HttpClient/3.1
Host: localapi
Content-Length: 585
<ApiRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<ApiKey>Ваш_API-ключ</ApiKey>
<Data>
<Receiver>
<Email>patrick@mydomain.com</Email>
</Receiver>
<Snippets>
<Snippet>
<Name>helloMessage</Name>
<Value><![CDATA[ <b>Hello Patrick!</b> ]]></Value>
</Snippet>
<Snippet>
<Name>pointsNumber</Name>
<Value>2076</Value>
</Snippet>
</Snippets>
</Data>
</ApiRequest>
Запрос без использования сниппетов, подписчик определяется по ID:
POST https://api.esv2.com/v2/Api/Transactionals/id_сообщения HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: application/xml;charset=UTF-8
User-Agent: Jakarta Commons-HttpClient/3.1
Host: localapi
Content-Length: 241
<ApiRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<ApiKey>Ваш_API-ключ1</ApiKey>
<Data>
<Receiver>
<Id>12345</Id>
</Receiver>
</Data>
</ApiRequest>
Запрос с вложением
POST http://api.esv2.com/v2/Api/Transactionals/id_сообщения HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: application/xml;charset=UTF-8
Content-Length: 113056
Host: api.esv2.com
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
<ApiRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<ApiKey>Ваш_API-ключ</ApiKey>
<Data>
<Receiver>
<Email>patrick@mydomain.com</Email>
</Receiver>
<Attachments>
<Attachment>
<FileName>test.pdf</FileName>
<MimeType>application/pdf</MimeType>
<Content>JVBERi0xLjUNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFu
ZyhwbC1QTCkgL1N0cnVjdFRyZWVSb290IDggMCBSL01hcmtJbmZvPDwvTWFya2VkIHRydWU+Pj4+
DQplbmRvYmoNCjIgMCBvYmoNCjw8L1R5cGUvUGFnZXMvQ291bnQgMS9LaWRzWyAzIDAgUl0gPj4N
CmVuZG9iag0KMyAwIG9iag0KPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9SZXNvdXJjZXM8PC9G
...
ODlFOENBQTNGMTY5NzFBRTU+XSAvUHJldiA4MjU0MS9YUmVmU3RtIDgyMjcwPj4NCnN0YXJ0eHJl
Zg0KODMwNTcNCiUlRU9G</Content>
</Attachment>
</Attachments>
</Data>
</ApiRequest>
В примере фрагмент длинного вложения был заменен на "...".
Запрос c использованием ReturnGuid
POST https://api.esv2.com/v2/Api/Transactionals/id_сообщения HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: application/xml;charset=UTF-8
Content-Length: 317
Host: api.esv2.com
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
<ApiRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<ApiKey>Ваш_API-ключ</ApiKey>
<Data>
<ReturnGuid>true</ReturnGuid>
<Receiver>
<Email>patrick@mydomain.com</Email>
</Receiver>
</Data>
</ApiRequest>
OK Ответ (без GUID):
HTTP/1.1 201 Created Cache-Control: private Server: Microsoft-IIS/7.5 X-AspNetMvc-Version: 2.0 X-AspNet-Version: 2.0.50727 Set-Cookie: TIMEZONE=Central European Standard Time; path=/ X-Powered-By: ASP.NET Date: Fri, 08 Jul 2011 11:34:53 GMT Content-Length: 0
Пример с GUID
HTTP/1.1 201 Created Cache-Control: private Content-Type: text/xml; charset=utf-8 Server: Microsoft-IIS/7.5 X-AspNetMvc-Version: 5.2 X-AspNet-Version: 4.0.30319 Set-Cookie: TEMP_DATA=72940603-7e6e-4e32-8dcf-85b547297551; path=/ X-Powered-By: ASP.NET Date: Wed, 28 Jan 2015 16:30:11 GMT Content-Length: 181 <ApiResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Data>c3a4bda9-07be-4d48-af20-df51293ec78f</Data> </ApiResponse>
Ошибка (bad subscriber):
HTTP/1.1 400 Bad Request
Cache-Control: private
Content-Type: text/xml; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNetMvc-Version: 2.0
X-AspNet-Version: 2.0.50727
Set-Cookie: TIMEZONE=Central European Standard Time; path=/
X-Powered-By: ASP.NET
Date: Fri, 08 Jul 2011 11:37:19 GMT
Content-Length: 274
<ApiResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ErrorMessage>
<Code>400</Code>
<Message>Subscriber does not exist in the database or has unsubscribed.</Message>
</ErrorMessage>
</ApiResponse>