# Consultme/app/dialog_flow/graph_definition.py from typing import Dict, Any, List # --- DEFINIÇÃO DOS ESTADOS DO SEU CHATBOT (O GRAFO) --- DIALOG_GRAPH: Dict[str, Dict[str, Any]] = { "INICIO": { "message": "", "expected_input_type": "text", "transitions": { "default": "MENU_PRINCIPAL" } }, "MENU_PRINCIPAL": { "message": "*Olá você inicou o Consultme!:*", "action_to_perform": "send_main_menu", # Ação para enviar um menu interativo (botões) "expected_input_type": "button_click", "transitions": { "OPTION_AGENDAR": "MENU_PRINCIPAL_STORE", "OPTION_CADASTRO_FLOW": "MENU_PRINCIPAL_STORE", "OPTION_STATUS": "MENU_PRINCIPAL_STORE", "OPTION_FALAR_ATENDENTE": "MENU_PRINCIPAL_STORE", "default": "MENU_PRINCIPAL_STORE" # Volta para o menu se a opção não for reconhecida } }, "MENU_PRINCIPAL_STORE": { "action_to_perform": "send_main_store", # Ação para enviar um menu interativo (botões) "expected_input_type": "button_click", "transitions": { "OPTION_AGENDAR": "AGENDAMENTO_INICIO", "OPTION_CADASTRO_FLOW": "INICIAR_FLOW_CADASTRO", "OPTION_STATUS": "PEDIR_NUMERO_PEDIDO", "OPTION_FALAR_ATENDENTE": "ENCAMINHAR_ATENDENTE", "default": "MENU_PRINCIPAL" # Volta para o menu se a opção não for reconhecida } }, "RESPOSTA_NAO_ENTENDIDA": { "message": "Desculpe, não entendi sua última mensagem. Por favor, digite 'menu' para ver as opções ou 'ajuda'.", "expected_input_type": "text", "transitions": { "menu": "MENU_PRINCIPAL", "ajuda": "MENU_PRINCIPAL", "default": "RESPOSTA_NAO_ENTENDIDA" # Continua não entendendo } }, # --- FLUXO DE CADASTRO (com Flow) --- "INICIAR_FLOW_CADASTRO": { "action_to_perform": "send_flow_cadastro", # Ação para enviar o Flow "flow_id": "COLOQUE_AQUI_O_FLOW_ID_DO_SEU_CADASTRO_PUBLICADO", # ID do seu Flow publicado "flow_cta": "Abrir Cadastro", "expected_input_type": "flow_nfm_reply", # Espera a resposta do Flow "transitions": { "success": "CADASTRO_CONCLUIDO", # Se o Flow for concluído com sucesso "failure": "CADASTRO_FALHA" # Se houver um problema no Flow (ou o usuário não preencher) } }, "CADASTRO_CONCLUIDO": { "message": "Obrigado por se cadastrar, ${nome_completo}! Seu e-mail é: ${email}. Já pode explorar nossos serviços!", "action_to_perform": "process_cadastro_data", # Ação para salvar no BD/CRM "expected_input_type": "any", # Qualquer coisa leva ao menu "transitions": { "default": "MENU_PRINCIPAL" } }, "CADASTRO_FALHA": { "message": "Não foi possível completar seu cadastro. Por favor, tente novamente ou digite 'ajuda'.", "expected_input_type": "text", "transitions": { "default": "MENU_PRINCIPAL" } }, # --- FLUXO DE AGENDAMENTO (Exemplo Básico) --- "AGENDAMENTO_INICIO": { "message": "Certo! Para agendar, qual serviço você precisa?", "expected_input_type": "text", "transitions": { "default": "AGENDAMENTO_CONFIRMAR_SERVICO" } }, "AGENDAMENTO_CONFIRMAR_SERVICO": { "message": "Você precisa de *${servico_agendado}*. Qual data e horário você prefere?", "expected_input_type": "text", "transitions": { "default": "AGENDAMENTO_FINALIZAR" }, "action_to_perform": "save_temp_service" # Ação para guardar o serviço temporariamente }, "AGENDAMENTO_FINALIZAR": { "message": "Seu agendamento para *${servico_agendado}* em *${data_horario_agendado}* foi confirmado! Te vejo lá!", "action_to_perform": "confirm_appointment", # Ação para agendar no sistema real "expected_input_type": "any", "transitions": { "default": "MENU_PRINCIPAL" } }, # --- FLUXO DE STATUS DO PEDIDO --- "PEDIR_NUMERO_PEDIDO": { "message": "Por favor, digite o número do seu pedido para consultar o status:", "expected_input_type": "text", "transitions": { "default": "CONSULTAR_STATUS_API" } }, "CONSULTAR_STATUS_API": { "message": "Consultando o status do pedido *${numero_pedido}*...", "action_to_perform": "call_external_status_api", # Ação para chamar um sistema externo (API futura) "expected_input_type": "api_response", # A resposta vem de uma API, não do usuário "transitions": { "success": "STATUS_EXIBIR", "failure": "STATUS_NAO_ENCONTRADO" } }, "STATUS_EXIBIR": { "message": "O status do pedido *${numero_pedido}* é: *${status_retornado}*.", "expected_input_type": "any", "transitions": { "default": "MENU_PRINCIPAL" } }, "STATUS_NAO_ENCONTRADO": { "message": "Não consegui encontrar o pedido *${numero_pedido}*. Verifique e digite novamente, ou 'menu'.", "expected_input_type": "text", "transitions": { "menu": "MENU_PRINCIPAL", "default": "PEDIR_NUMERO_PEDIDO" } }, # --- FLUXO DE ATENDENTE --- "ENCAMINHAR_ATENDENTE": { "message": "Encaminhando você para um de nossos atendentes. Por favor, aguarde.", "terminal": True # Indica que a conversa termina aqui (até o atendente assumir) }, # ... Adicione mais estados conforme a complexidade da sua conversa ... } # --- ESTADO INICIAL --- INITIAL_STATE_ID = "INICIO"