Flows globais
Cria, lista, consulta, atualiza e apaga os Flows do WhatsApp compartilhados por todas as lojas, com a validação do JSON no formato da Meta.
Um Flow é um formulário nativo do WhatsApp: telas com textos, campos, listas e botões que abrem dentro da conversa, em vez de o cliente digitar tudo em mensagens. O Flow é descrito por um JSON no formato da Meta (flow_json). A Venddor guarda o JSON, valida e, quando você manda, publica na Meta (veja Publicar, pré-visualizar e usar com IA).
Os Flows desta página são globais: ficam no banco mestre e valem para toda loja com o módulo WhatsApp Commerce. Uma loja pode criar um Flow próprio com a mesma flow_key, e o da loja prevalece sobre o global. Um Flow só passa a ser usado pela IA de atendimento quando está published. Exigem root_admin com o privilégio manage_whatsapp_platform.
O objeto Flow
Campos do Flow
idintegerflow_keystringnamestringflow_key.scopestringstoreglobalglobal nestas rotas.flow_jsonobjectai_when_to_usestringai_paramsobject{} quando não há.statusstringdraftpublisheddraft até ser publicado. Só published é oferecido à IA. O servidor não restringe o valor enviado: use apenas esses dois.versionintegermeta_flow_idstringpublish.categorystringSIGN_UPSIGN_INAPPOINTMENT_BOOKINGLEAD_GENERATIONCONTACT_USCUSTOMER_SUPPORTSURVEYOTHEROTHER, sem aviso.created_atstringupdated_atstringRegras de validação do flow_json
A plataforma recusa o JSON ao salvar, publicar e gerar quando alguma destas regras falha:
| Regra | Detalhe |
|---|---|
version | Obrigatório (texto, por exemplo "7.3") |
screens | De 1 a 20 telas, cada uma com id não vazio e único |
| Layout | layout.type deve ser SingleColumnLayout, com pelo menos 1 componente |
| Componentes aceitos | TextHeading, TextSubheading, TextBody, TextCaption, RichText, TextInput, TextArea, Dropdown, RadioButtonsGroup, CheckboxGroup, ChipsSelector, DatePicker, CalendarPicker, PhotoPicker, DocumentPicker, OptIn, EmbeddedLink, Image, ImageCarousel, NavigationList, Footer. Os contêineres Form, If e Switch são aceitos e seus filhos também são validados |
| Propriedades obrigatórias | Texto (text) nos de texto e EmbeddedLink; name e label nos campos de entrada e seleção; label no Footer; src no Image; images no ImageCarousel; list-items no NavigationList |
Ações (on-click-action.name) | navigate, data_exchange, complete ou update_data |
| Limites por componente | Dropdown: até 200 itens; RadioButtonsGroup, CheckboxGroup, ChipsSelector: até 20; ImageCarousel: até 10 imagens |
| Limites por tela | Até 2 NavigationList, e ele não combina com outros componentes; até 1 DocumentPicker, que não coexiste com PhotoPicker; até 1 Form; até 1 Footer, que deve ser o último; If aninhado até 3 níveis |
| Outras | Form e ImageCarousel não ficam dentro de If; error-message não é permitido; on-unselect-action deve ser update_data |
As mensagens de erro são devolvidas em português pelo servidor.
Listar Flows
/api/v1/admin/whatsapp-platform/flowsAdminListar os Flows globais
Devolve todos os Flows globais, do alterado há menos tempo para o mais antigo, sem paginação, e a lista de tipos de componente aceitos (útil para montar uma paleta de edição).
Campos da resposta
flowsarrayflow_json do exemplo foi encurtado.componentsarrayCriar um Flow
/api/v1/admin/whatsapp-platform/flowsAdminCriar um Flow global
Valida o flow_json e grava o Flow como draft (versão 1). Criar não publica nada na Meta.
Corpo da requisição
flow_keystringobrigatório_. Uma chave repetida falha (veja Erros).namestringflow_jsonobjectobrigatórioai_when_to_usestringai_paramsobject{}.statusstringpadrão: draftdraftpublisheddraft: published aqui só marca o registro, não publica na Meta.categorystringpadrão: OTHERSIGN_UPSIGN_INAPPOINTMENT_BOOKINGLEAD_GENERATIONCONTACT_USCUSTOMER_SUPPORTSURVEYOTHERExemplo de requisição
A criação devolve 200 (não 201) com o Flow completo.
Consultar um Flow
/api/v1/admin/whatsapp-platform/flows/{id}AdminConsultar um Flow pelo id
Devolve um Flow, com o flow_json completo.
Parâmetros de caminho
idintegerobrigatórioA resposta 200 é o objeto Flow descrito acima.
Atualizar um Flow
/api/v1/admin/whatsapp-platform/flows/{id}AdminAtualizar um Flow global
Substitui o conteúdo do Flow, valida o flow_json e soma 1 em version. É uma substituição completa: o que você não enviar é apagado ou volta ao padrão. A flow_key e o meta_flow_id não mudam. Atualizar não reenvia nada à Meta; para isso use publish de novo.
Parâmetros de caminho
idintegerobrigatórioCorpo da requisição
namestringflow_jsonobjectobrigatórioai_when_to_usestringai_paramsobject{}.statusstringpadrão: draftdraftpublisheddraft, mesmo que estivesse publicado.categorystringpadrão: OTHERSIGN_UPSIGN_INAPPOINTMENT_BOOKINGLEAD_GENERATIONCONTACT_USCUSTOMER_SUPPORTSURVEYOTHEROTHER.flow_keystringA resposta 200 é o Flow atualizado, com version incrementada.
Apagar um Flow
/api/v1/admin/whatsapp-platform/flows/{id}AdminApagar um Flow global
Remove o registro da plataforma. Se o Flow já foi publicado, ele continua existindo na Meta; só deixa de estar disponível aqui. Apagar um id que não existe também devolve sucesso.
Parâmetros de caminho
idintegerobrigatórioErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | Corpo inválido | {"error":"Invalid request body"} |
| 400 | {id} que não é inteiro | {"error":"Invalid id"} |
| 400 | flow_key vazia (POST) | {"error":"flow_key é obrigatório"} |
| 400 | flow_key já existe (POST) | {"error":"..."} (mensagem do banco) |
| 400 | PUT em um id que não existe | {"error":"flow não encontrado"} |
| 404 | GET em um id que não existe | {"error":"flow não encontrado"} |
| 422 | flow_json inválido (POST, PUT) | {"error":"Flow JSON inválido","errors":["screens vazio"]} |
| 401 / 403 | Sem token / sem ser root_admin com manage_whatsapp_platform | {"error":"insufficient permissions"} |
| 500 | Falha de banco (listar, apagar) | {"error":"..."} |
Os textos de errors são montados em português pelo servidor, um item por problema encontrado (por exemplo, screen CONTATO comp TextInput: prop obrigatória ausente "label").