7.3 KiB
Design — Workflows de Exemplo de AI Agent para Agendamento (Klingo, ClinicAll, SysLife)
Data: 2026-08-11 Status: Aprovado pelo usuário, aguardando plano de implementação.
Objetivo
Os MCP Servers de agendamento do Klingo, ClinicAll e SysLife existem e
estão validados estruturalmente há algum tempo, mas nenhum tem um
workflow de agente cliente (AI Agent + prompt + MCP Client Tool) —
isso foi explicitamente adiado em cada design ("sem clínica real nem
canal de mensagens definido"). Mesmo padrão que já resolvemos pra
confirmação de agenda dos mesmos três providers (seções 18-20 do
runbook): construir um workflow de exemplo/esqueleto, sem cliente real
associado, pronto pra duplicar quando houver clínica de verdade.
Relação com o trabalho anterior
- Reaproveita exatamente o esqueleto já usado nos três exemplos de
confirmação de agenda (webhook Z-PRO/GChat →
Extrair campos→AI AgentcomOpenAI Chat Modelreal +Postgres Chat Memoryplaceholder), só trocando as tools conectadas. - Conecta nas tools de agendamento, não nas de confirmação — decisão explícita do usuário: "só agendamento por enquanto", mesmo padrão do Z-PRO em produção (que também só tem agendamento).
- Os três MCP Servers de agendamento já existem, ativos ou não conforme
cada design; workflows e ids reaproveitados diretamente, nenhum
sub-workflow novo é criado nesta rodada — só o workflow de agente e a
conexão via
MCP Client Tool.
Escopo real de cada MCP Server de agendamento (conferido nos designs)
| Provider | MCP Server (id) | Tools | Observação |
|---|---|---|---|
| Klingo | 3eiFEnfOTLnutP78 (path mcp-server-klingo) |
consultar_horarios, agendar (2 tools) |
Limitação real conhecida: consultar_horarios sempre retorna SLOT_MAPPING_UNAVAILABLE — a API do Klingo responde com sucesso, mas o formato de cada horário individual não é documentado publicamente. Consequência: agendar exige um slotId que, na prática, não há hoje como obter por esta integração. |
| ClinicAll | igaKjoHcPNYRAxPS (path mcp-server-clinicall) |
unidade, especialidade, convenio, profissional, procedimento, paciente, consultar_horarios, agendar (8 tools) |
agendar usa PUT (suposição não verificada) e concilia um idAgenda de horário livre já existente (obtido via consultar_horarios) — não cria um registro do zero. |
| SysLife | TYu78UqIUr2yCBHK (path mcp-server-syslife) |
especialidade, medico, convenio, paciente, procedimento, consultar_horarios, agendar (7 tools) |
Fluxo linear padrão: consulta os recursos de apoio, resolve os códigos, agenda via PUT /Agenda. |
Correção em relação à conversa inicial: o Klingo tinha sido apresentado como tendo 8 tools de agendamento (confundindo com a API de Telefonia, que essa sim tem 6 tools de confirmação) — na verdade são só 2. A tabela acima é a fonte de verdade, extraída direto dos designs já commitados.
Decisão sobre a limitação do Klingo
Decisão explícita do usuário: construir o workflow de exemplo do
Klingo mesmo assim, documentando a limitação — tanto no systemMessage
do agente (pra ele explicar ao paciente que não consegue consultar
horários no momento, em vez de inventar uma resposta) quanto na spec e
no runbook. Não é um bug desta implementação; é uma lacuna real e já
conhecida da documentação pública da API do Klingo, fora do escopo
resolver aqui.
Arquitetura
Três workflows novos, um por provider, todos seguindo o mesmo esqueleto:
[Webhook GChat] → [Extrair campos do webhook] → [AI Agent] → resposta
├─ tools: MCP de Agendamento do provider (MCP Client Tool, todas as tools)
├─ modelo: OpenAI Chat Model (credencial real "GPT", 29vMIDah5DTIhUYJ)
└─ memória: Postgres Chat Memory (credencial placeholder, sem cliente real)
Agendamento - GChat - Klingo (exemplo)— conecta nas 2 tools do MCP Klingo (3eiFEnfOTLnutP78).Agendamento - GChat - ClinicAll (exemplo)— conecta nas 8 tools do MCP ClinicAll (igaKjoHcPNYRAxPS).Agendamento - GChat - SysLife (exemplo)— conecta nas 7 tools do MCP SysLife (TYu78UqIUr2yCBHK).
Mesmo contrato de webhook Z-PRO/GChat já documentado (seção 6 do
runbook): body.protocol→sessionId, body.entrada→mensagem,
body.contactName→nomeContato, body.number→telefone.
Componentes
systemMessage de cada agente
Adaptado do fluxo real de cada API (não genérico, não inventado):
- Klingo: instrui o agente a seguir
consultar_horarios→agendar, mas avisa explicitamente queconsultar_horariospode retornarSLOT_MAPPING_UNAVAILABLE— nesse caso, o agente deve informar ao paciente que a consulta de horários está temporariamente indisponível por essa integração, sem inventar horários nem tentar chamaragendarsem umslotIdreal. - ClinicAll: instrui o agente a consultar especialidade/convênio/
profissional/procedimento conforme necessário, usar
consultar_horariospara obter umidAgendade horário livre, e então chamaragendarnesse mesmoidAgenda(nunca inventar um novo) — deixando explícito que é uma conciliação, não uma criação. - SysLife: instrui o agente a seguir a ordem
especialidade→medico→ (convenio/paciente/procedimento, qualquer ordem) →consultar_horarios→agendar, mesma ordem já documentada no design do MCP SysLife.
Nenhum dos três usa configuração via Google Docs (workflows de exemplo, sem gestor real).
Tools conectadas
Via MCP Client Tool nativo, include: "all" (diferente dos exemplos
de confirmação, que filtravam tools específicas — aqui faz sentido
conectar todas as tools do MCP de agendamento, já que o agente precisa
de todas elas pra completar um agendamento).
Memória e modelo
Idênticos aos três exemplos de confirmação já construídos: Postgres Chat Memory com credencial placeholder (PLACEHOLDER_SEM_CREDENCIAL),
OpenAI Chat Model com a credencial real e compartilhada já usada em
produção (29vMIDah5DTIhUYJ, "GPT").
Fora de escopo (adiado)
- Resolver
SLOT_MAPPING_UNAVAILABLEdo Klingo de verdade — lacuna de contrato da API, não desta implementação. - Verificar empiricamente o verbo
PUTde/agendamentodo ClinicAll — pendência já registrada no MVP de agendamento, continua em aberto. - Conectar as tools de confirmação de agenda nesses mesmos agentes — decisão explícita do usuário de manter só agendamento por enquanto; pode ser revisitado depois.
- Ativação dos três workflows — ficam inativos de propósito, mesma disciplina de todos os workflows de exemplo já construídos (sem clínica real, sem credencial Postgres real).
Testes
Sem clínica real disponível para nenhum dos três providers: validação
estrutural apenas (n8n_validate_workflow, 0 erros esperados, exceto
warnings já aceitos de credencial placeholder). Nenhuma chamada HTTP
real. Quando houver clínica real de qualquer um dos três: preencher
baseUrl/credenciais reais, provisionar Postgres, ativar o workflow
correspondente — mesmo checklist já seguido nos exemplos de
confirmação.