> ## 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: AI asistanı kontrol etme

> Kanal ve sohbet bazında AI asistanı açıp kapatmayı ve yarı otomatik önerileri API ile işlemeyi anlatır.

Bu rehber, kendi yazılımınızdan AI asistanın ne zaman, hangi kanalda ve hangi sohbette yanıt vereceğini yönetmeyi gösterir. Üç kontrol noktası vardır: kliniğin haftalık programı, kanal başına sabitlenen mod ve tek bir sohbette geçici duraklatma. **Yarı-otomatik** modda asistanın ürettiği önerileri de uçtan uca işlersiniz.

Alan ve endpoint ayrıntıları için [AI asistan](/api/kaynaklar/ai-asistan), [Kanallar](/api/kaynaklar/kanallar) ve [Ayarlar](/api/kaynaklar/ayarlar) sayfalarına bakın. Panel karşılığı için [AI asistan](/panel/sohbetler/ai-asistan) sayfasını açın.

## Senaryo

Bir klinik, WhatsApp kanalındaki hasta mesajlarını geceleri asistanın yanıtlamasını, gündüz ise yanıtları göndermeden önce ekibin görmesini istiyor. Sizin yazılımınız şunları yapar:

1. Bir kanalın şu an hangi modda çalıştığını okur.
2. Gerekirse kanalın modunu değiştirir.
3. Hasta ile bir temsilci yazışmaya başlayınca o sohbette asistanı duraklatır.
4. **Yarı-otomatik** moddaki önerileri onaylar, düzenler ya da reddeder.

Tüm isteklerde `Authorization: Bearer <access_token>` ve `X-Tenant: <tenant_id>` başlıkları gerekir. Örnekler `https://app.flextell.ai/api/v1` adresini kullanır.

| Mod | Değer | Davranış |
| - | - | - |
| Otomatik | `auto` | Asistan yanıtı üretir ve doğrudan gönderir. |
| Yarı-otomatik | `semi_auto` | Asistan yanıtı öneri olarak saklar; kullanıcı gönderir, düzenler ya da reddeder. |
| Kapalı | `closed` | Asistan yanıt vermez. |

## Geçerli modu okuma

Bir sohbete uygulanan mod şu sırayla belirlenir:

<Steps>
  <Step title="Kanal sabitlemesi">
    Kanalın `ai_reply_mode` alanı doluysa her zaman o geçerlidir; haftalık program yok sayılır.
  </Step>

  <Step title="Kliniğin haftalık programı">
    Alan `null` ise `ai_reply_windows` programına bakılır: saatli istisna, yoksa günün tam gün varsayılanı, o da yoksa `closed`.
  </Step>

  <Step title="Program yoksa">
    Program hiç tanımlı değilse (`null` ya da `[]`) mod `auto` olur.
  </Step>
</Steps>

Kanalın sabitlemesini `GET /channels` (scope: `conversations:read` ya da `channels:read`) veya `GET /channels/{id}` (scope: `channels:read`) ile okuyun:

```bash theme={null}
curl https://app.flextell.ai/api/v1/channels/123 \
  -H "Authorization: Bearer <access_token>" \
  -H "X-Tenant: <tenant_id>"
```

Yanıttaki `ai_reply_mode` değeri `auto`, `semi_auto`, `closed` ya da `null` olur. `null`, kanalın kliniğin programını izlediği anlamına gelir. Programı `GET /settings/chat` ile (scope: `settings:read`) okuyun; `ai_reply_windows` listesi yanıtın `settings` nesnesindedir.

<Warning>
  Program yok demek **Kapalı** demek değildir. `ai_reply_windows` boşsa ya da `null` ise asistan 7/24 otomatik yanıtlar. Programdaki `start_time` ve `end_time` değerleri UTC'dir; `day` ise kliniğin yerel günüdür.
</Warning>

## Kanal modunu değiştirme

Bir kanalda asistanı kapatmanın, açmanın ya da öneri moduna almanın en kısa yolu kanalı güncellemektir. `PUT /channels/{id}` kısmi güncellemedir; yalnızca gönderdiğiniz alanlar değişir. Scope `channels:write`, izin `Update:Channel` gerekir.

<CodeGroup>
  ```bash Yarı-otomatik yapma theme={null}
  curl -X PUT https://app.flextell.ai/api/v1/channels/123 \
    -H "Authorization: Bearer <access_token>" \
    -H "X-Tenant: <tenant_id>" \
    -H "Content-Type: application/json" \
    -d '{"ai_reply_mode": "semi_auto"}'
  ```

  ```bash Kapatma theme={null}
  curl -X PUT https://app.flextell.ai/api/v1/channels/123 \
    -H "Authorization: Bearer <access_token>" \
    -H "X-Tenant: <tenant_id>" \
    -H "Content-Type: application/json" \
    -d '{"ai_reply_mode": "closed"}'
  ```

  ```bash Programı izlemeye döndürme theme={null}
  curl -X PUT https://app.flextell.ai/api/v1/channels/123 \
    -H "Authorization: Bearer <access_token>" \
    -H "X-Tenant: <tenant_id>" \
    -H "Content-Type: application/json" \
    -d '{"ai_reply_mode": null}'
  ```
</CodeGroup>

Tüm kanallar için saat bazlı bir düzen istiyorsanız `PUT /settings/chat` ile `ai_reply_windows` gönderin. Bu istek gövdede kullanıcının kendi geçerli `password` değerini ister ve `Update:ChatSettings` izni gerektirir. Pencere kuralları için [Ayarlar](/api/kaynaklar/ayarlar) sayfasına bakın.

<Note>
  Kanal sabitlemesi programdan güçlüdür. Bir kanalı `closed` yaptıktan sonra programda o saat `auto` olsa bile asistan o kanalda yanıt vermez. Sabitlemeyi kaldırmak için `ai_reply_mode: null` gönderin.
</Note>

## Sohbette asistanı duraklatma

Tek bir hasta sohbetinde asistanı susturmak için sohbet düzeyinde duraklatın. Kanalın modu değişmez; yalnızca o sohbet etkilenir. Scope `conversations:write`, izin `ToggleAgent:Conversation` gerekir.

Önce durumu okuyun (`conversations:read`, `View:Conversation`):

```bash theme={null}
curl https://app.flextell.ai/api/v1/conversations/123/agent \
  -H "Authorization: Bearer <access_token>" \
  -H "X-Tenant: <tenant_id>"
```

Yanıt `agent_disabled`, `agent_expires_at`, `agent_disabled_by_user_name` ve `remaining_minutes` alanlarını taşır. Süresi dolmuş bir duraklatma okuma sırasında temizlenir. Aynı yapı `POST /conversations/{id}/open` yanıtında `agent` alanı olarak da gelir.

<CodeGroup>
  ```bash 60 dakika duraklatma theme={null}
  curl -X POST https://app.flextell.ai/api/v1/conversations/123/agent/disable \
    -H "Authorization: Bearer <access_token>" \
    -H "X-Tenant: <tenant_id>" \
    -H "Content-Type: application/json" \
    -d '{"duration_minutes": 60}'
  ```

  ```bash Süresiz duraklatma theme={null}
  curl -X POST https://app.flextell.ai/api/v1/conversations/123/agent/disable \
    -H "Authorization: Bearer <access_token>" \
    -H "X-Tenant: <tenant_id>" \
    -H "Content-Type: application/json" \
    -d '{"duration_minutes": null}'
  ```

  ```bash Yeniden açma theme={null}
  curl -X POST https://app.flextell.ai/api/v1/conversations/123/agent/enable \
    -H "Authorization: Bearer <access_token>" \
    -H "X-Tenant: <tenant_id>"
  ```
</CodeGroup>

`duration_minutes` 1 ile 525600 arasında olmalıdır; `null` ya da boş değer süresiz duraklatır. Süre dolunca asistan kendiliğinden açılır.

Asistan bazı durumlarda kendiliğinden duraklar, bunu ayrıca çağırmanız gerekmez:

* Asistan açıkken bir kullanıcı panelden, mobilden ya da API'den elle mesaj gönderirse sohbet 30 dakika duraklar.
* Klinik, WhatsApp telefonundan ya da Telegram bot hesabından doğrudan yanıt verirse sohbet 30 dakika duraklar.
* Düzenlenmiş bir öneriyi `take_over_agent: true` ile gönderirseniz sohbet 30 dakika duraklar.
* Otomatik modda asistan sohbeti insana devrederse sohbet süresiz duraklar.

## Önerileri işleme

**Yarı-otomatik** modda asistan yanıtı göndermez; sohbette en çok bir bekleyen öneri tutar. Önerileri işlemek için tipik akış şöyledir:

<Steps>
  <Step title="Bekleyen öneriyi okuyun">
    `GET /conversations/{id}/ai-suggestion` bekleyen öneriyi döner. Öneri yoksa `200` ile `data: null` gelir; `404` gelmez. Scope `conversations:read`, izin `View:Conversation`.
  </Step>

  <Step title="Güncel olup olmadığına bakın">
    `has_new_messages` `true` ise hasta öneriden sonra yeni mesaj yazmıştır. Öneri kendiliğinden yenilenmez; `POST /conversations/{id}/ai-suggestion/regenerate` ile yenisini isteyin.
  </Step>

  <Step title="Karar verin">
    Öneriyi olduğu gibi gönderin, düzenleyip gönderin ya da reddedin.
  </Step>
</Steps>

Yeni öneri eşzamansız üretilir. `regenerate` `202` döner; birkaç saniye sonra `GET …/ai-suggestion` ile tekrar okuyun. Önerinin canlı olarak size ulaşmasına güvenmeyin, okuma ile yoklayın.

### Olduğu gibi ya da düzenleyip gönderme

<CodeGroup>
  ```bash Olduğu gibi gönderme theme={null}
  curl -X POST https://app.flextell.ai/api/v1/conversations/123/ai-suggestion/send \
    -H "Authorization: Bearer <access_token>" \
    -H "X-Tenant: <tenant_id>" \
    -H "Content-Type: application/json" \
    -d '{"send_source": "suggestion_as_is"}'
  ```

  ```bash Düzenleyip gönderme ve duraklatma theme={null}
  curl -X POST https://app.flextell.ai/api/v1/conversations/123/ai-suggestion/send \
    -H "Authorization: Bearer <access_token>" \
    -H "X-Tenant: <tenant_id>" \
    -H "Content-Type: application/json" \
    -d '{
      "send_source": "suggestion_edited",
      "message": "Merhaba Ayşe Hanım, size uygun saatleri paylaşıyorum.",
      "take_over_agent": true
    }'
  ```
</CodeGroup>

Başarılı yanıt `202` ve `{"status": "queued", "message_id": "semi_ai_…", "conversation_id": 123}` biçimindedir. `suggestion_edited` için `message` zorunludur (en çok 4096 karakter). Gönderimde öneriye bağlı bekleyen işlemler de çalışır: randevu oluşturma, taşıma ve iptal; dosya, konum ve tedavi görseli gönderme; engelleme.

### Reddetme ve puanlama

`POST …/ai-suggestion/dismiss` öneriyi reddeder. Öneriye bağlı bekleyen işlemler hiçbir zaman çalışmaz. `PUT …/ai-suggestion/rating` ise `rating` anahtarıyla (`up`, `down` ya da `null`) öneriyi puanlar; puan hastaya iletilmez.

| İşlem | Scope | Gereken izinler |
| - | - | - |
| Öneriyi okuma | `conversations:read` | `View:Conversation` |
| Olduğu gibi ya da düzenleyip gönderme | `conversations:write` | `ManageAiSuggestions:Conversation` ve `Send:Message` |
| `take_over_agent: true` ile düzenleyip gönderme | `conversations:write` | Yukarıdakilere ek olarak `ToggleAgent:Conversation` |
| Reddetme, puanlama, yeniden oluşturma | `conversations:write` | `ManageAiSuggestions:Conversation` |

## Dikkat edilecekler

* **Onay, randevuyu garanti etmez.** Bekleyen işlemler gönderim anında yeniden doğrulanır. Saat dolmuşsa işlem sessizce atlanır, API hata dönmez ve onaylanan mesaj hastaya yine gider. Randevunun oluştuğunu [Randevular](/api/kaynaklar/randevular) kaynağından doğrulayın.
* **Yarı-otomatik modda bazı işlemler anında çalışır.** Hasta adı kaydı, destek talebi açma ve ön kayıt cevapları onay beklemez; randevu, dosya, konum ve engelleme işlemleri onaya bağlıdır.
* **Duraklatma gönderilmemiş yanıtı da iptal eder.** Sohbet duraklatıldığında kuyrukta bekleyen asistan yanıtı gönderilmez. `regenerate` ise duraklatılmış sohbette de çalışır.
* **Onaylamak asistanı duraklatmaz.** Öneriyi olduğu gibi göndermek sohbeti duraklatmaz. Asistanın devreye girmemesini istiyorsanız duraklatmayı ayrıca yapın.
* **`regenerate` koşulludur.** Kanalın geçerli modu **Yarı-otomatik** olmalı ve son giden mesajdan sonra metinli, yanıtsız bir hasta mesajı bulunmalıdır; aksi hâlde `422 SUGGESTION_SOURCE_MISSING` alırsınız. Her yeniden oluşturma AI kredisi harcar; bkz. [Krediler](/api/kaynaklar/krediler).
* **Kota ve abonelik asistanı sessizce durdurur.** AI sohbet kotası bittiğinde ya da abonelik süresi dolduğunda asistan yanıt vermeyi sessizce bırakır. Bu durumda mod `auto` görünse de hastaya yanıt gitmez.
* **Panelde tamamen Kapalı hafta kaydedilemez.** Yeni panel, tüm günleri **Kapalı** olan ve saatli bloğu olmayan bir haftayı boş program olarak gönderir; sonuç 7/24 **Otomatik**'tir. Aynı etki programı **Sıfırla** ile de oluşur. Asistanı klinik genelinde kapatmak için kanalları `closed` yapın ya da API ile günleri açıkça `closed` pencereleriyle gönderin.
* **Görünürlük ve hatalar.** Sohbeti göremeyen kullanıcı `404` alır; hastası silinmiş sohbette `409 CUSTOMER_ERASED`, size atanmamış lead'de `403 LEAD_NOT_ASSIGNED` döner. Kurallar için [İzinler ve görünürlük](/api/izinler-ve-gorunurluk), hata biçimi için [Hata kodları](/api/istekler/hata-kodlari) sayfasına bakın.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.