141 lines
5.7 KiB
Python
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" |