Инструменты пользователя

Инструменты сайта


сервис_asterisk

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
сервис_asterisk [2019/09/24 10:10]
val [Использование AstDB для перенаправление звонков]
сервис_asterisk [2020/06/05 09:00] (текущий)
val [XMPP]
Строка 15: Строка 15:
 </​code>​ </​code>​
  
-==== FreeBSD ==== 
-<​code>​ 
-[server:~] # pkg install asterisk13 
  
-[server:​~] ​service ​asterisk ​rcvar+===== Удаление ===== 
 +<​code>​ 
 +apt purge asterisk-config ​asterisk
  
-[server:​~] ​cd /​usr/​local/​etc/​asterisk/​+apt autoremove
 </​code>​ </​code>​
- 
- 
 ===== Настройка базового функционала IP PBX ===== ===== Настройка базового функционала IP PBX =====
  
Строка 38: Строка 35:
  
 <​code>​ <​code>​
-server# cat sip.conf+server# cat /​etc/​asterisk/​sip.conf
 </​code><​code>​ </​code><​code>​
 [general] [general]
Строка 45: Строка 42:
 disallow=all disallow=all
 allow=alaw allow=alaw
 +
 +directmedia=no ​          ; for webinar
 +nat=force_rport,​comedia ​ ; for webinar
 +
 ;​context=default ;​context=default
 ;​allowguest=no ​         ;Allow unknown access ;​allowguest=no ​         ;Allow unknown access
Строка 66: Строка 67:
 ;​allowsubscribe=no ;​allowsubscribe=no
 ;​setvar=MY-USER-ID=user2@corpX.un ​      ;in channel type=user ​ ;​setvar=MY-USER-ID=user2@corpX.un ​      ;in channel type=user ​
-;callerid=Petrov Petr Petrovitch<402>+;callerid=Петр Петров<402>
 ;​cid_number=402 ;​cid_number=402
-;fullname=Petrov Petr Petrovitch+;fullname=Петр Петров
 ;​disallow=all ;​disallow=all
 ;allow=gsm ;allow=gsm
Строка 80: Строка 81:
 ;​permit=172.16.1.0/​255.255.255.0 ;​permit=172.16.1.0/​255.255.255.0
  
-;[user1+;[user2
-;secret=password1 +;secret=password2 
-;type=friend +;...
-;​host=dynamic+
  
 ;[corpY] ;[corpY]
Строка 92: Строка 92:
 ==== Использование шаблонов в именах CHAN_SIP каналов ==== ==== Использование шаблонов в именах CHAN_SIP каналов ====
 <​code>​ <​code>​
-root@server#​ cat sip.conf+root@server#​ cat /​etc/​asterisk/​sip.conf
 </​code><​code>​ </​code><​code>​
 ... ...
Строка 151: Строка 151:
 aors=401 aors=401
 auth=401 auth=401
-;callerid=Ivan I. Ivanov<401>+;callerid=Иван Иванов<401>
 ;​set_var=MY-USER-ID=user1@corpX.un ;​set_var=MY-USER-ID=user1@corpX.un
 ;​set_var=MY-PSTN-CALLER-ID=8495123456X ;​set_var=MY-PSTN-CALLER-ID=8495123456X
-;​rtp_symmetric=yes 
 ;​force_rport=yes ;​force_rport=yes
 ;​rewrite_contact=yes ;​rewrite_contact=yes
 +;​rtp_symmetric=yes
 ;​direct_media=no ;​direct_media=no
  
Строка 163: Строка 163:
 max_contacts=1 max_contacts=1
 remove_existing=yes remove_existing=yes
 +;​qualify_frequency=60
  
 [401] [401]
Строка 191: Строка 192:
 aor/​max_contacts=1 aor/​max_contacts=1
 aor/​remove_existing=yes aor/​remove_existing=yes
 +</​code>​
 +
 +=== Настройка PJSIP точки подключения к другому офису ===
 +
 +<​code>​
 +[corp2]
 +type=endpoint
 +transport=udp-transport-1
 +context=default
 +disallow=all
 +allow=alaw
 +aors=corp2
 +force_rport=yes
 +rewrite_contact=yes
 +rtp_symmetric=yes
 +direct_media=no
 +
 +
 +[corp2]
 +type=aor
 +contact=sip:​server.corp2.un:​5060
 +qualify_frequency=60
 +
 +[corp2]
 +type=identify
 +endpoint=corp2
 +match=server.corp2.un
 </​code>​ </​code>​
  
Строка 248: Строка 276:
  
 <​code>​ <​code>​
-server# cat extensions.conf+server# cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
 ;[general] ;[general]
Строка 263: Строка 291:
 exten => 311,​1,​Answer() exten => 311,​1,​Answer()
      same => n,Echo()      same => n,Echo()
- 
-;exten => 321,​1,​Answer() 
-;     same => n,​SayDigits(${EXTEN}) 
-;     same => n,​Playback(beep) 
-;     same => n,​SayDigits(${CALLERID(num)}) 
-;     same => n,Hangup() 
- 
-;exten => 331,​1,​Answer() 
-;exten => 331,​n,​NoOp(${MY-USER-ID}) 
-;exten => 331,​n,​Verbose(1,​${MY-USER-ID}) 
-;exten => 331,​n,​Hangup() 
  
 ;exten => 401,​1,​Dial(SIP/​401) ;exten => 401,​1,​Dial(SIP/​401)
Строка 280: Строка 297:
  
 exten => _4XX,​1,​Dial(SIP/​${EXTEN}) exten => _4XX,​1,​Dial(SIP/​${EXTEN})
 +
 ;exten => _4XX,​1,​Dial(PJSIP/​${EXTEN}) ;exten => _4XX,​1,​Dial(PJSIP/​${EXTEN})
 </​code>​ </​code>​
Строка 314: Строка 332:
  
 <​code>​ <​code>​
-server# cat sip.conf+server# cat /​etc/​asterisk/​sip.conf
 </​code><​code>​ </​code><​code>​
 [general] [general]
Строка 334: Строка 352:
 server*CLI>​ core set verbose 1 server*CLI>​ core set verbose 1
  
-server# cat logger.conf+server# cat /​etc/​asterisk/​logger.conf
 </​code><​code>​ </​code><​code>​
 ... ...
-;console => notice,​warning,​error+[logfiles] 
 +...
 console => warning,​error,​dtmf console => warning,​error,​dtmf
-messages => notice,​warning,​verbose(10),error+messages => notice,​warning,error,verbose(3)
 ... ...
 </​code><​code>​ </​code><​code>​
Строка 353: Строка 372:
 server*CLI>​ sip set debug ip 172.16.1.Z server*CLI>​ sip set debug ip 172.16.1.Z
 server*CLI>​ sip set debug off server*CLI>​ sip set debug off
 +</​code>​
 +
 +=== Отладка RTP ===
 +<​code>​
 +server*CLI>​ rtp set debug on 
 </​code>​ </​code>​
 ===== Управление контекстами ===== ===== Управление контекстами =====
Строка 362: Строка 386:
  
 <​code>​ <​code>​
-server# cat extensions.conf+server# cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
 [default] [default]
Строка 379: Строка 403:
  
 ===== Подключение Asterisk к VoIP провайдеру по протоколу SIP ===== ===== Подключение Asterisk к VoIP провайдеру по протоколу SIP =====
- 
  
   * [[Материалы по VoIP#​Настройка Asterisk для связи с VoIP провайдерами]]   * [[Материалы по VoIP#​Настройка Asterisk для связи с VoIP провайдерами]]
Строка 386: Строка 409:
  
 <​code>​ <​code>​
-server# cat sip.conf+server# cat /​etc/​asterisk/​sip.conf
 </​code><​code>​ </​code><​code>​
 ... ...
Строка 397: Строка 420:
 fromdomain=voip1.un fromdomain=voip1.un
 </​code><​code>​ </​code><​code>​
-server# cat extensions.conf+server# cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
 ... ...
 exten => _8XXXXXXXXXX,​1,​Dial(SIP/​voip1_00000X/​${EXTEN}) exten => _8XXXXXXXXXX,​1,​Dial(SIP/​voip1_00000X/​${EXTEN})
-;exten => _8XXXXXXXXXX,​1,​Dial(SIP/​${EXTEN}@voip1_00000X)+ 
 +;exten => _8XXXXXXXXXX,​1,​Dial(SIP/​${EXTEN}@voip1_00000X) ​   ;SIP можно так
 ;exten => _8XXXXXXXXXX,​1,​Dial(PJSIP/​${EXTEN}@voip1_00000X) ​ ;PJSIP только так ;exten => _8XXXXXXXXXX,​1,​Dial(PJSIP/​${EXTEN}@voip1_00000X) ​ ;PJSIP только так
 +
 +;exten => _[+789]XXXXXXXXXX!,​1,​GoSub(sub-monitor,​s,​1)
 +;exten => _[+789]XXXXXXXXXX!,​n,​Dial(SIP/​voip1_00000X/​8${EXTEN:​-10})
 </​code>​ </​code>​
  
Строка 408: Строка 435:
  
 <​code>​ <​code>​
-server# cat sip.conf+server# cat /​etc/​asterisk/​sip.conf
 </​code><​code>​ </​code><​code>​
 [general] [general]
Строка 425: Строка 452:
 callbackextension=voip1_00000X callbackextension=voip1_00000X
 </​code><​code>​ </​code><​code>​
-server# cat extensions.conf+server# cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
 [globals] [globals]
Строка 452: Строка 479:
  
 <​code>​ <​code>​
-phone2# cat extensions.conf+phone2# cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
 [default] [default]
Строка 460: Строка 487:
 exten => 301,​n,​Hangup() exten => 301,​n,​Hangup()
 </​code><​code>​ </​code><​code>​
-debian# cat modules.conf+debian# cat /​etc/​asterisk/​modules.conf
 </​code><​code>​ </​code><​code>​
 ... ...
Строка 467: Строка 494:
 ... ...
 </​code><​code>​ </​code><​code>​
-pasberry# cat alsa.conf+rasberry# cat alsa.conf
 </​code><​code>​ </​code><​code>​
 ... ...
Строка 480: Строка 507:
 phone2*CLI>​ console hangup phone2*CLI>​ console hangup
 </​code><​code>​ </​code><​code>​
-phone2# cat sip.conf+phone2# cat /​etc/​asterisk/​sip.conf
 </​code><​code>​ </​code><​code>​
 [general] [general]
Строка 495: Строка 522:
 callbackextension=sipproxy callbackextension=sipproxy
 </​code><​code>​ </​code><​code>​
-phone2# cat extensions.conf+phone2# cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
 ... ...
Строка 510: Строка 537:
  
 <​code>​ <​code>​
-root@isp.un:~# cat sip.conf+root@voip1.un:~# cat sip.conf
 </​code><​code>​ </​code><​code>​
 ... ...
Строка 527: Строка 554:
 context=from-sip-trunk context=from-sip-trunk
 </​code><​code>​ </​code><​code>​
-root@isp.un:~# cat /​etc/​asterisk/​extensions.conf+root@voip1.un:~# cat extensions.conf
 </​code><​code>​ </​code><​code>​
 ... ...
Строка 538: Строка 565:
 ==== Настройка IAX каналов ====  ==== Настройка IAX каналов ==== 
 <​code>​ <​code>​
-server.corpX.un#​ cat iax.conf+server.corpX.un#​ cat /​etc/​asterisk/​iax.conf
 </​code><​code>​ </​code><​code>​
 [general] [general]
Строка 570: Строка 597:
  
 <​code>​ <​code>​
-server.corpX.un#​ cat extensions.conf+server.corpX.un#​ cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
 [default] [default]
 ... ...
-exten => _00Y4XX,​1,​Set(CALLERID(num)=00X${CALLERID(num)}) +exten => _00Y[34]XX,​1,​Set(CALLERID(num)=00X${CALLERID(num)}) 
-exten => _00Y4XX,​n,​Dial(IAX2/​corpY/​${EXTEN:​3})+exten => _00Y[34]XX,​n,​Dial(IAX2/​corpY/​${EXTEN:​3}) 
 +</​code>​
  
-;;​пример универсального шаблона для звонков в офисы с 1-го по 9-й +  * Сервис Ansible [[Сервис Ansible#​Использование шаблонов]] 
-;exten => _0XX4XX,​1,​Set(CALLERID(num)=013${CALLERID(num)}) + 
-;exten => _0XX4XX,​n,​Dial(IAX2/​corp${EXTEN:​2:​1}/​${EXTEN:​3})+<​code>​ 
 +;;​пример универсального шаблона для звонков в офисы ​ 
 +;;с 1-го по 9-й и c 10-го по 13-й 
 + 
 +exten => _00X[34]XX,​1,​Set(CALLERID(num)=00X${CALLERID(num)}) 
 +exten => _00X[34]XX,​n,​Dial(IAX2/​corp${EXTEN:​2:​1}/​${EXTEN:​3}) 
 + 
 +exten => _01[0-3][34]XX,​1,​Set(CALLERID(num)=00X${CALLERID(num)}) 
 +exten => _01[0-3][34]XX,​n,​Dial(IAX2/​corp${EXTEN:​1:​2}/​${EXTEN:​3})
 </​code><​code>​ </​code><​code>​
 server*CLI>​ iax2 reload server*CLI>​ iax2 reload
Строка 585: Строка 621:
 server*CLI>​ dialplan reload server*CLI>​ dialplan reload
 </​code>​ </​code>​
- 
 ===== Детализация разговоров ===== ===== Детализация разговоров =====
  
Строка 598: Строка 633:
 # 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"​
 </​code>​ </​code>​
- 
-==== Использование файлов для хранения CDR ==== 
  
 === Настройка местного времени === === Настройка местного времени ===
Строка 611: Строка 644:
 </​code>​ </​code>​
  
-=== Добавление IP адреса ===+==== Добавление IP адреса ===
 + 
 +  * [[https://​wiki.asterisk.org/​wiki/​display/​AST/​Asterisk+13+Function_CHANNEL|Asterisk 13 Function_CHANNEL]]
  
 <​code>​ <​code>​
-exten => _4XX,1,​Set(CDR(userfield)=${CHANNEL(recvip)}) +... 
-exten => _4XX,n,Dial(SIP/${EXTEN},,Tt)+     ​same ​=> n,​Set(CDR(userfield)=${CHANNEL(recvip)}) ​            ;SIP 
 +... 
 +     same => n,Set(CDR(userfield)=${CHANNEL(pjsip,remote_addr)})  ;PJSIP 
 +...
 </​code>​ </​code>​
 +
 +==== Использование файлов для хранения CDR ====
  
 === Просмотр === === Просмотр ===
Строка 626: Строка 666:
 === Построение отчетов === === Построение отчетов ===
  
-[[http://​www.voip-info.org/​wiki/​view/​Asterisk+CDR+csv+handling2]]+  * [[http://​www.voip-info.org/​wiki/​view/​Asterisk+CDR+csv+handling2]]
  
 === Ротация с использованием SYSLOG === === Ротация с использованием SYSLOG ===
Строка 635: Строка 675:
  
 <​code>​ <​code>​
-server# :> cdr.conf+server# :> /​etc/​asterisk/​cdr.conf
  
-server# cat cdr_syslog.conf+server# cat /​etc/​asterisk/​cdr_syslog.conf
 </​code><​code>​ </​code><​code>​
 [general] [general]
Строка 657: Строка 697:
 ... ...
 </​code><​code>​ </​code><​code>​
-server# tail -f /var/log/cisco.log+server# tail -f /var/log/syslog
 </​code>​ </​code>​
  
Строка 664: Строка 704:
 === Создание базы данных === === Создание базы данных ===
  
-  * [[http://www.voip-info.org/wiki/view/Asterisk+cdr+mysql|Asterisk cdr mysql]]+  * [[https://wiki.asterisk.org/wiki/display/AST/MySQL+CDR+Backend|MySQL CDR Backend]]
  
 <​code>​ <​code>​
Строка 711: Строка 751:
  
   * [[https://​code.google.com/​p/​asterisk-cdr-viewer/​wiki/​ReadMe]]   * [[https://​code.google.com/​p/​asterisk-cdr-viewer/​wiki/​ReadMe]]
-  * [[http://​prog-it.github.io/​Asterisk-CDR-Viewer-Mod/​|Web-интерфейс для просмотра и прослушивания записей звонков Asterisk]]+  * [[http://​prog-it.github.io/​Asterisk-CDR-Viewer-Mod/​|Значительно переработанная версия ​Web-интерфейса для просмотра и прослушивания записей звонков Asterisk]]
   * [[https://​asterisk-pbx.ru/​wiki/​artikle/​cdr_viewer|Прекрасное приложение,​ для просмотра статистики и прослушивания записей]]   * [[https://​asterisk-pbx.ru/​wiki/​artikle/​cdr_viewer|Прекрасное приложение,​ для просмотра статистики и прослушивания записей]]
   * [[Сервис HTTP#​Установка и запуск сервера Apache]]   * [[Сервис HTTP#​Установка и запуск сервера Apache]]
Строка 733: Строка 773:
 ... ...
 </​code><​code>​ </​code><​code>​
-# cat extensions.conf+# cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
 ... ...
-exten => _4XX,​1,​Macro(monitor)+;exten => _4XX,​1,​Macro(monitor
 +exten => _4XX,​1,​GoSub(sub-monitor,​s,​1)
 exten => _4XX,​n,​Dial(SIP/​${EXTEN}) exten => _4XX,​n,​Dial(SIP/​${EXTEN})
 ... ...
-[macro-monitor]+;[macro-monitor] 
 +[sub-monitor]
 exten => s,​1,​Set(MONITOR_FILE=/​var/​spool/​asterisk/​monitor/​${UNIQUEID}) exten => s,​1,​Set(MONITOR_FILE=/​var/​spool/​asterisk/​monitor/​${UNIQUEID})
 exten => s,​n,​MixMonitor(${MONITOR_FILE}.wav,​b) exten => s,​n,​MixMonitor(${MONITOR_FILE}.wav,​b)
 +exten => s,​n,​Return()
  
 </​code><​code>​ </​code><​code>​
Строка 754: Строка 797:
 ===== Asterisk realtime ===== ===== Asterisk realtime =====
  
-!!! Найти вариантпри котором для не требуется заполнение поля callbackextension+==== PJSIP ==== 
 + 
 +  * [[https://​asterisk-pbx.ru/​wiki/​asterisk/​realtime-pjsip|Asterisk PJSIP Realtime (asterisk-pbx.ru)]] 
 +  * [[https://​wiki.asterisk.org/​wiki/​display/​AST/​Setting+up+PJSIP+Realtime|Setting up PJSIP Realtime (wiki.asterisk.org)]] 
 + 
 +<​code>​ 
 +CREATE TABLE `ps_aors` ( 
 +  `id` varchar(40) NOT NULL, 
 +  `contact` varchar(255) DEFAULT NULL, 
 +  `default_expiration` int(11) DEFAULT NULL, 
 +  `mailboxes` varchar(80) DEFAULT NULL, 
 +  `max_contacts` int(11) DEFAULT NULL, 
 +  `minimum_expiration` int(11) DEFAULT NULL, 
 +  `remove_existing` enum('​yes','​no'​) DEFAULT NULL, 
 +  `qualify_frequency` int(11) DEFAULT NULL, 
 +  `authenticate_qualify` enum('​yes','​no'​) DEFAULT NULL, 
 +  `maximum_expiration` int(11) DEFAULT NULL, 
 +  `outbound_proxy` varchar(40) DEFAULT NULL, 
 +  `support_path` enum('​yes','​no'​) DEFAULT NULL, 
 +  `qualify_timeout` float DEFAULT NULL, 
 +  `voicemail_extension` varchar(40) DEFAULT NULL, 
 +  UNIQUE KEY `id` (`id`), 
 +  KEY `ps_aors_id` (`id`), 
 +  KEY `ps_aors_qualifyfreq_contact` (`qualify_frequency`,​`contact`) 
 +) ENGINE=InnoDB DEFAULT CHARSET=utf8;​ 
 + 
 +CREATE TABLE `ps_auths` ( 
 +  `id` varchar(40) NOT NULL, 
 +  `auth_type` enum('​md5','​userpass'​) DEFAULT NULL, 
 +  `nonce_lifetime` int(11) DEFAULT NULL, 
 +  `md5_cred` varchar(40) DEFAULT NULL, 
 +  `password` varchar(80) DEFAULT NULL, 
 +  `realm` varchar(40) DEFAULT NULL, 
 +  `username` varchar(40) DEFAULT NULL, 
 +  UNIQUE KEY `id` (`id`), 
 +  KEY `ps_auths_id` (`id`) 
 +) ENGINE=InnoDB DEFAULT CHARSET=utf8;​ 
 + 
 +CREATE TABLE `ps_contacts` ( 
 +  `id` varchar(255) DEFAULT NULL, 
 +  `uri` varchar(255) DEFAULT NULL, 
 +  `expiration_time` bigint(20) DEFAULT NULL, 
 +  `qualify_frequency` int(11) DEFAULT NULL, 
 +  `outbound_proxy` varchar(40) DEFAULT NULL, 
 +  `path` text, 
 +  `user_agent` varchar(255) DEFAULT NULL, 
 +  `qualify_timeout` float DEFAULT NULL, 
 +  `reg_server` varchar(20) DEFAULT NULL, 
 +  `authenticate_qualify` enum('​yes','​no'​) DEFAULT NULL, 
 +  `via_addr` varchar(40) DEFAULT NULL, 
 +  `via_port` int(11) DEFAULT NULL, 
 +  `call_id` varchar(255) DEFAULT NULL, 
 +  `endpoint` varchar(40) DEFAULT NULL, 
 +  `prune_on_boot` enum('​yes','​no'​) DEFAULT NULL, 
 +  UNIQUE KEY `id` (`id`), 
 +  UNIQUE KEY `ps_contacts_uq` (`id`,​`reg_server`),​ 
 +  KEY `ps_contacts_id` (`id`), 
 +  KEY `ps_contacts_qualifyfreq_exp` (`qualify_frequency`,​`expiration_time`) 
 +) ENGINE=InnoDB DEFAULT CHARSET=utf8;​ 
 + 
 +CREATE TABLE `ps_domain_aliases` ( 
 +  `id` varchar(40) NOT NULL, 
 +  `domain` varchar(80) DEFAULT NULL, 
 +  UNIQUE KEY `id` (`id`), 
 +  KEY `ps_domain_aliases_id` (`id`) 
 +) ENGINE=InnoDB DEFAULT CHARSET=utf8;​ 
 + 
 + 
 +CREATE TABLE `ps_endpoint_id_ips` ( 
 +  `id` varchar(40) NOT NULL, 
 +  `endpoint` varchar(40) DEFAULT NULL, 
 +  `match` varchar(80) DEFAULT NULL, 
 +  UNIQUE KEY `id` (`id`), 
 +  KEY `ps_endpoint_id_ips_id` (`id`) 
 +) ENGINE=InnoDB DEFAULT CHARSET=utf8;​ 
 + 
 + 
 +CREATE TABLE `ps_endpoints` ( 
 +  `id` varchar(40) NOT NULL, 
 +  `transport` varchar(40) DEFAULT NULL, 
 +  `aors` varchar(200) DEFAULT NULL, 
 +  `auth` varchar(40) DEFAULT NULL, 
 +  `context` varchar(40) DEFAULT NULL, 
 +  `disallow` varchar(200) DEFAULT NULL, 
 +  `allow` varchar(200) DEFAULT NULL, 
 +  `direct_media` enum('​yes','​no'​) DEFAULT NULL, 
 +  `connected_line_method` enum('​invite','​reinvite','​update'​) DEFAULT NULL, 
 +  `direct_media_method` enum('​invite','​reinvite','​update'​) DEFAULT NULL, 
 +  `direct_media_glare_mitigation` enum('​none','​outgoing','​incoming'​) DEFAULT NULL, 
 +  `disable_direct_media_on_nat` enum('​yes','​no'​) DEFAULT NULL, 
 +  `dtmf_mode` enum('​rfc4733','​inband','​info','​auto'​) DEFAULT NULL, 
 +  `external_media_address` varchar(40) DEFAULT NULL, 
 +  `force_rport` enum('​yes','​no'​) DEFAULT NULL, 
 +  `ice_support` enum('​yes','​no'​) DEFAULT NULL, 
 +  `identify_by` enum('​username','​auth_username'​) DEFAULT NULL, 
 +  `mailboxes` varchar(40) DEFAULT NULL, 
 +  `moh_suggest` varchar(40) DEFAULT NULL, 
 +  `outbound_auth` varchar(40) DEFAULT NULL, 
 +  `outbound_proxy` varchar(40) DEFAULT NULL, 
 +  `rewrite_contact` enum('​yes','​no'​) DEFAULT NULL, 
 +  `rtp_ipv6` enum('​yes','​no'​) DEFAULT NULL, 
 +  `rtp_symmetric` enum('​yes','​no'​) DEFAULT NULL, 
 +  `send_diversion` enum('​yes','​no'​) DEFAULT NULL, 
 +  `send_pai` enum('​yes','​no'​) DEFAULT NULL, 
 +  `send_rpid` enum('​yes','​no'​) DEFAULT NULL, 
 +  `timers_min_se` int(11) DEFAULT NULL, 
 +  `timers` enum('​forced','​no','​required','​yes'​) DEFAULT NULL, 
 +  `timers_sess_expires` int(11) DEFAULT NULL, 
 +  `callerid` varchar(40) DEFAULT NULL, 
 +  `callerid_privacy` enum('​allowed_not_screened','​allowed_passed_screened','​allowed_failed_screened','​allowed','​prohib_not_screened','​prohib_passed_screened','​prohib_failed_screened','​prohib','​unavailable'​) DEFAULT NULL, 
 +  `callerid_tag` varchar(40) DEFAULT NULL, 
 +  `100rel` enum('​no','​required','​yes'​) DEFAULT NULL, 
 +  `aggregate_mwi` enum('​yes','​no'​) DEFAULT NULL, 
 +  `trust_id_inbound` enum('​yes','​no'​) DEFAULT NULL, 
 +  `trust_id_outbound` enum('​yes','​no'​) DEFAULT NULL, 
 +  `use_ptime` enum('​yes','​no'​) DEFAULT NULL, 
 +  `use_avpf` enum('​yes','​no'​) DEFAULT NULL, 
 +  `media_encryption` enum('​no','​sdes','​dtls'​) DEFAULT NULL, 
 +  `inband_progress` enum('​yes','​no'​) DEFAULT NULL, 
 +  `call_group` varchar(40) DEFAULT NULL, 
 +  `pickup_group` varchar(40) DEFAULT NULL, 
 +  `named_call_group` varchar(40) DEFAULT NULL, 
 +  `named_pickup_group` varchar(40) DEFAULT NULL, 
 +  `device_state_busy_at` int(11) DEFAULT NULL, 
 +  `fax_detect` enum('​yes','​no'​) DEFAULT NULL, 
 +  `t38_udptl` enum('​yes','​no'​) DEFAULT NULL, 
 +  `t38_udptl_ec` enum('​none','​fec','​redundancy'​) DEFAULT NULL, 
 +  `t38_udptl_maxdatagram` int(11) DEFAULT NULL, 
 +  `t38_udptl_nat` enum('​yes','​no'​) DEFAULT NULL, 
 +  `t38_udptl_ipv6` enum('​yes','​no'​) DEFAULT NULL, 
 +  `tone_zone` varchar(40) DEFAULT NULL, 
 +  `language` varchar(40) DEFAULT NULL, 
 +  `one_touch_recording` enum('​yes','​no'​) DEFAULT NULL, 
 +  `record_on_feature` varchar(40) DEFAULT NULL, 
 +  `record_off_feature` varchar(40) DEFAULT NULL, 
 +  `rtp_engine` varchar(40) DEFAULT NULL, 
 +  `allow_transfer` enum('​yes','​no'​) DEFAULT NULL, 
 +  `allow_subscribe` enum('​yes','​no'​) DEFAULT NULL, 
 +  `sdp_owner` varchar(40) DEFAULT NULL, 
 +  `sdp_session` varchar(40) DEFAULT NULL, 
 +  `tos_audio` varchar(10) DEFAULT NULL, 
 +  `tos_video` varchar(10) DEFAULT NULL, 
 +  `sub_min_expiry` int(11) DEFAULT NULL, 
 +  `from_domain` varchar(40) DEFAULT NULL, 
 +  `from_user` varchar(40) DEFAULT NULL, 
 +  `mwi_from_user` varchar(40) DEFAULT NULL, 
 +  `dtls_verify` varchar(40) DEFAULT NULL, 
 +  `dtls_rekey` varchar(40) DEFAULT NULL, 
 +  `dtls_cert_file` varchar(200) DEFAULT NULL, 
 +  `dtls_private_key` varchar(200) DEFAULT NULL, 
 +  `dtls_cipher` varchar(200) DEFAULT NULL, 
 +  `dtls_ca_file` varchar(200) DEFAULT NULL, 
 +  `dtls_ca_path` varchar(200) DEFAULT NULL, 
 +  `dtls_setup` enum('​active','​passive','​actpass'​) DEFAULT NULL, 
 +  `srtp_tag_32` enum('​yes','​no'​) DEFAULT NULL, 
 +  `media_address` varchar(40) DEFAULT NULL, 
 +  `redirect_method` enum('​user','​uri_core','​uri_pjsip'​) DEFAULT NULL, 
 +  `set_var` text, 
 +  `cos_audio` int(11) DEFAULT NULL, 
 +  `cos_video` int(11) DEFAULT NULL, 
 +  `message_context` varchar(40) DEFAULT NULL, 
 +  `force_avp` enum('​yes','​no'​) DEFAULT NULL, 
 +  `media_use_received_transport` enum('​yes','​no'​) DEFAULT NULL, 
 +  `accountcode` varchar(80) DEFAULT NULL, 
 +  `user_eq_phone` enum('​yes','​no'​) DEFAULT NULL, 
 +  `moh_passthrough` enum('​yes','​no'​) DEFAULT NULL, 
 +  `media_encryption_optimistic` enum('​yes','​no'​) DEFAULT NULL, 
 +  `rpid_immediate` enum('​yes','​no'​) DEFAULT NULL, 
 +  `g726_non_standard` enum('​yes','​no'​) DEFAULT NULL, 
 +  `rtp_keepalive` int(11) DEFAULT NULL, 
 +  `rtp_timeout` int(11) DEFAULT NULL, 
 +  `rtp_timeout_hold` int(11) DEFAULT NULL, 
 +  `bind_rtp_to_media_address` enum('​yes','​no'​) DEFAULT NULL, 
 +  `voicemail_extension` varchar(40) DEFAULT NULL, 
 +  `mwi_subscribe_replaces_unsolicited` int(11) DEFAULT NULL, 
 +  `deny` varchar(95) DEFAULT NULL, 
 +  `permit` varchar(95) DEFAULT NULL, 
 +  `acl` varchar(40) DEFAULT NULL, 
 +  `contact_deny` varchar(95) DEFAULT NULL, 
 +  `contact_permit` varchar(95) DEFAULT NULL, 
 +  `contact_acl` varchar(40) DEFAULT NULL, 
 +  `subscribe_context` varchar(40) DEFAULT NULL, 
 +  `fax_detect_timeout` int(11) DEFAULT NULL, 
 +  `contact_user` varchar(80) DEFAULT NULL, 
 +  `asymmetric_rtp_codec` enum('​yes','​no'​) DEFAULT NULL, 
 +  UNIQUE KEY `id` (`id`), 
 +  KEY `ps_endpoints_id` (`id`) 
 +) ENGINE=InnoDB DEFAULT CHARSET=utf8;​ 
 + 
 + 
 +CREATE TABLE `ps_globals` ( 
 +  `id` varchar(40) NOT NULL, 
 +  `max_forwards` int(11) DEFAULT NULL, 
 +  `user_agent` varchar(255) DEFAULT NULL, 
 +  `default_outbound_endpoint` varchar(40) DEFAULT NULL, 
 +  `debug` varchar(40) DEFAULT NULL, 
 +  `endpoint_identifier_order` varchar(40) DEFAULT NULL, 
 +  `max_initial_qualify_time` int(11) DEFAULT NULL, 
 +  `default_from_user` varchar(80) DEFAULT NULL, 
 +  `keep_alive_interval` int(11) DEFAULT NULL, 
 +  `regcontext` varchar(80) DEFAULT NULL, 
 +  `contact_expiration_check_interval` int(11) DEFAULT NULL, 
 +  `default_voicemail_extension` varchar(40) DEFAULT NULL, 
 +  `disable_multi_domain` enum('​yes','​no'​) DEFAULT NULL, 
 +  `unidentified_request_count` int(11) DEFAULT NULL, 
 +  `unidentified_request_period` int(11) DEFAULT NULL, 
 +  `unidentified_request_prune_interval` int(11) DEFAULT NULL, 
 +  `default_realm` varchar(40) DEFAULT NULL, 
 +  `mwi_tps_queue_high` int(11) DEFAULT NULL, 
 +  `mwi_tps_queue_low` int(11) DEFAULT NULL, 
 +  `mwi_disable_initial_unsolicited` enum('​yes','​no'​) DEFAULT NULL, 
 +  `ignore_uri_user_options` enum('​yes','​no'​) DEFAULT NULL, 
 +  UNIQUE KEY `id` (`id`), 
 +  KEY `ps_globals_id` (`id`) 
 +) ENGINE=InnoDB DEFAULT CHARSET=utf8;​ 
 + 
 + 
 +CREATE TABLE `ps_registrations` ( 
 +  `id` varchar(40) NOT NULL, 
 +  `auth_rejection_permanent` enum('​yes','​no'​) DEFAULT NULL, 
 +  `client_uri` varchar(255) DEFAULT NULL, 
 +  `contact_user` varchar(40) DEFAULT NULL, 
 +  `expiration` int(11) DEFAULT NULL, 
 +  `max_retries` int(11) DEFAULT NULL, 
 +  `outbound_auth` varchar(40) DEFAULT NULL, 
 +  `outbound_proxy` varchar(40) DEFAULT NULL, 
 +  `retry_interval` int(11) DEFAULT NULL, 
 +  `forbidden_retry_interval` int(11) DEFAULT NULL, 
 +  `server_uri` varchar(255) DEFAULT NULL, 
 +  `transport` varchar(40) DEFAULT NULL, 
 +  `support_path` enum('​yes','​no'​) DEFAULT NULL, 
 +  `fatal_retry_interval` int(11) DEFAULT NULL, 
 +  `line` enum('​yes','​no'​) DEFAULT NULL, 
 +  `endpoint` varchar(40) DEFAULT NULL, 
 +  UNIQUE KEY `id` (`id`), 
 +  KEY `ps_registrations_id` (`id`) 
 +) ENGINE=InnoDB DEFAULT CHARSET=utf8;​ 
 + 
 + 
 + 
 +CREATE TABLE `ps_subscription_persistence` ( 
 +  `id` varchar(40) NOT NULL, 
 +  `packet` varchar(2048) DEFAULT NULL, 
 +  `src_name` varchar(128) DEFAULT NULL, 
 +  `src_port` int(11) DEFAULT NULL, 
 +  `transport_key` varchar(64) DEFAULT NULL, 
 +  `local_name` varchar(128) DEFAULT NULL, 
 +  `local_port` int(11) DEFAULT NULL, 
 +  `cseq` int(11) DEFAULT NULL, 
 +  `tag` varchar(128) DEFAULT NULL, 
 +  `endpoint` varchar(40) DEFAULT NULL, 
 +  `expires` int(11) DEFAULT NULL, 
 +  UNIQUE KEY `id` (`id`), 
 +  KEY `ps_subscription_persistence_id` (`id`) 
 +) ENGINE=InnoDB DEFAULT CHARSET=utf8;​ 
 + 
 + 
 +CREATE TABLE `ps_systems` ( 
 +  `id` varchar(40) NOT NULL, 
 +  `timer_t1` int(11) DEFAULT NULL, 
 +  `timer_b` int(11) DEFAULT NULL, 
 +  `compact_headers` enum('​yes','​no'​) DEFAULT NULL, 
 +  `threadpool_initial_size` int(11) DEFAULT NULL, 
 +  `threadpool_auto_increment` int(11) DEFAULT NULL, 
 +  `threadpool_idle_timeout` int(11) DEFAULT NULL, 
 +  `threadpool_max_size` int(11) DEFAULT NULL, 
 +  `disable_tcp_switch` enum('​yes','​no'​) DEFAULT NULL, 
 +  UNIQUE KEY `id` (`id`), 
 +  KEY `ps_systems_id` (`id`) 
 +) ENGINE=InnoDB DEFAULT CHARSET=utf8;​ 
 + 
 + 
 + 
 +CREATE TABLE `ps_transports` ( 
 +  `id` varchar(40) NOT NULL, 
 +  `async_operations` int(11) DEFAULT NULL, 
 +  `bind` varchar(40) DEFAULT NULL, 
 +  `ca_list_file` varchar(200) DEFAULT NULL, 
 +  `cert_file` varchar(200) DEFAULT NULL, 
 +  `cipher` varchar(200) DEFAULT NULL, 
 +  `domain` varchar(40) DEFAULT NULL, 
 +  `external_media_address` varchar(40) DEFAULT NULL, 
 +  `external_signaling_address` varchar(40) DEFAULT NULL, 
 +  `external_signaling_port` int(11) DEFAULT NULL, 
 +  `method` enum('​default','​unspecified','​tlsv1','​sslv2','​sslv3','​sslv23'​) DEFAULT NULL, 
 +  `local_net` varchar(40) DEFAULT NULL, 
 +  `password` varchar(40) DEFAULT NULL, 
 +  `priv_key_file` varchar(200) DEFAULT NULL, 
 +  `protocol` enum('​udp','​tcp','​tls','​ws','​wss'​) DEFAULT NULL, 
 +  `require_client_cert` enum('​yes','​no'​) DEFAULT NULL, 
 +  `verify_client` enum('​yes','​no'​) DEFAULT NULL, 
 +  `verify_server` enum('​yes','​no'​) DEFAULT NULL, 
 +  `tos` varchar(10) DEFAULT NULL, 
 +  `cos` int(11) DEFAULT NULL, 
 +  `allow_reload` enum('​yes','​no'​) DEFAULT NULL, 
 +  UNIQUE KEY `id` (`id`), 
 +  KEY `ps_transports_id` (`id`) 
 +) ENGINE=InnoDB DEFAULT CHARSET=utf8;​ 
 +</​code><​code>​ 
 +# cat /​etc/​asterisk/​sorcery.conf 
 +</​code><​code>​ 
 +[res_pjsip] 
 +endpoint=realtime,​ps_endpoints 
 +auth=realtime,​ps_auths 
 +aor=realtime,​ps_aors 
 +domain_alias=realtime,​ps_domain_aliases 
 +contact=realtime,​ps_contacts 
 + 
 +[res_pjsip_endpoint_identifier_ip] 
 +identify=realtime,​ps_endpoint_id_ips 
 +</​code><​code>​ 
 +insert into ps_aors (id, max_contacts) values (403, 1); 
 +insert into ps_aors (id, max_contacts) values (404, 1); 
 +insert into ps_auths (id, auth_type, password, username) values (403, '​userpass',​ '​tpassword403',​ 403); 
 +insert into ps_auths (id, auth_type, password, username) values (404, '​userpass',​ '​tpassword404',​ 404); 
 +insert into ps_endpoints (id, transport, aors, auth, context, disallow, allow, direct_media) values (403, '​udp-transport-1',​ '​403',​ '​403',​ '​default',​ '​all',​ '​alaw',​ '​no'​);​ 
 +insert into ps_endpoints (id, transport, aors, auth, context, disallow, allow, direct_media) values (404, '​udp-transport-1',​ '​404',​ '​404',​ '​default',​ '​all',​ '​alaw',​ '​no'​);​ 
 +</​code>​ 
 +==== CHAN SIP ====
  
   * [[http://​asterisk-support.ru/​question/​58839/​sipconf-perenesti-polzovatelei-v-realtime-mysql/​|sip.conf перенести пользователей в realtime mysql]]   * [[http://​asterisk-support.ru/​question/​58839/​sipconf-perenesti-polzovatelei-v-realtime-mysql/​|sip.conf перенести пользователей в realtime mysql]]
Строка 762: Строка 1123:
  
 <​code>​ <​code>​
-# cat sipfriends.sql+# cat chan_sip_realtime.sql
 </​code><​code>​ </​code><​code>​
 CREATE TABLE IF NOT EXISTS `sipfriends` ( CREATE TABLE IF NOT EXISTS `sipfriends` (
Строка 859: Строка 1220:
 ) ENGINE=MyISAM;​ ) ENGINE=MyISAM;​
 </​code><​code>​ </​code><​code>​
-# mysql asterisk < sipfriends.sql+# mysql asterisk < chan_sip_realtime.sql
  
 # mysql asterisk # mysql asterisk
Строка 872: Строка 1233:
  
 <​code>​ <​code>​
-# cat sip.conf+# cat /​etc/​asterisk/​sip.conf
 </​code><​code>​ </​code><​code>​
 [general] [general]
Строка 880: Строка 1241:
 ... ...
 </​code><​code>​ </​code><​code>​
-# cat extensions.conf+# cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
 ... ...
Строка 891: Строка 1252:
 ... ...
 </​code>​ </​code>​
- 
 ===== Asterisk MySQL ===== ===== Asterisk MySQL =====
  
Строка 1001: Строка 1361:
   * !!! Не совместим с пакетом asterisk-mysql   * !!! Не совместим с пакетом asterisk-mysql
 <​code>​ <​code>​
-# cat res_odbc.conf+# asterisk -x '​module show' | grep odbc 
 + 
 +# cat /​etc/​asterisk/​res_odbc.conf
 </​code><​code>​ </​code><​code>​
 [asterisk] [asterisk]
 enabled => yes enabled => yes
-dsn => asterisk_dsn+dsn => asterisk
 pre-connect => yes pre-connect => yes
 </​code><​code>​ </​code><​code>​
Строка 1016: Строка 1378:
  
   Name:   ​asterisk   Name:   ​asterisk
-  DSN:    ​asterisk_dsn +  DSN:    ​asterisk
-    Last connection attempt: 1970-01-01 03:00:00+
     Number of active connections:​ 1 (out of 1)     Number of active connections:​ 1 (out of 1)
 +
 </​code>​ </​code>​
  
Строка 1024: Строка 1386:
  
 <​code>​ <​code>​
-# cat cdr_adaptive_odbc.conf+# cat /​etc/​asterisk/​cdr_adaptive_odbc.conf
 </​code><​code>​ </​code><​code>​
 [default] [default]
Строка 1037: Строка 1399:
  
 <​code>​ <​code>​
-# cat modules.conf+# cat /​etc/​asterisk/​modules.conf
 </​code><​code>​ </​code><​code>​
 ... ...
Строка 1043: Строка 1405:
 ... ...
 </​code><​code>​ </​code><​code>​
-# cat extconfig.conf+# cat /​etc/​asterisk/​extconfig.conf
 </​code><​code>​ </​code><​code>​
 [settings] [settings]
 sippeers => odbc,​asterisk,​sipfriends sippeers => odbc,​asterisk,​sipfriends
 +
 +ps_endpoints => odbc,​asterisk
 +ps_auths => odbc,​asterisk
 +ps_aors => odbc,​asterisk
 +ps_domain_aliases => odbc,​asterisk
 +ps_endpoint_id_ips => odbc,​asterisk
 +ps_contacts => odbc,​asterisk
 </​code>​ </​code>​
  
Строка 1052: Строка 1421:
  
 <​code>​ <​code>​
-# cat func_odbc.conf+# cat /​etc/​asterisk/​func_odbc.conf
 </​code><​code>​ </​code><​code>​
 ... ...
-[SIPFRIENDS_BY_NAME]+ 
 +[LAST_DSTCHANNEL_BY_CALLERID]
 dsn=asterisk dsn=asterisk
-readsql=SELECT ​fullname ​FROM sipfriends where name='​${ARG1}'​+readsql=SELECT ​dstchannel ​FROM cdr WHERE src='​${ARG1}' ​AND disposition='​ANSWERED'​ ORDER BY calldate DESC LIMIT 1;
 </​code><​code>​ </​code><​code>​
-# cat extensions.conf+# cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
 ... ...
-exten => _6XX,1,Set(FN=${ODBC_SIPFRIENDS_BY_NAME(4${EXTEN:1})}) +exten => voip1_00000X,1,Set(MY-DST-CHAN=${ODBC_LAST_DSTCHANNEL_BY_CALLERID(${CALLERID(num)})}) 
-        ​same ​=> n,NoOp(fullname ​${FN}) +exten => voip1_00000X,​n,Set(MY-DST-CHAN=${CUT(MY-DST-CHAN,"​-",​1)}) 
-;     ​same ​=> n,Festival(${FN})+exten => voip1_00000X,​n,ExecIf($[${LEN(${MY-DST-CHAN})} = 0]?​Set(MY-DST-CHAN=SIP/​401&​SIP/​402&​SIP/​403&​SIP/​404)) 
 +exten => voip1_00000X,​n,​Dial(${MY-DST-CHAN},​10) 
 +exten => voip1_00000X,​n,​Dial(SIP/​401&​SIP/​402&​SIP/​403&​SIP/​404)
 ... ...
 </​code>​ </​code>​
Строка 1122: Строка 1494:
  
 <​code>​ <​code>​
-# cat extensions.conf+# cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
 ... ...
Строка 1154: Строка 1526:
  
 <​code>​ <​code>​
-server# cat sip.conf+server# cat /​etc/​asterisk/​sip.conf
 </​code><​code>​ </​code><​code>​
 [general] [general]
 ... ...
-directmedia=no ;1.6 +;​canreinvite=no 
-canreinvite=no ;1.4+directmedia=no
 dtmfmode=rfc2833 dtmfmode=rfc2833
 ... ...
Строка 1172: Строка 1544:
  
 <​code>​ <​code>​
-server# cat features.conf+server# cat /​etc/​asterisk/​features.conf
 </​code><​code>​ </​code><​code>​
 [general] [general]
 ... ...
-featuredigittimeout = 1000+;featuredigittimeout = 1000
 ... ...
 [featuremap] [featuremap]
Строка 1184: Строка 1556:
 ... ...
 </​code><​code>​ </​code><​code>​
-server# cat extensions.conf+server# cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
 ... ...
 exten => _4XX,​1,​Dial(SIP/​${EXTEN},,​Tt) exten => _4XX,​1,​Dial(SIP/​${EXTEN},,​Tt)
 ... ...
 +; in class
 exten => voip1_00000X,​1,​Dial(SIP/​403,​10,​t) exten => voip1_00000X,​1,​Dial(SIP/​403,​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)
 +
 +; webinar Перевод вызова на другого абонента
 +exten => voip1_00000X,​1,​Dial(SIP/​402,​10,​t)
 +exten => voip1_00000X,​n,​Dial(SIP/​401&​SIP/​402,,​t)
 +
 +; webinar Перехват вызова
 +;exten => voip1_00000X,​1,​Dial(SIP/​402,,​t)
 </​code><​code>​ </​code><​code>​
 server*CLI>​ core reload server*CLI>​ core reload
Строка 1206: Строка 1586:
  
 <​code>​ <​code>​
-# cat sip.conf+# cat /​etc/​asterisk/​sip.conf
 </​code><​code>​ </​code><​code>​
 [general] [general]
Строка 1218: Строка 1598:
 ... ...
 </​code><​code>​ </​code><​code>​
-# cat extensions.conf+# cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
 [default] [default]
Строка 1240: Строка 1620:
  
 <​code>​ <​code>​
-server# cat sip.conf+server# cat /​etc/​asterisk/​sip.conf
 </​code><​code>​ </​code><​code>​
 ... ...
Строка 1251: Строка 1631:
 pickupgroup=1 pickupgroup=1
 </​code><​code>​ </​code><​code>​
-server# cat features.conf+server# cat /​etc/​asterisk/​features.conf
 </​code><​code>​ </​code><​code>​
 ... ...
Строка 1266: Строка 1646:
 снимаем трубку чужого,​ звонящего телефона,​ просим подождать,​ набираем *21700, слушаем номер слота, кладем трубку. Со своего телефона набираем номер слота и продолжаем разговор. снимаем трубку чужого,​ звонящего телефона,​ просим подождать,​ набираем *21700, слушаем номер слота, кладем трубку. Со своего телефона набираем номер слота и продолжаем разговор.
 <​code>​ <​code>​
-asterisk11# less features.conf+asterisk11# less /​etc/​asterisk/​features.conf
  
-asterisk13# less res_parking.conf+asterisk13# less /​etc/​asterisk/​res_parking.conf
 </​code><​code>​ </​code><​code>​
 ... ...
Строка 1278: Строка 1658:
 ... ...
 </​code><​code>​ </​code><​code>​
-server# cat extensions.conf+server# cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
 [default] [default]
Строка 1303: Строка 1683:
 root@server:​~#​ find /​usr/​share/​asterisk/​sounds/​ru/​ root@server:​~#​ find /​usr/​share/​asterisk/​sounds/​ru/​
 </​code>​ </​code>​
- 
- 
  
 ==== Установка с сайта ==== ==== Установка с сайта ====
 <​code>​ <​code>​
-server# cd /​usr/​share/​asterisk/​sounds/ru/+server# cd /​usr/​share/​asterisk/​sounds
  
 server# mkdir ru; cd ru/ server# mkdir ru; cd ru/
Строка 1320: Строка 1698:
  
 <​code>​ <​code>​
-server# cat asterisk.conf+server# cat /​etc/​asterisk/​asterisk.conf
 </​code><​code>​ </​code><​code>​
 ... ...
Строка 1330: Строка 1708:
 # service asterisk restart # service asterisk restart
 </​code><​code>​ </​code><​code>​
-server# cat sip.conf+server# cat /​etc/​asterisk/​sip.conf
 </​code><​code>​ </​code><​code>​
 [general] [general]
Строка 1339: Строка 1717:
 ... ...
 </​code><​code>​ </​code><​code>​
-server# cat extensions.conf+server# cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
 ... ...
Строка 1353: Строка 1731:
  
 <​code>​ <​code>​
-server# cat voicemail.conf+server# cat /​etc/​asterisk/​voicemail.conf
 </​code><​code>​ </​code><​code>​
 [general] [general]
 +
 ... ...
 +
 +;For IMAP/SMTP
 +;​charset=UTF-8
 +;​locale=ru_RU.UTF-8
 +;​emailsubject=Голосовое сообщение от абонента ${VM_CALLERID}
 +;​emailbody=Здравствуйте ${VM_NAME}\n\n${VM_DATE} получено голосовое сообщение от абонента ${VM_CALLERID}
 +;​emaildateformat=%A,​ %B %d, %Y в %r
 +
 +...
 +
 +;For IMAP
 ;debian# apt install asterisk-voicemail-imapstorage ;debian# apt install asterisk-voicemail-imapstorage
 ;debian# service asterisk restart ;debian# service asterisk restart
 ;​imapserver=mail.isp.un ;​imapserver=mail.isp.un
 ;​imapfolder=INBOX ;​imapfolder=INBOX
-;charset=UTF-8+ 
 +;For SMTP 
 +;debian# apt install postfix mailutils 
 ... ...
 +
 [corpX] [corpX]
 ;401 => ,, ;401 => ,,
Строка 1371: Строка 1765:
 server*CLI>​ voicemail reload server*CLI>​ voicemail reload
 </​code><​code>​ </​code><​code>​
-server# cat extensions.conf+server# cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
 [default] [default]
 ... ...
 exten => 390,​1,​VoiceMailMain(@corpX) exten => 390,​1,​VoiceMailMain(@corpX)
 +exten => 391,​1,​VoiceMailMain(${CALLERID(num)}@corp4)
 ... ...
 exten => _4XX,​1,​Dial(SIP/​${EXTEN},​10,​Tt) exten => _4XX,​1,​Dial(SIP/​${EXTEN},​10,​Tt)
 exten => _4XX,​n,​VoiceMail(${EXTEN}@corpX) exten => _4XX,​n,​VoiceMail(${EXTEN}@corpX)
 exten => _4XX,​n,​Hangup() exten => _4XX,​n,​Hangup()
- 
 ... ...
 </​code>​ </​code>​
Строка 1388: Строка 1782:
 <​code>​ <​code>​
 exten => _4XX,​1,​GotoIf($["​${CALLERID(num)}"​ = "​${EXTEN}"​]?​MAIL) exten => _4XX,​1,​GotoIf($["​${CALLERID(num)}"​ = "​${EXTEN}"​]?​MAIL)
-exten => _4XX,​n,​Macro(monitor) 
 exten => _4XX,​n,​Dial(SIP/​${EXTEN},​10) exten => _4XX,​n,​Dial(SIP/​${EXTEN},​10)
 exten => _4XX,​n,​VoiceMail(${EXTEN}@corpX) exten => _4XX,​n,​VoiceMail(${EXTEN}@corpX)
Строка 1396: Строка 1789:
 exten => _4XX,​n,​Hangup() exten => _4XX,​n,​Hangup()
 </​code><​code>​ </​code><​code>​
-server# cat sip.conf+server# cat /​etc/​asterisk/​sip.conf
 </​code><​code>​ </​code><​code>​
 ... ...
Строка 1427: Строка 1820:
   * Сценарий 3: ответственный звонит на номер 389, у участников 401 и 403 звонят телефоны и ответственный тоже становится участником конференции.   * Сценарий 3: ответственный звонит на номер 389, у участников 401 и 403 звонят телефоны и ответственный тоже становится участником конференции.
 <​code>​ <​code>​
-server# cat extensions.conf+server# cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
 [default] [default]
Строка 1444: Строка 1837:
 ... ...
 </​code>​ </​code>​
- 
- 
  
 ===== Организация обратных вызовов ===== ===== Организация обратных вызовов =====
Строка 1455: Строка 1846:
    
 <​code>​ <​code>​
-# asterisk -x "​channel originate SIP/403 extension ​301@default"​+# asterisk -x "​channel originate SIP/401 extension 601@default"​ 
 +# asterisk -x "​channel originate SIP/402 extension 601@default"​ 
 +# asterisk -x "​channel originate SIP/403 extension ​601@default"​
  
 ; сначала вызов телефона оператора,​ затем вызов абонента ; сначала вызов телефона оператора,​ затем вызов абонента
 server*CLI>​ channel originate SIP/403 extension 89161234567@default server*CLI>​ channel originate SIP/403 extension 89161234567@default
  
-; сначала вызов абонента,​ затем ​телефона оператора ​ +!!! Проверить !!! сначала вызов абонента,​ затем обработчика (например - IVR) 
-server*CLI>​ channel originate SIP/​voip1_00000X/​89161234567 extension ​403@default+server*CLI>​ channel originate SIP/​voip1_00000X/​89161234567 extension ​voip1_00000X@default 
 +server*CLI>​ channel originate PJSIP/​89161234567@voip1_00000X extension voip1_00000X@default
  
-; сначала вызов обработчика ​входящих вызовов (секретарь,​ IVR, Queue), затем вызов абонента+; сначала вызов обработчика ​(например - все телефоны в офисе), затем вызов абонента
 server*CLI>​ channel originate Local/​voip1_00000X@default extension 89161234567@default server*CLI>​ channel originate Local/​voip1_00000X@default extension 89161234567@default
-</​code>​ +server*CLI>​ channel originate Local/​601@default extension 89161234567@default 
- +</code><​code> 
- +# cat /​usr/​share/​originate_cli.sh 
 +</​code><​code>​ 
 +#!/bin/sh
  
 +asterisk -x "​channel originate SIP/$1 extension $2@default"​
 +</​code>​
 ==== С использованием Call файлов ==== ==== С использованием Call файлов ====
  
Строка 1475: Строка 1872:
  
 <​code>​ <​code>​
-server# cat /​usr/​share/​403.call+server# cat 1.call
 </​code><​code>​ </​code><​code>​
-Channel: sip/403+Channel: sip/401 
 +Extension: 601
 Context: default Context: default
-Extension: 399 +CallerId: Conferencia <601>
-CallerId: Conferencia <399>+
 </​code><​code>​ </​code><​code>​
-server# cat /​usr/​share/​401.call+server# cat 2.call
 </​code><​code>​ </​code><​code>​
-Channel: sip/401+Channel: sip/402 
 +Extension: 601
 Context: default Context: default
-Extension: 399 +CallerId: Conferencia <601>
-CallerId: Conferencia <399>+
 </​code><​code>​ </​code><​code>​
-server# cat /usr/share/start_conference.sh+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>​ 
 +# cat /usr/share/originate_call_file.sh
 </​code><​code>​ </​code><​code>​
 #!/bin/sh #!/bin/sh
  
-cp /​usr/​share/​4* /tmp +cat <<EOF >/​var/​spool/​asterisk/​outgoing/​$1$2$3 
-chown asterisk /tmp/4* +Channel: SIP/$1 
-mv /​tmp/​4* ​/​var/​spool/​asterisk/​outgoing/​+Extension: $2 
 +Context: default 
 +CallerId: $2<​$3>​ 
 +EOF
 </​code><​code>​ </​code><​code>​
-server# chmod +x /usr/share/start_conference.sh+# chmod +x /usr/share/originate_call_file.sh
  
-server# /usr/share/start_conference.sh+# /usr/share/originate_call_file.sh 401 601 Conferencia 
 +# /​usr/​share/​originate_call_file.sh 402 601 Conferencia 
 +# /​usr/​share/​originate_call_file.sh 401 601 Conferencia
 </​code>​ </​code>​
- 
- 
 ==== Пример с использованием Asterisk AMI ==== ==== Пример с использованием Asterisk AMI ====
  
Строка 1519: Строка 1928:
 # curl -v -u asterisk:​asterisk -X POST "​http://​localhost:​8088/​ari/​channels?​endpoint=SIP%2F401&​extension=301&​context=default&​callerId=301"​ # curl -v -u asterisk:​asterisk -X POST "​http://​localhost:​8088/​ari/​channels?​endpoint=SIP%2F401&​extension=301&​context=default&​callerId=301"​
 </​code>​ </​code>​
-===== Интерактивное голосовое меню IVR =====+===== Запись звукового ​файла =====
  
-  * [[https://​www.voip-info.org/​wiki/​view/​Asterisk+standard+extensions|Asterisk standard extensions]] 
- 
-**!!! После записи IVR нажмите #** 
- 
- 
- 
-==== Реализация с использованием стандартного языка описания диалплана ==== 
 <​code>​ <​code>​
-sever# cat extensions.conf+sever# cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
-[default] 
 ... ...
 exten => 302,​1,​Authenticate(1234) exten => 302,​1,​Authenticate(1234)
-exten => 302,​n,​Playback(beep+exten => 302,​n,​Playback(vm-intro
-exten => 302,​n,​Record(recordings/​greeting:alaw)+exten => 302,​n,​Record(recordings/​speech.alaw,,,xk)
 exten => 302,​n,​Hangup() exten => 302,​n,​Hangup()
  
 exten => 303,​1,​Answer() exten => 303,​1,​Answer()
 exten => 303,​n,​Playback(beep) exten => 303,​n,​Playback(beep)
-exten => 303,​n,​Playback(recordings/​greeting)+exten => 303,​n,​Playback(recordings/​speech)
 exten => 303,​n,​Playback(beep) exten => 303,​n,​Playback(beep)
 exten => 303,​n,​Hangup() exten => 303,​n,​Hangup()
 +...
 +</​code>​
  
 +===== Интерактивное голосовое меню IVR =====
 +
 +  * [[https://​www.voip-info.org/​wiki/​view/​Asterisk+standard+extensions|Asterisk standard extensions]]
 +
 +==== Реализация с использованием стандартного языка описания диалплана ====
 +<​code>​
 +sever# cat /​etc/​asterisk/​extensions.conf
 +</​code><​code>​
 +...
 exten => 304,​1,​Goto(menu,​s,​1) ; for debug exten => 304,​1,​Goto(menu,​s,​1) ; for debug
 ... ...
-;[incoming] 
 exten => voip1_00000X,​1,​Goto(menu,​s,​1) exten => voip1_00000X,​1,​Goto(menu,​s,​1)
 ... ...
 [menu] [menu]
-exten => s,​1,​Background(recordings/​greeting+exten => s,​1,​Background(recordings/​speech
-exten => s,2,Goto(s,1)+exten => s,n,Goto(s,1)
    
 ; exten => 1,​1,​Dial(SIP/​401) ; exten => 1,​1,​Dial(SIP/​401)
 ; exten => 2,​1,​Dial(SIP/​402) ; exten => 2,​1,​Dial(SIP/​402)
 ; exten => 3,​1,​Dial(SIP/​403) ; exten => 3,​1,​Dial(SIP/​403)
-; exten => 4,​1,​Dial(SIP/​404)+
 ; exten => _X,​1,​Dial(SIP/​40${EXTEN}) ; exten => _X,​1,​Dial(SIP/​40${EXTEN})
  
 exten => _X,​1,​Goto(default,​40${EXTEN},​1) exten => _X,​1,​Goto(default,​40${EXTEN},​1)
 +exten => _4XX,​1,​Goto(default,​${EXTEN},​1)
  
 ;exten => 0,​1,​Goto(menu2,​s,​1) ;exten => 0,​1,​Goto(menu2,​s,​1)
Строка 1566: Строка 1978:
 ;exten => _[34]XX,​1,​Goto(default,​${EXTEN},​1) ;exten => _[34]XX,​1,​Goto(default,​${EXTEN},​1)
 ;exten => _[43]XX,​1,​Dial(Local/​{EXTEN}@default) ;exten => _[43]XX,​1,​Dial(Local/​{EXTEN}@default)
-  
-;exten => t,​1,​Goto(s,​1) ​ ; timeout exceeded 
-;exten => i,​1,​Goto(s,​1) ​ ; error extensions 
  
 ;[menu2] ;[menu2]
 ;exten => s,​1,​WaitExten(8) ;exten => s,​1,​WaitExten(8)
-;exten => _XXX,​1,​Goto(default,​${EXTEN},​1)+;exten => _4XX,​1,​Goto(default,​${EXTEN},​1) 
 +;exten => t,​1,​Goto(menu,​s,​1) ​ ; timeout exceeded 
 +;exten => i,​1,​Goto(menu,​s,​1) ​ ; error extensions
 </​code>​ </​code>​
  
Строка 1580: Строка 1991:
  
 <​code>​ <​code>​
-sever# cat extensions.conf+sever# cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
 [default] [default]
Строка 1589: Строка 2000:
 exten => voip1_00000X,​1,​Goto(menu,​s,​1) exten => voip1_00000X,​1,​Goto(menu,​s,​1)
 </​code><​code>​ </​code><​code>​
-sever# cat extensions.ael+sever# cat /​etc/​asterisk/​extensions.ael
 </​code><​code>​ </​code><​code>​
 context ivr { context ivr {
   302 => {   302 => {
     Answer();     Answer();
-    Record(recordings/​greeting:alaw);+    Record(recordings/​speech:alaw);
     Hangup();     Hangup();
   }   }
Строка 1600: Строка 2011:
     Answer();     Answer();
     Playback(beep);​     Playback(beep);​
-    Playback(recordings/​greeting);+    Playback(recordings/​speech);
     Playback(beep);​     Playback(beep);​
     Hangup();     Hangup();
Строка 1612: Строка 2023:
   s => {   s => {
     begin:     begin:
-      Background(recordings/​greeting);+      Background(recordings/​speech);
       goto begin;       goto begin;
   }   }
Строка 1623: Строка 2034:
  
 <​code>​ <​code>​
-server# cat extensions.conf+server# cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
 [default] [default]
 ... ...
-exten => _5XX/​402,​1,​ChanSpy(SIP/​4${EXTEN:​1})+exten => _5XX/​402,​1,​ChanSpy(SIP/​4${EXTEN:​1},qw)
 ... ...
 </​code>​ </​code>​
Строка 1635: Строка 2046:
 ==== Запись по желанию абонента ==== ==== Запись по желанию абонента ====
  
-  * Создается два файла - in и out ([[http://​asterisk.ru/​knowledgebase/​Asterisk+config+features.conf|можно смикшировать в один, используя утилиту sox]]) +  * Если создается два файла - in и out, то ([[http://​asterisk.ru/​knowledgebase/​Asterisk+config+features.conf|можно смикшировать в один, используя утилиту sox]]) 
-  * Имена файлов определяется шаблоном auto-${EPOCH}-${TOUCH_MONITOR}+  * [[http://​asterisk-support.ru/​question/​59823/​touch-mix-monitor-prefiks/​|touch mix monitor ​префикс]]
   ​   ​
  
 <​code>​ <​code>​
-server# cat features.conf+server# cat /​etc/​asterisk/​features.conf
 </​code><​code>​ </​code><​code>​
 ... ...
Строка 1648: Строка 2059:
 ... ...
 </​code><​code>​ </​code><​code>​
-server# cat extensions.conf+server# cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
 ... ...
-exten => _4XX,1,​Set(TOUCH_MONITOR=${STRFTIME(${EPOCH},,​%Y%m%d%H%M)}-${CALLERID(number)}-${EXTEN})+exten => _4XX,n,​Set(TOUCH_MONITOR=${STRFTIME(${EPOCH},,​%Y.%m.%d-%H.%M)}_${CALLERID(number)}_${EXTEN})
 exten => _4XX,​n,​Dial(SIP/​${EXTEN},,​Ww) exten => _4XX,​n,​Dial(SIP/​${EXTEN},,​Ww)
 ... ...
Строка 1662: Строка 2073:
 ==== Автоматическая запись средствами Asterisk ==== ==== Автоматическая запись средствами Asterisk ====
 <​code>​ <​code>​
-server# cat extensions.conf+server# cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
 ... ...
 [menu] [menu]
 ... ...
-exten => _X,​1,​Set(MY-FILE-NAME=${STRFTIME(${EPOCH},,​%Y%m%d%H%M)}-${CALLERID(number)}-40${EXTEN}.wav)+exten => _X,​1,​Set(MY-FILE-NAME=${STRFTIME(${EPOCH},,​%Y.%m.%d-%H.%M)}_${CALLERID(number)}_40${EXTEN}.wav)
 exten => _X,​n,​MixMonitor(${MY-FILE-NAME},​b) exten => _X,​n,​MixMonitor(${MY-FILE-NAME},​b)
 exten => _X,​n,​Goto(default,​40${EXTEN},​1) exten => _X,​n,​Goto(default,​40${EXTEN},​1)
Строка 1690: Строка 2101:
  
 <​code>​ <​code>​
-[server:~] # rm /​usr/​local/​share/​asterisk/​moh/​* 
-[server:~] # cp Knockin_on_Heavens_Door.raw /​usr/​local/​share/​asterisk/​moh/​ 
- 
 root@server:​~#​ rm /​usr/​share/​asterisk/​moh/​* root@server:​~#​ rm /​usr/​share/​asterisk/​moh/​*
 root@server:​~#​ cp Knockin_on_Heavens_Door.raw /​usr/​share/​asterisk/​moh/​ root@server:​~#​ cp Knockin_on_Heavens_Door.raw /​usr/​share/​asterisk/​moh/​
Строка 1700: Строка 2108:
 server*CLI>​ moh show files server*CLI>​ moh show files
  
-server# cat extensions.conf+server# cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
 ... ...
Строка 1711: Строка 2119:
  
 <​code>​ <​code>​
 +server# mkdir /​usr/​share/​asterisk/​incoming
 +
 +server# mv -v /​usr/​share/​asterisk/​sounds/​recordings/​speech.alaw /​usr/​share/​asterisk/​incoming
 +
 server# mkdir /​usr/​share/​asterisk/​busy server# mkdir /​usr/​share/​asterisk/​busy
  
 server# cp -v /​usr/​share/​asterisk/​sounds/​ru/​tt-allbusy.* /​usr/​share/​asterisk/​busy/​ server# cp -v /​usr/​share/​asterisk/​sounds/​ru/​tt-allbusy.* /​usr/​share/​asterisk/​busy/​
  
-server# cat musiconhold.conf+server# /​usr/​share/​asterisk/​silence/​ 
 + 
 +server# cp -v /​usr/​share/​asterisk/​sounds/​en/​silence/​10.* /​usr/​share/​asterisk/​silence/​ 
 + 
 +server# cat /​etc/​asterisk/​musiconhold.conf
 </​code><​code>​ </​code><​code>​
 ... ...
 +[incoming]
 +mode=files
 +directory=incoming
 +
 [busy] [busy]
 mode=files mode=files
 directory=busy directory=busy
 +
 +[silence]
 +mode=files
 +directory=silence
 </​code><​code>​ </​code><​code>​
-server# cat extensions.conf+server# cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
 ... ...
-exten => ABC,​1,​Answer() +exten => _4XX,​n,​Dial(SIP/​ABC,,​m(busy))
-exten => ABC,​n,​Dial(SIP/​ABC,,​m(busy))+
 ... ...
 +exten => voip1_00000X,​1,​Dial(SIP/​4NN,,​m(incoming)t)
 </​code>​ </​code>​
 ===== Синтез речи с использованием пакета Festival ===== ===== Синтез речи с использованием пакета Festival =====
Строка 1736: Строка 2160:
 # asterisk -x '​module show' | grep fest # asterisk -x '​module show' | grep fest
  
-server# cat extensions.conf+server# cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
 ... ...
-exten => 303,​1,​Answer() 
-exten => 303,​n,​Festival('​Привет Мир'​) 
-exten => 303,​n,​Hangup() 
- 
 exten => 304,​1,​Answer() exten => 304,​1,​Answer()
-exten => 304,​n,​Set(foo=${FILE(/​tmp/​text.txt)}) +exten => 304,​n,​Festival(Привет Мир)
-exten => 304,​n,​Festival(${foo})+
 exten => 304,​n,​Hangup() exten => 304,​n,​Hangup()
  
-exten => 305,​1,​Answer() +;exten => 305,​1,​Answer() 
-;linux   exten => 305,​n,​Set(foo=${SHELL(uptime | sed -E 's/.* (.*), .*, .*$/​\1/'​ | sed 's/,/ запятая /​g'​)}) +;exten => 305,​n,​Set(foo=${FILE(/​tmp/​text.txt)}) 
-exten => 305,​n,​Festival(${foo}) +;exten => 305,​n,​Festival(${foo}) 
-exten => 305,n,Hangup()+;exten => 305,​n,​Hangup() 
 + 
 +;exten => 306,​1,​Answer() 
 +;exten => 306,​n,​Set(foo=${SHELL(uptime | sed -E 's/.* (.*), .*, .*$/​\1/'​ | sed 's/,/ запятая /​g'​)}) 
 +;exten => 306,​n,​Festival(${foo}) 
 +;exten => 306,n,Hangup() 
 ... ...
 +
 +exten => _4XX,​1,​Dial(SIP/​${EXTEN},​10)
 +
 +;exten => _4XX,​n,​Set(MY-CALLED-USER-NAME=${ODBC_SIPFRIENDS_BY_NAME(${EXTEN})})
 +exten => _4XX,​n,​Set(MY-CALLED-USER-NAME=${SIPPEER(${EXTEN},​callerid_name)})
 +;exten => _4XX,​n,​Set(MY-CALLED-USER-NAME=${PJSIP_ENDPOINT(${EXTEN},​callerid)})
 +
 +exten => _4XX,​n,​Festival(${MY-CALLED-USER-NAME} не может ответить)
 +
 </​code>​ </​code>​
 ===== Переадресация вызовов на внешний номер ===== ===== Переадресация вызовов на внешний номер =====
Строка 1759: Строка 2193:
  
 <​code>​ <​code>​
-server# cat followme.conf+server# cat /​etc/​asterisk/​followme.conf
 </​code><​code>​ </​code><​code>​
 [101+X] [101+X]
Строка 1770: Строка 2204:
 context=>​default context=>​default
 </​code><​code>​ </​code><​code>​
-server# cat extensions.conf+server# cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
 ;... ;...
Строка 1799: Строка 2233:
 server*CLI>​ database put num2login 403 user3 server*CLI>​ database put num2login 403 user3
  
-server*CLI>​ database num2login+server*CLI>​ database ​show num2login
 </​code><​code>​ </​code><​code>​
-# cat extensions.conf+# cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
-exten => _[a-z].,​1,​Dial(SIP/​${EXTEN})+;exten => _[a-z].,​1,​Dial(SIP/​${EXTEN})
  
 exten => _4XX,​1,​Set(MY-LOGIN=${DB(num2login/​${EXTEN})}) exten => _4XX,​1,​Set(MY-LOGIN=${DB(num2login/​${EXTEN})})
-exten => _4XX,n,NoOp(variable ​MY-LOGIN ​set to ${MY-LOGIN})+exten => _4XX,n,ExecIf($[ "${MY-LOGIN}" = ""​ ]?Set(MY-LOGIN=${EXTEN}))
 exten => _4XX,​n,​Verbose(1,​variable MY-LOGIN set to ${MY-LOGIN}) exten => _4XX,​n,​Verbose(1,​variable MY-LOGIN set to ${MY-LOGIN})
 exten => _4XX,​n,​Dial(SIP/​${MY-LOGIN}) exten => _4XX,​n,​Dial(SIP/​${MY-LOGIN})
Строка 1822: Строка 2256:
 server*CLI>​ database del redirect 403 server*CLI>​ database del redirect 403
 </​code><​code>​ </​code><​code>​
-server# cat extensions.conf+server# cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
 ... ...
Строка 1838: Строка 2272:
  
 exten => _4XX,​n,​Set(MY-REDIRNUM=${DB(redirect/​${EXTEN})}) exten => _4XX,​n,​Set(MY-REDIRNUM=${DB(redirect/​${EXTEN})})
-exten => _4XX,​n,​GotoIf($[${LEN(${MY-REDIRNUM})} > 0]?​CALLMOBILE)+exten => _4XX,​n,​GotoIf(${MY-REDIRNUM}?​CALLMOBILE)
 ... ...
 exten => _4XX,​n(CALLMOBILE),​Goto(default,​${MY-REDIRNUM},​1) exten => _4XX,​n(CALLMOBILE),​Goto(default,​${MY-REDIRNUM},​1)
Строка 1890: Строка 2324:
 exten => _X!,​1,​Goto(pbx-invalid,​s,​1) exten => _X!,​1,​Goto(pbx-invalid,​s,​1)
 ... ...
-exten => _4XX,​1,​Dial(SIP/​${EXTEN}) +exten => _4XX,​1,​Dial(SIP/​${EXTEN},,Tt
-exten => _4XX,​n,​Verbose(1,​${DIALSTATUS})+exten => _4XX,​n,​Verbose(1,​Значение DIALSTATUS равно ​${DIALSTATUS})
 exten => _4XX,​n,​GotoIf($["​${DIALSTATUS}"​ = "​CHANUNAVAIL"​]?​pbx-invalid,​s,​1) exten => _4XX,​n,​GotoIf($["​${DIALSTATUS}"​ = "​CHANUNAVAIL"​]?​pbx-invalid,​s,​1)
 ... ...
Строка 1897: Строка 2331:
 exten => s,​1,​Playback(pbx-invalid) exten => s,​1,​Playback(pbx-invalid)
 </​code>​ </​code>​
- 
  
 Абдирахимов Мансур представил решение "Vip звонок"​ - определенный номер при звонке на офисный телефон соединялся с определенным номером даже если последний разговаривает. Абдирахимов Мансур представил решение "Vip звонок"​ - определенный номер при звонке на офисный телефон соединялся с определенным номером даже если последний разговаривает.
Строка 1920: Строка 2353:
  
   * [[https://​asterisk-pbx.ru/​wiki/​asterisk/​cf/​queues.conf|Asterisk настройка очереди - queues.conf]]   * [[https://​asterisk-pbx.ru/​wiki/​asterisk/​cf/​queues.conf|Asterisk настройка очереди - queues.conf]]
 +  * [[https://​asterisk-pbx.ru/​wiki/​asterisk/​app/​queue|Команда Asterisk: Queue]]
  
 <​code>​ <​code>​
-server# cat queues.conf+server# cat /​etc/​asterisk/​queues.conf
 </​code><​code>​ </​code><​code>​
 [general] [general]
Строка 1928: Строка 2362:
  
 [queue1] [queue1]
-member => SIP/​403 ​;​установить call-limit=1 ​для linksys+;для демонстрации на многоканальном телефоне ​установить call-limit=1 
 +;member => SIP/​401 ​ ; в вебинаре (занять можно звонком на 311) 
 +;member => SIP/​403 ​ ; в классе
 </​code><​code>​ </​code><​code>​
-sever# cat extensions.conf+sever# cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
 ... ...
Строка 1942: Строка 2378:
  
 <​code>​ <​code>​
-asterisk# agents.conf+asterisk# ​/​etc/​asterisk/​agents.conf
 </​code><​code>​ </​code><​code>​
 [general] [general]
  
-[801]+[my-agents](!) 
 +;​musiconhold=silence 
 +;​ackcall=yes 
 +;​acceptdtmf=#​ 
 + 
 +[801](my-agents)
 fullname=Ivan Ivanovitch Ivanov fullname=Ivan Ivanovitch Ivanov
-[802]+[802](my-agents)
 fullname=Petr Petrovitch Petrov fullname=Petr Petrovitch Petrov
-[803]+[803](my-agents)
 fullname=Your name fullname=Your name
 </​code><​code>​ </​code><​code>​
-asterisk# cat extensions.conf+asterisk# cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
 [default] [default]
Строка 1966: Строка 2407:
 === Использование агентов в очередях === === Использование агентов в очередях ===
 <​code>​ <​code>​
-asterisk# cat queues.conf+asterisk# cat /​etc/​asterisk/​queues.conf
 </​code><​code>​ </​code><​code>​
 [general] [general]
Строка 1972: Строка 2413:
  
 [queue1] [queue1]
-strategy=rrmemory+strategy = rrmemory 
 +musicclass = default 
 + 
 +announce = queue-markq 
 +announce-frequency = 30 
 +announce-position = yes 
 +announce-position-limit = 1 
 member => Local/​801@agents member => Local/​801@agents
 member => Local/​802@agents member => Local/​802@agents
Строка 1991: Строка 2439:
  
 <​code>​ <​code>​
-server# cat extensions.conf+server# cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
 [default] [default]
Строка 2003: Строка 2451:
   * !!! Название функции только ЗАГЛАВНЫМИ буквами   * !!! Название функции только ЗАГЛАВНЫМИ буквами
   * [[https://​www.voip-info.org/​wiki/​view/​Asterisk+func+shell|Asterisk func shell]]   * [[https://​www.voip-info.org/​wiki/​view/​Asterisk+func+shell|Asterisk func shell]]
 +  * Сервис HTTP [[Сервис HTTP#​Управление кодировкой]]
 +  * http://​server.corpX.un/​asterisk/​addrbook.txt
  
 <​code>​ <​code>​
 +# mkdir /​var/​www/​html/​asterisk/​
 +
 +# cat /​var/​www/​html/​asterisk/​addrbook.txt
 +</​code><​code>​
 +Вячеслав Лохтуров<​+74951234569>​
 +Вячеслав Лохтуров<​+74951234560>​
 +Ваше ФИО<​+7ВАШМОБИЛЬНЫЙ>​
 +</​code><​code>​
 +# cat /​usr/​local/​bin/​get-customer-callerid-all.sh
 +</​code><​code>​
 +#!/bin/sh
 +
 +PHONE=$1
 +
 +ADDR_BOOK=/​var/​www/​html/​asterisk/​addrbook.txt
 +
 +grep $PHONE $ADDR_BOOK || echo $PHONE
 +</​code><​code>​
 # cat /​etc/​asterisk/​extensions.conf # cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
 ... ...
-exten => _4XX,1,Set(MY-RES=${SHELL(test -e /etc/asterisk/nocall && echo -n DENY || echo -n ALLOW)}) +exten => _4XX,n,ExecIf($["​${CALLERID(name)}"​=""​]?​Set(CALLERID(all)=${SHELL(/usr/local/bin/get-customer-callerid-all.sh ​${CALLERID(num)})})) 
-exten => _4XX,​n,​Verbose(1,​MY-RES is ${MY-RES}) +... 
-exten => _4XX,n,GotoIf($[${MY-RES} = DENY]?end) +exten => voip1_00000X,1,Set(CALLERID(all)=${SHELL(/usr/​local/​bin/​get-customer-callerid-all.sh ​${CALLERID(num)})}) 
-exten => _4XX,n,Dial(SIP/${EXTEN}) +exten => voip1_00000X,n,Dial(SIP/​401&​SIP/​402&​SIP/​403&​SIP/​404)
-exten => _4XX,n(end),Hangup()+
 ... ...
 </​code>​ </​code>​
Строка 2048: Строка 2515:
 exit 0 exit 0
 </​code><​code>​ </​code><​code>​
-# cat extensions.conf+# chmod +x /​usr/​share/​asterisk/​agi-bin/​multi_playback.sh 
 + 
 +# Демонстрировать лучше построчно 
 +# /​usr/​share/​asterisk/​agi-bin/​multi_playback.sh 
 +</​code><​code>​ 
 +agi_request:​ multi_playback.sh 
 +agi_escho_kucha_parametrov:​ ... 
 +agi_arg_1: beep 
 +agi_arg_2: hello-world 
 +agi_arg_3: beep 
 +</​code><​code>​ 
 +# rm /​tmp/​multi_playback.log 
 + 
 +# cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
 ... ...
Строка 2088: Строка 2568:
   * [[http://​www.jcgonzalez.com/​test-asterisk-ami-telnet|Log in, Log out from Asterisk AMI with Telnet]]   * [[http://​www.jcgonzalez.com/​test-asterisk-ami-telnet|Log in, Log out from Asterisk AMI with Telnet]]
   * [[http://​habrahabr.ru/​company/​centosadmin/​blog/​161521/​|Asterisk:​ обратный вызов с использованием AMI и PHP]]   * [[http://​habrahabr.ru/​company/​centosadmin/​blog/​161521/​|Asterisk:​ обратный вызов с использованием AMI и PHP]]
 +  * Программирование диалогов expect [[Программирование диалогов expect#​Asterisk AMI]]
  
 <​code>​ <​code>​
-cat manager.conf+less /​etc/​asterisk/​manager.conf
 </​code><​code>​ </​code><​code>​
 [general] [general]
 enabled = yes enabled = yes
 port = 5038 port = 5038
-;bindaddr = 127.0.0.1+bindaddr = 127.0.0.1
 ;bindaddr = 0.0.0.0 ;bindaddr = 0.0.0.0
  
 #include "​manager.d/​*.conf"​ #include "​manager.d/​*.conf"​
 </​code><​code>​ </​code><​code>​
-# cat manager.d/​admin.conf+# cat /​etc/​asterisk/​manager.d/​admin.conf
 </​code><​code>​ </​code><​code>​
 [admin] [admin]
Строка 2121: Строка 2602:
  
 Action: Originate Action: Originate
-Channel: ​sip/403+Channel: ​SIP/403
 Context: default Context: default
 Exten: 301 Exten: 301
-Callerid: 301+Callerid: ​HelloWorld<​301>
 Priority: 1 Priority: 1
  
 Action: Logoff Action: Logoff
 </​code>​ </​code>​
- 
 ==== Asterisk ARI ==== ==== Asterisk ARI ====
  
Строка 2152: Строка 2632:
 enabled = yes enabled = yes
 pretty = yes pretty = yes
-;allowed_origins = http://​ari.asterisk.org +allowed_origins = *
-;​allowed_origins = chrome-extension://​hlnmjkbpmnbgeondjeceaomhafdacmlj+
  
 [asterisk] [asterisk]
Строка 2166: Строка 2645:
  
 <​code>​ <​code>​
-# curl -v -X GET "http://​localhost:​8088/​ari/​endpoints?​api_key=asterisk:​asterisk"+# curl http://​localhost:​8088/​ari/​endpoints?​api_key=asterisk:​asterisk
 </​code>​ </​code>​
  
Строка 2174: Строка 2653:
  
 <​code>​ <​code>​
-# curl -sL https://​deb.nodesource.com/​setup_9.x | sudo -E bash -+debian9# curl -sL https://​deb.nodesource.com/​setup_9.x | sudo -E bash -
  
-# apt install -y nodejs+# apt install -y nodejs ​npm
  
 # npm install -g wscat # npm install -g wscat
Строка 2191: Строка 2670:
 === ARI Stasis === === ARI Stasis ===
 <​code>​ <​code>​
-exten => 307,​1,​Answer() +exten => 314,​1,​Answer() 
-exten => 307,​n,​Stasis(my-first-app) +exten => 314,​n,​Stasis(my-first-app) 
-exten => 307,n,Hangup()+exten => 314,n,Hangup()
 </​code><​code>​ </​code><​code>​
 # curl -v -u asterisk:​asterisk -X GET "​http://​localhost:​8088/​ari/​channels"​ # curl -v -u asterisk:​asterisk -X GET "​http://​localhost:​8088/​ari/​channels"​
Строка 2218: Строка 2697:
 # asterisk -x '​module show' | grep xmpp # asterisk -x '​module show' | grep xmpp
  
-# cat xmpp.conf+# cat /​etc/​asterisk/​xmpp.conf
 </​code><​code>​ </​code><​code>​
 [general] [general]
Строка 2230: Строка 2709:
 secret=Pa$$w0rd secret=Pa$$w0rd
 port=5222 port=5222
-usetls=yes+;usetls=yes 
 +;usetls=no
 </​code><​code>​ </​code><​code>​
 *CLI> module reload res_xmpp *CLI> module reload res_xmpp
Строка 2238: Строка 2718:
 *CLI> xmpp show buddies *CLI> xmpp show buddies
 </​code><​code>​ </​code><​code>​
-# cat extensions.conf+# cat /​etc/​asterisk/​extensions.conf
 </​code><​code>​ </​code><​code>​
 [default] [default]
 ... ...
-exten => 306,​1,​Answer() +exten => 307,​1,​Answer() 
-exten => 306,​n,​JabberSend(aster,​user3@corpX.un,​Hello World) +exten => 307,​n,​JabberSend(aster,​userN@corpX.un,​Hello World) 
-exten => 306,n,Hangup()+exten => 307,n,Hangup()
 ... ...
  
-;exten => _4XX,​1,​Set(MY-CALLED-USER-ID=${SIPPEER(${EXTEN},​chanvar[MY-USER-ID])})+exten => _4XX,​1,​Set(MY-CALLED-USER-ID=${SIPPEER(${EXTEN},​chanvar[MY-USER-ID])})
 ;exten => _4XX,​1,​Set(MY-CALLED-USER-ID=${PJSIP_ENDPOINT(${EXTEN},​MY-USER-ID)}) ;exten => _4XX,​1,​Set(MY-CALLED-USER-ID=${PJSIP_ENDPOINT(${EXTEN},​MY-USER-ID)})
  
Строка 2256: Строка 2736:
 exten => _4XX,​n,​JabberSend(aster,​${MY-CALLED-USER-ID},​Вам звонит ${CALLERID(all)}) exten => _4XX,​n,​JabberSend(aster,​${MY-CALLED-USER-ID},​Вам звонит ${CALLERID(all)})
  
-;exten => _4XX,​n,​Dial(SIP/​${EXTEN})+exten => _4XX,​n,​Dial(SIP/​${EXTEN})
 ;exten => _4XX,​n,​Dial(PJSIP/​${EXTEN}) ;exten => _4XX,​n,​Dial(PJSIP/​${EXTEN})
 exten => _4XX,​n,​Hangup() exten => _4XX,​n,​Hangup()
Строка 2330: Строка 2810:
         echo "​secret=$secret"​         echo "​secret=$secret"​
         echo "​host=dynamic"​         echo "​host=dynamic"​
 +        echo mailbox=${exten}'​@'​$(echo $mail | cut -d '​@'​ -f2 | cut -d'​.'​ -f1)
         echo         echo
 done done
Строка 2343: Строка 2824:
 secret=tpassword401 secret=tpassword401
 host=dynamic host=dynamic
 +mailbox=401@corp15
 ... ...
 </​code><​code>​ </​code><​code>​
Строка 2352: Строка 2834:
 ... ...
 </​code>​ </​code>​
- 
 ==== Создаем файл конфигурации PJSIP ==== ==== Создаем файл конфигурации PJSIP ====
  
Строка 2441: Строка 2922:
 403 tpassword403 server.corpX.un 000E08C190C2 SPA3102 403 tpassword403 server.corpX.un 000E08C190C2 SPA3102
 404 tpassword404 server.corpX.un BCC34221709A KX-HDVXXX 404 tpassword404 server.corpX.un BCC34221709A KX-HDVXXX
 +405 tpassword405 server.corpX.un 080023F67118 KX-HDVXXX
 ... ...
-403 tpassword403 server.corp8.un 000E08C190A2 SPA3102 
-403 tpassword403 server.corp6.un BCC34221709A KX-HDVXXX 
-403 tpassword403 server.corp3.un 080023F67118 KX-HDVXXX 
 403 tpassword403 server.corp1.un 000E08C190A8 SPA3102 403 tpassword403 server.corp1.un 000E08C190A8 SPA3102
-403 tpassword403 server.corp4.un 000E08C190B6 SPA3102 +403 tpassword403 server.corp2.un BCC34221709A KX-HDVXXX 
-403 tpassword403 server.corp2.un BCC3422170AA ​KX-HDVXXX +403 tpassword403 server.corp3.un 080023F67118 ​KX-HDVXXX 
-403 tpassword403 server.corp7.un 080023E421CD KX-HDVXXX+403 tpassword403 server.corp4.un 000E08C38F1D SPA3102 
 +403 tpassword403 server.corp5.un 000E08C190A2 SPA3102
 403 tpassword403 server.corp5.un 000E08C190C2 SPA3102 403 tpassword403 server.corp5.un 000E08C190C2 SPA3102
-403 tpassword403 server.corp9.un ​000E08C38F1D ​SPA3102+403 tpassword403 server.corp6.un BCC3422170AA KX-HDVXXX 
 +403 tpassword403 server.corp7.un 080023E421CD KX-HDVXXX 
 +403 tpassword403 server.corp8.un 000E08C190B6 SPA3102 
 +403 tpassword403 server.corp9.un ​000E08C190BB ​SPA3102
 403 tpassword403 server.corp10.un 080023BF61CD KX-HDVXXX 403 tpassword403 server.corp10.un 080023BF61CD KX-HDVXXX
 403 tpassword403 server.corp11.un 000E08C389BF SPA3102 403 tpassword403 server.corp11.un 000E08C389BF SPA3102
Строка 2524: Строка 3007:
 server# cat server.crt server.key > /​etc/​asterisk/​server.crtkey server# cat server.crt server.key > /​etc/​asterisk/​server.crtkey
  
-server# cat sip.conf+server# cat /​etc/​asterisk/​sip.conf
 </​code><​code>​ </​code><​code>​
 [general] [general]
 ... ...
 tlsenable=yes tlsenable=yes
-tlsbindaddr=0.0.0.0:​5061+;tlsbindaddr=0.0.0.0:​5061
 tlscertfile=/​etc/​asterisk/​server.crtkey tlscertfile=/​etc/​asterisk/​server.crtkey
 ; tlscafile=/​var/​www/​html/​ca.crt ;need if use clietns certs ; tlscafile=/​var/​www/​html/​ca.crt ;need if use clietns certs
Строка 2548: Строка 3031:
  
 <​code>​ <​code>​
-# cat sip.conf+# cat /​etc/​asterisk/​sip.conf
 </​code><​code>​ </​code><​code>​
 [general] [general]
Строка 2562: Строка 3045:
 server# echo -n "​402:​corp:​tpassword402"​ | md5sum server# echo -n "​402:​corp:​tpassword402"​ | md5sum
  
-server# cat sip.conf+server# cat /​etc/​asterisk/​sip.conf
 </​code><​code>​ </​code><​code>​
 [general] [general]
Строка 2584: Строка 3067:
   * [[http://​vinogradov.iptel.od.ua/​ustanovka-webrtc-klienta-na-asterisk-na-primere-sipml5/​|Установка WebRTC клиента на Asterisk на примере SipML5]]   * [[http://​vinogradov.iptel.od.ua/​ustanovka-webrtc-klienta-na-asterisk-na-primere-sipml5/​|Установка WebRTC клиента на Asterisk на примере SipML5]]
   * [[https://​github.com/​paneru-rajan/​asterisk-sipml5|Sipml5 with Asterisk]]   * [[https://​github.com/​paneru-rajan/​asterisk-sipml5|Sipml5 with Asterisk]]
 +  * [[https://​habr.com/​post/​144293/​|SIPML5 — SIP клиент для браузера на базе WebRTC]]
 +  * [[https://​habr.com/​post/​236291/​|Установка и настройка Asterisk для работы с WebRTC]]
 +  * [[https://​wiki.asterisk.org/​wiki/​display/​AST/​WebRTC+tutorial+using+SIPML5]]
 +  * [[https://​voxlink.ru/​kb/​asterisk-configuration/​nastrojka-webrtc-v-asterisk-13/​|Настройка WebRTC в Asterisk 13]]
  
   * !!! Заработало в Firefox   * !!! Заработало в Firefox
- 
 ==== Настройка сервера ==== ==== Настройка сервера ====
  
Строка 2629: Строка 3115:
 ==== Настройка клиента sipml5 ==== ==== Настройка клиента sipml5 ====
  
-  * [[https://www.doubango.org/sipml5/|World'​s first HTML5 SIP client]]+  * [[https://github.com/DoubangoTelecom/sipml5|DoubangoTelecom/​sipml5]]
  
 <​code>​ <​code>​
Строка 2659: Строка 3145:
 ==== Распознавание речи в Asterisk с использованием Yandex SpeechKit HTTP API ==== ==== Распознавание речи в Asterisk с использованием Yandex SpeechKit HTTP API ====
  
-<​code>​ +  * [[https://​habr.com/​post/​225179/​|Распознавание речи в Asterisk с использованием Yandex SpeechKit HTTP API]]
-https://​habr.com/​post/​225179/ ​+
  
-key=f609cf87-d8a9-48c3-b11b-e20054ec3bb3 +  * [[Голосовые сервисы помогут голосовой почте]]
- +
-Можно использовать для Raspberry -  arecord aplay  +
-plughw:1,0 - где 1 микрофон USB камеры - видно в cat /​proc/​asound/​cards +
- +
-#​!/​usr/​bin/​php +
-<?php +
-system("​arecord --buffer-time=1000000 -f dat -r 16000 -d 4 -D plughw:1,0 send.wav"​);​ +
- +
-///skip +
-?> +
- +
-Ок. +
-Работает распознавание ​одной строкой из шела, после записи в файл: +
- +
-curl "​asr.yandex.net/​asr_xml?​key=f609cf87-d8a9-48c3-b11b-e20054ec3bb3&​uuid=01ae13cb744628b58fb536d496daa177&​topic=notes&​lang=ru-RU"​ -H "​Content-Type:​ audio/​x-wav"​ --data-binary "​@test.waw"​ +
- +
-Получаем текст, который нужно распарсить,​ сравнить с базой и выполнить скрипт:​ +
- +
-<?xml version="​1.0"​ encoding="​utf-8"?>​ +
-<​recognitionResults success="​1">​ +
-        <variant confidence="​0">​раз раз раз раз раз</​variant>​ +
-</​recognitionResults>​ +
- +
-Михаил Калинин. +
-</​code>​+
 ==== Принудительный провижининг ==== ==== Принудительный провижининг ====
 <​code>​ <​code>​
Строка 2865: Строка 3325:
 server:~# /​usr/​local/​asterisk/​sbin/​asterisk -rvvvvvv server:~# /​usr/​local/​asterisk/​sbin/​asterisk -rvvvvvv
 </​code>​ </​code>​
-==== Преобразование mp3 файлов в формат Asterisk ==== 
-<​code>​ 
-# lame --decode Knockin_on_Heavens_Door.mp3 
- 
-# sox -V Knockin_on_Heavens_Door.mp3.wav -r 8000 -c 1 Knockin_on_Heavens_Door.mp3.raw 
- 
-# cp Knockin_on_Heavens_Door.mp3.raw /​var/​lib/​asterisk/​moh/​ 
- 
-# cp Knockin_on_Heavens_Door.mp3.raw /​usr/​local/​share/​asterisk/​moh/​ 
- 
-# cat musiconhold.conf 
-</​code><​code>​ 
-... 
-[default] 
-mode=files 
-directory=moh 
-... 
-</​code><​code>​ 
-# cat extensions.conf 
-</​code><​code>​ 
-... 
-exten => 306,​1,​Answer 
-exten => 306,​2,​MusicOnHold() 
-... 
-</​code>​ 
- 
- 
  
сервис_asterisk.1569309040.txt.gz · Последние изменения: 2019/09/24 10:10 — val