User Tools

Site Tools


сервис_asterisk

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
сервис_asterisk [2021/08/27 15:51]
val [Автоматизация распределения вызовов ACD]
сервис_asterisk [2022/04/18 15:48] (current)
val [Использование СУБД для хранения CDR]
Line 93: Line 93:
 ==== Использование шаблонов в именах CHAN_SIP каналов ==== ==== Использование шаблонов в именах CHAN_SIP каналов ====
 <​code>​ <​code>​
-root@server# cat /​etc/​asterisk/​sip.conf+server# cat /​etc/​asterisk/​sip.conf
 </​code><​code>​ </​code><​code>​
 ... ...
-;[office](!) +[office](!) 
-;type=friend +type=friend 
-;host=dynamic +host=dynamic 
-;deny=0.0.0.0/​0.0.0.0 +deny=0.0.0.0/​0.0.0.0 
-;permit=192.168.X.0/​255.255.255.0+permit=192.168.X.0/​255.255.255.0
  
-;​[403](office) +[internet](!) 
-;secret=tpassword403+type=friend 
 +host=dynamic 
 +permit=0.0.0.0/​0.0.0.0 
 +nat=force_rport,​comedia 
 +qualify=yes 
 +directmedia=no 
 +;call-limit=1 
 + 
 +[401](office) 
 +secret=tpassword401 
 + 
 +[402](internet) 
 +secret=tpassword402 
 + 
 +[403](office) 
 +secret=tpassword403
  
-;[404](office) +[404](office) 
-;secret=tpassword404+secret=tpassword404
 ... ...
 </​code>​ </​code>​
Line 131: Line 146:
 protocol=udp protocol=udp
 bind=0.0.0.0:​5060 bind=0.0.0.0:​5060
-;​local_net=192.168.X.0/​255.255.255.0 
-;​external_media_address=172.16.1.X 
-;​external_signaling_address=172.16.1.X 
 </​code>​ </​code>​
  
Line 198: Line 210:
  
 <​code>​ <​code>​
-[corp2]+[corp]
 type=endpoint type=endpoint
 transport=udp-transport-1 transport=udp-transport-1
Line 204: Line 216:
 disallow=all disallow=all
 allow=alaw allow=alaw
-aors=corp2 +aors=corp 
-force_rport=yes +;force_rport=yes 
-rewrite_contact=yes +;rewrite_contact=yes 
-rtp_symmetric=yes +;rtp_symmetric=yes 
-direct_media=no +;direct_media=no
  
-[corp2]+[corp]
 type=aor type=aor
-contact=sip:​server.corp2.un:5060 +contact=sip:​server.corp.un:5060 
-qualify_frequency=60+;qualify_frequency=60
  
-[corp2]+[corp]
 type=identify type=identify
-endpoint=corp2 +endpoint=corp 
-match=server.corp2.un+match=server.corp.un
 </​code>​ </​code>​
  
Line 228: Line 239:
 </​code><​code>​ </​code><​code>​
 ... ...
 +; voip1.un и server.corp.un (курс CGP) одна и та же система
 +; приходится подключаться к ней с разных портов :)
 +
 +[udp-transport-2]
 +type=transport
 +protocol=udp
 +bind=0.0.0.0:​5062
 +;​local_net=192.168.1.0/​255.255.255.0
 +;​local_net=192.168.X.0/​255.255.255.0
 +;​external_media_address=172.16.1.X
 +;​external_signaling_address=172.16.1.X
 +
 [voip1_00000X] [voip1_00000X]
 type=endpoint type=endpoint
-transport=udp-transport-1+transport=udp-transport-2
 context=default context=default
 disallow=all disallow=all
Line 256: Line 279:
 [voip1_00000X] [voip1_00000X]
 type=registration type=registration
-transport=udp-transport-1+transport=udp-transport-2
 outbound_auth=voip1_00000X outbound_auth=voip1_00000X
 server_uri=sip:​voip1.un server_uri=sip:​voip1.un
Line 382: Line 405:
  
 ==== TimeBased контексты ==== ==== TimeBased контексты ====
 +
 +  * [[https://​wiki.asterisk.org/​wiki/​display/​AST/​Contexts%2C+Extensions%2C+and+Priorities#​Contexts,​Extensions,​andPriorities-Dialplansearchorder|Dialplan search order]]
  
   * [[https://​www.voip-info.org/​asterisk-tips-openhours/​|How to include contexts based on time and date]]   * [[https://​www.voip-info.org/​asterisk-tips-openhours/​|How to include contexts based on time and date]]
Line 615: Line 640:
 exten => _000XXX,​1,​Set(CALLERID(num)=00X${CALLERID(num)}) exten => _000XXX,​1,​Set(CALLERID(num)=00X${CALLERID(num)})
 exten => _000XXX,​n,​Dial(IAX2/​corp/​${EXTEN:​3}) exten => _000XXX,​n,​Dial(IAX2/​corp/​${EXTEN:​3})
 +;exten => _000XXX,​n,​Dial(PJSIP/​${EXTEN:​3}@corp)
  
 ;exten => _00Y[34]XX,​1,​Set(CALLERID(num)=00X${CALLERID(num)}) ;exten => _00Y[34]XX,​1,​Set(CALLERID(num)=00X${CALLERID(num)})
Line 645: Line 671:
  
 server*CLI>​ channel request hangup SIP/<​TAB>​ server*CLI>​ channel request hangup SIP/<​TAB>​
 +
 +# watch -d "​asterisk -x 'cdr show active'"​
  
 # curl -v -X GET "​http://​localhost:​8088/​ari/​channels?​api_key=asterisk:​asterisk"​ # curl -v -X GET "​http://​localhost:​8088/​ari/​channels?​api_key=asterisk:​asterisk"​
Line 811: Line 839:
 <​code>​ <​code>​
 http://​172.16.1.X/​asterisk-cdr-viewer/​ http://​172.16.1.X/​asterisk-cdr-viewer/​
 +</​code>​
 +
 +  * Спасибо Комлеву Александру Павловичу! ​
 +
 +<​code>​
 +Чтобы запись разговора воспроизводилась прямо на странице CDR Viewer, нужно в файле ​
 +/​var/​www/​html/​asterisk-cdr-viewer/​include/​functions.inc.php
 +заменить ​ строку:​
 +
 +echo " ​   <td class=\"​record_col\"><​a href=\"​download.php?​audio=$recorded_file.$system_audio_format\"​ title=\"​Listen to call recording\"><​img src=\"​templates/​images/​sound.png\"​ alt=\"​Call recording\"​ /></​a></​td>​\n";​
 +
 +на такую:
 +
 +echo " ​   <td class=\"​record_col\"><​a href=\"​download.php?​audio=$recorded_file.$system_audio_format\"​ title=\"​Listen to call recording\"><​img src=\"​templates/​images/​sound.png\"​ alt=\"​Call recording\"​ /></​a><​audio controls><​source src=\"​download.php?​audio=$recorded_file.$system_audio_format\"></​audio></​td>​\n";​
 </​code>​ </​code>​
 ===== Asterisk realtime ===== ===== Asterisk realtime =====
Line 1581: Line 1623:
 exten => voip1_00000X,​1,​Dial(SIP/​401,​10,​t) exten => voip1_00000X,​1,​Dial(SIP/​401,​10,​t)
 exten => voip1_00000X,​n,​Dial(SIP/​401&​SIP/​402&​SIP/​403,,​t) exten => voip1_00000X,​n,​Dial(SIP/​401&​SIP/​402&​SIP/​403,,​t)
- 
-;​Перехват вызова 
-;exten => voip1_00000X,​1,​Dial(SIP/​401,,​t) 
 </​code><​code>​ </​code><​code>​
 server*CLI>​ core reload server*CLI>​ core reload
Line 1635: Line 1674:
 </​code>​ </​code>​
 ==== Перехват вызова ==== ==== Перехват вызова ====
 +
 +  * [[https://​wiki.asterisk.org/​wiki/​display/​AST/​Call+Pickup|Call Pickup]]
  
 <​code>​ <​code>​
Line 1643: Line 1684:
 callgroup=1 callgroup=1
 pickupgroup=1 pickupgroup=1
 +;​namedcallgroup=gr1,​gr2,​gr3
 +;​namedpickupgroup=gr2,​gr3,​gr4
 ... ...
 [403] [403]
Line 1654: Line 1697:
 ... ...
 pickupexten = *88 pickupexten = *88
 +...
 +</​code><​code>​
 +server# cat /​etc/​asterisk/​extensions.conf
 +</​code><​code>​
 +...
 +exten => _8XXXXXXXXXX,​1,​Dial(SIP/​voip1_00000X/​${EXTEN},,​T)
 +...
 +exten => voip1_00000X,​1,​Dial(SIP/​401,,​t)
 ... ...
 </​code><​code>​ </​code><​code>​
Line 1754: Line 1805:
 ... ...
  
-;For IMAP/SMTP+;;;For IMAP/SMTP
 ;​charset=UTF-8 ;​charset=UTF-8
 ;​locale=ru_RU.UTF-8 ;​locale=ru_RU.UTF-8
Line 1763: Line 1814:
 ... ...
  
-;For IMAP +;;;For IMAP 
-;debian# apt install asterisk-voicemail-imapstorage +;;;debian# apt install asterisk-voicemail-imapstorage 
-;debian# cp /​etc/​dovecot/​private/​dovecot.pem /​usr/​local/​share/​ca-certificates/​dovecot.crt +;;;debian# cp /​etc/​dovecot/​private/​dovecot.pem /​usr/​local/​share/​ca-certificates/​dovecot.crt 
-;debian# update-ca-certificates +;;;debian# update-ca-certificates 
-;debian# service asterisk restart+;;;debian# service asterisk restart
 ;​imapserver=server.corpX.un ;​imapserver=server.corpX.un
 ;​imapfolder=INBOX ;​imapfolder=INBOX
  
-;For SMTP+;;;For SMTP
 ;debian# apt install postfix mailutils ;debian# apt install postfix mailutils
  
Line 1878: Line 1929:
 server*CLI>​ channel originate PJSIP/​89161234567@voip1_00000X extension voip1_00000X@default server*CLI>​ channel originate PJSIP/​89161234567@voip1_00000X extension voip1_00000X@default
  
-; сначала вызов обработчика (например - все телефоны в офисе),​ затем вызов абонента+; сначала вызов обработчика (например - все телефоны в офисе ​или оператор/​агент из членов очереди), затем вызов абонента
 server*CLI>​ channel originate Local/​voip1_00000X@default extension 89161234567@default server*CLI>​ channel originate Local/​voip1_00000X@default extension 89161234567@default
-server*CLI>​ channel originate Local/​601@default extension 89161234567@default 
 </​code><​code>​ </​code><​code>​
 # cat /​usr/​share/​originate_cli.sh # cat /​usr/​share/​originate_cli.sh
Line 1887: Line 1937:
  
 asterisk -x "​channel originate SIP/$1 extension $2@default"​ asterisk -x "​channel originate SIP/$1 extension $2@default"​
 +</​code><​code>​
 +# /​usr/​share/​originate_cli.sh 403 601
 </​code>​ </​code>​
 +
 ==== С использованием Call файлов ==== ==== С использованием Call файлов ====
  
Line 1894: Line 1947:
  
 <​code>​ <​code>​
-server# cat 1.call+# cat call.txt
 </​code><​code>​ </​code><​code>​
-Channel: ​sip/401 +Channel: ​Local/voip1_00000X@default 
-Extension: ​601+Extension: ​89161234567
 Context: default Context: default
-CallerId: ​Conferencia ​<601>+CallerId: ​CorpX<84992636363>
 </​code><​code>​ </​code><​code>​
-server# ​cat 2.call +server# ​cp call.txt /​var/​spool/​asterisk/​outgoing/​
-</​code><​code>​ +
-Channel: sip/402 +
-Extension: 601 +
-Context: default +
-CallerId: Conferencia <​601>​ +
-</​code><​code>​ +
-server# cat 3.call +
-</​code><​code>​ +
-Channel: sip/403 +
-Extension: 601 +
-Context: default +
-CallerId: Conferencia <​601>​ +
-</​code><​code>​ +
-server# cp [123].call ​/​var/​spool/​asterisk/​outgoing/​+
 </​code><​code>​ </​code><​code>​
 # cat /​usr/​share/​originate_call_file.sh # cat /​usr/​share/​originate_call_file.sh
Line 1995: Line 2034:
  
 exten => _X,​1,​Goto(default,​40${EXTEN},​1) exten => _X,​1,​Goto(default,​40${EXTEN},​1)
 +
 exten => _4XX,​1,​Goto(default,​${EXTEN},​1) exten => _4XX,​1,​Goto(default,​${EXTEN},​1)
  
Line 2204: Line 2244:
  
 ;exten => 326,​1,​Answer() ;exten => 326,​1,​Answer()
 +;exten => 326,​n,​Wait(3)
 +;exten => 326,​n,​Playback(/​tmp/​zabbix)
 +;exten => 326,​n,​Playback(/​tmp/​zabbix)
 ;exten => 326,​n,​Playback(/​tmp/​zabbix) ;exten => 326,​n,​Playback(/​tmp/​zabbix)
 ;exten => 326,​n,​Hangup() ;exten => 326,​n,​Hangup()
Line 2326: Line 2369:
  
   * [[http://​asterisk.ru/​knowledgebase/​Asterisk+func+sippeer|Функция SIPPEER()]]   * [[http://​asterisk.ru/​knowledgebase/​Asterisk+func+sippeer|Функция SIPPEER()]]
-  * curcalls работает только если для канала установлено ограничение на число одновременных вызовов (call-limit)+  * !!! curcalls работает только если для канала установлено ограничение на число одновременных вызовов (call-limit)
  
 <​code>​ <​code>​
Line 2397: Line 2440:
  
 [queue1] [queue1]
-;для демонстрации на многоканальном телефоне установить call-limit=1 +;​timeout=10 
-;member => SIP/401  ; ​в вебинаре ​(занять ​можно ​звонком на 311) + 
-;member => SIP/403  ​в классе+;для демонстрации на многоканальном телефоне установить call-limit=1  
 +;member => SIP/403  ; (можно ​занять звонком на 311) 
 + 
 +;member => SIP/user1@mailcgp 
 +;member => SIP/​user2@mailcgp 
 +;member => SIP/​user3@mailcgp
 </​code><​code>​ </​code><​code>​
 sever# cat /​etc/​asterisk/​extensions.conf sever# cat /​etc/​asterisk/​extensions.conf
Line 2450: Line 2498:
 strategy = rrmemory strategy = rrmemory
 musicclass = default musicclass = default
-timeout=10 
  
 announce = queue-markq announce = queue-markq
Line 2460: Line 2507:
 member => Local/​802@agents member => Local/​802@agents
 member => Local/​803@agents member => Local/​803@agents
- 
-;member => SIP/​user1@mailcgp 
-;member => SIP/​user2@mailcgp 
-;member => SIP/​user3@mailcgp 
 </​code><​code>​ </​code><​code>​
 server*CLI>​ queue show queue1 server*CLI>​ queue show queue1
Line 2488: Line 2531:
 ... ...
 </​code>​ </​code>​
-==== Приложение SHELL ====+==== Функция SHELL ====
  
   * !!! Название функции только ЗАГЛАВНЫМИ буквами   * !!! Название функции только ЗАГЛАВНЫМИ буквами
Line 2783: Line 2826:
 exten => _4XX,​n,​Hangup() exten => _4XX,​n,​Hangup()
  
-exten => _4XX,​n(busy),​Playback(tt-allbusy)+ 
 +exten => _4XX,​n(busy),​JabberSend(aster,​${MY-CALLED-USER-ID},​Вам звонил ${CALLERID(all)}) 
 +exten => _4XX,n,​Playback(tt-allbusy)
 exten => _4XX,​n,​Hangup() exten => _4XX,​n,​Hangup()
 ... ...
Line 3104: Line 3149:
 [402] [402]
 ;​secret=tpassword402 ;​secret=tpassword402
-md5secret=29c91aa064cf462f5146b7ee81e7ba49+md5secret=a77b8ed36b4be2c14c2d7e4dfad34b46
 ... ...
 </​code>​ </​code>​
сервис_asterisk.1630068683.txt.gz · Last modified: 2021/08/27 15:51 by val