astonishing-waitress-60915
03/24/2026, 9:22 AMtall-airline-16756
03/24/2026, 9:22 AMtall-airline-16756
03/24/2026, 9:23 AMsip.callStatus = 'hangup' — Çağrı sonlandı / karşı taraf kapattı.
◦ sip.callStatus = 'active' — Çağrı bağlı ve aktif.
◦ sip.callStatus = 'dialing' — Arama çalınıyor / aranıyor.
◦ sip.callStatus = 'ringing' — Gelen çağrı çalıyor.
• Disconnect / Close reason alanları (neden kapandığını anlamak için):
◦ CLIENT_INITIATED — Kullanıcı kendisi kapattı (ör. telefon kapatıldı veya görüşmeyi sonlandırdı).
◦ PARTICIPANT_REMOVED — API ile katılımcı uzaklaştırıldı.
◦ CONNECTION_TIMEOUT — Ağ bağlantı zaman aşımı / ağ kopması.
◦ ROOM_DELETED — Oda API ile silindi.
• Diğer ilgili olaylar:
◦ track_unpublished — Ses track’i kaldırıldığında (ör. bağlantı kesildiğinde ses akışı durursa).
◦ egress_ended — Eğer kayıt (egress) açıksa, kayıt sonlandığında gönderilir.
İşleme dair kısa notlar ve öneriler:
• Telefon kapanması tipik olarak participant_left + sip.callStatus = 'hangup' veya CLIENT_INITIATED close reason ile gözlemlenir; ancak ağ kopması durumunda CONNECTION_TIMEOUT gelebilir.
• Webhook’lar JWT ile imzalanır — güvenlik için imzayı doğrulayarak gelen olayların gerçekliğini kontrol etmeni öneririm.
• Hangi olayları kullanacağına senin uygulama mantığı karar verir: örneğin faturalama için sip.callStatus = 'hangup' kullanırken; yeniden bağlanma mantığı için `CONNECTION_TIMEOUT`’ı ayrı ele alabilirsin.
İstersen şu bilgileri paylaş, sana daha hedefli öneri vereyim:
• SIP entegrasyonunu hangi senaryoda kullanıyorsun (inbound, outbound, her ikisi)?
• Hangi olaylarla tetiklenen iş akışları (faturalama, kayıt durdurma, bildirim gönderme) kurmak istiyorsun?
Yardımcı olayları veya örnek webhook payload’larını görmek istersen, hangi senaryoya odaklanmak istediğini söyle yeter.
Sources: Server-side | livekit/livekit_composite | DeepWiki | SIP Lifecycle Management Agent | LiveKit Documentation, with interactive elementsastonishing-waitress-60915
03/24/2026, 9:23 AMtall-airline-16756
03/24/2026, 9:24 AMsip.callStatus attribute’u SIP çağrısının ayrıntılı durumunu taşır. Olası değerler arasında busy (meşgul) ve no answer (cevapsız) bulunur; ayrıca dialing, ringing, active, hangup gibi durumlar da vardır.
• Bu attribute değiştiğinde odada participant_attributes_changed (veya SDK tarafında participantAttributesChanged) olayı tetiklenir. Bu olayı dinleyerek gelen değişikliklerde sip.callStatus varsa ilgili durumu yakalayabilirsin.
Kısa örnek akış (uygulamada izlemen gereken adımlar):
1. Oda içindeki katılımcı attribute değişikliklerini dinle (participant_attributes_changed).
2. Değişen attribute’larda sip.callStatus olup olmadığına bak.
3. sip.callStatus değeri busy veya no answer ise kendi iş mantığına göre (bildirim, faturalama, yeniden deneme vs.) hareket et.
Notlar:
• Standart webhook event’leri (ör. participant_left) yine gönderilir ama onlar “meşgul/cevapsız” gibi SIP özel durumlarını içermez.
• Eğer istersen, kullandığın SDK (JavaScript/Python vb.) veya hangi iş akışını tetiklemek istediğini paylaş; sana örnek kod veya daha spesifik nasıl ele alabileceğine dair adımlar göndereyim. Sources: SIP Lifecycle Management Agent | LiveKit Documentation | Job lifecycle | LiveKit Documentation | sip | livekit/livekit_composite | DeepWiki | Agents telephony integration | LiveKit Documentation, with interactive elementsastonishing-waitress-60915
03/24/2026, 9:25 AMbusy (meşgul) ve no answer (cevapsız) bulunur; ayrıca dialing, ringing, active, hangup gibi durumlar da vardır.
Bunları görebileceğim döküman, kod falan var mı?tall-airline-16756
03/24/2026, 9:25 AMsip.callStatus değerleri, ve hem TypeScript hem Python için örnek dinleme kodu ile nerelere bakman gerektiğine dair yönlendirme var.
Olası sip.callStatus değerleri
• dialing — Arama başlatılıyor
• ringing — Telefon çalıyor
• active — Görüşme bağlandı
• hangup — Görüşme sonlandı
• busy — Hedef hat meşgul
• no answer — Cevap verilmedi
• automation — DTMF/otomasyon aşaması (ör. sesli yanıt sistemi)
Nasıl izlersin (genel yaklaşım)
• SIP çağrılarının ayrıntılı durumları webhook’lara ayrı event olarak gelmez; sip.callStatus participant attribute’u olarak tutulur.
• Attribute değiştiğinde oda içinde participant_attributes_changed (SDK’da participantAttributesChanged) olayı tetiklenir — bu olayı dinleyip sip.callStatus değişimini kontrol etmelisin.
• Standart webhook’lar (participant_left vb.) yine gelir ama “busy/no answer” gibi SIP özel durumlarını taşımazlar.
TypeScript (örnek)
ctx.room.on('participantAttributesChanged', (changedAttrs: Record<string,string>, p: Participant) => {
if (p.kind === ParticipantKind.PARTICIPANT_KIND_SIP && changedAttrs['sip.callStatus']) {
const callStatus = changedAttrs['sip.callStatus'];
console.log(`SIP call status updated for ${p.identity}: ${callStatus}`);
// Örneğin:
// if (callStatus === 'busy') { ... }
// if (callStatus === 'no answer') { ... }
}
});
Python (örnek)
@ctx.room.on("participant_attributes_changed")
def on_participant_attributes_changed(changed_attrs: dict, participant):
if participant.kind == rtc.ParticipantKind.PARTICIPANT_KIND_SIP:
if 'sip.callStatus' in changed_attrs:
call_status = changed_attrs['sip.callStatus']
print(f"SIP call status updated for {participant.identity}: {call_status}")
# call_status: 'busy', 'no answer', 'dialing', 'ringing', 'active', 'hangup', ...
Dokümantasyon ve örneklere nereden bakmalısın
• SIP katılımcı attribute’ları ve sip.callStatus hakkında bilgi edinmek için LiveKit’ın SIP/SIP gateway bölümüne bak.
• SDK’larında (JS/Python) participantAttributesChanged / participant_attributes_changed olaylarını nasıl dinleyeceğini gösteren örnek kodları incele.
• Webhook yapısı ve imza doğrulama için webhook güvenliği bölümlerine bakman faydalı olacaktır.
İstersen hangi SDK’yı kullanıyorsun (JavaScript/TypeScript, Python veya başka)? Hangi iş akışını tetikleyeceksin (bildirim, faturalama, kayıt durdurma vb.)? Bu bilgileri verirsen, sana doğrudan kullanabileceğin daha özelleşmiş örnek kod ve hangi dokümana bakman gerektiğini içeren linklerle göndereyim.
, with interactive elementsastonishing-waitress-60915
03/24/2026, 9:26 AMtall-airline-16756
03/24/2026, 9:27 AMsip.callStatus attribute’unda tutulur. Bu attribute değiştiğinde odada participant_attributes_changed (SDK’larda participantAttributesChanged) olayı tetiklenir.
• Bu durumların listesi ve örnekler dokümanda ve repo içindeki “recipes” bölümünde bulunuyor.
Doğrudan bakman gereken yerler (doküman ve örnekler)
• Telephony / SIP genel bakış: https://docs.livekit.io/telephony/
• SIP API ve SIP participant attribute’ları: https://docs.livekit.io/reference/telephony/sip-api/ ve https://docs.livekit.io/reference/telephony/sip-participant/
• SIP yaşam döngüsü (kod örnekleri, recipes): https://docs.livekit.io/recipes/sip_lifecycle
• Diğer örnekler (ör. telefon asistanı, company directory): https://docs.livekit.io/recipes/company-directory
Olası sip.callStatus değerleri (tam liste)
• dialing — Arama başlatılıyor
• ringing — Hedef telefon çalıyor
• active — Görüşme bağlı/aktif
• hangup — Görüşme sonlandı
• busy — Hedef hat meşgul
• no answer — Cevap verilmedi
• automation — DTMF/otomasyon aşaması (ör. IVR)
Nasıl kullanırsın — hızlı örnekler
1. Oda içinde attribute değişikliklerini dinle:
◦ JavaScript/TypeScript: participantAttributesChanged olayını kullan.
◦ Python: participant_attributes_changed olayını kullan.
1. Gelen değişikliklerde sip.callStatus olup olmadığına bak; varsa iş mantığını çalıştır (busy, no answer, vs.).
2. İhtiyaç varsa ayrıca participant_left veya track_unpublished gibi webhook/olaylarla kombine ederek daha sağlam durum takibi yapabilirsin.
Kısa TypeScript örneği
ctx.room.on('participantAttributesChanged', (changedAttrs, p) => {
if (p.kind === ParticipantKind.PARTICIPANT_KIND_SIP && changedAttrs['sip.callStatus']) {
const callStatus = changedAttrs['sip.callStatus'];
console.log(`SIP status for ${p.identity}: ${callStatus}`);
}
});
Kısa Python örneği
@ctx.room.on("participant_attributes_changed")
def on_participant_attributes_changed(changed_attrs: dict, participant):
if participant.kind == rtc.ParticipantKind.PARTICIPANT_KIND_SIP:
if 'sip.callStatus' in changed_attrs:
call_status = changed_attrs['sip.callStatus']
print(f"SIP status for {participant.identity}: {call_status}")
İstersen ben yardımcı olayları ve örnek repo dosya yollarını (senin kullandığın SDK’ya göre) daha detaylı verebilirim:
• Hangi SDK’yı kullanıyorsun (JavaScript/TypeScript, Python, Go)?
• Çağrı durumlarını izleyince hangi iş akışlarını tetikleyeceksin (bildirim, faturalama, kayıt durdurma, otomatik yeniden deneme vs.)?
Bu bilgileri paylaşırsan sana doğrudan kullanabileceğin kod parçacıkları ve tam doküman linkleriyle yardımcı olayım.
Sources: Agents telephony integration | LiveKit Documentation | SIP Lifecycle Management Agent | LiveKit Documentation | Company directory phone assistant | LiveKit Documentation | Server-side | livekit/livekit_composite | DeepWiki | server-sdk-go | livekit/livekit_composite | DeepWiki, with interactive elements