Este guia é para developers de PMS (Practice Management Systems) que querem integrar o software da clínica com Mivicall. O padrão é simples e segue convenções standard de mercado.Documentation Index
Fetch the complete documentation index at: https://docs.mivicall.com/llms.txt
Use this file to discover all available pages before exploring further.
Cenário típico
A clínica usa o vosso PMS para gerir agenda + pacientes. Adiciona Mivicall para atender chamadas. Quer:- Marcações criadas pela AI aparecerem automaticamente no PMS
- Check-in no PMS marcar a consulta como
attendedno Mivicall (evita no-shows falsos) - Cancelamentos sincronizarem nos dois sentidos
- Histórico de chamadas acessível para a equipa da recepção
Arquitectura recomendada
Passo 1 — Autenticação
A clínica gera uma API key no dashboard emSettings → Integrations → Generate API key. Cola na vossa configuração.
Passo 2 — Sync inicial
Quando o cliente do PMS instalar o conector pela primeira vez, façam um backfill das marcações dos últimos N dias:?cursor={nextCursor} até hasMore: false. Recomendamos rate de 5 requests/segundo (limite default por API key é 300/min).
Passo 3 — Subscrever webhooks
EmSettings → Integrations → Webhooks, a clínica adiciona:
Verificar signature
Passo 4 — Escrever de volta (PMS → Mivicall)
4.1 — Marcar attended no check-in
Quando o paciente chega à clínica e o vosso PMS regista presença:
4.2 — Cancelar
4.3 — Reagendar
Padrão idempotente recomendado
A vossa lógica de mapping deve usar campos estáveis em ambos os lados:- Procurem na vossa DB se já existe um row com
mivicall_appointment_id = {id} - Se existe → update; se não → insert
- Guardem o vosso ID na coluna
external_iddo vosso PMS
Mapping de dados — atenção
Algumas convenções que ajudam:| Mivicall field | PMS típico equivalente | Nota |
|---|---|---|
professionalId | doctor_id, practitioner_id | UUIDs diferentes — mapping table necessária |
serviceTypeId | procedure_code, service_code | idem |
patientPhoneHash | (não exposto) | use para matching anonymous, NUNCA inverter |
startsAt | appointment_datetime | sempre ISO 8601 com timezone (+01:00) |
status='attended' | check-in / “patient arrived” | usem PATCH ao receber check-in no vosso lado |
source | (Mivicall-only) | voice_ai quando criada pela AI |
Erros comuns
HTTP 409 Conflict ao marcar attended
HTTP 409 Conflict ao marcar attended
Status já foi alterado entretanto (ex: cron marcou
no_show antes do vosso check-in). Façam GET ao appointment para ver o estado actual, e decidam se forçam (status=attended continua aceitável até 24h após startsAt).HTTP 422 Unprocessable Entity
HTTP 422 Unprocessable Entity
Payload não passa validação Zod. A resposta inclui
errors[] com path + message. Verifiquem que startsAt tem timezone e que o professionalId pertence ao tenant.HTTP 429 Too Many Requests
HTTP 429 Too Many Requests
Atingiram o rate limit (300/min por API key). Header
Retry-After indica segundos a esperar. Implementem backoff exponencial.HTTP 401 Invalid API key
HTTP 401 Invalid API key
Key revogada ou inválida. Notifiquem a clínica para gerar nova em
Settings → Integrations.Testar em sandbox
(Em construção) — Está planeado um ambientesandbox.mivicall.com com tenant pré-popoulado para testes E2E sem afectar produção. Contactem support@mivicall.com para acesso antecipado.
Suporte para vendors
Vendors com pelo menos 5 clínicas-clientes têm canal dedicado:- Slack Connect partilhado
- SLA resposta < 4h
- Roadmap shared (input em features novas)
[Vendor].