Spec: workflows de exemplo de AI Agent para agendamento (Klingo, ClinicAll, SysLife)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Gustavo
2026-08-11 16:35:00 -03:00
co-authored by Claude Sonnet 5
parent 69b34ead9e
commit e5f3d27230
@@ -0,0 +1,137 @@
# 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 Agent` com `OpenAI Chat Model` real + `Postgres Chat Memory`
placeholder), 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** que `consultar_horarios`
pode retornar `SLOT_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
chamar `agendar` sem um `slotId` real.
- **ClinicAll**: instrui o agente a consultar especialidade/convênio/
profissional/procedimento conforme necessário, usar
`consultar_horarios` para obter um `idAgenda` de horário livre, e
então chamar `agendar` **nesse mesmo `idAgenda`** (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_UNAVAILABLE` do Klingo de verdade — lacuna de
contrato da API, não desta implementação.
- Verificar empiricamente o verbo `PUT` de `/agendamento` do 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.