Olaylar: canlı döküm ve arama akışı

WebSocket üzerinden canlı döküm ve arama durumu: yazıyor göstergesi, anlık duygu analizi, çoklu arama izleme ve yeniden bağlanma deseni.

Güncellendi: 17 Ağustos 2026

Olaylar, webhook’ların canlı karşılığıdır. Webhook olay bittikten sonra düşer ("arama sona erdi, özeti burada"); olaylar arama sürerken akar ("şu an şu söylendi").

Hangi kanalı seçmeli

İhtiyaçKanal
Dökümü kaydetmek, CRM akışı tetiklemekWebhook (arama sonrası)
Panelde canlı döküm göstermekOlaylar (arama sırasında)
Arama sonrası kalite/duygu puanlamasıWebhook
Canlı dinleme / izleme arayüzüOlaylar
Arama bitince otomasyon başlatmakWebhook

İki kanal büyük ölçüde aynı veriyi taşır. Seçim tek soruya iner: veriye o an mı ihtiyacınız var, yoksa sonradan mı?

Bağlanmak

const url = `wss://api.call2me.app/v1/events?token=${token}`;
const ws = new WebSocket(url);

ws.onopen = () => {
  ws.send(JSON.stringify({ type: 'subscribe', call_id: 'call_xyz789' }));
};

ws.onmessage = (event) => {
  const msg = JSON.parse(event.data);
  console.log(msg.type, msg.data);
};

Sorgu dizesindeki token sunucu tarafında API anahtarı olabilir; tarayıcıda ASLA sk_ anahtarı kullanmayın. Tarayıcı istemcileri için arka ucunuzdan kısa ömürlü bir token üretin.

Olay tipleri

TipNe zamanYük
subscribedAbonelik onaylandığında{ call_id }
transcript.partialCümle duyulurken{ speaker, text, is_final: false }
transcript.finalCümle tamamlandığında{ speaker, text, is_final: true }
agent.stateAsistan durumu değiştiğinde{ state: 'listening' | 'thinking' | 'speaking' }
function.callAsistan bir fonksiyon çağırdığında{ name, args }
function.resultFonksiyon sonuç döndüğünde{ name, result }
call.endedArama bittiğinde{ status, duration_ms }
errorAkış düzeyinde hata{ code, message }

transcript.partial olayları konuşma tanıyıcı ilerledikçe gelir; "yazıyor" tarzı canlı arayüz için kullanın. O cümlenin kesin hali transcript.final olayıdır — kalıcı olarak saklayacağınız metin bu olmalı.

Çoklu aramaya abone olmak

Tek bağlantı üzerinden birden fazla aramayı izleyebilirsiniz. Mesajlar call_id alanıyla ayrışır; kampanya izleme ekranı için doğru desen budur.

ws.send(JSON.stringify({ type: 'subscribe', call_id: 'call_a' }));
ws.send(JSON.stringify({ type: 'subscribe', call_id: 'call_b' }));

// izlemeyi bırakmak
ws.send(JSON.stringify({ type: 'unsubscribe', call_id: 'call_a' }));

Yeniden bağlanma

Mobil uygulamanın arka plana düşmesi veya ağın anlık kopması normaldir. Bağlantı kapandığında artan aralıklarla yeniden bağlanın ve aboneliklerinizi tekrar bildirin.

let gecikme = 1000;
const abonelikler = new Set();

function baglan() {
  const ws = new WebSocket(url);
  ws.onopen = () => {
    gecikme = 1000;
    abonelikler.forEach((id) =>
      ws.send(JSON.stringify({ type: 'subscribe', call_id: id }))
    );
  };
  ws.onclose = () => setTimeout(baglan, Math.min((gecikme *= 2), 30000));
}
baglan();

Bağlantı kopukken tetiklenen olaylar tekrar gönderilmez. Eksiksiz geçmiş için arama bittikten sonra GET /v1/calls/{id} ile dökümü çekin — canlı akış tamamlayıcıdır, kayıt kaynağı değildir.

İstemci tarafı olay girişi

Ters yön de var: kendi arayüzünüzdeki kullanıcı olaylarını (tıklama, dönüşüm) platforma gönderebilirsiniz. Bu uç kimlik doğrulaması istemez ve hız sınırlıdır.

curl -X POST https://api.call2me.app/v1/events \
  -H "Content-Type: application/json" \
  -d '{"event": "web_test_started", "properties": {"page": "/fiyatlandirma"}}'

LiveKit veri kanalı

Tarayıcı üzerinden sesli görüşme yapıyorsanız (LiveKit WebRTC), döküm mesajları LiveKit veri kanalından da gelir; ayrı bir WebSocket açmanız gerekmez. Telefon aramaları ve dışarıdan izleme için yukarıdaki WebSocket doğru yoldur.

Sık sorulanlar

Olaylar ile webhook arasındaki fark ne?

Webhook, ayrık bir olay gerçekleştikten sonra tetiklenir (arama bitti, döküm hazır). Olaylar arama sürerken gerçek zamanlı akar. Arka plan iş akışları için webhook, canlı arayüz için olaylar.

WebSocket kullanmak zorunda mıyım?

Hayır. Yalnızca canlı arayüz istiyorsanız gerekir. Çoğu entegrasyon webhook veya yoklama ile sorunsuz çalışır; olaylar isteğe bağlı bir kanaldır.

Tek bağlantıdan birden çok aramayı izleyebilir miyim?

Evet. Bağlandıktan sonra her arama için subscribe mesajı gönderin. Mesajlar call_id alanıyla ayrışır; aynı soket üzerinden abone olup çıkabilirsiniz.

Bağlantı koparsa kaçırdığım olaylar gelir mi?

Hayır, kopukluk süresindeki olaylar tekrar gönderilmez. Yeniden bağlandığınızda o andan sonraki olayları alırsınız. Eksiksiz geçmiş için arama bitince dökümü REST üzerinden çekin.

Tarayıcıda API anahtarımı kullanabilir miyim?

Kullanmayın. Anahtar hesabınızın tamamına erişir. Tarayıcı istemcileri için arka ucunuzdan kısa ömürlü token üretip onu kullanın.

10 dakikada AI telefon asistanınızı kurun

Kod yok. Kart yok. Sadece bir telefon numarası.