1MSG

Создать WhatsApp Flow

POST
/flows

Создаёт WhatsApp Flow в статусе draft (name и categories обязательны). Опционально можно задать endpointUri (URL вашего data channel), сразу загрузить Flow JSON и опубликовать.

Authorization

JWT token
querytoken<token>

Request Body

multipart/form-data
  1. body
name*string

Название сценария

categories*array<>

Категории (через запятую или массив)

endpointUri?string

HTTPS-адрес вашего сервера для data channel этого Flow. Это не маршрут 1msg, и эти вызовы не приходят на webhookUrl канала.

WhatsApp отправляет POST JSON с полями encrypted_flow_data, encrypted_aes_key и initial_vector. Расшифруйте encrypted_aes_key приватным RSA-ключом от загруженного business_public_key (RSA-OAEP, SHA-256), затем encrypted_flow_data через AES-128-GCM (initial_vector — IV, последние 16 байт ciphertext — auth tag). Ответ — эта ciphertext-строка в base64 и заголовок Content-Type: text/plain. Шифруйте ответ тем же AES-ключом и IV, у которого инвертирован каждый байт. Если расшифровать запрос не удалось, ответьте HTTP 421: приложение WhatsApp заново запросит публичный ключ.

Тот же URL получает служебный ping. Ответьте в том же зашифрованном виде; расшифрованное тело — {"data":{"status":"active"}}. ping и обмены экранами не приходят в webhook канала. Когда пользователь отправляет форму, итог приходит на webhookUrl канала: messages[].interactive.type = nfm_reply.

Сначала загрузите публичный ключ через POST /whatsapp_business_encryption и вызывайте GET /whatsapp_business_encryption, пока business_public_key_signature_status не станет VALID.

Formaturi
cloneFlowId?string

ID сценария для клонирования

publish?boolean

Опубликовать сразу

flowJson?|

JSON сценария (строка или объект)

file?unknown

Необязательная загрузка flow.json

Response Body

Flow создан

application/json
  1. response
id?string
success?boolean
flowJson?
publish?
curl -X POST 'https://api.1msg.io/123/flows' \  -F 'name=lead_form' \  -F 'categories=[  "LEAD_GENERATION"]' \  -F 'publish=false'
{  "id": "string",  "success": true,  "flowJson": {    "success": true,    "validationErrors": [      {        "error": "string",        "errorType": "string",        "message": "string",        "lineStart": 0,        "lineEnd": 0,        "columnStart": 0,        "columnEnd": 0,        "pointers": [          {            "lineStart": 0,            "lineEnd": 0,            "columnStart": 0,            "columnEnd": 0,            "path": "string"          }        ]      }    ]  },  "publish": {}}