Criar e alterar fluxos
Cria, altera, apaga e duplica fluxos de conversa do bot de WhatsApp.
Estas rotas escrevem nos fluxos. Lembre da ordem de montagem: criar o fluxo, criar os blocos, criar as ligações, definir o bloco inicial e só então ativar.
Criar um fluxo
Cria um fluxo vazio. Depois de criar, adicione os blocos, ligue-os e defina start_block_id com PATCH. Um fluxo novo nasce como rascunho e com gatilho manual, ou seja, não responde a ninguém até você configurar o gatilho e ativar.
/api/v1/admin/whatsapp/flowsAdminCria um fluxo de conversa
Corpo da requisição
namestringobrigatóriovendor_iduuiddescriptionstringstatusstringpadrão: draftdraftactiveinactivearchivedinactive (disabled vale como apelido de inactive).channelstringpadrão: whatsappmodestringmetadataobjectpadrão: {}trigger_typestringmanualkeywordinbound_defaultmanual não dispara sozinho (só pelos testes); keyword dispara quando a mensagem casa com trigger_keywords; inbound_default atende quem escreve e não casou com nenhum outro fluxo.trigger_keywordsarraytrigger_type é keyword.trigger_match_modestringexactstarts_withcontainsregexcontains.trigger_case_sensitivebooleanpadrão: falsetrigger_priorityintegerpadrão: 0Exemplo de requisição (Criar um fluxo)
curl -X POST "$BASE_URL/api/v1/admin/whatsapp/flows" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Boas-vindas",
"description": "Recebe o cliente novo e mostra o menu.",
"trigger_type": "keyword",
"trigger_keywords": [
"oi",
"olá"
],
"trigger_match_mode": "contains"
}'Resposta (Criar um fluxo)
{
"id": "fa4b0c91-2883-43c6-94ef-86e5b540a2aa",
"vendor_id": "9d9d9d56-eb43-4719-889d-055632f7c7da",
"name": "Boas-vindas",
"description": "Recebe o cliente novo e mostra o menu.",
"status": "draft",
"channel": "whatsapp",
"metadata": {},
"trigger_type": "keyword",
"trigger_keywords": [
"oi",
"olá"
],
"trigger_match_mode": "contains",
"trigger_case_sensitive": false,
"trigger_priority": 0,
"created_at": "2026-05-07T06:53:05.104529Z",
"updated_at": "2026-07-21T15:42:56.298575Z"
}Campos da resposta
iduuidvendor_iduuidnamestringdescriptionstringstart_block_iduuidstatusstringdraftactiveinactivearchivedA ativo, P inativo, R rascunho, H arquivado) ou como palavra (active, inactive, draft, archived), conforme a loja. Ao escrever, envie sempre a palavra.channelstringwhatsapp.modestringmetadataobject{} quando vazio.trigger_typestringmanualkeywordinbound_defaulttrigger_keywordsarraykeyword. Lista vazia quando não há.trigger_match_modestringexactstarts_withcontainsregextrigger_case_sensitivebooleantrue distingue maiúsculas de minúsculas (não vale para regex).trigger_priorityintegercreated_atstringupdated_atstringErros (Criar um fluxo)
| Status | Quando | Corpo |
|---|---|---|
| 400 | Corpo que não é JSON, nome vazio, trigger_type ou trigger_match_mode inválidos, ou gatilho keyword sem palavras. | {"error":"whatsapp/flows: name is required"} ou {"error":"whatsapp/flows: invalid trigger_type \"x\" (want manual|keyword|inbound_default)"} ou {"error":"whatsapp/flows: trigger_type=keyword requires at least one non-empty trigger_keywords entry"} |
| 401 | Sem token, token inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O módulo WhatsApp Commerce está desligado na loja, o usuário não é administrador ou não tem o privilégio exigido. | {"error":"module_disabled","module":"whatsapp-commerce"} ou {"error":"insufficient privileges","required":"manage_settings"} ou {"error":"admin access required"} |
Alterar um fluxo
Altera só os campos enviados. É por aqui que você define o bloco inicial e ativa ou desativa o fluxo.
/api/v1/admin/whatsapp/flows/{id}AdminAltera um fluxo
Parâmetros de caminho
iduuidobrigatórioCorpo da requisição
namestringdescriptionstringstatusstringdraftactiveinactivearchivedinactive.channelstringmodestringstart_block_iduuid"" (texto vazio) para limpar. null é ignorado: não limpa.metadataobjectnull volta para {}.trigger_typestringmanualkeywordinbound_defaultmanual não dispara sozinho (só pelos testes); keyword dispara quando a mensagem casa com trigger_keywords; inbound_default atende quem escreve e não casou com nenhum outro fluxo.trigger_keywordsarraytrigger_type é keyword.trigger_match_modestringexactstarts_withcontainsregexcontains.trigger_case_sensitivebooleantrigger_priorityintegerExemplo de requisição (Alterar um fluxo)
curl -X PATCH "$BASE_URL/api/v1/admin/whatsapp/flows/fa4b0c91-2883-43c6-94ef-86e5b540a2aa" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"start_block_id": "5cf73b43-5e23-480c-8037-7a7385251a22",
"status": "active"
}'Resposta (Alterar um fluxo)
{
"id": "fa4b0c91-2883-43c6-94ef-86e5b540a2aa",
"vendor_id": "9d9d9d56-eb43-4719-889d-055632f7c7da",
"name": "Boas-vindas",
"description": "Recebe o cliente novo e mostra o menu.",
"start_block_id": "5cf73b43-5e23-480c-8037-7a7385251a22",
"status": "A",
"channel": "whatsapp",
"metadata": {},
"trigger_type": "keyword",
"trigger_keywords": [
"oi"
],
"trigger_match_mode": "contains",
"trigger_case_sensitive": false,
"trigger_priority": 0,
"created_at": "2026-05-07T06:53:05.104529Z",
"updated_at": "2026-07-21T15:42:56.298575Z"
}Campos da resposta
iduuidvendor_iduuidnamestringdescriptionstringstart_block_iduuidstatusstringdraftactiveinactivearchivedA ativo, P inativo, R rascunho, H arquivado) ou como palavra (active, inactive, draft, archived), conforme a loja. Ao escrever, envie sempre a palavra.channelstringwhatsapp.modestringmetadataobject{} quando vazio.trigger_typestringmanualkeywordinbound_defaulttrigger_keywordsarraykeyword. Lista vazia quando não há.trigger_match_modestringexactstarts_withcontainsregextrigger_case_sensitivebooleantrue distingue maiúsculas de minúsculas (não vale para regex).trigger_priorityintegercreated_atstringupdated_atstringErros (Alterar um fluxo)
| Status | Quando | Corpo |
|---|---|---|
| 400 | Corpo que não é JSON, valor de gatilho inválido, ou trigger_keywords vazia com gatilho keyword. | {"error":"Invalid JSON body"} ou {"error":"whatsapp/flows: invalid trigger_match_mode \"x\" (want exact|starts_with|contains|regex)"} |
| 401 | Sem token, token inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O módulo WhatsApp Commerce está desligado na loja, o usuário não é administrador ou não tem o privilégio exigido. | {"error":"module_disabled","module":"whatsapp-commerce"} ou {"error":"insufficient privileges","required":"manage_settings"} ou {"error":"admin access required"} |
| 404 | Fluxo não encontrado (ou de outro seller, para administrador restrito a um seller). | {"error":"Flow not found"} |
Apagar um fluxo
Apaga o fluxo (remoção lógica): ele some das listagens e deixa de atender clientes.
/api/v1/admin/whatsapp/flows/{id}AdminApaga um fluxo
Parâmetros de caminho
iduuidobrigatórioExemplo de requisição (Apagar um fluxo)
curl -X DELETE "$BASE_URL/api/v1/admin/whatsapp/flows/fa4b0c91-2883-43c6-94ef-86e5b540a2aa" \
-H "Authorization: Bearer $TOKEN"Resposta (Apagar um fluxo)
{
"status": "deleted",
"id": "fa4b0c91-2883-43c6-94ef-86e5b540a2aa"
}Campos da resposta
statusstringdeleteddeleted.iduuidErros (Apagar um fluxo)
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token, token inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O módulo WhatsApp Commerce está desligado na loja, o usuário não é administrador ou não tem o privilégio exigido. | {"error":"module_disabled","module":"whatsapp-commerce"} ou {"error":"insufficient privileges","required":"manage_settings"} ou {"error":"admin access required"} |
| 500 | O id não é um UUID válido, ou falha ao apagar. | {"error":"Failed to delete flow: ..."} |
Duplicar um fluxo
Copia o fluxo com todos os blocos e ligações, para você editar a cópia sem mexer no original. A cópia nasce como rascunho e com gatilho manual; as palavras-chave, o modo e a prioridade são copiados.
/api/v1/admin/whatsapp/flows/{id}/cloneAdminDuplica um fluxo com blocos e ligações
Parâmetros de caminho
iduuidobrigatórioCorpo da requisição
new_namestring (copy).Exemplo de requisição (Duplicar um fluxo)
curl -X POST "$BASE_URL/api/v1/admin/whatsapp/flows/fa4b0c91-2883-43c6-94ef-86e5b540a2aa/clone" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"new_name": "Boas-vindas (versão 2)"
}'Resposta (Duplicar um fluxo)
{
"id": "d4e5f6a7-1b2c-4d3e-8f90-a1b2c3d4e5f6",
"vendor_id": "9d9d9d56-eb43-4719-889d-055632f7c7da",
"name": "Boas-vindas (versão 2)",
"description": "Recebe o cliente novo e mostra o menu.",
"start_block_id": "e1f2a3b4-5c6d-4e7f-8091-a2b3c4d5e6f7",
"status": "draft",
"channel": "whatsapp",
"metadata": {},
"trigger_type": "manual",
"trigger_keywords": [
"oi"
],
"trigger_match_mode": "contains",
"trigger_case_sensitive": false,
"trigger_priority": 0,
"created_at": "2026-05-07T06:53:05.104529Z",
"updated_at": "2026-07-21T15:42:56.298575Z"
}Campos da resposta
iduuidvendor_iduuidnamestringdescriptionstringstart_block_iduuidstatusstringdraftactiveinactivearchivedA ativo, P inativo, R rascunho, H arquivado) ou como palavra (active, inactive, draft, archived), conforme a loja. Ao escrever, envie sempre a palavra.channelstringwhatsapp.modestringmetadataobject{} quando vazio.trigger_typestringmanualkeywordinbound_defaulttrigger_keywordsarraykeyword. Lista vazia quando não há.trigger_match_modestringexactstarts_withcontainsregextrigger_case_sensitivebooleantrue distingue maiúsculas de minúsculas (não vale para regex).trigger_priorityintegercreated_atstringupdated_atstringErros (Duplicar um fluxo)
| Status | Quando | Corpo |
|---|---|---|
| 400 | Fluxo de origem não existe, ou falha ao copiar. | {"error":"whatsapp/flows: source flow not found"} |
| 401 | Sem token, token inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O módulo WhatsApp Commerce está desligado na loja, o usuário não é administrador ou não tem o privilégio exigido. | {"error":"module_disabled","module":"whatsapp-commerce"} ou {"error":"insufficient privileges","required":"manage_settings"} ou {"error":"admin access required"} |