Consultme/app/dialog_flow/graph_definition.py
2025-06-21 20:01:29 +00:00

141 lines
5.7 KiB
Python

# 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"