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 12:25]
val [Синтез речи с использованием пакета Festival]
сервис_asterisk [2023/12/02 08:15] (current)
val [Установка]
Line 8: Line 8:
 ===== Установка ===== ===== Установка =====
  
 +  * [[https://​community.asterisk.org/​t/​install-asterisk-via-apt-or-from-source/​99713|Install Asterisk via apt or from source?]]
 ==== Debian/​Ubuntu ==== ==== Debian/​Ubuntu ====
 <​code>​ <​code>​
Line 38: Line 39:
 </​code><​code>​ </​code><​code>​
 [general] [general]
-;​udpbindaddr=0.0.0.0:​5061+;​udpbindaddr=0.0.0.0:​6050
 transport=udp transport=udp
 disallow=all disallow=all
Line 45: Line 46:
 directmedia=no ​          ; for webinar directmedia=no ​          ; for webinar
 nat=force_rport,​comedia ​ ; for webinar nat=force_rport,​comedia ​ ; for webinar
 +qualify=yes ​             ; for webinar
  
 ;​context=default ;​context=default
Line 72: Line 74:
 ;​disallow=all ;​disallow=all
 ;allow=gsm ;allow=gsm
-;​canreinvite=no ;1.4 
-;​directmedia=no ;1.6 
-;;;nat=yes 
-;​nat=force_rport,​comedia 
-;​qualify=yes 
 ;​call-limit=1 ;​call-limit=1
 ;​deny=0.0.0.0/​0.0.0.0 ;​deny=0.0.0.0/​0.0.0.0
 ;​permit=172.16.1.0/​255.255.255.0 ;​permit=172.16.1.0/​255.255.255.0
 +;​directmedia=no
 +;​nat=force_rport,​comedia
 +;​qualify=yes
  
 ;[user2] ;[user2]
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 
 + 
 +[internet](!) 
 +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) +[403](office) 
-;secret=tpassword403+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
  
- +[corp]
-[corp2]+
 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 336: Line 359:
 </​code><​code>​ </​code><​code>​
 [general] [general]
 +...
 +disallow=all
 +allow=alaw
 ... ...
 allow=h263 allow=h263
Line 345: Line 371:
  
 ==== Отладка работы Asterisk ==== ==== Отладка работы Asterisk ====
 +
 +  * [[https://​community.asterisk.org/​t/​help-new-installation-full-of-errors/​46614|HELP - New Installation Full of Errors]]
  
 === Сервисные сообщения === === Сервисные сообщения ===
Line 382: Line 410:
  
 ==== 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 645:
 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 676:
  
 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 844:
 <​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 1565: Line 1612:
 [general] [general]
 ... ...
-;featuredigittimeout = 1000+featuredigittimeout = 3000
 ... ...
 [featuremap] [featuremap]
Line 1581: Line 1628:
 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 1679:
 </​code>​ </​code>​
 ==== Перехват вызова ==== ==== Перехват вызова ====
 +
 +  * [[https://​wiki.asterisk.org/​wiki/​display/​AST/​Call+Pickup|Call Pickup]]
  
 <​code>​ <​code>​
Line 1643: Line 1689:
 callgroup=1 callgroup=1
 pickupgroup=1 pickupgroup=1
 +;​namedcallgroup=gr1,​gr2,​gr3
 +;​namedpickupgroup=gr2,​gr3,​gr4
 ... ...
 [403] [403]
Line 1680: Line 1728:
  
 include => parkedcalls include => parkedcalls
 +...
 +exten => _8XXXXXXXXXX,​1,​Dial(SIP/​voip1_00000X/​${EXTEN},,​T)
 +...
 +exten => voip1_00000X,​1,​Dial(SIP/​401,,​t)
 ... ...
 </​code>​ </​code>​
Line 1754: Line 1806:
 ... ...
  
-;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 1815:
 ... ...
  
-;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 1930:
 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 1938:
  
 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 1948:
  
 <​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# ​grep astspooldir ​/etc/​asterisk/asterisk.conf 
-</code><​code>​ + 
-Channel: sip/402 +server# ​cp call.txt /var/​spool/​asterisk/​outgoing
-Extension: 601 + 
-Context: default +server# ​ls /​var/​spool/​asterisk/​outgoing_done
-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 2039:
  
 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 2005: Line 2050:
 ;[menu2] ;[menu2]
 ;exten => s,​1,​Background(silence/​8) ;exten => s,​1,​Background(silence/​8)
-;exten => s,1,​WaitExten(8) ​   ; работает только после Answer или Background+;exten => s,n,​WaitExten(8) ​   ; работает только после Answer или Background
 ;exten => _4XX,​1,​Goto(default,​${EXTEN},​1) ;exten => _4XX,​1,​Goto(default,​${EXTEN},​1)
 ;exten => t,​1,​Goto(menu,​s,​1) ​ ; timeout exceeded, работает только с WaitExten ;exten => t,​1,​Goto(menu,​s,​1) ​ ; timeout exceeded, работает только с WaitExten
Line 2057: Line 2102:
 </​code>​ </​code>​
 ===== Прослушивание разговоров ===== ===== Прослушивание разговоров =====
 +
 +  * [[https://​wiki.merionet.ru/​ip-telephoniya/​34/​modul-chanspy-v-asterisk/​|МОДУЛЬ CHANSPY В ASTERISK]]
  
 <​code>​ <​code>​
Line 2195: Line 2242:
 exten => 324,​n,​Hangup() exten => 324,​n,​Hangup()
  
 +;Плохо воспроизводит длинный текст
 ;exten => 325,​1,​Answer() ;exten => 325,​1,​Answer()
 ;exten => 325,​n,​Set(ZABBIX-MESSAGE=${FILE(/​tmp/​zabbix.txt)}) ;exten => 325,​n,​Set(ZABBIX-MESSAGE=${FILE(/​tmp/​zabbix.txt)})
Line 2201: Line 2249:
  
 ;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 2231: Line 2282:
 ;​number=>​89162323232,​30 ;​number=>​89162323232,​30
 context=>​default context=>​default
 +;​context=>​to-pstn
 [401] [401]
 number=>​89162323232,​30 number=>​89162323232,​30
 ;​number=>​89163434345,​30 ;​number=>​89163434345,​30
 context=>​default context=>​default
 +;​context=>​to-pstn
 </​code><​code>​ </​code><​code>​
 server# cat /​etc/​asterisk/​extensions.conf server# cat /​etc/​asterisk/​extensions.conf
Line 2323: Line 2376:
  
   * [[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 2394: Line 2447:
  
 [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 2456: Line 2514:
 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 2484: Line 2538:
 ... ...
 </​code>​ </​code>​
-==== Приложение SHELL ====+==== Функция SHELL ====
  
   * !!! Название функции только ЗАГЛАВНЫМИ буквами   * !!! Название функции только ЗАГЛАВНЫМИ буквами
Line 2779: Line 2833:
 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 3087: Line 3143:
 ==== Использование хешей паролей для каналов типа user ==== ==== Использование хешей паролей для каналов типа user ====
  
-[[http://​www.voip-info.org/​wiki/​view/​Asterisk+sip+md5secret]]+  * [[http://​www.voip-info.org/​wiki/​view/​Asterisk+sip+md5secret]] 
 +  * [[http://​asterisk-support.ru/​forum/​topics/​3032/​|SIP авторизация и MD5]]
  
 <​code>​ <​code>​
Line 3100: Line 3157:
 [402] [402]
 ;​secret=tpassword402 ;​secret=tpassword402
-md5secret=29c91aa064cf462f5146b7ee81e7ba49+md5secret=a77b8ed36b4be2c14c2d7e4dfad34b46
 ... ...
 </​code>​ </​code>​
сервис_asterisk.1630056325.txt.gz · Last modified: 2021/08/27 12:25 by val