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
Next revision Both sides next revision
сервис_asterisk [2021/08/30 14:56]
val [Синтез речи с использованием пакета Festival]
сервис_asterisk [2022/04/18 15:48]
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 2205: Line 2245:
 ;exten => 326,​1,​Answer() ;exten => 326,​1,​Answer()
 ;exten => 326,​n,​Wait(3) ;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 2327: 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 2398: 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 2451: Line 2498:
 strategy = rrmemory strategy = rrmemory
 musicclass = default musicclass = default
-timeout=10 
  
 announce = queue-markq announce = queue-markq
Line 2461: 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 2489: Line 2531:
 ... ...
 </​code>​ </​code>​
-==== Приложение SHELL ====+==== Функция SHELL ====
  
   * !!! Название функции только ЗАГЛАВНЫМИ буквами   * !!! Название функции только ЗАГЛАВНЫМИ буквами
Line 2784: 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 3105: Line 3149:
 [402] [402]
 ;​secret=tpassword402 ;​secret=tpassword402
-md5secret=29c91aa064cf462f5146b7ee81e7ba49+md5secret=a77b8ed36b4be2c14c2d7e4dfad34b46
 ... ...
 </​code>​ </​code>​
сервис_asterisk.txt · Last modified: 2023/12/02 08:15 by val