Pular para conteúdo

Quick Start

Este guia dá o caminho mais curto para rodar localmente um projeto OTIMUS existente (MEDCENTER ou CLINFETO). Para começar um projeto novo do zero, vá direto para o checklist.

Pré-requisitos

  • Docker + Docker Compose
  • Acesso às credenciais: OPENAI_API_KEY, GEMINI_API_KEY, WTS_API_TOKEN, token OTIMUS da clínica
  • Acesso SSH ao servidor de produção (se for replicar config)

1. Clone do repositório de um projeto existente

git clone <repo> /home/DOCKER/MEUPROJETO
cd /home/DOCKER/MEUPROJETO

2. Arquivo .env

Crie baseado no .env.template:

# --- LLMs ---
OPENAI_API_KEY=sk-...
GEMINI_API_KEY=AI...

# --- WTS Chat ---
WTS_API_TOKEN=...
WTS_BASE_URL=https://api.wts.chat
WTS_CHANNEL_ID=...
WTS_DEPARTMENT_HUMAN_ID=...
WTS_DEPARTMENT_AI_ID=...

# --- Workflow ---
ALLOWED_INSTANCE=+5599999999999
ALLOWED_TEAM=IA ATENDIMENTOS
MESSAGE_DEBOUNCE_SECONDS=2
CONTEXT_WINDOW_LENGTH=50

# --- Database ---
DATABASE_URL=postgresql://user:pass@host:5432/projeto

# --- OTIMUS ---
OTIMUS_API_URL=https://<subdominio>.otimusclinic.com:<porta>
OTIMUS_TOKEN=<token-da-clinica>

Token OTIMUS

Nunca commitar. No MEDCENTER o token está hardcoded em scheduling.py — esse é um débito técnico, ver problema.

3. Subir o stack

docker compose up -d --build

Container expõe :8000. Verifique:

curl http://localhost:8000/health
# {"status":"ok","service":"<projeto>-chatbot"}

4. Schema do banco

O init.sql roda na inicialização do container Postgres via volume ou manualmente:

psql $DATABASE_URL -f init.sql

As tabelas LangGraph (checkpoint*) são criadas em runtime pelo PostgresSaver.setup() — primeiro boot pode demorar mais.

5. Registrar webhooks no WTS

No painel WTS Chat:

  • Message receivedhttps://<seu-dominio>/webhook/message
  • Transfer request (se aplicável) → https://<seu-dominio>/webhook/transfer

6. Testar ponta-a-ponta

Enviar mensagem de um número de paciente para a instância WhatsApp e verificar:

  1. Logs do container (docker logs -f medcenter-chatbot)
  2. Linha em dashboard_sessions com phone + status
  3. Linha em dashboard_token_usage com modelo e custo
  4. Histórico em dados_cliente_<projeto> (ou tabelas checkpoint LangGraph)

7. Simular chamada OTIMUS isoladamente

Para debugar só o cliente OTIMUS, sem WhatsApp:

# medcenter
from scheduling import consultar_horarios
print(consultar_horarios("MAURICIO", "CONSULTA ORTOPEDISTA", "PARTICULAR"))

# clinfeto
from agendamento import consultar_horarios_workflow
print(consultar_horarios_workflow({
    "nome_medico": "JOANA",
    "nome_procedimento": "US ABDOME TOTAL",
    "nome_convenio": "PARTICULAR",
}))

8. Logs úteis

  • Webhook recebido: workflow.py imprime o payload filtrado.
  • Tool do agente: scheduling.py / agendamento.py loga === CONSULTAR HORARIOS === e === AGENDAR CONSULTA ===.
  • OTIMUS raw: quando der erro, inspecione resp.text — o OTIMUS às vezes retorna 200 com data sendo string de erro (ex: "O CPF informado não foi encontrado.").

Próximo passo