Atendimentos — Quickstart

Em menos de 5 minutos, crie seu primeiro agendamento via API: profissional, servico e atendimento confirmado.

Feature Flag Necessaria

O modulo de Atendimentos requer que appointments_module esteja habilitado na sua conta. Entre em contato com o suporte NooviChat se o recurso nao aparecer.

Pre-requisitos

  • Token de API valido (api_access_token) com permissao de administrador
  • ID da conta (account_id) — visivel na URL do dashboard
  • Ao menos um contato existente na conta (para vincular ao atendimento)
bash
# Defina as variaveis base
BASE_URL="https://chat.seudominio.com"
ACCOUNT_ID=1
TOKEN="seu_api_access_token"
CONTACT_ID=42  # ID de um contato existente

Passo 1 — Criar um profissional

Profissionais sao as pessoas que executam os servicos. Cada um tem horarios de atendimento configurados por dia da semana.

PROFESSIONAL=$(curl -s -X POST "$BASE_URL/api/v1/accounts/$ACCOUNT_ID/professionals" \
  -H "api_access_token: $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "professional": {
      "name": "Dra. Ana Lima",
      "specialty": "Odontologia Geral",
      "color": "#3B82F6",
      "buffer_minutes": 10,
      "working_hours": {
        "mon": [{"start": "08:00", "end": "18:00"}],
        "tue": [{"start": "08:00", "end": "18:00"}],
        "wed": [{"start": "08:00", "end": "18:00"}],
        "thu": [{"start": "08:00", "end": "18:00"}],
        "fri": [{"start": "08:00", "end": "13:00"}]
      }
    }
  }')

PROFESSIONAL_ID=$(echo $PROFESSIONAL | jq -r '.data.id')
echo "Profissional criado: ID=$PROFESSIONAL_ID"

Passo 2 — Criar um servico

Servicos definem o que sera realizado no atendimento, incluindo duracao e preco padrao.

SERVICE=$(curl -s -X POST "$BASE_URL/api/v1/accounts/$ACCOUNT_ID/services" \
  -H "api_access_token: $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "service": {
      "name": "Consulta Inicial",
      "description": "Avaliacao e plano de tratamento",
      "duration_minutes": 60,
      "default_price_cents": 25000,
      "currency": "BRL",
      "color": "#10B981"
    }
  }')

SERVICE_ID=$(echo $SERVICE | jq -r '.data.id')
echo "Servico criado: ID=$SERVICE_ID"

Passo 3 — Agendar o atendimento

Com profissional e servico criados, agende um atendimento vinculando um contato existente. O campo price_cents captura o preco no momento do agendamento (snapshot imutavel).

APPOINTMENT=$(curl -s -X POST "$BASE_URL/api/v1/accounts/$ACCOUNT_ID/appointments" \
  -H "api_access_token: $TOKEN" \
  -H "Content-Type: application/json" \
  -d "{
    \"appointment\": {
      \"contact_id\": $CONTACT_ID,
      \"professional_id\": $PROFESSIONAL_ID,
      \"service_id\": $SERVICE_ID,
      \"scheduled_at\": \"2026-06-15T09:00:00Z\",
      \"notes\": \"Paciente com dor no dente 16\"
    }
  }")

APPOINTMENT_ID=$(echo $APPOINTMENT | jq -r '.data.id')
echo "Atendimento criado: ID=$APPOINTMENT_ID, status=$(echo $APPOINTMENT | jq -r '.data.status')"

Conflito de horario

Se o profissional ja tem um atendimento no mesmo horario, a API retorna422 Unprocessable Entitycom error: "scheduling_conflict". Use o endpoint de disponibilidade (Passo 5) para evitar conflitos.

Passo 4 — Confirmar o atendimento

Atendimentos criados ficam com status scheduled. Confirme explicitamente para mudar para confirmed.

curl -s -X POST "$BASE_URL/api/v1/accounts/$ACCOUNT_ID/appointments/$APPOINTMENT_ID/confirm" \
  -H "api_access_token: $TOKEN" | jq '.data.status'
# => "confirmed"

Passo 5 — Consultar disponibilidade antes de agendar

Use o endpoint de disponibilidade para listar os slots livres de um profissional em uma data especifica. O campo service_id e opcional — quando fornecido, os slots sao calculados com base na duracao do servico.

bash
curl -s "$BASE_URL/api/v1/accounts/$ACCOUNT_ID/professionals/$PROFESSIONAL_ID/availability?date=2026-06-15&service_id=$SERVICE_ID" \
  -H "api_access_token: $TOKEN" | jq '.data.slots[] | select(.available == true) | .start'

Resposta (slots disponiveis):

"2026-06-15T08:00:00Z"
"2026-06-15T10:00:00Z"
"2026-06-15T11:00:00Z"

Proximos passos