Feature - Envio de Template de Flow
Introdução ao documento
Este documento cobre o envio de template WhatsApp com botão FLOW pelo endpoint /sendtemplate.
Evidência: src/routes/sendTemplate.ts:8
Versionamento
- Versão do documento:
2.0.0. - Última atualização:
2026-03-18. Evidência: codex-promts.md:16
Referencial teórico
- Handler HTTP de envio (
sendTemplate.ts). - Cliente Meta Graph API (
sendFlowTemplate.ts). Evidência: src/routes/sendTemplate.ts:1 Evidência: src/features/api/whatsapp/sendFlowTemplate.ts:1
Visão geral
A feature recebe parâmetros de template/flow e dispara mensagem WhatsApp com componente FLOW para iniciar o onboarding no cliente.
Evidência: src/routes/sendTemplate.ts:9
Evidência: src/features/api/whatsapp/sendFlowTemplate.ts:43
Evidência: src/features/api/whatsapp/sendFlowTemplate.ts:50
Atores
- Serviço interno chamador com token de serviço.
- API WhatsApp Cloud da Meta.
- Usuário destinatário da mensagem. Evidência: src/routes/sendTemplate.ts:8 Evidência: src/features/api/whatsapp/sendFlowTemplate.ts:10 Evidência: src/features/api/whatsapp/sendFlowTemplate.ts:14
Pré-condições
Authorizationválido (middlewareverifyServiceToken).- Campos obrigatórios:
phone,flow_token,template_id,name,image_url. WHATSAPP_API_TOKENeWHATSAPP_PHONE_IDconfigurados. Evidência: src/routes/sendTemplate.ts:8 Evidência: src/routes/sendTemplate.ts:11 Evidência: src/features/api/whatsapp/sendFlowTemplate.ts:2 Evidência: src/features/api/whatsapp/sendFlowTemplate.ts:4
Fluxo principal
- Receber
POST /sendtemplate. - Validar campos obrigatórios.
- Montar payload de template com header image, body com primeiro nome e botão FLOW.
- Enviar para Graph API.
- Retornar
201quandook=true. Evidência: src/routes/sendTemplate.ts:8 Evidência: src/routes/sendTemplate.ts:11 Evidência: src/features/api/whatsapp/sendFlowTemplate.ts:22 Evidência: src/features/api/whatsapp/sendFlowTemplate.ts:34 Evidência: src/routes/sendTemplate.ts:17
Fluxos alternativos
- Campos faltando:
400. - Falha de autenticação de serviço:
401/403. - Erro na Graph API:
500. Evidência: src/routes/sendTemplate.ts:12 Evidência: src/auth/serviceToken.ts:22 Evidência: src/auth/serviceToken.ts:30 Evidência: src/features/api/whatsapp/sendFlowTemplate.ts:74
Regras de negócio
- O primeiro nome é derivado por
name.split(" ")[0]no payload. - O template usa idioma fixo
pt_BR. - O componente de botão é do subtipo
FLOWcomflow_tokeninformado. Evidência: src/features/api/whatsapp/sendFlowTemplate.ts:38 Evidência: src/features/api/whatsapp/sendFlowTemplate.ts:19 Evidência: src/features/api/whatsapp/sendFlowTemplate.ts:44
Estados possíveis (quando houver)
- Enviado com sucesso (
201,ok=true). - Rejeitado por validação (
400). - Falha operacional (
500,ok=falseou exceção). Evidência: src/routes/sendTemplate.ts:17 Evidência: src/routes/sendTemplate.ts:12 Evidência: src/routes/sendTemplate.ts:19
Endpoints envolvidos
POST /sendtemplateEvidência: src/routes/sendTemplate.ts:8
Dados impactados
- Não há persistência local de dados nesta feature.
- Referência de dados locais:
../data/model.md. Evidência: src/routes/sendTemplate.ts:8 Evidência: src/models/otp.ts:18
Pendências
- Confirmar estratégia de retry para falhas de envio (atualmente sem fila dedicada para este endpoint). Evidência: src/routes/sendTemplate.ts:16 Evidência: src/services/groupLinkDispatchQueue.ts:24