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:
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.
|
||||
Reference in New Issue
Block a user