Шаблоны сообщений
Создать официальный шаблон WABA через Gateway API — POST /templates/. name в нижнем регистре [a-z0-9_], body_text обязателен, header_text/footer_text по желанию; channel_id здесь в теле (маршрут плоский). Ответ всегда PENDING: вердикт Meta (APPROVED/REJECTED) приходит асинхронно — в потоке templates или следующим GET /templates/:
curl -X POST https://dialogs.tehprof.kz/api/v1/gw/templates/ \
-H "Authorization: Bearer gw_xxx" \
-H "Content-Type: application/json" \
-d '{
"channel_id": 32,
"name": "order_shipped",
"language": "ru",
"category": "UTILITY",
"body_text": "Заказ {{1}} отправлен, курьер {{2}}.",
"footer_text": "TehProf.kz"
}'
201 { "template_id": "123", "status": "PENDING" }Список шаблонов — GET /templates/?channel_id=. Из синхронизированного зеркала, без живого вызова Meta. status у каждого: APPROVED | PENDING | REJECTED | PAUSED | DISABLED — слать через template можно только APPROVED:
curl "https://dialogs.tehprof.kz/api/v1/gw/templates/?channel_id=32" \
-H "Authorization: Bearer gw_xxx"
{
"templates": [
{
"template_id": "123",
"name": "order_shipped",
"language": "ru",
"status": "APPROVED",
"category": "UTILITY",
"rejection_reason": "",
"quality_rating": "GREEN",
"components": [ { "type": "BODY", "text": "Заказ {{1}} отправлен, курьер {{2}}." } ]
}
]
}Правка шаблона — PATCH /templates/<id>/. Ловушка: components у Meta заменяются ЦЕЛИКОМ. Правка без body_text (один header_text/footer_text) молча ничего не меняет, а body_text без header/footer СОТРЁТ существующие HEADER и FOOTER. Правило: правишь текст — шли все три текстовых поля разом. name и language неизменяемы; правка перезапускает ревью, вердикт придёт в поток templates. channel_id в теле:
curl -X PATCH https://dialogs.tehprof.kz/api/v1/gw/templates/123/ \
-H "Authorization: Bearer gw_xxx" \
-H "Content-Type: application/json" \
-d '{
"channel_id": 32,
"body_text": "Заказ {{1}} доставлен.",
"header_text": "TehProf.kz",
"footer_text": "Спасибо"
}'
200 { "template_id": "123", "status": "APPROVED" }Удаление — DELETE /templates/<id>/?channel_id=. Внимание: здесь channel_id в query, а не в теле (в отличие от PATCH). Ответ 204 без тела. Имя удалённого APPROVED-шаблона занято 30 дней — «удалить и создать заново» не способ правки, для этого PATCH:
curl -X DELETE "https://dialogs.tehprof.kz/api/v1/gw/templates/123/?channel_id=32" \
-H "Authorization: Bearer gw_xxx"
204 No ContentЗдоровье шаблона — GET /templates/<id>/health/?channel_id=. Живой pre-flight у Meta: шаблон может провалиться ПОСЛЕ ответа 201 (например, у WABA нет оплаты), поэтому спрашивайте здоровье ДО отправки, а не судите по коду. can_send: available | limited | blocked; когда не available, reasons несёт текст ошибки и решение по каждой сущности (номер, WABA, бизнес, приложение, шаблон):
curl "https://dialogs.tehprof.kz/api/v1/gw/templates/123/health/?channel_id=32" \
-H "Authorization: Bearer gw_xxx"
200 {
"can_send": "blocked",
"reasons": [
{
"code": "141006",
"description": "There is an error with the payment method...",
"solution": "Add a new payment method to the account.",
"entity": "WABA"
}
]
}