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)
# 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 existentePasso 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.
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"