Asterisk etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Asterisk etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

10 Temmuz 2012 Salı

AMI Queue (Kuyruk İşlemleri)


Ami ile kuyruk işlemleri asterisk ile otomatik arayıcı veya ivr uygulamaları geliştirdiğimizde oldukça işimize yarayacak işlevler üstlenirler. Bir çağrı merkezinde genelde operatörlerin belirli gruplara üye olup günün belirli saatlerinde sisteme giriş, çıkış, mola gibi işlemleri yapması istenir. İşte bu anlarda biz daha önceki yazılarımızda bahsettiğimiz çağrı bağlama işlemlerini operatörlere değil kuyruklara yaparız. Böylece Asteriskin ACD (Automatic Call Distrubutor) akıllı çağrı dağıtım nimetlerinden faydalanabiliriz.

Kuyruğa Operatör Eklemek


public void AgentAddQueue(String Exten)
        {
            try
            {
                Asterisk.NET.Manager.Action.QueueAddAction action = new QueueAddAction();
                action.ActionId = "14";
                action.Queue = mQueue;
                action.Interface = "SIP/" + Exten;
                action.MemberName = Exten;
                action.Penalty = 0;
                action.Paused = true;

                Asterisk.NET.Manager.Response.ManagerResponse mr =
                    manager.SendAction(action);
            }
            catch
            {
                //err
            }
        }


Kuyruktan Operatörü Çıkarmak


public void AgentRemoveQueue(String Exten)
        {
            try
            {
                Asterisk.NET.Manager.Action.QueueRemoveAction action = new QueueRemoveAction();
                action.ActionId = "13";
                action.Queue = mQueue;
                action.Interface = "SIP/" + Exten;

                Asterisk.NET.Manager.Response.ManagerResponse mr =
                    manager.SendAction(action);
            }
            catch
            {
               //err
            }
        }


Operatörü Kuyrukta Bekletme


public bool AgentLock(String Queue, string Exten, bool Lock)
        {
            try
            {
                Asterisk.NET.Manager.Action.QueuePauseAction action = new QueuePauseAction();
                action.ActionId = "11";
                action.Queue = Queue;
                action.Interface = "SIP/" + Exten;
                action.Paused = Lock;

                Asterisk.NET.Manager.Response.ManagerResponse mr =
                   manager.SendAction(action);
                if (mr != null)
                    return true;
                else
                    return false;
            }
            catch
            {
                return false;
            }
        }



Operatörün Kuyruktaki Durumu



protected void AgentQueueStatus(string Exten)
        {
            try
            {
                Asterisk.NET.Manager.Action.QueueStatusAction action = new QueueStatusAction();
                action.ActionId = "12";
                action.Member = Exten;
                action.Queue = mQueue;

                Asterisk.NET.Manager.Response.ManagerResponse mr =
                    manager.SendAction(action);
            }
            finally
            {
            }
        }
gibi.....





24 Haziran 2012 Pazar

Asterisk Agent Arayıcı


Windows işletim sisteminde çalışan uygulama aranacak kaydı veri tabanından getirip Asterisk üzerinden arama gerçekleştiriyor. Yazılım taslak durumdadır.

https://docs.google.com/open?id=0B9hOQDVlCkb1WHdfWC1mcklzanc



Ami Diğer Olaylar



Ami Diğer  Bazı Olayların Kullanılması

manager = new ManagerConnection(Properties.Settings.Default.astserver, 5038, 
                    Properties.Settings.Default.astuser,Properties.Settings.Default.astpass);

                manager.OriginateResponse += new OriginateResponseEventHandler(manager_OriginateResponse);
                manager.Dial += new DialEventHandler(manager_Dial);
                manager.NewState += new NewStateEventHandler(manager_NewState);
                manager.Hangup += new HangupEventHandler(manager_Hangup);
                manager.NewCallerId += new NewCallerIdEventHandler(manager_NewCallerId);
                manager.Login();




Yeni Çağrı Başlama Olayı


void manager_NewCallerId(object sender, Asterisk.NET.Manager.Event.NewCallerIdEvent e)
        {
            try
            {
              if (e.CallerIdNum != null)
                  if ((e.CallerIdNum == txtPhone.Text) || (e.CallerIdNum == txtCountry.Text))
                  {
                      updateTelBagText("Aranıyor....", Color.Lime);
                      updateAgentCommentText("",Color.Red);
                      lblHangup.Text = "";
                  }
                       
            }
            catch
            {
                
                throw;
            }
        }


Çağrı Sonlanması

void manager_Hangup(object sender, Asterisk.NET.Manager.Event.HangupEvent e)
        {
            try
            {
                if (e.CallerIdNum != null)
                    if ((e.CallerIdNum == txtPhone.Text)||(e.CallerIdNum == txtCountry.Text))
                    {
                        updateTelBagText(" Görüşme Bitti.", Color.Red);

            
                        if (e.Cause == 16)
                        {
                            lblHangup.Text = "Normal Kapanma...";
                            lblHangup.BackColor = Color.LightBlue;
                        }
                        else if (e.Cause == 17)
                        {
                            lblHangup.Text = "Meşgul Verdi...";
                            lblHangup.BackColor = Color.Magenta;
                        }
                        else if (e.Cause == 19)
                        {
                            lblHangup.Text = "Cevap Yok...";
                            lblHangup.BackColor = Color.Fuchsia;
                        }
                        else if (e.Cause == 1)
                        {
                            lblHangup.Text = "Numara Yok...";
                            lblHangup.BackColor = Color.Fuchsia;

                        }
                        
                        updateAgentCommentText("Çağrı Sonlandı...",
                        Color.LightGreen);
                    }
            }
            catch
            {
                
            
            }
        }


Çağrı Durumu Olayı

void manager_NewState(object sender, Asterisk.NET.Manager.Event.NewStateEvent e)
        {
            bool callidok = false;
            bool agentidok = false;

            try
            {
                if (e.CallerId != null)
                    if (e.CallerId == cCallerID)
                        callidok = true;
                    else if (e.CallerId == Extension)
                        agentidok = true;


                if ((!callidok) && (e.CallerIdNum == cCallerID))
                    callidok = true;
                else if ((!agentidok) && (e.CallerIdNum == Extension))
                    agentidok = true;

                if (agentidok)
                {
                    if (e.ChannelState == "5")
                    {
                        updateAgentCommentText("Çağrıyı Kabul Edin...",
                        Color.Red);
                    }
                    else if (e.ChannelState == "6")
                    {
                        updateTelBagText("Açtınız...", Color.Lime); ;
                    }
                    else if (e.ChannelState == "7")
                    {
                        updateTelBagText("Meşgul verdiniz..",Color.Red);
                    }
                }

                if (callidok)
                {
                    if (e.ChannelState == "5")
                    {
                        updateTelBagText(cCallerID + " Çalıyor...",
                        Color.Yellow);
                    }
                    else if (e.ChannelState == "6")
                    {
                        updateAgentCommentText("Çağrı Bağlandı...",
                        Color.LimeGreen);
                        updateTelBagText(cCallerID + " Açıldı...",
                        Color.LimeGreen);
                    }
                    else if (e.ChannelState == "7")
                    {
                        updateAgentCommentText("",Color.Red);
                        updateTelBagText(cCallerID + " Meşgul...",
                        Color.Pink);
                    }
                }


            }
            catch
            {
               
            }  
        }

Bağlatı Durumu Olayı


void manager_OriginateResponse(object sender, Asterisk.NET.Manager.Event.OriginateResponseEvent e)
        {
            bool orgCall = false;
            string orgExten = "";

            try
            {
                if (e.Channel != null)
                {
                    string tmpch = e.Channel.Substring(e.Channel.IndexOf("SIP/") + 4, 3);
                    if (tmpch == Extension)
                    {
                        if (e.Response == "Failure")
                        {
                            updateTelBagText( orgExten + "Hata Bağlantı Yapılamadı...",Color.Red);       
                            cCallerID = "";
                        }
                        else if (e.Response == "Success")
                        {
                            if (e.Exten != null)
                            {
                                orgExten = e.Exten;
                                cCallerID = orgExten;
                            }
                            updateTelBagText(orgExten + " bağlanıyor...", Color.Orange);
                            updateAgentCommentText("Kabul Ettiniz...",
                            Color.Lime);
                        }

                    }
                }
            }
            catch
            {
                updateTelBagText("Originate Eroor...",Color.Red);
            }

        }


17 Mayıs 2012 Perşembe

İlk Asterisk.Net C# Örneğimiz...

Evet kütüphane ile ilk denemelerimize başlamak için manager.conf dosyasına kullanıcımızı ekledik.



[amiuser]
secret = 123456
deny=0.0.0.0/0.0.0.0
permit=192.168.1.0/255.255.255.0
read = system,call,log,verbose,command,agent,user,config,command,dtmf,reporting,cdr,dialplan,originate
write = system,call,log,verbose,command,agent,user,config,command,dtmf,reporting,cdr,dialplan,originate

Ekleyeceğim örnek ile santralimiz üzerindeki olayları yakalama ve değerledirmeye başladık. Kontrollere senkron eriştiğime dikkat edin.. 

https://docs.google.com/open?id=0B9hOQDVlCkb1ODlKUkJuVnQ0WGM

4 Mayıs 2012 Cuma

Elastix Callcenter Modülü 2


Elastix callcenter modülü ile ilgili genel tecrübelerim ve edindiğim fikirler (10 kullanıcılı sistem);

   Bir kampanyayı oluşturup csv ile kayıtları yükledikten sonra bir daha aynı kampanyaya kayıt ekleyememek. (Bunu aşmak için benim gibi dışarıdan bir transfer programı yazabilirsiniz.)

   Belirli bir süre sonra agenta çağrının aktarılması fakat ekrana kayıt bilgilerinin gelmemesi.(Arama servisini restart edip  agentı sistemden çıkartıp tekrar sokmak sorunu kısa süreliğine çözüyor)

   Crm veya Müşteri Veritabanı vb bilgilerinde oluşan hareketleri (satış, anket vb) tekrar update etmek için ters yönlü transfer programı yazabilirsiniz.

   2 haftaya yakın bu şekilde çalışma sonucunda sistemin verimli çalışmadığını düşünüp. Direk master veri tabanından arama yapan arayıcı ve agentların önlerinde client programı geliştirp bunun üzerinden gitmeye karar vermiştim.

30 Nisan 2012 Pazartesi

Elastix Callcenter Modülü

Elastix Callcenter Modülü

http://www.elastix.org/index.php/en/product-information/call-center-module.html


Elastix Callcenter Modülü yukarıda ki link üzeriden indirip kurabileceğiniz gibi elastix içerisinden Addon bölümünden de yüklenebilir.




Sistem , çalışma düzeni olarak Kampanya - Form - Script - Mola tanımlarınızı belirleyip Kullanıcı tanımlarınızı basit ve hızlı şekilde yapmanız için tasarlanmış.

Kampanyada yapılan aramaların hangi operatörlere gönderilmesi isteniyorsa o operatörler bir kuyruk tanımlanır ve eklenir.




Callcenter uygulamasını kullanacak kullanıcılar tanımlanır. Dahilileri seçilir. Şifreler belirnirken sadece rakamdan oluşmalı. 



Mola tanımları (Saat kısıtlı bir mola tanımı bu ekran üzerinde mevcut değil)




Agentların kullanmasını istediğimiz form dizayn edilir.




Kampanyanız da kullanacağınız trunk , kuyruk ve diğer tanımları bu bölümden yapabilirsiniz.



Kampanyalarımızın durumlarını anlık olarak değiştirebilme şansına sahipsiniz.



Giriş ekranından sisteme girmeye çalışıldığında sistemdeki dahili çalacak şifrenin tuşlanması istenecektir.



Şifre doğru ise Agent ekranı sizi karşılayacaktır.



Tüm işlemler yapıldıktan sonra Arama Motoru ayarları yapılıp motor başlatılmalıdır. Kullanıcı adı ve şifresi olarak  manager.conf dosyanızdan yetkili bir kullanıcıyı kullanabilirsiniz.


16 Ekim 2011 Pazar

Nedir VOIP ?


Voip ip üzerinden ses verisi gönderilme işlemidir. Açımında VO(Voice Over) IP(Internet Protocol) dır.
Voip açıklanmaya çalışıldığında kavram oldukça genişliyor. Tanımı belki şöyle yaparsak biraz daha açıklayıcı olacak. Haberleşmek isteyen kişinin sesini haberleşmek istediği kişiye kısmen ve tamamen IP protokolü üzerinden gönderme işlemi.
Voip haberleşmelerde orturum SIP (Session Initiation Protocol) ile başlatılır yönetilir. Ses veri ise RTP (Real-Time Transport Protocol) ile gönderilir. 

Voip haberleşme görüşmesi üzerinde extension(abone) tanımları bulunan IPPbx (IP Santral) yapmaktadır.
Bilinen en yaygın pbx Asterisktir. Asteriskin orjinali Linux üzerinde olmak üzere Bsd, Mac, Solaris ve Windows işletim sisteminde çalışan sürümleri mevcuttur.