Lumate

Telefon, WhatsApp ve e-posta

Markdown olarak

Telefon sistemleri

Lumate'in ajanları telefonda OpenAI'nin SIP arayüzü (GPT-Live) üzerinden konuşur. Bir arama SIP ile OpenAI'ye ulaşır; OpenAI imzalı bir webhook ile Lumate'e haber verir; Lumate aramayı ajanın ses istemi (prompt) ve araçlarıyla kabul eder ve arama bitene kadar izler.

Şirket ağındaki, bir ajanla konuşan IP telefon için (hat yok, genel adres yok) Kullanıcı rehberi içindeki Masa telefonu bölümüne bakın.

Bu sayfa şunları kapsar:

  • Lumate'in bir müşteriyi nasıl ve hangi hattan aradığı, örneklerle (sonraki bölüm);
  • bölüm 1: bugün neyin çalıştığı ve bir numaranın nasıl bağlanacağı;
  • bölüm 2: operatörünüzle OpenAI arasında ne zaman Asterisk gerektiği, çalışan bir yapılandırmayla;
  • bölüm 3: 3. aşamanın (Asterisk üzerinden canlı dinleme ve devralma) neler getireceği — planlandı, henüz yapılmadı.

Lumate bir müşteriyi nasıl arar

Lumate'in kendine ait bir telefon hattı yoktur. Şirketin zaten sahip olduğu bir hattan, ofiste masasında oturan biri gibi arar.

Şema: Lumate bir müşteriyi nasıl arar

Hatlar. Sohbette istenen aramalar, Call now, arama listeleri ve otomatik arayıcı (dialer) ofis hattından, o yoksa WhatsApp Web üzerinden çıkar:

  1. Ofis hattı (Settings → Desk phone, Ayarlar → Masa telefonu). Lumate, şirket santralinde bir dahilidir. Müşterinin numarasını dış hat önekiyle (örneğin 9, Settings → Call center içinde ayarlanır) çevirir; santral aramayı, ofisteki herkes için yaptığı gibi kendi operatör hattından dışarı verir. Müşteri şirketin numarasını görür: bu numarayı santral belirler, Lumate değiştiremez. Sunucu sürümünde dahilinin bağlantısı bağlı bir ofis bilgisayarında çalışır (Settings → Desk phone → Connection runs on).
  2. WhatsApp Web, ofis hattı kapalıyken. Lumate, ofis tarayıcısına bağlı WhatsApp numarasından arar. Müşteri o numarayı görür ve WhatsApp'ı olmalıdır. WhatsApp aramaları BAE'de bağlanmaz. Bkz. Ofis tarayıcısı → Calls through WhatsApp Web.

Doğrudan Lumate'e bağlı bir numara (Settings → Phone, yalnızca sunucu sürümü) üçüncü bir yoldur: Lumate'in kendisinin cevapladığı genel bir numara (bölüm 1 ve 2).

Ofis hattının ihtiyaçları:

  • Dışarıyı arayabilen bir santral. Ofistekiler masa telefonlarından bir müşterinin cep telefonunu arayabiliyorsa santralin bir operatör hattı vardır ve Lumate aynı hattı kullanır.
  • Dahilinin izinleri. IT, Lumate'in dahilisinin dış numaraları aramasına ve çağrı merkezinin aynı anda yaptığı kadar aramayı taşımasına izin verir (bkz. Masa telefonu ve santral).
  • Ofiste santral yok mu? Bir operatörden alınan SIP hattıyla birlikte barındırılan bir santral (örneğin bulutta 3CX) bunu sağlar. İkisi de yoksa Lumate yalnızca WhatsApp Web üzerinden arar.

Aramayı ne başlatır:

Siz Lumate ne yapar Kontroller
Sahip veya bir yönetici, sohbette ya da sesli konuşmada: "Ali Yılmaz'ı ara, yarın saat 3 ona uyar mı sor" Hemen ya da verdiğiniz saatte tek arama Size yalnızca 08:00–21:00 dışında ya da aranmak istemeyen bir numara için önce sorar (Lumate'in sizin için yaptığı aramalar)
Bir müşteri kartında Call now O müşteriye tek arama Çağrı merkezininkiler: kayıtlı bir neden, yakın tarihli bir DNCR kontrolü, arama saatleri ve sınırlar
Bir arama listesi: "To call kartlarını ara" ya da bir Excel dosyası, sonra Start Arka arkaya aramalar Aynıları
Otomatik arayıcı (Settings → Call center → Dialer) Yarım dakikada bir zamanı gelen kartları arar Aynıları

Örnekler

Teyit edilecek bir buluşma (ofis hattı).

  1. Sahip sohbete yazar: "Ali Yılmaz'ı ara, yarın saat 3'te kahve hâlâ uyar mı sor."
  2. Lumate, Ali'nin numarasını kartında bulur ve dış hat önekiyle 100 numaralı dahiliden çevirir.
  3. Santral aramayı operatör hattından dışarı verir. Ali'nin telefonunda ofisin numarası görünür.
  4. Lumate onu sahibin asistanı olarak selamlar ve hemen sorar. Ali aynı kafede saat 4'ün daha uygun olduğunu söyler.
  5. Buluşma sahibin Appointments sayfasına kişisel buluşma olarak girer ve Lumate sohbete Ali'nin saati 4'e aldığını yazar.

Bir arama listesi ve broker isteyen bir müşteri.

  1. Bir yönetici sohbete 40 talebin olduğu bir Excel dosyası ekler ve "bunları ekle ve ara" yazar. Arama listesi kartında bu kişilerin neden aranabileceğini kaydeder (Record why), sonra Start'a basar.
  2. Lumate onları ofis hattından arka arkaya arar. Her biri şirketin numarasını görür.
  3. Sara ilgilenir ve bir brokerla konuşmayı kabul eder. Lumate onu bir meslektaşına bağladığını söyler; Sara sessiz bir bekleme sesi duyarken kartındaki brokerın dahilisi çalar.
  4. Broker açar ve tek cümleyle kimin ve ne için aradığını duyar; Lumate ikisini birleştirir ve hattan çıkar. Brokerın Lumate Desk'i Sara'nın kartını gösterir.
  5. Broker açmasaydı Sara Lumate'le kalırdı; Lumate ona geri arama önerir.

Müşteri geri arar (resepsiyon).

  1. IT santrali şirketin numarasını 100 numaralı dahiliye (ya da orada biten bir menü seçeneğine) gönderecek şekilde kurmuştur ve Lumate answers callers on the office line açıktır (Settings → Call center → Incoming calls).
  2. Ali ertesi gün şirketin numarasını arar. Lumate onun dilinde cevap verir.
  3. Mehmet'i ister. Lumate, Mehmet'in müsait olup olmadığına baktığını söyler; Ali bekleme sesi duyarken Mehmet'in dahilisi çalar. Mehmet açar, kimin ve ne için aradığını duyar ve Lumate Ali'yi ona bağlar.
  4. Mehmet toplantıda olsaydı Ali, Lumate'e dönerdi: Lumate, Mehmet'in şu an aramayı alamadığını söyler ve mesaj almayı ya da geri arama ayarlamayı önerir. Ali hiçbir zaman hattan düşmez ve hiçbir dahili numarası duymaz.

Santrali olmayan küçük bir ofis (WhatsApp Web).

  1. Settings → Desk phone kapalı kalır. Bir yönetici ofis tarayıcısında WhatsApp Web'i bağlar (Settings → Browser → Link WhatsApp Web).
  2. "Ayşe Kaya'yı ara" şirketin WhatsApp numarasından çıkar. Ayşe o numarayı görür ve WhatsApp'tan cevap verir.
  3. WhatsApp'ı olmayan bir müşteriye ya da WhatsApp'ın bağlamadığı bir aramaya (BAE) bu yolla ulaşılamaz.

1. Bugün neler çalışıyor

Şema: 1. Bugün neler çalışıyor
  • Gelen: Bir numara çalar; numaranın ajanı kayıt bildirimiyle yanıt verir, gelen arama senaryosunu izler, randevu isteklerini kaydeder, istenirse bir kişiye aktarır ve aramayı müşterinin kartına yazar.
  • Giden: Karttaki "Call now" ya da ajanın kendi aramaları. Bunlar, bir yönetici hatla birlikte etkinleştirene kadar kapalı kalır ve her arama uyum kapısından geçer:
    • bir izin (onay) dayanağı;
    • aranmak istemeyenler listesi (do-not-call);
    • şirketin saat diliminde arama saatleri;
    • deneme sınırları.
  • Her aramadan sonra:
    • döküm kartta ve Calls sayfasında olur;
    • kart taşınır;
    • kartın ajanı, aramayı kaydetmek için uyandırılır;
    • bir gözden geçiren belirlenmişse ona bir inceleme görevi gider.

Bir numara bağlama

  1. Settings → Secrets: SIP etkin bir OpenAI projesinden OPENAI_API_KEY ekleyin.

  2. Settings → Phone: OpenAI proje kimliğini girin. Sayfa aranacak SIP adresini gösterir: sip:proj_…@sip.api.openai.com;transport=tls.

  3. OpenAI paneli (platform.openai.com → Webhooks):

    • Phone sayfasının gösterdiği URL ile live.transport.incoming için bir webhook ekleyin;
    • imzalama gizli anahtarını Settings → Secrets içine OPENAI_WEBHOOK_SECRET olarak kopyalayın.

    Sunucuya genel adresinden HTTPS ile ulaşılabilmelidir.

  4. Hattınızı ya da santralinizi 2. adımdaki SIP adresine yönlendirin. TLS ve SRTP zorunludur. Operatörünüz bunları yapamıyorsa araya Asterisk koyun (2. bölüm).

  5. Settings → Phone → Numbers: numarayı ekleyin. Seçin:

    • yanıt verecek ajanı;
    • bir gelen arama senaryosunu (isteğe bağlı);
    • her aramayı kimin gözden geçireceğini;
    • aktarma numarasını.
  6. Giden aramalar için: Settings → Phone bölümünde giden aramaları şunlarla etkinleştirin:

    • hattın sips: adresi;
    • kullanıcı adı;
    • arayan kimliği;
    • parola; Secrets içinde SIP_TRUNK_PASSWORD olarak kaydedilir.

Deneyin: numarayı bir cep telefonundan arayın. Ajan yanıt verir, kayıt bildirimini söyler ve arama Calls sayfasında görünür.

2. Operatör ile OpenAI arasında Asterisk

BAE operatör hatları (du, e&) genellikle G.711 (A-law) sesle UDP üzerinden düz SIP verir. OpenAI, SRTP medyasıyla TLS üzerinden SIP ister. Asterisk ikisi arasında çeviri yapar: operatör Asterisk ile, Asterisk OpenAI ile konuşur.

Şema: 2. Operatör ile OpenAI arasında Asterisk

Neye ihtiyacınız var

Öğe Ayrıntı
Sunucu Genel IPv4 adresli bir Linux VM. Ev NAT'ının arkasında olmamalı: OpenAI medyayı doğrudan Asterisk'in adresine gönderir.
Asterisk 22 LTS, en az 22.10.1 (güvenlik düzeltmeleri); güncel sürüm 22.11. --with-pjproject-bundled, libsrtp2 ve libssl ile kaynaktan derleyin.
Operatör bilgileri Hattın IP'si, bağlantı noktası, aktarım türü, kimlik bilgileri ya da IP doğrulaması ve DID'leriniz (numaralarınız)
Güvenlik duvarı Yalnızca operatörden 5060/udp'ye izin verin; OpenAI'ye giden 5061/tcp; operatörden ve OpenAI'nin medya aralıklarından (13.79.45.80/28, 23.98.140.64/28, 40.67.149.176/28, 40.83.204.240/28) RTP 10000–10199/udp

pjsip.conf (uyarlanacak örnek)

[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0:5060
external_media_address=PUBLIC_IP
external_signaling_address=PUBLIC_IP
local_net=10.0.0.0/8

[transport-tls]
type=transport
protocol=tls
bind=0.0.0.0:5061
cert_file=/etc/asterisk/keys/asterisk.crt
priv_key_file=/etc/asterisk/keys/asterisk.key
ca_list_file=/etc/ssl/certs/ca-certificates.crt
method=tlsv1_2
verify_server=yes
external_media_address=PUBLIC_IP
external_signaling_address=PUBLIC_IP

; --- the carrier (IP-authenticated trunk) ---
[carrier]
type=endpoint
transport=transport-udp
context=from-carrier
disallow=all
allow=alaw,ulaw
direct_media=no
rtp_symmetric=yes
force_rport=yes
rewrite_contact=yes
aors=carrier
[carrier]
type=aor
contact=sip:CARRIER_IP:5060
[carrier]
type=identify
endpoint=carrier
match=CARRIER_IP

; --- OpenAI ---
[openai]
type=endpoint
transport=transport-tls
context=from-openai
aors=openai
disallow=all
allow=alaw,ulaw,opus
media_encryption=sdes
direct_media=no
rtp_symmetric=yes
force_rport=yes
rewrite_contact=yes
allow_transfer=no
[openai]
type=aor
contact=sip:sip.api.openai.com:5061;transport=tls
qualify_frequency=0
[openai]
type=identify
endpoint=openai
match=sip.api.openai.com

extensions.conf (örnek)

[from-carrier]
; every call to one of your numbers goes to OpenAI with the dialled number kept
exten => _X.,1,NoOp(Inbound ${EXTEN} from ${CALLERID(num)})
 same => n,Dial(PJSIP/openai/sip:[email protected];transport=tls,60)
 same => n,Hangup()

[from-openai]
; outbound calls Lumate asks OpenAI to place, and transfers to a person
exten => _+X.,1,NoOp(Outbound ${EXTEN})
 same => n,Set(CALLERID(num)=YOUR_CALLER_ID)
 same => n,Dial(PJSIP/${EXTEN}@carrier,60)
 same => n,Hangup()

Notlar:

  • Hattı erişimden uzak tutun. Hiçbir zaman anonim bir endpoint'e izin vermeyin ve güvenilmeyen arayanların ulaşabildiği bir context'in hattı aramasına izin vermeyin. from-openai yalnızca, sunucu adına göre eşleşen openai endpoint'i tarafından erişilir.
  • Mümkün olduğunda baştan sona G.711 kullanın. Operatörler A-law kullanır; bu yüzden OpenAI'ye önce alaw sunmak kod dönüştürmeyi önler.
  • Giden aramalar için Lumate'i Asterisk'e yönlendirin. Settings → Phone bölümünde hattın sips: adresi Asterisk sunucunuz olur, sips:PUBLIC_HOSTNAME:5061, ve Asterisk operatöre iletir.
  • Gerçek bir sertifika kullanın. Asterisk'in TLS aktarımı için bir sertifikaya ihtiyacı vardır (sunucu adı için Let's Encrypt).

Kontrol etme

Komut (asterisk -rvvv) Beklenen
pjsip show endpoints carrier ve openai Available
pjsip show transports 5060'ta udp, 5061'de tls
Arama sırasında rtp set debug on iki yönde paketler; tek yönlüyse external_media_address ve güvenlik duvarını kontrol edin

Sık sorunlar:

  • İki yönde sessizlik: RTP engelleniyor ya da adres yanlış.
  • 488 Not Acceptable: ortak codec yok ya da SRTP eksik.
  • Arama 30 sn sonra düşüyor: bilinen bir OpenAI uyumluluk sorunu; Asterisk'i güncelleyin ve arama kimliğiyle bildirin.

3. 3. aşama — canlı dinleme ve devralma (planlandı)

Henüz yapılmadı. Sunucuyu hazırlayabilmeniz için plan:

Şema: 3. 3. aşama — canlı dinleme ve devralma (planlandı)
  • Aramalar nasıl işlenecek. Her arama bir Asterisk Stasis uygulamasından geçer. Lumate sonra her aramayı ARI ile yönetir: aramanın kendisi için köprüler, dinleme için snoop kanalları.

  • Yöneticinin tarayıcı telefonu. Bir yönetici Lumate'te canlı bir aramayı açar ve tarayıcı katılır:

    • dinle: sessiz;
    • fısılda: yalnızca ajan duyar;
    • devral: yapay zeka bacağı ayrılır ve yönetici müşteriyle konuşur.

    Tarayıcı telefonu, Lumate'in kendi HTTPS adresi üzerinden WebRTC kullanır; ARI hiçbir zaman dışarı açılmaz.

  • Sunucu: phone compose profilinde kendi Asterisk 22 imajımız. Yalnızca 5061/tcp, RTP aralığı ve hat bağlantı noktasını yayımlar.

  • İlk canlı test için açık sorular:

    • OpenAI'nin webhook'ta özel X- SIP başlıklarını iletip iletmediği;
    • codec uzlaşması, Opus ve G.711 karşılaştırması;
    • seçilen VM'de NAT ve RTP.

Hukuk ve iyi uygulama (BAE)

  • Her arama bir kayıt bildirimiyle açılır ve ajanlar yapay zeka olduklarını asla inkâr etmez.
  • Aranmak istemeyenler (do-not-call):
    • "Beni aramayın" kartı do-not-call olarak işaretler ve numarayı şirketin do-not-call listesine ekler;
    • giden aramalar bu listeyi ve kayıt defteri beyanını kontrol eder.
  • Giden aramalar yalnızca şirketin arama saatleri içinde ve yalnızca bir izin (onay) dayanağıyla yapılır.
  • BAE ve Suudi Arabistan'da soğuk arama, pazarlama mesajları, arama izleme bildirimi ve kayıt kuralları, giden aramalar başlamadan önce bir avukatın onayını gerektirir.