Перейти к основному содержимому
Опубликовано: 

Управление формами через Sendsay API

Форма — это инструмент сбора данных о клиентах: адресов, предпочтений, ответов на опросы. После заполнения данные попадают в анкету-формы, а после подтверждения — переносятся в основные анкеты-хранилища и становятся доступны для рассылок и сегментации.

Создавать и настраивать формы можно в разделе Сайт → Формы. Через API вы можете автоматизировать управление формами: создавать, изменять, удалять и настраивать их программно из ваших систем.

Формы подписки

Формы подписки — инструмент для привлечения новых подписчиков через сайт. Посетитель оставляет контактные данные, после чего попадает в базу и может получать рассылки. Формы поддерживают Double Opt-In: после заполнения система отправляет письмо с подтверждением, и только после перехода по ссылке контакт считается подтверждённым.

Создать форму подписки и получить код для установки на сайт можно в разделе Сайт → Формы — без написания кода.

Формы подписки

Двухуровневое хранение данных

При заполнении любой формы данные проходят через два уровня хранения:

  • Анкета-формы (form_xxx) — первичные, неподтверждённые данные. Появляются сразу после заполнения формы.
  • Анкеты-хранилища (base, custom и другие) — подтверждённые данные. Переносятся после того, как посетитель перешёл по ссылке в письме подтверждения.

Данные из обоих уровней доступны для персонализации рассылок и работы со сценариями.

Описание ключевых параметров

ПараметрТипОписание
state0 | 1Состояние формы: 0 — отключена, 1 — активна
preview0 | 1Предзаполнение формы ранее введёнными данными при возврате из-за ошибки
only_once0 | 1Форма заполняется одним посетителем только один раз
anketaстрокаКод анкеты-формы, в которую собираются данные
groupстрокаСписок, в который попадают заполнившие форму
originстрокаИсточник, присваиваемый новым контактам (member.origin)
landing.webpageчислоID веб-страницы для landing-page формы
fill.draftчислоID черновика fill-letter
fill.webpageчислоID веб-страницы fill-page
fill.linkстрокаURL для редиректа после заполнения
welcome.draftчислоID черновика welcome-letter
welcome.webpageчислоID веб-страницы welcome-page
welcome.linkстрокаURL для редиректа после подтверждения
notify.emailмассивСписок адресов для уведомлений о заполнении
notify.draftчислоID черновика уведомления

Получить список форм — form.list

{
"action": "form.list"
}

Ответ:

{
"list": [
{
"id": 101,
"name": "Подписка на рассылку",
"state": 1,
"origin": "website",
"create.date": "2025-01-15 10:30:00",
"update.date": "2025-02-20 14:00:00"
},
{
"id": 102,
"name": "Подписка на новости блога",
"state": 1,
"origin": "website",
"create.date": "2025-02-01 09:00:00",
"update.date": "2025-02-18 16:45:00"
}
]
}

Прочитать конфигурацию формы — form.get

{
"action": "form.get",
"id": 101
}

Ответ:

{
"obj": {
"id": 101,
"name": "Подписка на рассылку",
"create.date": "2025-01-15 10:30:00",
"update.date": "2025-02-20 14:00:00",
"state": 1,
"preview": 0,
"only_once": 1,
"anketa": "form_subscribe",
"group": "new_subscribers",
"origin": "website",
"landing": {
"webpage": 500
},
"fill": {
"draft": 12345,
"link": "https://example.com/thank-you"
},
"welcome": {
"draft": 12346,
"webpage": 501
},
"notify": {
"email": ["admin@example.com"],
"draft": 12347
}
}
}

Создать или изменить форму — form.set

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

Создание новой формы

{
"action": "form.set",
"obj": {
"name": "Подписка на новости блога",
"state": 1,
"anketa": "form_blog_subscribe",
"group": "blog_subscribers",
"origin": "website",
"only_once": 1,
"preview": 0,
"fill": {
"draft": 12350,
"webpage": 510
},
"welcome": {
"draft": 12351,
"link": "https://example.com/subscribe-complete"
},
"notify": {
"email": ["marketing@example.com", "support@example.com"],
"draft": 12352
}
},
"return_fresh_obj": 1
}

Отключение существующей формы

{
"action": "form.set",
"id": 101,
"obj": {
"state": 0
}
}

Настройка уведомлений о заполнении

Параметр notify отвечает за уведомление о заполнении формы — отдельное письмо, которое уходит вам или коллегам (не подписчику). В уведомлении используются два поля: notify.email — список адресов получателей, notify.draft — ID черновика письма с уведомлением.

Чтобы задать уведомления, передайте оба поля в form.set:

{
"action": "form.set",
"id": 101,
"obj": {
"notify": {
"email": ["marketing@example.com", "support@example.com"],
"draft": 12352
}
}
}

Чтобы отключить уведомления, передайте пустой объект:

{
"action": "form.set",
"id": 101,
"obj": {
"notify": {}
}
}

Удалить форму — form.delete

{
"action": "form.delete",
"id": 102,
"keep_anketa": 0
}
ПараметрОписание
idИдентификатор удаляемой формы
keep_anketa0 — удалить привязанную анкету (по умолчанию), 1 — оставить анкету
Важно

Вместе с формой удаляется привязанная анкета, если её код начинается на form_ и у анкеты не установлен флаг protected. Собранные данные клиентов при этом сохраняются.

Получить код формы для сайта — form.source

{
"action": "form.source",
"id": 101,
"js": 1,
"channel": "site"
}
ПараметрЗначенияОписание
idчислоИдентификатор формы
js0 | 1Генерировать код с JavaScript
channelsite | email | ampГде будет размещена форма

Ответ:

{
"html": "<form action='https://sendsay.ru/form/101' method='POST'>...</form>",
"url": "https://sendsay.ru/form/101",
"url.fill": "https://sendsay.ru/form/101/fill",
"url.welcome": "https://sendsay.ru/form/101/welcome"
}

Для AMP-писем ответ дополнительно содержит:

{
"amp": "<form method='POST' action-xhr='...'>...</form>",
"amp.head": "<script async custom-element='amp-form' src='...'></script>"
}

Отправить письмо подтверждения — member.sendconfirm

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

Отправка одному контакту:

{
"action": "member.sendconfirm",
"confirm": 1,
"letter": "код_информационного_письма",
"email": "user@example.com"
}

Отправка по списку контактов:

{
"action": "member.sendconfirm",
"confirm": 1,
"letter": "код_информационного_письма",
"list": ["user1@example.com", "user2@example.com", "user3@example.com"],
"sync": 0
}

Отправка по сегменту:

{
"action": "member.sendconfirm",
"confirm": 1,
"letter": "код_информационного_письма",
"group": "unconfirmed_subscribers",
"sync": 0
}

Параметры вызова:

ПараметрОписание
confirm1 — высылка писем для подтверждения внесения в базу
unsubcancel1 — высылка писем для удаления из глобального стоп-листа
unsubsendercancel1 — высылка писем для удаления из стоп-листа по отправителю
letterКод информационного письма (обязательно). Должен иметь заполненный адрес отправителя и не находиться на модерации
issue_nameНазвание создаваемого выпуска. Если пусто — используется тема письма
emailИдентификатор одного контакта
listМассив идентификаторов контактов
groupКод сегмента контактов
group.filterФильтр отбора контактов
addr_typeТип идентификатора: email, msisdn, csid и другие
sync0 — асинхронный запуск, 1 — синхронный
Важно

Информационное письмо должно содержать ссылку подтверждения. Если контакт был внесён в базу с необходимостью подтверждения, но письмо не было отправлено, его можно отправить позже через member.sendconfirm.

Как перенести данные без подтверждения

В некоторых случаях нужно перенести данные из анкеты-формы в анкеты-хранилища без ожидания подтверждения от контакта:

{
"action": "form.transfer",
"id": 101,
"email": "user@example.com"
}
Важно

Этот вызов только переносит данные. Он не подтверждает регистрацию нового контакта и не вызывает события «Форма заполнена» или «Форма подтверждена». Используйте его только когда подтверждение не требуется.

Статистика форм

Статистику заполнения форм можно получить через stat.uni. Доступные события:

СобытиеОписание
event.type: "fill"Заполнение формы
event.type: "confirm"Подтверждение email (DOI)
form.idИдентификатор формы
answerДанные, введённые контактом
origin.idИсточник трафика

Получение статистики через Sendsay API

Справочник API-методов форм

МетодОписание
form.listСписок всех форм
form.getЧтение конфигурации формы по ID
form.setСоздание или изменение формы
form.deleteУдаление формы (и, опционально, привязанной анкеты)
form.sourceПолучение HTML/JS-кода формы для установки на сайт
form.transferПеренос данных из анкеты-формы в анкеты-хранилища без подтверждения

Читайте также:
Как собирать согласие на обработку персональных данных
Получение статистики через Sendsay API