Textos e pedidos de mudança
Troca só as frases do fluxo do seller sem mexer no desenho e pede à plataforma uma mudança de estrutura.
Nem todo ajuste precisa do editor de blocos. Para trocar uma saudação ou o texto de uma opção do menu, use flow-copy: você grava textos que prevalecem sobre os do fluxo, e o desenho continua intacto. Para mudar a estrutura (acrescentar um passo, mudar a ordem), o seller pode editar blocos e conexões ou, se preferir que a plataforma faça, abrir um pedido de mudança (flow-requests).
Ler os textos editáveis
/api/v1/vendor/whatsapp/flow-copySellerLista as frases do fluxo que o seller pode trocar
Usa o fluxo ativo do seller (o mesmo de Fluxo ativo). Só blocos de texto e de escolha entram: message e human_handoff (campo text) e menu, list e button (campo question e uma entrada option_N por opção). Blocos estruturais, como login e carrinho, não aparecem.
Exemplo de requisição
curl "$BASE_URL/api/v1/vendor/whatsapp/flow-copy" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"flow_id": "6f1c2d3e-9a4b-4c5d-8e7f-0a1b2c3d4e5f",
"flow_name": "Welcome Retail",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"fields": [
{
"block_id": "b1a2c3d4-0000-4000-8000-000000000001",
"block_name": "Boas-vindas",
"block_type": "message",
"field_key": "text",
"label": "Mensagem",
"base_text": "Oi! Bem-vindo à {{vendor_name}}.",
"value": "Oi! Que bom ter você na {{vendor_name}}.",
"overridden": true
},
{
"block_id": "b1a2c3d4-0000-4000-8000-000000000002",
"block_name": "Menu principal",
"block_type": "menu",
"field_key": "option_0",
"label": "Opção 1",
"base_text": "Ver produtos",
"value": "Ver produtos",
"overridden": false
}
]
}Campos da resposta
flow_iduuidflow_namestringvendor_iduuidfieldsarrayfields[].block_iduuidfields[].block_namestringfields[].block_typestringfields[].field_keystringtext, question ou option_N. Junto com block_id, identifica o campo.fields[].labelstringfields[].base_textstringfields[].valuestringfields[].overriddenbooleantrue quando existe uma troca do seller.Erros
| Status | Quando | Corpo |
|---|---|---|
| 401 / 403 | Autenticação, módulo ou privilégio | veja Fluxo |
| 404 | Usuário sem cadastro de seller | {"error":"vendor profile not found","code":"vendor_profile_not_found"} |
| 500 | Falha ao montar | {"error":"..."} |
Gravar textos
/api/v1/vendor/whatsapp/flow-copySellerGrava as trocas de texto do seller
Sem aprovação: a troca vale na hora para as próximas conversas. Devolve a mesma estrutura da leitura, já com os novos valores. Para voltar ao texto original, grave o texto original de base_text; não existe rota para apagar uma troca.
Corpo da requisição
flow_iduuidfieldsarrayobrigatórioLista de trocas.
block_iduuidobrigatóriofields[].block_id da leitura).field_keystringobrigatóriotext, question ou option_N).valuestringobrigatório{{vendor_name}} continuam valendo.Exemplo de requisição
curl -X PUT "$BASE_URL/api/v1/vendor/whatsapp/flow-copy" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"fields": [
{
"block_id": "b1a2c3d4-0000-4000-8000-000000000001",
"field_key": "text",
"value": "Oi! Que bom ter você na {{vendor_name}}."
}
]
}'Resposta
{
"flow_id": "6f1c2d3e-9a4b-4c5d-8e7f-0a1b2c3d4e5f",
"flow_name": "Welcome Retail",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"fields": [
{
"block_id": "b1a2c3d4-0000-4000-8000-000000000001",
"block_name": "Boas-vindas",
"block_type": "message",
"field_key": "text",
"label": "Mensagem",
"base_text": "Oi! Bem-vindo à {{vendor_name}}.",
"value": "Oi! Que bom ter você na {{vendor_name}}.",
"overridden": true
}
]
}Erros
| Status | Quando | Corpo |
|---|---|---|
| 400 | JSON inválido | {"error":"invalid json"} |
| 400 | Sem flow_id e o seller não tem fluxo | {"error":"no flow for vendor; ask admin to assign a playbook"} |
| 400 | block_id que não é UUID válido | {"error":"..."} |
| 401 / 403 | Autenticação, módulo ou privilégio | veja Fluxo |
Listar pedidos de mudança
/api/v1/vendor/whatsapp/flow-requestsSellerLista os pedidos de mudança de estrutura do seller
Devolve até 100 pedidos, do mais novo para o mais antigo.
Parâmetros de consulta
statusstringpendingapprovedrejectedappliedExemplo de requisição
curl "$BASE_URL/api/v1/vendor/whatsapp/flow-requests?status=pending" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"requests": [
{
"id": "e7d6c5b4-0000-4000-8000-000000000001",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"flow_id": "6f1c2d3e-9a4b-4c5d-8e7f-0a1b2c3d4e5f",
"title": "Acrescentar passo de troca e devolução",
"description": "Depois do menu, uma opção que explique o prazo de troca.",
"status": "pending",
"created_by": "d4613dde-ac7a-4319-9232-50d8cd6ad5fc",
"created_at": "2026-10-11T14:40:00Z",
"updated_at": "2026-10-11T14:40:00Z"
}
]
}Campos da resposta
requestsarrayrequests[].iduuidrequests[].vendor_iduuidrequests[].flow_iduuidrequests[].titlestringrequests[].descriptionstringrequests[].statusstringpendingapprovedrejectedappliedpending aguarda análise; approved foi aceito; rejected foi recusado; applied já foi feito no fluxo.requests[].admin_notesstringrequests[].created_byuuidrequests[].reviewed_byuuidrequests[].reviewed_atstringrequests[].created_atstringrequests[].updated_atstringErros
| Status | Quando | Corpo |
|---|---|---|
| 401 / 403 | Autenticação, módulo ou privilégio | veja Fluxo |
| 500 | Falha ao ler | {"error":"..."} |
Abrir um pedido de mudança
/api/v1/vendor/whatsapp/flow-requestsSellerPede à plataforma uma mudança na estrutura do fluxo
Registra o pedido como pending. A mudança não é aplicada automaticamente: uma pessoa da plataforma analisa, e o resultado aparece no status e em admin_notes. Responde 201 com o pedido.
Corpo da requisição
titlestringobrigatóriodescriptionstringflow_iduuidExemplo de requisição
curl -X POST "$BASE_URL/api/v1/vendor/whatsapp/flow-requests" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Acrescentar passo de troca e devolução",
"description": "Depois do menu, uma opção que explique o prazo de troca."
}'Resposta
{
"id": "e7d6c5b4-0000-4000-8000-000000000001",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"flow_id": "6f1c2d3e-9a4b-4c5d-8e7f-0a1b2c3d4e5f",
"title": "Acrescentar passo de troca e devolução",
"description": "Depois do menu, uma opção que explique o prazo de troca.",
"status": "pending",
"created_by": "d4613dde-ac7a-4319-9232-50d8cd6ad5fc",
"created_at": "2026-10-11T14:40:00Z",
"updated_at": "2026-10-11T14:40:00Z"
}Erros
| Status | Quando | Corpo |
|---|---|---|
| 400 | JSON inválido | {"error":"invalid json"} |
| 400 | title vazio | {"error":"vendor_id and title required"} |
| 401 / 403 | Autenticação, módulo ou privilégio | veja Fluxo |