Документация для разработчиков

Автоматизации

Письма, которые уходят сами — по событию подписчика и с нужной задержкой.

Автоматизация — это письмо, привязанное к событию: подписка, добавление в базу, открытие, клик по ссылке, изменение поля. Технически это та же рассылка, но со статусом SUBSCRIBE, поэтому в списке рассылок автоматизации тоже видны.

События запуска

Событие задаётся параметром action:

formПодписка через форму. Значение по умолчанию
addДобавление подписчика вручную или через API
uploadДобавление при импорте файла
openОткрытие письма
clickКлик по любой ссылке
hrefКлик по конкретной ссылке
editИзменение дополнительного поля подписчика
ratingИзменение рейтинга подписчика

Несколько событий перечисляются через запятую: "action": "form,add,upload". В комбинациях нельзя использовать open, click и edit — такие события задаются только по одному.

Задержка

Задержка между событием и отправкой складывается из двух параметров: delay_1 — количество, delay_2 — единица измерения. Например, delay_1=3 и delay_2=day дают отправку через трое суток. Без них письмо уходит сразу.

Автоматизация начинает работать только после модерации — как и обычная рассылка. До её прохождения принудительный запуск вернёт code: 37.

Список автоматизаций #

GET /automations

Возвращает автоматизации аккаунта вместе с настройками события и задержки.

Параметры строки запроса

ПараметрТипОписание
idintegerВернуть одну автоматизацию.

Возможные ошибки

HTTPcodeКогда возникает
404 4 Автоматизаций нет
curl -X GET 'https://api.dashamail.com/v2/automations' \
  -H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/automations');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'GET',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
    ],
]);

$response = json_decode(curl_exec($ch), true);
$status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status >= 400) {
    throw new RuntimeException($response['error']['message']);
}
print_r($response['response']['data']);
import requests

response = requests.get(
    'https://api.dashamail.com/v2/automations',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
)

response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/automations', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
  },
});

const payload = await response.json();
if (!response.ok) throw new Error(payload.error.message);
console.log(payload.response.data);
Ответ HTTP 200
{
  "response": {
    "msg": {
      "err_code": 0,
      "text": "OK",
      "type": "message"
    },
    "data": [
      {
        "id": 502001,
        "name": "Welcome-письмо",
        "subject": "Добро пожаловать!",
        "from_name": "Ромашка",
        "from_email": "news@example.ru",
        "list_id": "128341",
        "status": "SUBSCRIBE",
        "action": "form,add",
        "auto_delay1": 0,
        "auto_delay2": 0
      }
    ]
  }
}

Создать автоматизацию #

POST /automations

Создаёт триггерное письмо. Содержимое проверяется сразу — как при запуске обычной рассылки, включая наличие ссылки отписки.

Параметры тела запроса

ПараметрТипОписание
list_id обязательныйinteger | JSON-строкаАдресная база, за которой следит автоматизация. Несколько баз — JSON-массив идентификаторов.
subject обязательныйstringТема письма.
from_email обязательныйstringАдрес отправителя.
from_name обязательныйstringИмя отправителя.
event обязательныйstringСлужебный параметр запроса — передайте сюда то же значение, что и в action.
actionstringпо умолчанию: formСобытие запуска, см. список событий. Несколько значений перечисляются через запятую.
delay_1integerпо умолчанию: 0Величина задержки перед отправкой.
delay_2stringпо умолчанию: 0Единица измерения задержки.
Допустимые значения: hour, day, week
campaignsstringДля событий open, click и href — идентификаторы рассылок, за которыми следить.
schedule_timestringОграничение по времени суток для отправки.
autoфлагСо значением 1 письмо проверяется как готовое к отправке: тема, отправитель, текст и ссылка отписки должны быть заполнены.
htmlstringHTML-версия письма.
plain_textstringТекстовая версия письма.
namestringВнутреннее название.
esegmentJSON-строкаУсловия сегментации базы.
track_opensstringпо умолчанию: YОтслеживать открытия.
Допустимые значения: Y, N
track_clicksstringпо умолчанию: YОтслеживать клики.
Допустимые значения: Y, N
analyticsstringпо умолчанию: NДобавлять UTM-метки.
Допустимые значения: Y, N

Что возвращается

Идентификатор созданной автоматизации.

Возможные ошибки

HTTPcodeКогда возникает
422 3 Не переданы обязательные параметры
401 2 В комбинации событий использованы open, click или edit
500 14 Не задана тема письма
500 17 Нет ни HTML-, ни текстовой версии
500 18 Нет ссылки отписки в HTML
404 5 Указанной адресной базы не существует
curl -X POST 'https://api.dashamail.com/v2/automations' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "list_id": 128341,
  "subject": "Добро пожаловать!",
  "from_email": "news@example.ru",
  "from_name": "Ромашка",
  "event": "form,add",
  "action": "form,add",
  "delay_1": 1,
  "delay_2": "hour",
  "html": "<h1>Спасибо за подписку</h1><a id=\"unsub_link\" href=\"%ОТПИСАТЬСЯ%\">отписаться</a>"
}'
<?php
$ch = curl_init('https://api.dashamail.com/v2/automations');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS     => json_encode([
            'list_id' => 128341,
            'subject' => 'Добро пожаловать!',
            'from_email' => 'news@example.ru',
            'from_name' => 'Ромашка',
            'event' => 'form,add',
            'action' => 'form,add',
            'delay_1' => 1,
            'delay_2' => 'hour',
            'html' => '<h1>Спасибо за подписку</h1><a id="unsub_link" href="%ОТПИСАТЬСЯ%">отписаться</a>',
        ], JSON_UNESCAPED_UNICODE),
]);

$response = json_decode(curl_exec($ch), true);
$status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status >= 400) {
    throw new RuntimeException($response['error']['message']);
}
print_r($response['response']['data']);
import requests

response = requests.post(
    'https://api.dashamail.com/v2/automations',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
    json={
        'list_id': 128341,
        'subject': 'Добро пожаловать!',
        'from_email': 'news@example.ru',
        'from_name': 'Ромашка',
        'event': 'form,add',
        'action': 'form,add',
        'delay_1': 1,
        'delay_2': 'hour',
        'html': '<h1>Спасибо за подписку</h1><a id="unsub_link" href="%ОТПИСАТЬСЯ%">отписаться</a>',
    },
)

response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/automations', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
  "list_id": 128341,
  "subject": "Добро пожаловать!",
  "from_email": "news@example.ru",
  "from_name": "Ромашка",
  "event": "form,add",
  "action": "form,add",
  "delay_1": 1,
  "delay_2": "hour",
  "html": "<h1>Спасибо за подписку</h1><a id=\"unsub_link\" href=\"%ОТПИСАТЬСЯ%\">отписаться</a>"
}),
});

const payload = await response.json();
if (!response.ok) throw new Error(payload.error.message);
console.log(payload.response.data);
Ответ HTTP 201
{
  "response": {
    "msg": {
      "err_code": 0,
      "text": "OK",
      "type": "message"
    },
    "data": {
      "campaign_id": 502001
    }
  }
}

Изменить автоматизацию #

PUT /automations/{campaign_id}

Меняет содержимое письма, событие запуска или задержку. Незаданные параметры сохраняют прежние значения.

После изменения содержимого автоматизация снова проходит модерацию.

Параметры пути

ПараметрТипОписание
campaign_id обязательныйintegerИдентификатор автоматизации.

Параметры тела запроса

ПараметрТипОписание
subjectstringТема письма.
from_emailstringАдрес отправителя.
from_namestringИмя отправителя.
htmlstringHTML-версия письма.
plain_textstringТекстовая версия письма.
list_idinteger | JSON-строкаСменить адресную базу.
actionstringСобытие запуска.
delay_1integerВеличина задержки.
delay_2stringЕдиница измерения задержки.
Допустимые значения: hour, day, week
campaignsstringОтслеживаемые рассылки для событий по открытиям и кликам.

Возможные ошибки

HTTPcodeКогда возникает
404 22 Автоматизации с таким campaign_id нет
500 20 Указанная рассылка не является автоматизацией
curl -X PUT 'https://api.dashamail.com/v2/automations/502001' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "subject": "Добро пожаловать в Ромашку!",
  "delay_1": 2,
  "delay_2": "hour"
}'
<?php
$ch = curl_init('https://api.dashamail.com/v2/automations/502001');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS     => json_encode([
            'subject' => 'Добро пожаловать в Ромашку!',
            'delay_1' => 2,
            'delay_2' => 'hour',
        ], JSON_UNESCAPED_UNICODE),
]);

$response = json_decode(curl_exec($ch), true);
$status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status >= 400) {
    throw new RuntimeException($response['error']['message']);
}
print_r($response['response']['data']);
import requests

response = requests.put(
    'https://api.dashamail.com/v2/automations/502001',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
    json={
        'subject': 'Добро пожаловать в Ромашку!',
        'delay_1': 2,
        'delay_2': 'hour',
    },
)

response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/automations/502001', {
  method: 'PUT',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
  "subject": "Добро пожаловать в Ромашку!",
  "delay_1": 2,
  "delay_2": "hour"
}),
});

const payload = await response.json();
if (!response.ok) throw new Error(payload.error.message);
console.log(payload.response.data);
Ответ HTTP 200
{
  "response": {
    "msg": {
      "err_code": 0,
      "text": "OK",
      "type": "message"
    },
    "data": true
  }
}

Удалить автоматизацию #

DELETE /automations/{campaign_id}

Останавливает и удаляет автоматизацию. Уже поставленные в очередь письма не отправляются.

Параметры пути

ПараметрТипОписание
campaign_id обязательныйintegerИдентификатор автоматизации.

Возможные ошибки

HTTPcodeКогда возникает
404 22 Автоматизации с таким campaign_id нет
curl -X DELETE 'https://api.dashamail.com/v2/automations/502001' \
  -H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/automations/502001');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'DELETE',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
    ],
]);

$response = json_decode(curl_exec($ch), true);
$status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status >= 400) {
    throw new RuntimeException($response['error']['message']);
}
print_r($response['response']['data']);
import requests

response = requests.delete(
    'https://api.dashamail.com/v2/automations/502001',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
)

response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/automations/502001', {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
  },
});

const payload = await response.json();
if (!response.ok) throw new Error(payload.error.message);
console.log(payload.response.data);
Ответ HTTP 204
(тело ответа пустое)

Запустить автоматизацию вручную #

POST /automations/{campaign_id}/trigger

Отправляет письмо автоматизации конкретному подписчику, не дожидаясь события. Удобно для проверки вёрстки и для сценариев, где момент отправки решает ваша система.

Предыдущая отправка этого письма тому же подписчику сбрасывается, поэтому повторный запуск сработает даже если письмо уже уходило.

Параметры пути

ПараметрТипОписание
campaign_id обязательныйintegerИдентификатор автоматизации.

Параметры тела запроса

ПараметрТипОписание
email обязательныйstringАдрес получателя. Подписчик должен существовать в аккаунте.
member_idintegerИдентификатор подписчика вместо адреса.
delayintegerЗадержка в секундах. Без неё письмо уходит немедленно, с ней — планируется на указанное время.

Возможные ошибки

HTTPcodeКогда возникает
404 22 Автоматизации с таким campaign_id нет
500 37 Автоматизация ещё не прошла модерацию
404 9 Подписчика с таким адресом нет
curl -X POST 'https://api.dashamail.com/v2/automations/502001/trigger' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "email": "ivan@example.com"
}'
<?php
$ch = curl_init('https://api.dashamail.com/v2/automations/502001/trigger');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS     => json_encode([
            'email' => 'ivan@example.com',
        ], JSON_UNESCAPED_UNICODE),
]);

$response = json_decode(curl_exec($ch), true);
$status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status >= 400) {
    throw new RuntimeException($response['error']['message']);
}
print_r($response['response']['data']);
import requests

response = requests.post(
    'https://api.dashamail.com/v2/automations/502001/trigger',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
    json={
        'email': 'ivan@example.com',
    },
)

response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/automations/502001/trigger', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
  "email": "ivan@example.com"
}),
});

const payload = await response.json();
if (!response.ok) throw new Error(payload.error.message);
console.log(payload.response.data);
Ответ HTTP 200
{
  "response": {
    "msg": {
      "err_code": 0,
      "text": "OK",
      "type": "message"
    },
    "data": true
  }
}

Скопировать автоматизацию #

POST /automations/{campaign_id}/copy

Создаёт копию автоматизации со всеми настройками события и задержки.

Параметры пути

ПараметрТипОписание
campaign_id обязательныйintegerИдентификатор исходной автоматизации.

Параметры тела запроса

ПараметрТипОписание
formatstringФормат копирования.

Возможные ошибки

HTTPcodeКогда возникает
404 22 Исходной автоматизации нет
curl -X POST 'https://api.dashamail.com/v2/automations/502001/copy' \
  -H 'Authorization: Bearer YOUR_API_KEY'
<?php
$ch = curl_init('https://api.dashamail.com/v2/automations/502001/copy');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
    ],
]);

$response = json_decode(curl_exec($ch), true);
$status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status >= 400) {
    throw new RuntimeException($response['error']['message']);
}
print_r($response['response']['data']);
import requests

response = requests.post(
    'https://api.dashamail.com/v2/automations/502001/copy',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
)

response.raise_for_status()
print(response.json()['response']['data'])
const response = await fetch('https://api.dashamail.com/v2/automations/502001/copy', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
  },
});

const payload = await response.json();
if (!response.ok) throw new Error(payload.error.message);
console.log(payload.response.data);
Ответ HTTP 201
{
  "response": {
    "msg": {
      "err_code": 0,
      "text": "OK",
      "type": "message"
    },
    "data": {
      "campaign_id": 502014
    }
  }
}

DashaMail хранит и защищает ваши данные на территории Российской Федерации

Подробнее...