Skip to main content
Bu rehber, entegrasyonunuzun bir hastaya WhatsApp gibi bir kanaldan mesaj göndermesini ve hastanın yanıtını canlı yakalamasını uçtan uca kurar. Akış üç adımdır: sohbeti bulun ya da oluşturun, mesajı gönderin, olayları dinleyip mesajı REST API’den okuyun.

Senaryo

Randevu yazılımınız, “Ayşe Yılmaz” adlı hastaya (+90 5xx xxx xx xx) kliniğin WhatsApp hattından bir hatırlatma gönderecek. Hasta yanıt verdiğinde yazılımınız yanıtı hemen görecek ve sohbeti okundu yapacak. Gerekenler:
ViewAllConversations izni olmayan bir kullanıcı yalnızca lead’i kendisine atanmış kişilerin sohbetlerini görür. Bu kısıt hem API çağrılarını hem de dinleyebileceğiniz kanalı etkiler. Ayrıntı için İzinler ve görünürlük sayfasına bakın.

Sohbeti bulma veya oluşturma

Sohbetin id değerine ihtiyacınız var. En kısa yol POST /conversations çağrısıdır: sohbet varsa aynısını döndürür, yoksa oluşturur. Çağrı her iki durumda da 201 verir. Kişiyi üç yoldan biriyle belirtebilirsiniz: customer_id, lead_id veya channel_id ile address. Kişi henüz kayıtlı değilse channel_id ve address kullanın.
Yanıttaki data.id sohbet kimliğidir. Bu yanıt kısa şekillidir: tags, lines, blacklist ve sayaçlar gelmez, unread_count 0’dır.
  • first_name ve last_name gönderirseniz kişinin mevcut adını değiştirir. Yalnızca yeni kişi için göndermek isterseniz önce sohbeti arayın.
  • Aynı kanal ve adres için tekrar çağrı aynı sohbeti ve aynı kişiyi döndürür. Numara normalize edilir; +90 555 123 45 67 ile 905551234567 aynı adrestir.
  • Adres başka bir hastanın sohbetine aitse 409 CONVERSATION_ADDRESS_TAKEN döner.
Var olan sohbetleri aramak için GET /conversations?search=Ayşe kullanın. Arama yalnızca kişi adı, soyadı ve adreste yapılır; mesaj metninde aramaz. Varsayılan olarak arşivdeki sohbetler listelenmez. Filtreler için Sohbetler sayfasına bakın.
Lead’i size atanmamış bir kişiyle sohbet başlatırsanız istek hiçbir şey yazılmadan 403 CONVERSATION_NOT_ASSIGNED ile reddedilir. Yanıttaki data.assigned_user, lead’in sahibinin id ve name değerini ya da null verir.

Mesaj gönderme

Metin mesajı için POST /conversations/{id}/messages kullanın. message zorunludur ve en çok 5000 karakterdir; kanalın kendi sınırı daha düşükse o geçerlidir (WhatsApp 65536, Telegram 4096, Instagram 1000, web sitesi için sınır yok).
Yanıt 202 Accepted olur. Mesaj kuyruğa alınmıştır, henüz hastaya iletilmemiş olabilir:
message_id geçici bir kimliktir. Kanal mesajı kabul ettiğinde gerçek mesaj oluşur ve bir sonraki bölümde anlatılan olay yayınlanır.
Düz metin gönderimlerinde tekrar koruması yoktur. Ağ hatasında isteği hemen tekrarlamayın; önce GET /conversations/{id}/messages ile mesajın oluşup oluşmadığına bakın. Aynı sohbete art arda gönderilen mesajlar en az 2 saniye arayla iletilir.
Sohbetin kanalı pasifse (panelde Aktif kapalıysa) istek 202 yerine 422 CHANNEL_INACTIVE ile reddedilir; mesaj kuyruğa alınmaz ve saklanmaz. Kanalın sağlayıcı bağlantısı kopuksa dönen CHANNEL_NOT_CONNECTED ise başka bir durumdur: CHANNEL_INACTIVE kanalın kapatılmış olduğunu, CHANNEL_NOT_CONNECTED bağlantının kopuk olduğunu gösterir.
Mesaj kabul edildikten (202) sonra hat kapatılırsa mesaj iletilmez. Bu durumda mesaj yine de saklanır, metadata.delivery_status değeri failed olur ve ChatLogUpdated olayı yayınlanır. Medya, sesli not ve Hızlı Yanıt göndermek için Mesajlar sayfasına bakın.
API ile mesaj gönderdiğinizde, çalışmakta olan AI asistan bu sohbet için 30 dakika durdurulur ve sohbete bir sistem mesajı yazılır. Bkz. AI asistan kontrolü rehberi.

Gelen mesajları dinleme

Hastanın yanıtı, abone olduğunuz kanala bir olay olarak düşer. Hangi kanala abone olacağınız yetkinize bağlıdır. Tüm sohbetleri göremeyen kullanıcı private-chat-log için /api/broadcasting/auth üzerinden 403 alır. Her yetki düzeyinde çalışan yol, private-chat-log-activity kanalına abone olmak ve olay gelince mesajı REST API’den okumaktır. Bağlantı kurma ve yetkilendirme kodu için Örnek istemci sayfasına bakın. ChatLogChanged olayının yükü {conversation_id, chat_log_id} biçimindedir. chat_log_id null olabilir. Olay, sohbete bağlı her yeni mesajda ve her mesaj güncellemesinde gelir.
Dikkat edilecekler:
  • Tüm sohbetleri görebiliyorsanız private-chat-log kanalındaki Modules\Chat\Events\ChatLogCreated olayı mesajı chatLog alanında tam olarak taşır; ek istek gerekmez.
  • Olaylar tekrar gönderilmez. Bağlantı koptuğunda kaçan mesajları her abonelikte GET /conversations/{id}/messages ile kapatın.
  • Olayların sırası garanti değildir ve kendi işleminizin olayı size de gelir. Mesajları id ile tekilleştirin.
  • Medya içeren mesajda ChatLogCreated dosya hazır olmadan gelir. Dosya hazır olunca ChatLogUpdated yayınlanır; ChatLogChanged ikisinde de gelir.
  • Gönderdiğiniz mesajın teslim durumu (delivery_status) değiştiğinde de olay gelir. Mesaj kuyruğa alındıktan sonra hat kapatılırsa delivery_status failed olur ve ChatLogUpdated yayınlanır.

Okundu işaretleme

Hasta mesajlarını okuduktan sonra sohbeti okundu yapın. Okunmamış sayısı (unread_count) klinik ekibi için ortaktır: bir kullanıcı okuyunca herkes için okunmuş olur.
Bu çağrılar hastaya “görüldü” bilgisi (mavi tik) göndermez ve giden mesajları okundu yapmaz. Her okundu işlemi bir ConversationRead olayı yayınlar; bu olay kuyruktan geçtiği için daha sonra gelen bir mesaj olayından sonra ulaşabilir.

Hata durumları

Hata yanıtının biçimi için Hatalar ve Hata kodları sayfalarına bakın.

Sohbetler

Sohbet listeleme, filtreler, arşiv ve etiketler.

Mesajlar

Medya, sesli not, düzenleme, silme ve tepki.

Kanallar ve olaylar

Tüm kanalların ve olayların listesi.

Örnek istemci

Bağlanma, yetkilendirme ve yeniden bağlanma.