LIST - Lista de Seleção WhatsApp
O que é este Node?
O LIST é o node responsável por criar listas interativas do WhatsApp com até 10 itens organizados em seções, permitindo que usuários selecionem uma opção de forma organizada e visual. É similar ao MENU, mas com interface de lista expandível.
Por que este Node existe?
Quando você precisa apresentar múltiplas opções mas não quer a complexidade total do MENU, ou quando prefere uma apresentação linear de itens, o LIST existe para:
- Seleção Linear: Apresentar opções em formato de lista expansível, ideal para escolhas sequenciais
- Organização em Seções: Agrupar itens relacionados em categorias, mantendo interface limpa
- Até 10 Itens: Suportar mais opções que BUTTONS (3) mas com interface simples
- Descrições Curtas: Cada item pode ter descrição para ajudar na decisão do usuário
Como funciona internamente?
Quando o LIST é executado, o sistema:
- Valida Seções: Verifica se há pelo menos uma seção com itens configurados
- Conta Total de Itens: Soma todos os itens de todas as seções (limite: 10 itens)
- Gera IDs Únicos: Cria IDs automáticos para itens sem ID definido
- Constrói Estrutura WhatsApp: Monta payload no formato
interactivetipo lista - Adiciona Header/Footer: Inclui elementos opcionais se fornecidos
- Retorna Lista Pronta: Envia estrutura aguardando seleção do usuário
- Aguarda Clique: Sistema espera que usuário abra lista e selecione item
Código interno (whatsapp-ui-executor.service.ts:167-217):
private async executeList(parameters: any, context: any): Promise<any> {
const { title, body, buttonText, sections, footer } = parameters;
this.logger.log(`📋 LIST - Creating WhatsApp list with ${sections?.length || 0} sections`);
// Validate sections
if (!sections || sections.length === 0) {
throw new Error('List requires at least one section with items');
}
// Validate total items limit (WhatsApp limit: 10 items per list)
const totalItems = sections.reduce((total, section) => total + (section.items?.length || 0), 0);
if (totalItems > 10) {
throw new Error(`WhatsApp list supports maximum 10 items, got ${totalItems}`);
}
// Build WhatsApp list structure
const whatsappList = {
type: 'interactive',
header: title ? {
type: 'text',
text: title
} : undefined,
body: {
text: body || 'Please select an item:'
},
footer: footer ? {
text: footer
} : undefined,
action: {
button: buttonText || 'Select',
sections: sections.map(section => ({
title: section.title || 'Items',
rows: section.items?.map(item => ({
id: item.id || `item_${Math.random().toString(36).substr(2, 9)}`,
title: item.title || item.text || 'Item',
description: item.description || ''
})) || []
}))
}
};
return {
success: true,
action: 'whatsapp_list_created',
messageType: 'interactive_list',
payload: whatsappList,
awaitingUserSelection: true,
timestamp: new Date().toISOString()
};
}
Quando você DEVE usar este Node?
Use LIST sempre que precisar de 4-10 opções organizadas de forma linear:
Casos de uso
- Seleção de Produtos: Lista de produtos disponíveis com preço na descrição
- Escolha de Cidades: Lista de cidades/estados organizadas por região
- Seleção de Serviços: Lista de serviços oferecidos com detalhes
- Opções de Pagamento: Formas de pagamento disponíveis com informações
- Lista de Documentos: Tipos de documentos que usuário pode solicitar
Quando NÃO usar LIST
- 3 ou menos opções: Use BUTTONS para escolhas rápidas e visuais
- Mais de 10 itens: Divida em múltiplas listas ou use navegação hierárquica
- Opções que precisam destaque visual: Use MENU para interface mais rica
- Resposta em texto livre: Use INPUT para texto digitado
Parâmetros Detalhados
title (string, opcional)
O que é: Título principal da lista, exibido como header destacado.
Padrão: Nenhum (lista sem title/header)
Flow completo para testar:
{
"name": "Teste LIST - Title",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "list_1",
"type": "list",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Lista com Title",
"parameters": {
"title": "🏙️ Cidades Disponíveis",
"body": "Selecione a cidade para entrega:",
"buttonText": "Ver Cidades",
"sections": [
{
"title": "Sudeste",
"items": [
{ "id": "sp", "title": "São Paulo", "description": "Capital - Entrega em 24h" },
{ "id": "rj", "title": "Rio de Janeiro", "description": "Capital - Entrega em 24h" }
]
},
{
"title": "Sul",
"items": [
{ "id": "poa", "title": "Porto Alegre", "description": "RS - Entrega em 48h" },
{ "id": "curitiba", "title": "Curitiba", "description": "PR - Entrega em 48h" }
]
}
]
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Confirmar Cidade",
"parameters": {
"message": "Cidade selecionada: {{list_selection}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "list_1" },
{ "source": "list_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: 1. Inicie o flow 2. Lista com title "🏙️ Cidades Disponíveis" em destaque 3. Clique em "Ver Cidades" 4. Lista expandida mostra 2 seções com cidades 5. Selecione uma cidade 6. Confirmação mostra o ID selecionado
body (string, obrigatório)
O que é: Texto explicativo principal, descrevendo o que usuário deve selecionar.
Padrão: "Please select an item:"
Flow completo para testar:
{
"name": "Teste LIST - Body",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "list_1",
"type": "list",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Lista Body Personalizado",
"parameters": {
"body": "📄 Escolha o tipo de documento que você precisa:\n\n✅ Emissão em até 48 horas\n📧 Envio por e-mail",
"buttonText": "Selecionar Documento",
"sections": [
{
"title": "Documentos Pessoais",
"items": [
{ "id": "cpf", "title": "CPF", "description": "Cadastro de Pessoa Física" },
{ "id": "rg", "title": "RG", "description": "Registro Geral" },
{ "id": "certidao", "title": "Certidão", "description": "Nascimento/Casamento" }
]
},
{
"title": "Documentos Profissionais",
"items": [
{ "id": "ctps", "title": "CTPS", "description": "Carteira de Trabalho" },
{ "id": "diploma", "title": "Diploma", "description": "Certificado escolar" }
]
}
]
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Confirmar Documento",
"parameters": {
"message": "Documento solicitado: {{list_selection}}\n\n📧 Você receberá por e-mail em até 48h."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "list_1" },
{ "source": "list_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: 1. Inicie o flow 2. Body personalizado com emojis e informações 3. Lista mostra 5 tipos de documentos em 2 seções 4. Selecione um documento 5. Confirmação usa o ID selecionado
buttonText (string, opcional)
O que é: Texto do botão que abre a lista expandível.
Padrão: "Select"
Flow completo para testar:
{
"name": "Teste LIST - ButtonText",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "list_1",
"type": "list",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Lista ButtonText Custom",
"parameters": {
"title": "💳 Formas de Pagamento",
"body": "Escolha como deseja pagar:",
"buttonText": "💰 Ver Todas as Opções",
"sections": [
{
"title": "Pagamento Instantâneo",
"items": [
{ "id": "pix", "title": "PIX", "description": "Aprovação imediata" },
{ "id": "cartao", "title": "Cartão de Crédito", "description": "Até 12x sem juros" }
]
},
{
"title": "Pagamento Posterior",
"items": [
{ "id": "boleto", "title": "Boleto", "description": "Vencimento em 3 dias" },
{ "id": "transferencia", "title": "Transferência", "description": "TED/DOC" }
]
}
]
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Confirmar Pagamento",
"parameters": {
"message": "Forma de pagamento selecionada: {{list_selection}}\n\nProcessando..."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "list_1" },
{ "source": "list_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: 1. Inicie o flow 2. Botão mostra "💰 Ver Todas as Opções" (personalizado) 3. Clique no botão para expandir lista 4. Selecione forma de pagamento 5. Confirmação processa seleção
sections (array, obrigatório)
O que é: Array de seções da lista. Cada seção tem título e array de itens.
Estrutura de cada seção:
{
title: string, // Nome da seção
items: [ // Array de itens
{
id: string, // ID único do item
title: string, // Texto do item (max 24 chars)
description: string // Descrição opcional
}
]
}
Limite: Máximo 10 itens no total (somando todas as seções)
Flow completo para testar:
{
"name": "Teste LIST - Sections Múltiplas",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "list_1",
"type": "list",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Lista Multi-Seção",
"parameters": {
"title": "🍕 Cardápio",
"body": "Selecione o item que deseja pedir:",
"buttonText": "Ver Cardápio",
"sections": [
{
"title": "🍕 Pizzas",
"items": [
{ "id": "margherita", "title": "Margherita", "description": "Molho, muçarela, tomate - R$ 35" },
{ "id": "calabresa", "title": "Calabresa", "description": "Calabresa, cebola - R$ 38" }
]
},
{
"title": "🍔 Hambúrgueres",
"items": [
{ "id": "classico", "title": "Clássico", "description": "Pão, carne, queijo - R$ 25" },
{ "id": "bacon", "title": "Bacon Burger", "description": "Com bacon crocante - R$ 30" }
]
},
{
"title": "🥤 Bebidas",
"items": [
{ "id": "coca", "title": "Coca-Cola", "description": "Lata 350ml - R$ 5" },
{ "id": "suco", "title": "Suco Natural", "description": "Laranja/Limão - R$ 8" }
]
}
]
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Confirmar Pedido",
"parameters": {
"message": "Item adicionado: {{list_selection}}\n\n🛒 Deseja adicionar mais itens ou finalizar?"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "list_1" },
{ "source": "list_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: 1. Inicie o flow 2. Lista mostra 3 seções: Pizzas, Hambúrgueres, Bebidas 3. Cada seção tem itens com preço na descrição 4. Selecione qualquer item 5. Sistema captura ID para processar pedido
footer (string, opcional)
O que é: Texto adicional exibido abaixo da lista, ideal para informações complementares.
Padrão: Nenhum (lista sem footer)
Flow completo para testar:
{
"name": "Teste LIST - Footer",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "list_1",
"type": "list",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Lista com Footer",
"parameters": {
"title": "📦 Rastreamento",
"body": "Selecione a transportadora do seu pedido:",
"footer": "⏰ Atualizações em tempo real | 📱 Notificações automáticas",
"buttonText": "Selecionar Transportadora",
"sections": [
{
"title": "Transportadoras Principais",
"items": [
{ "id": "correios", "title": "Correios", "description": "Entrega em 5-7 dias" },
{ "id": "fedex", "title": "FedEx", "description": "Entrega em 2-3 dias" },
{ "id": "dhl", "title": "DHL", "description": "Entrega em 1-2 dias" }
]
},
{
"title": "Transportadoras Regionais",
"items": [
{ "id": "jadlog", "title": "Jadlog", "description": "Regional - 3-5 dias" },
{ "id": "azul", "title": "Azul Cargo", "description": "Expressa - 1-2 dias" }
]
}
]
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Rastrear Pedido",
"parameters": {
"message": "Transportadora: {{list_selection}}\n\nDigite o código de rastreamento:"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "list_1" },
{ "source": "list_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: 1. Inicie o flow 2. Lista com footer informando sobre atualizações 3. 5 transportadoras em 2 seções 4. Selecione uma transportadora 5. Sistema pede código de rastreamento
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| title | string | Não | Título principal destacado como header |
| body | string | Sim | Texto explicativo (padrão: "Please select an item:") |
| buttonText | string | Não | Texto do botão que abre lista (padrão: "Select") |
| sections | array | Sim | Array de seções com itens (máx 10 itens total) |
| footer | string | Não | Texto adicional abaixo da lista |
Exemplo 1: Seleção de Planos de Assinatura
Objetivo: Apresentar planos de assinatura com detalhes e preços
JSON para Importar
{
"name": "Seleção de Planos - Lista Interativa",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "message_1",
"type": "message",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Introdução Planos",
"parameters": {
"message": "🚀 Bem-vindo ao Lumina!\n\nVamos escolher o melhor plano para você.\n\n✨ Todos os planos incluem:\n• Suporte 24/7\n• Atualizações gratuitas\n• Backup automático"
}
}
},
{
"id": "list_1",
"type": "list",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Lista de Planos",
"parameters": {
"title": "💎 Planos Disponíveis",
"body": "Escolha o plano ideal para suas necessidades:",
"footer": "💳 Aceita todas as formas de pagamento | 🔒 Cancele quando quiser",
"buttonText": "Ver Todos os Planos",
"sections": [
{
"title": "Planos Mensais",
"items": [
{
"id": "basic_month",
"title": "Básico - R$ 29/mês",
"description": "1 usuário, 10GB storage"
},
{
"id": "pro_month",
"title": "Pro - R$ 79/mês",
"description": "5 usuários, 100GB storage"
},
{
"id": "premium_month",
"title": "Premium - R$ 149/mês",
"description": "Usuários ilimitados, 1TB"
}
]
},
{
"title": "Planos Anuais (20% desconto)",
"items": [
{
"id": "basic_year",
"title": "Básico - R$ 279/ano",
"description": "Economize R$ 69/ano"
},
{
"id": "pro_year",
"title": "Pro - R$ 759/ano",
"description": "Economize R$ 189/ano"
},
{
"id": "premium_year",
"title": "Premium - R$ 1.429/ano",
"description": "Economize R$ 359/ano"
}
]
}
]
}
}
},
{
"id": "switch_1",
"type": "switch",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Identificar Plano",
"parameters": {
"variable": "{{list_selection}}",
"cases": [
{ "value": "basic_month", "label": "Básico Mensal" },
{ "value": "pro_month", "label": "Pro Mensal" },
{ "value": "premium_month", "label": "Premium Mensal" },
{ "value": "basic_year", "label": "Básico Anual" },
{ "value": "pro_year", "label": "Pro Anual" },
{ "value": "premium_year", "label": "Premium Anual" }
]
}
}
},
{
"id": "message_basic",
"type": "message",
"position": { "x": 900, "y": 0 },
"data": {
"label": "Plano Básico",
"parameters": {
"message": "🎯 Plano Básico selecionado!\n\n✅ Inclui:\n• 1 usuário\n• 10GB de storage\n• Suporte por e-mail\n• Atualizações automáticas\n\nVamos prosseguir para o pagamento?"
}
}
},
{
"id": "message_pro",
"type": "message",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Plano Pro",
"parameters": {
"message": "🚀 Plano Pro selecionado!\n\n✅ Inclui:\n• 5 usuários\n• 100GB de storage\n• Suporte prioritário 24/7\n• Relatórios avançados\n• Integrações premium\n\nVamos prosseguir para o pagamento?"
}
}
},
{
"id": "message_premium",
"type": "message",
"position": { "x": 900, "y": 200 },
"data": {
"label": "Plano Premium",
"parameters": {
"message": "💎 Plano Premium selecionado!\n\n✅ Inclui:\n• Usuários ilimitados\n• 1TB de storage\n• Gerente de conta dedicado\n• Treinamento personalizado\n• API ilimitada\n• White label\n\nVamos prosseguir para o pagamento?"
}
}
},
{
"id": "buttons_1",
"type": "buttons",
"position": { "x": 1100, "y": 100 },
"data": {
"label": "Confirmar Assinatura",
"parameters": {
"body": "Confirmar assinatura do plano selecionado?",
"buttons": [
{ "id": "confirmar", "text": "✅ Sim, assinar" },
{ "id": "mudar", "text": "🔄 Mudar plano" },
{ "id": "cancelar", "text": "❌ Cancelar" }
]
}
}
},
{
"id": "message_final",
"type": "message",
"position": { "x": 1300, "y": 100 },
"data": {
"label": "Confirmação Final",
"parameters": {
"message": "🎉 Assinatura confirmada!\n\n📧 Você receberá um e-mail com:\n• Dados de acesso\n• Nota fiscal\n• Próximas etapas\n\n🚀 Bem-vindo ao Lumina!\nQualquer dúvida, estamos aqui 24/7."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1500, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "list_1" },
{ "source": "list_1", "target": "switch_1" },
{ "source": "switch_1", "target": "message_basic", "label": "Básico" },
{ "source": "switch_1", "target": "message_pro", "label": "Pro" },
{ "source": "switch_1", "target": "message_premium", "label": "Premium" },
{ "source": "message_basic", "target": "buttons_1" },
{ "source": "message_pro", "target": "buttons_1" },
{ "source": "message_premium", "target": "buttons_1" },
{ "source": "buttons_1", "target": "message_final" },
{ "source": "message_final", "target": "end_1" }
]
}
Saída esperada:
Sistema: 🚀 Bem-vindo ao Lumina!
Vamos escolher o melhor plano para você.
✨ Todos os planos incluem:
• Suporte 24/7
• Atualizações gratuitas
• Backup automático
[Lista aparece]
Title: 💎 Planos Disponíveis
Body: Escolha o plano ideal para suas necessidades:
Footer: 💳 Aceita todas as formas de pagamento | 🔒 Cancele quando quiser
Botão: [Ver Todos os Planos]
Usuário: [Clica e vê lista com 6 planos em 2 seções]
- Planos Mensais (Básico R$29, Pro R$79, Premium R$149)
- Planos Anuais (com 20% desconto)
Usuário: [Seleciona "Pro - R$ 79/mês"]
Sistema: 🚀 Plano Pro selecionado!
✅ Inclui:
• 5 usuários
• 100GB de storage
• Suporte prioritário 24/7
• Relatórios avançados
• Integrações premium
Vamos prosseguir para o pagamento?
[Botões aparecem: Sim/Mudar/Cancelar]
Usuário: [Clica "✅ Sim, assinar"]
Sistema: 🎉 Assinatura confirmada!
📧 Você receberá um e-mail com:
• Dados de acesso
• Nota fiscal
• Próximas etapas
🚀 Bem-vindo ao Lumina!
Qualquer dúvida, estamos aqui 24/7.
Exemplo 2: Seleção de Idioma e Preferências
Objetivo: Coletar preferências do usuário durante onboarding
JSON para Importar
{
"name": "Onboarding - Seleção de Preferências",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "message_1",
"type": "message",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Boas-vindas",
"parameters": {
"message": "👋 Olá! Bem-vindo!\n\nVamos configurar sua experiência.\n\nPrimeiro, vamos escolher seu idioma preferido."
}
}
},
{
"id": "list_1",
"type": "list",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Selecionar Idioma",
"parameters": {
"title": "🌍 Idioma / Language",
"body": "Selecione seu idioma preferido:\nSelect your preferred language:",
"buttonText": "Ver Idiomas / See Languages",
"sections": [
{
"title": "Idiomas Principais",
"items": [
{ "id": "pt_br", "title": "🇧🇷 Português (Brasil)", "description": "Portuguese (Brazil)" },
{ "id": "en_us", "title": "🇺🇸 English (US)", "description": "Inglês (Estados Unidos)" },
{ "id": "es", "title": "🇪🇸 Español", "description": "Espanhol" }
]
},
{
"title": "Outros Idiomas",
"items": [
{ "id": "fr", "title": "🇫🇷 Français", "description": "Francês" },
{ "id": "de", "title": "🇩🇪 Deutsch", "description": "Alemão" },
{ "id": "it", "title": "🇮🇹 Italiano", "description": "Italiano" }
]
}
]
}
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Confirmar Idioma",
"parameters": {
"message": "✅ Idioma configurado: {{list_selection}}\n\nAgora, escolha seu tema de cores preferido:"
}
}
},
{
"id": "list_2",
"type": "list",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Selecionar Tema",
"parameters": {
"title": "🎨 Tema Visual",
"body": "Qual tema você prefere?",
"buttonText": "Ver Temas",
"sections": [
{
"title": "Temas Padrão",
"items": [
{ "id": "light", "title": "☀️ Claro", "description": "Tema claro para o dia" },
{ "id": "dark", "title": "🌙 Escuro", "description": "Tema escuro para a noite" },
{ "id": "auto", "title": "🌓 Automático", "description": "Muda conforme horário" }
]
}
]
}
}
},
{
"id": "message_3",
"type": "message",
"position": { "x": 1100, "y": 100 },
"data": {
"label": "Finalizar Onboarding",
"parameters": {
"message": "🎉 Configuração completa!\n\n✅ Idioma: {{list_selection_1}}\n✅ Tema: {{list_selection_2}}\n\n🚀 Você está pronto para começar!\n\nVamos fazer um tour rápido?"
}
}
},
{
"id": "buttons_1",
"type": "buttons",
"position": { "x": 1300, "y": 100 },
"data": {
"label": "Tour",
"parameters": {
"body": "Fazer tour guiado?",
"buttons": [
{ "id": "sim", "text": "✅ Sim, fazer tour" },
{ "id": "nao", "text": "⏭️ Pular tour" }
]
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1500, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "list_1" },
{ "source": "list_1", "target": "message_2" },
{ "source": "message_2", "target": "list_2" },
{ "source": "list_2", "target": "message_3" },
{ "source": "message_3", "target": "buttons_1" },
{ "source": "buttons_1", "target": "end_1" }
]
}
Saída esperada:
Sistema: 👋 Olá! Bem-vindo!
Vamos configurar sua experiência.
Primeiro, vamos escolher seu idioma preferido.
[Lista de idiomas aparece]
Usuário: [Seleciona "🇧🇷 Português (Brasil)"]
Sistema: ✅ Idioma configurado: pt_br
Agora, escolha seu tema de cores preferido:
[Lista de temas aparece]
Usuário: [Seleciona "🌙 Escuro"]
Sistema: 🎉 Configuração completa!
✅ Idioma: pt_br
✅ Tema: dark
🚀 Você está pronto para começar!
Vamos fazer um tour rápido?
[Botões: Sim/Pular]
Resposta do Node
{
"success": true,
"action": "whatsapp_list_created",
"messageType": "interactive_list",
"payload": {
"type": "interactive",
"header": {
"type": "text",
"text": "🏙️ Cidades Disponíveis"
},
"body": {
"text": "Selecione a cidade para entrega:"
},
"footer": {
"text": "Entrega em todo o Brasil"
},
"action": {
"button": "Ver Cidades",
"sections": [
{
"title": "Sudeste",
"rows": [
{
"id": "sp",
"title": "São Paulo",
"description": "Capital - Entrega em 24h"
},
{
"id": "rj",
"title": "Rio de Janeiro",
"description": "Capital - Entrega em 24h"
}
]
}
]
}
},
"awaitingUserSelection": true,
"timestamp": "2025-01-15T10:30:00.000Z"
}
Boas Práticas
✅ SIM:
- Use descrições informativas em cada item (preços, prazos, detalhes)
- Organize seções por categoria lógica (região, tipo, prioridade)
- Mantenha títulos curtos e claros (máx 24 caracteres)
- Use emojis nos títulos de seção para identificação visual
- Personalize buttonText para contexto ("Ver Produtos", "Escolher Plano")
- Combine com SWITCH para processar diferentes seleções
- Use IDs descritivos que fazem sentido no código
- Adicione footer com informações importantes (prazos, condições)
❌ NÃO:
- Não exceda 10 itens no total (limite do WhatsApp)
- Não crie seções vazias sem itens
- Não use títulos muito longos que serão cortados
- Não esqueça de validar sections antes de acessar
- Não use IDs duplicados entre itens
- Não deixe descrições vazias quando podem ajudar usuário
- Não use LIST para 3 ou menos opções (use BUTTONS)
Dicas
💡 LIST vs MENU: LIST é mais linear e simples, MENU é mais rico visualmente. Use LIST quando precisar de interface mais limpa.
💡 Descrições Estratégicas: Use descrições para diferenciar itens similares. Ex: "Entrega em 24h" vs "Entrega em 5 dias".
💡 Limite de Itens: Sistema valida automaticamente. Se precisar de mais de 10, divida em múltiplas listas com navegação.
💡 Seções Significativas: Agrupe itens que fazem sentido juntos. Ex: "Hoje", "Amanhã", "Próxima semana" para horários.
💡 IDs Únicos: Use IDs que facilitam debug (ex: "sp_capital", "rj_capital" para cidades).
💡 Footer Informativo: Use footer para informações que se aplicam a todos os itens (ex: "Frete grátis acima de R$ 100").
💡 Combinação com SWITCH: Capture seleção em variável e use SWITCH para diferentes ações por item.
💡 Testes de Usabilidade: Teste com usuários reais. Descrições claras reduzem confusão e aumentam conversão.
Próximo Node
→ MENU - Menu interativo com interface mais rica e visual → BUTTONS - Botões rápidos para 1-3 opções simples → SWITCH - Direcione flow baseado na seleção → VARIABLE - Armazene a seleção para uso posterior