Перейти к содержанию
Версия контракта: 0.3.3 — спека

Шаблоны

Страница для интегратора: почему свободного текста нет, как устроен шаблон и что проверяется до отправки.

Почему шаблон обязателен

Оператор принимает только зарегистрированные тексты: имя отправителя и шаблон проходят у него модерацию, и сообщение, не совпавшее с зарегистрированным, отвергается. Свободный текст в API означал бы отправку, отказ по которой приходит через минуты и не объясняется ничем.

Поэтому отправка идёт по шаблону, а меняется только подстановка.

Как выглядит

Тело шаблона написано операндами оператора, а не фигурными скобками:

Операнд Что принимает
%d только цифры
%w одно слово (без пробелов)
%w{n,m} от n до m слов
Vash kod dlya vhoda: %d
Zapis podtverzhdena na %w

Ваши имена переменных привязаны к операндам по позиции: первая объявленная переменная подставляется в первый операнд. Позиция, а не порядок аргументов — иначе правка текста молча меняла бы, какое значение куда попадёт.

Что проверяется на приёме

Каждое правило здесь существует потому, что его нарушение — отказ у оператора, то есть отказ, о котором вы узнали бы минутами позже вместо мгновенного ответа:

Проверка Отказ
переменная не объявлена шаблоном / не передана обязательная 422 template_variables_mismatch
пустое значение 422 template_variable_invalid
перевод строки в значении 422 template_variable_invalid
символ % в значении 422 template_variable_invalid
%d получил не цифры 422 template_variable_invalid
%w получил несколько слов 422 template_variable_invalid
%w{n,m} получил слов меньше или больше 422 template_variable_invalid

Символ % в значении запрещён не из вредности: подстановка стала бы новым операндом и сдвинула бы разбор у оператора.

Сухой прогон

POST /v1/templates/{id}/render собирает текст с вашими значениями, ничего не отправляя: видно и результат, и число частей, на которые он разобьётся. Это дешевле, чем узнавать длину по факту списания.

Жизненный цикл

draft ──▶ pending_moderation ──▶ active
                              └─▶ rejected
  • draft — черновик, заведённый вами;
  • pending_moderation — отправлен оператору;
  • active — зарегистрирован, годен к отправке;
  • rejected — оператор отказал; причина приходит вместе со статусом.

В боевом режиме шаблон обязан быть active: иначе 422 template_not_active. В тестовом допускаются draft и pending_moderation — ждать ручной модерации, чтобы начать интеграцию, не нужно.

Вердикт модерации приезжает событием: template.activated или template.rejected. Очереди модерации вы не видите — она внутренняя.

Срок модерации у оператора уточняется: см. Ограничения MVP.

Категории и классы

У оператора категория (авторизационное, сервисное, рекламное), у хаба — класс трафика (otp, service, marketing). Они соответствуют друг другу, но это разные вещи: категория определяет, как шаблон модерируется у оператора, класс — сроки жизни, лимиты и то, действует ли отписка.

Класс marketing объявлен в контракте и выключен до третьей фазы: 422 class_not_enabled.

Отписка

У шаблона есть признак «уважает отписку» (respects_opt_out). Сервисные и рекламные шаблоны его уважают: отписавшемуся сообщение не уйдёт (422 recipient_opted_out). Одноразовые коды — нет: см. Одноразовые коды.