> ## Documentation Index
> Fetch the complete documentation index at: https://docs.flextell.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Rehber: Randevu oluşturma

> Bir hasta için yeni randevu açmak — gerekli ön hazırlıklar, doğrulama tuzakları ve örnek istek.

Bu rehber, Flextell API üzerinden yeni bir randevu kaydı oluşturmak için gerekli tüm adımları gösterir. Amaç: belirli bir hasta, doktor, tedavi ve saat ile bir `appointment` kaydı açmak.

<Note>
  Gerekli scope'lar: `customers:read`, `treatments:read`, `doctors:read`, `appointments:write`. Aynı çağrıyı sadece `appointments:write` ile denerseniz bağımlı veriyi listeleyemezsiniz.
</Note>

## Önkoşullar

Randevu oluşturmak için dört bilgiye ihtiyacınız var — hepsi aynı tenant'ta olmalıdır:

1. **Hasta** (`customer_id`)
2. **Doktor** (`user_id`) — o tenant'ta aktif, `doctor` rolünde ve **Google Calendar entegrasyonu bağlı** bir kullanıcı
3. **Tedavi(ler)** (`treatments`) — doktora atanmış olmalı
4. **Randevu tarihi** (`scheduled_at`) — ISO 8601 formatında

<Warning>
  **Takvim entegrasyonu zorunludur.** Doktorun Google Calendar hesabı bağlı değilse randevu oluşturma işlemi tamamlanmaz. Randevu oluşturmadan önce hedef doktorun takvimini bağladığından emin olun.
</Warning>

### 1. Hastayı bul veya oluştur

```bash theme={null}
# Mevcut hastalarda telefon ile arama
curl --get "https://dev.flextell.ai/api/v1/customers" \
  --header "Authorization: Bearer $TOKEN" \
  --header "X-Tenant: 12" \
  --data-urlencode "search=+905551234567"
```

Eşleşme yoksa:

```bash theme={null}
curl --request POST \
  --url "https://dev.flextell.ai/api/v1/customers" \
  --header "Authorization: Bearer $TOKEN" \
  --header "X-Tenant: 12" \
  --header "Content-Type: application/json" \
  --data '{
    "first_name": "Ayşe",
    "last_name": "Kara",
    "phone_number": "+905551234567",
    "gender": "female"
  }'
```

### 2. Doktorları listele

```bash theme={null}
curl --get "https://dev.flextell.ai/api/v1/doctors" \
  --header "Authorization: Bearer $TOKEN" \
  --header "X-Tenant: 12"
```

Dönen `id` değerlerinden randevunuz için uygun olanı seçin.

### 3. Tedavileri listele

Tedaviler hem tenant hem de doktor bazında atanmıştır:

```bash theme={null}
curl --get "https://dev.flextell.ai/api/v1/treatments" \
  --header "Authorization: Bearer $TOKEN" \
  --header "X-Tenant: 12" \
  --data-urlencode "user_id=7"
```

<Warning>
  Bir tedaviyi o doktora atanmadığı halde `treatments` listesine koyarsanız `422` alırsınız: *"The selected treatment is not assigned to the selected doctor."*
</Warning>

### Doktorun takvim entegrasyonu

Flextell'de bir randevu oluşturulduğunda, doktorun panelden bağladığı **Google Calendar** hesabına otomatik bir etkinlik yazılır. Randevu tarihi, süresi, tedavi adı, hasta adı ve randevu kodunu içeren bir etkinlik, doktorun varsayılan takvimine düşer. Randevunun güncellenmesi veya silinmesi de takvime yansır.

<Tip>
  Doktor kullanıcılarınız takvimlerini panelden `Entegrasyonlar → Takvim` altında bağlayabilir. Şu an yalnızca **Google Calendar** desteklenmektedir; Outlook Calendar desteği yol haritasındadır.
</Tip>

## Randevuyu oluştur

```bash theme={null}
curl --request POST \
  --url "https://dev.flextell.ai/api/v1/appointments" \
  --header "Authorization: Bearer $TOKEN" \
  --header "X-Tenant: 12" \
  --header "Content-Type: application/json" \
  --data '{
    "customer_id": 391,
    "user_id": 7,
    "treatments": [22, 35],
    "scheduled_at": "2026-04-25T10:00:00+03:00",
    "status": "scheduled",
    "room_id": 3,
    "description": "Takip kontrolü"
  }'
```

### Yanıt

```json theme={null}
{
  "success": true,
  "data": {
    "id": 1102,
    "customer_id": 391,
    "user_id": 7,
    "scheduled_at": "2026-04-25T10:00:00+03:00",
    "status": "scheduled",
    "treatments": [
      { "id": 22, "name": "Kontrol Muayenesi" },
      { "id": 35, "name": "Panoramik Röntgen" }
    ],
    "room": { "id": 3, "name": "Muayene 1" },
    "created_at": "2026-04-19T10:30:00+03:00"
  }
}
```

## Tipik doğrulama hataları

| Hata                                                             | Sebep                                               | Çözüm                                         |
| ---------------------------------------------------------------- | --------------------------------------------------- | --------------------------------------------- |
| `The selected customer does not belong to this tenant.`          | `customer_id` farklı bir tenant'ta                  | Doğru `X-Tenant` veya doğru hasta ID          |
| `The selected treatment is not assigned to the selected doctor.` | Tedavi doktora atanmamış                            | Önce panelden atayın veya farklı tedavi seçin |
| `The scheduled_at field is required.`                            | Tarih gönderilmedi                                  | ISO 8601 formatında gönderin                  |
| `The selected assistant is not valid for this tenant.`           | `assistant_id` `assistant` rolünde veya aktif değil | Asistansız deneyin                            |

## Çift randevu engellemek

Flextell API şu an `Idempotency-Key` desteklemez; bir "yanlışlıkla iki kez gönderim" senaryosuna karşı kendi tarafınızda kontrol ekleyin. Detay için [Idempotency](/requests/idempotency) sayfasına bakın:

```js theme={null}
// "Randevu oluştur" butonunu tıklanırken kilitleyin
if (submitting) return;
submitting = true;
try {
  await api.post("/v1/appointments", payload);
} finally {
  submitting = false;
}
```

## Sonraki adımlar

<CardGroup cols={2}>
  <Card title="Hastaya bildirim" icon="paper-plane" href="/guides/send-message">
    Oluşturduğunuz randevuyu WhatsApp üzerinden hastaya duyurun.
  </Card>

  <Card title="Satış açma" icon="receipt" href="/guides/record-sale">
    Randevuya bağlı bir satış kaydı oluşturun.
  </Card>
</CardGroup>
