Формы
`forms.list`, `get`, `create`, `update`, `delete`, `publish`, `pause`, `resume`, `duplicate`, `analytics`, `list_starters`, `get_starter`, `list_submissions`, `get_submission`, `delete_submission`, `delete_submissions`, `approve_submission`, `resend_confirmation` и `subscribe`.
Все методы
from openemail import openemail form = openemail.forms.create({ 'name': 'Newsletter sign-up', 'starter': 'newsletter', 'settings': {'audienceIds': ['aud_4c1b8e2a7d9f05c36b4e8a71']}, 'publish': True,}) print(form['url'], form['subscribeUrl']) saved = openemail.forms.update(form['id'], { 'settings': {'doubleOptIn': True, 'senderAddress': '[email protected]'}, 'expectedUpdatedAt': form['updatedAt'],}) signup = openemail.forms.subscribe(form['id'], { 'email': '[email protected]', 'first_name': 'Ann', 'consent': True,}) for submission in openemail.forms.iterate_submissions(form['id'], status='pending'): if submission['expired']: openemail.forms.resend_confirmation(form['id'], submission['id']) stats = openemail.forms.analytics(form['id'], days=30)starters = openemail.forms.list_starters() openemail.forms.pause(form['id'])openemail.forms.resume(form['id'])copy = openemail.forms.duplicate(form['id'])openemail.forms.delete(copy['id']) print(saved['senderIssue'], signup['outcome'], stats['totals']['conversion'], len(starters))Форма хранит черновик document и publishedDocument, который видят посетители. update меняет черновик и настройки, а publish публикует черновик. Настройки вступают в силу сразу, опубликована форма или нет, а expectedUpdatedAt отклоняет с 409 version_conflict сохранение, которое перезаписало бы чужое.
Для чтения нужен forms:read, а для изменения нужен forms:write. Для approve_submission нужен также contacts:write, потому что этот метод добавляет контакт. Для resend_confirmation нужен также emails:send, как и для вызова, который заставляет форму отправлять почту: включающего doubleOptIn, задающего senderAddress или письмо с подтверждением, публикующего или возобновляющего форму с двойным подтверждением. delete требует от токена доступа OAuth код подтверждения, а от API-ключа никогда.
subscribe подписывает человека так же, как страница формы, и не отправляет учётных данных, даже из клиента, у которого они есть. Все подписки из одной сети делят один лимит в 40 подписок на каждые десять минут, поэтому сервер, который передаёт подписки многих людей, быстро его исчерпает: людей, которых вы уже знаете, лучше добавляйте через audiences.import_contacts. Передайте страницу, на которой была форма, как oe_source, не указывайте oe_started, а oe_website отправляйте пустым или не отправляйте вовсе.
Ответ 422 от subscribe означает invalid_form_submission, и fields в ошибке перечисляет каждый отсутствующий или недопустимый ответ в виде {'key': ..., 'error': ...} с причинами, такими как required, email и option. Клиент предназначен для серверов. В браузере отправляйте ответы через fetch на subscribeUrl формы, телом в JSON или с заголовком Accept: application/json, и он отвечает в JSON на запросы с любого источника. Если нет ни того, ни другого, он отвечает перенаправлением 303 на размещённую у нас страницу.
Ответ: FormDetailResource
list возвращает одну страницу FormResource, от новых к старым, без document и settings, а list_all и iterate проходят все страницы. get, create, update, publish, pause, resume и duplicate возвращают FormDetailResource, который добавляет document, publishedDocument, settings, audiences, senderIssue и senderProblem.
idstr- Постоянный идентификатор: `frm_` и 24 шестнадцатеричных символа.
statusLiteral['draft', 'live', 'paused']- `draft` до первой публикации, затем `live`, пока форма принимает подписки, и `paused`, пока не принимает. Форма никогда не возвращается в `draft`.
urlstr- Размещённая у нас страница опубликованной формы, чтобы делиться ею как ссылкой.
subscribeUrlstr- Куда обычная HTML-форма или `fetch` отправляет ответы.
documentFormDocument- Черновик: `fields` по порядку, окружающие их тексты `copy` и оформление `style`.
publishedDocumentFormDocument | None- То, что посетители видят сейчас. `None` до первой публикации.
settingsFormSettings- Куда попадают подписки и что происходит после подписки: `audienceIds`, `doubleOptIn`, `senderAddress`, письмо с подтверждением, `successAction`, `redirectUrl` и `notifyAddresses`.
hasUnpublishedChangesbool- `True`, когда черновик отличается от того, что видят посетители. Всегда `False` до первой публикации.
senderIssueLiteral['missing', 'not_sendable', 'not_allowed'] | None- Почему форма с двойным подтверждением сейчас не может отправлять письма с подтверждением, или `None`, когда может.
statsFormStats- `views`, `submissions`, `added`, `pending` и `lastSubmittedAt`, подсчитанные в момент чтения.
Заявки
list_submissions выдаёт страницы от новых к старым, с q для поиска по адресам электронной почты и status для pending или added, а list_all_submissions и iterate_submissions проходят все страницы. Каждый FormSubmissionResource хранит ответы в том виде, в каком они были отправлены, вместе с подписями, поэтому читается правильно и после изменения формы.
resend_confirmation возвращает заявку с confirmationSent. Он равен False, когда ничего не ушло: один адрес получает одно подтверждение на форму раз в десять минут и пять в день по всему рабочему пространству, а уже добавленная заявка не получает ни одного. expired отмечает ожидающую подписку, у которой истекла последняя ссылка.
Справочник
forms.list()Полный справочникforms.list_all()Полный справочникforms.iterate()Полный справочникforms.get()Полный справочникforms.create()Полный справочникforms.update()Полный справочникforms.delete()Полный справочникforms.publish()Полный справочникforms.pause()Полный справочникforms.resume()Полный справочникforms.duplicate()Полный справочникforms.analytics()Полный справочникforms.list_starters()Полный справочникforms.get_starter()Полный справочникforms.list_submissions()Полный справочникforms.list_all_submissions()Полный справочникforms.iterate_submissions()Полный справочникforms.get_submission()Полный справочникforms.delete_submission()Полный справочникforms.delete_submissions()Полный справочникforms.approve_submission()Полный справочникforms.resend_confirmation()Полный справочникforms.subscribe()Полный справочник