Agi sizin beliryeceğiniz tcp ip servera bağlanıp size veri gönderip komut alma yöntemiyle çalışır. Asterisk.Net kütüphanesi içerisinde örneği bulabilirsiniz. Net olarak anlatılmayan yapmanız gereken extension ayarı aşağıdadır.
extensions_custom.conf dosyası(asteriski reload etmeyi unutmayın 192.168.5.107 ip asteriskin bağlanmasını istediğimiz ip)
; This file contains the contexts the agents login for the module call center.
; and contains the context conferences for module conferences of elastix 1.0.
[from-internal-custom]
exten => 1234,1,Playback(demo-congrats) ; extensions can dial 1234
exten => 1234,2,Hangup()
exten => h,1,Hangup()
include => agentlogin
include => conferences
include => calendar-event
include => weather-wakeup
include => weather-wakeup
include => ext-test
include => customivr
[agentlogin]
exten => _*8888.,1,Set(AGENTNUMBER=${EXTEN:5})
exten => _*8888.,n,NoOp(AgentNumber is ${AGENTNUMBER})
exten => _*8888.,n,AgentLogin(${AGENTNUMBER})
exten => _*8888.,n,Hangup()
[mm-announce]
exten => 9999,1,Set(CALLERID(name)="MMGETOUT")
exten => 9999,n,Answer
exten => 9999,n,Playback(conf-will-end-in)
exten => 9999,n,Playback(digits/5)
exten => 9999,n,Playback(minutes)
exten => 9999,n,Hangup
[conferences]
;Used by cbEnd script to play end of conference warning
exten => 5555,1,Answer
exten => 5555,n,Wait(3)
exten => 5555,n,CBMysql()
exten => 5555,n,Hangup
[calendar-event]
exten => _*7899,1,Answer
exten => _*7899,2,Playback(${FILE_CALL})
exten => _*7899,3,Wait(2)
exten => _*7899,4,Hangup()
[weather-wakeup]
exten => *61,1,Answer
exten => *61,2,AGI(nv-weather.php)
exten => *61,3,Hangup
exten => *62,1,Answer
exten => *62,2,AGI(wakeup.php)
exten => *62,3,Hangup
[ext-test]
exten => 122,1,AGI(test.php)
exten => 122,n,hangup()
[customivr]
exten => 200,1,AGI(agi://192.168.5.107/customivr)
exten => 200,2,Hangup()
Asterisk.Net Proje Ayarları
namespace Asterisk.NET.Test
{
class Program
{
const string DEV_HOST = "192.168.5.107";
const int ASTERISK_PORT = 5038;//ami portu karıştırmayın agi portu 4873 tür.
const string ASTERISK_HOST = "192.168.5.100";
const string ASTERISK_LOGINNAME = "amiuser";
const string ASTERISK_LOGINPWD = "123456";
Ayarları yapıp programı çalıştırdığınızda 200 nolu dahiliyi arayıp ivr akışının örnek projede olduğunu göreceksiniz. Yönetimi bu programla yapabieceğiniz gibi kendi geliştireceğiniz server socket bir programla da yapabilirsiniz.
Agi komutlarına http://www.voip-info.org/wiki/view/Asterisk+AGI den erişebilirsiniz.
Örneği Visual Studio 2005 express ile derledim.
Delphi örneği
Doğan bey merhaba. Makalenizdeki tüm ayarları yapmama rağmen, Asterisk.NET.Test projesini çalıştırdığımda console ekranında 200,1,agi(agi://" + DEV_HOST + @"/customivr)
YanıtlaSilexten => 200,2,Hangup()
reload Asterisk and dial 200 from phone.
Also enter 'agi debug' from Asterisk console to more information.
See CustomIVR.cs and fastagi-mapping.resx to detail.>
kısma geldiğinde agent devreye girmiyor ve customivr class ın da bulunan annonslar okunmuyor.
dahdi-channels.conf ın görünümü şu şekilde :
;;; line="1 WCTDM/4/0 FXSKS"
signalling=fxo_ks
callerid=asreceived
group=0
context=from-internal
channel => 1
callerid=
group=
context=default
;;; line="2 WCTDM/4/1 FXSKS"
signalling=fxo_ks
callerid=asreceived
group=0
context=from-internal
channel => 2
callerid=
group=
context=default
;;; line="3 WCTDM/4/2 FXSKS"
signalling=fxo_ks
callerid=asreceived
group=0
context=from-internal
channel => 3
callerid=
group=
context=default
;;; line="4 WCTDM/4/3 FXSKS"
signalling=fxo_ks
callerid=asreceived
group=0
context=from-internal
channel => 4
callerid=
group=
context=default
chan-dahdi.conf ın görünümü şu şekilde :
; Auto-generated by /usr/sbin/hardware_detector
[trunkgroups]
[channels]
context=from-internal
signalling=fxo_ks
rxwink=300 ; Atlas seems to use long (250ms) winks
usecallerid=yes
hidecallerid=no
callwaiting=yes
usecallingpres=yes
callwaitingcallerid=yes
threewaycalling=yes
transfer=yes
canpark=yes
cancallforward=yes
callreturn=yes
echocancel=yes
echocancelwhenbridged=no
faxdetect=incoming
echotraining=800
rxgain=0.0
txgain=0.0
callgroup=1
pickupgroup=1
relaxdtmf=yes
;Uncomment these lines if you have problems with the disconection of your analog lines
;busydetect=yes
;busycount=3
immediate=no
#include dahdi-channels.conf
#include chan_dahdi_additional.conf
200 no lu extension ın kullandığı DAHDI Channel =3, context=from-internal, signalling = fxo-ks
kullandığım kullanıcının profili bu :
[test]
secret = bilge
deny = 0.0.0.0/0.0.0.0
permit = 127.0.0.1/255.0.0.0
permit = 10.0.0.22/255.0.0.0
read = all
write = all
Dev_Host olarak, 10.0.0.22 ip adresini kullanıyorum.
sorun sizce ne olabilir. Teşekkürler..
doğan bey tüm dediklerinizi yapmama rağmen başarı sağlayamadım nedeni sizce ne olabilir. teşekkürler.
YanıtlaSilBu kütüphane en son asterisk 1.6 destekliyor. asterisk sürümünüz 1.8 olmasın. Ben 1.8 için kütüphanede küçük bir değişiklik yaptım.
Silİhtiyacınız olan tek şey ip ayarlarının doğru yapılması. Her iki taraftan ping ile erişim sağladığınıza emin olun.
doğan bey asterisk'in 1.8 versiyonunu kullanıyorum ama
SilManagerConnection.cs ve AsteriskVersion.cs class'ın da
aşağıdaki gibi değişiklikleri yaptım. Değişikliklerden kastettiğiniz bunlar mıdır ?
ManagerConnection.cs
if (version.StartsWith("1.4.")) return AsteriskVersion.ASTERISK_1_4; else if (version.StartsWith("1.6.")) return AsteriskVersion.ASTERISK_1_6; else if (version.StartsWith("1.8.")) return AsteriskVersion.ASTERISK_1_8; else throw new ManagerException("Unknown Asterisk version " + version);
AsteriskVersion.cs
ASTERISK_1_0 = 10,
ASTERISK_1_2 = 12,
ASTERISK_1_4 = 14,
ASTERISK_1_6 = 16,
ASTERISK_1_8 = 18
Evet. Benzeri bir değişikliği yapıp. Bende durumu geçiştirdim. Size tavsiyem. Sorun yaşamamak için (en azında kafanızda soru işareti olmaz.) Elastixin asteriskin 1.6 versiyonunu içeren bir sürümü ile test etmeniz yönünde olur.
SilDoğan bey, elastix 2.0.0 kurdum, asterisk'in 1.6 versiyonunu kullanıyor ama agi scripti(ivr) hala çalıştırmıyor. extension_custom.conf dosyasında gerekli işlemleri yaptım. asterisk sunucusu ile bağlantı kurabiliyorum. küçük bir santralim var üzerinde 4 extension var (11,12,17,18 nolu numaralara sahip). 11 nolu hattı kullandığım telefona taktım. diğer hatları asteriskin portlarına taktım. extension eklerken generic zap device olarak eklediğimde hattı açmıyor. sip device olarak eklediğimde "The number you have dialed is not in service......" şeklinde anons çıkıyor. extension eklerken dahdi uyumlu zap device olarak eklemem gerekiyor sanırım. ayrıca bu ivr için agi scripti çalıştırmam için inbound yada outbound route tanımlamam veya asteriskin üzerinde ivr da bir değişiklik yapmam gerekiyor mu? aginin çalışıp çalışmadığını nasıl test edebilirim. çıldırmak üzereyim. teşekkürler.
YanıtlaSilbasitçe arama yapmak için bir sip exten ekleyin ör n 300. x lite gibi bir programla bağlanın.
YanıtlaSilinclude => customivr
[customivr]
exten => 200,1,AGI(agi://192.168.5.107/customivr)
exten => 200,2,Hangup() tanımını yapın. 200 nolu dahili tanımı olmadığına emin olun. .net Projeden customivr tanımını kontrol edin. asterisk reload edin. 300 nolu dahiliden 200 nolu dahiliyi aradığınızda akışın projenize gelmesi gerekli. olmazsa bana yine mesaj atın. size bedeki vmware image elastix ve asterisk.net projesini gönderiyim.
doğan bey, denedim yine olmadı. "The number you have dialed is not in service......" şeklinde anons çıkıyor. olmadı birde sizin projeden deneyelim. teşekkürler.
YanıtlaSilhttps://docs.google.com/open?id=0B9hOQDVlCkb1RC1sdWUzR1VBVXc
Silbirde 200 nolu dahiliyi sip olarak ekleyin birde öyle deneyin.
doğan bey yine olmadı. ben size ayarlarımın nasıl olduğunu gösteren bir dosya gönderiyorum. kontrol edebilirseniz sevinirim.
Silhttps://docs.google.com/document/d/1wcJZrfsiRcY9_sOLfI2y8-fKhYYSIz2KYb_Nz0-Ickw/edit
dökümanda izin yok herhalde ulaşamadım..
Silşuan ulaşabilirsiniz doğan bey..
SilHızlıca
Silcustomivr tanımını silin..reload yapın.
[agentlogin] veya diğer feature kodlardan birini test edebilirmisiniz? Bakalım ivr acacakmı ?
Eğer açarsa 17 nolu dahiliye xlite ile bağlanın çağrı alıyormu diye bakın. alıyorsa customivr tanımları yapın 17 nolu dahilinin context taımını from-pstnden custom ivr yapın. reload edin.
olmadı ise beni süphelendiren (255.0.0.0) subnet tanımınız oldu. Nasıl bir networkte kurulum yapıyorsunuz bilmiyorum.
[test]
secret = bilge
deny = 0.0.0.0/0.0.0.0
permit = 127.0.0.1/255.0.0.0
permit = 10.0.0.7/255.0.0.0
doğan bey maalesef yine olmadı. çıkamadım ben bu işin içinden. ivr script çalışmıyor. inbound route tanımlıyorum destination olarak ivr verdiğimde çalışıyor ama o zaman da ivr a hükmedemiyorum. ben size uzak masaüstü bağlantı kullanıcı adı ve şifresini mail olarak atsam bakma ihtimaliniz olur mu doğan bey.
SilTam kurmak istediğiniz yapıyı bilmediğim için uzaktan bağlanmanın pek faydası olmaz diye düşünüyorum .Ben size musait olduğumda sanal pc ye bir elastix kurup test ettikten sonra göndereyim. Daha faydalı olacaktır.
Siltamam teşekkürler doğan bey
Sildoğan bey, tanımlanan extension ların context ini from-pstn yarine customivr yaptığımda macro ya uğruyor ama exten => 17,1,agi(agi://10.0.0.12/customivr) satırını es geçip exten => 17,2,Hangup() satırını çalıştırıyor sadece. scripti çalıştırmada sorun var. izinler le ilgili birşey olabilir mi yada fastagi-mapping.resx de değiştirmem gereken birşey var mı
SilBu durumu asterisk tarafında debug yaparak gördünüz herhalde. Satır çağrıda agi bağlantısını networkten başlatan kod. Hata burada ise başlarda bahsettiğim network ayarlarınız ve firewall ayarlarlarınız beni şüphelendiriyor.
Sil--Starting simple switch on 'DAHDI/1-1'
Sil--Executing [s@customivr:1] AGI ("DAHDI/1-1", "agi://10.0.0.12/customivr") in new stack
AGI Tx >> agi_network : yes
--Executing [s@customivr:2] Wait ("DAHDI/1-1", "3") in new stack
--Executing [s@customivr:3] :Hangup("DAHDI/1-1","") in new stack
== Spawn extension (customivr, s, 3) exited non-zero on 'DAHDI/1-1'
--Hangup 'DAHDI/1-1'
Doğan bey, arama yaptığımda console da şu şekilde görünüyor ama çağrıya cevap vermiyor. welcome anonsu karşılamıyor beni
aynı anda windows tarafında uygulamanız aktif mi ?
SilAsterisk sizin uygulamanıza bağlantı kuruyor mu ? Visual studio tarafında debug edebilirmisiz?
https://docs.google.com/open?id=0B9hOQDVlCkb1WjdaUVNRbGJadGM resimleri bir inceleyin. Yapmak istediğiniz böyle bir şey ise vmvare image olarak yükleyebilirim.
Sildoğan bey yardımınız için teşekkürler hallettim. birşey soracağım ama form application da agi başlatmak için checkfastagi fonksiyonunu kullandığımda formu açmıyor debug modunda bekliyor (arka planda agi çalışıyor istediklerimi yapabiliyorum ama form gözükmüyor) neden olabilir?
Silbirde doğan bey fastagi çalışırken customivr scriptine uğrayan bir çağrının console a düşen agi_callerid, agi_calleridname, agi_callingpres, agi_context, agi_extension gibi değişkenlerini kod tarafında nasıl çekebilirim.
YanıtlaSildoğan bey herşey için teşekkürler. projemi bitirdim..
YanıtlaSilTebrikler. Başarılar...
Sil