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

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


сервис_asterisk

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
сервис_asterisk [2019/06/28 16:38]
val [Настройка RES_PJSIP каналов]
сервис_asterisk [2020/01/16 10:52] (текущий)
val [Asterisk AMI]
Строка 25: Строка 25:
  
  
 +===== Удаление =====
 +<​code>​
 +# apt purge asterisk-config asterisk
 +
 +# apt autoremove
 +</​code>​
 ===== Настройка базового функционала IP PBX ===== ===== Настройка базового функционала IP PBX =====
  
Строка 114: Строка 120:
   * [[https://​asterisk-pbx.ru/​wiki/​asterisk/​pjsip|Описание параметров настройки pjsip в Asterisk]]   * [[https://​asterisk-pbx.ru/​wiki/​asterisk/​pjsip|Описание параметров настройки pjsip в Asterisk]]
   * [[http://​voiplab.by/​wiki/​asterisk/​60-novyj-kanalnyj-drajver-chan-pjsip-v-asterisk-13|НОВЫЙ КАНАЛЬНЫЙ ДРАЙВЕР CHAN_PJSIP В ASTERISK 13]]   * [[http://​voiplab.by/​wiki/​asterisk/​60-novyj-kanalnyj-drajver-chan-pjsip-v-asterisk-13|НОВЫЙ КАНАЛЬНЫЙ ДРАЙВЕР CHAN_PJSIP В ASTERISK 13]]
-  * Переменные канала:​ [[https://​asterisk-pbx.ru/wiki/asterisk/func/pjsip_endpoint|function '​PJSIP_ENDPOINT'​]]+  * Переменные канала:​ [[https://wiki.asterisk.org/wiki/display/AST/Asterisk+13+Function_PJSIP_ENDPOINT|function '​PJSIP_ENDPOINT'​]]
   * [[https://​zadarma.com/​ru/​support/​instructions/​asteriskpjsip/​|Пример настройки подключения Asterisk PJSIP к Zadarma]]   * [[https://​zadarma.com/​ru/​support/​instructions/​asteriskpjsip/​|Пример настройки подключения Asterisk PJSIP к Zadarma]]
  
-=== Настройка транспорта ===+=== Настройка ​PJSIP транспорта ===
 <​code>​ <​code>​
 # cat /​etc/​asterisk/​sip.conf # cat /​etc/​asterisk/​sip.conf
Строка 135: Строка 141:
 </​code>​ </​code>​
  
-=== Настройка точки подключения телефона ===+=== Настройка ​PJSIP точки подключения телефона ===
  
 Базовый вариант Базовый вариант
Строка 151: Строка 157:
 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
 ;​rtp_symmetric=yes ;​rtp_symmetric=yes
 ;​force_rport=yes ;​force_rport=yes
Строка 175: Строка 182:
 !!! Изменение отдельных параметров требует либо удаление/​reload/​добавление/​reload всего описания точки подключения,​ либо перезапуска asterisk !!! Изменение отдельных параметров требует либо удаление/​reload/​добавление/​reload всего описания точки подключения,​ либо перезапуска asterisk
 <​code>​ <​code>​
-... 
 # cat /​etc/​asterisk/​pjsip_wizard.conf # cat /​etc/​asterisk/​pjsip_wizard.conf
 </​code><​code>​ </​code><​code>​
Строка 188: Строка 194:
 endpoint/​context=default endpoint/​context=default
 ;​endpoint/​set_var=MY-USER-ID=user2@corp13.un ;​endpoint/​set_var=MY-USER-ID=user2@corp13.un
-;​callerid=Petr P. Petrov<​402>​+;endpoint/callerid=Petr P. Petrov<​402>​
 aor/​max_contacts=1 aor/​max_contacts=1
 aor/​remove_existing=yes aor/​remove_existing=yes
-... 
 </​code>​ </​code>​
  
-=== Настройка точки подключения к VoIP провайдеру ===+=== Настройка ​PJSIP точки подключения к VoIP провайдеру ===
  
 <​code>​ <​code>​
Строка 201: Строка 206:
 ... ...
 [voip1_00000X] [voip1_00000X]
-type=registration+type=endpoint
 transport=udp-transport-1 transport=udp-transport-1
 +context=default
 +disallow=all
 +allow=alaw
 outbound_auth=voip1_00000X outbound_auth=voip1_00000X
-server_uri=sip:​voip1.un +aors=voip1_00000X 
-client_uri=sip:00000X@voip1.un +from_user=00000X 
-;retry_interval=10 +from_domain=voip1.un 
-;expiration=10 +;direct_media=no 
-contact_user=voip1_00000X+;rtp_symmetric=yes 
 +;;;​force_rport=yes 
 +;;;​rewrite_contact=yes
  
 [voip1_00000X] [voip1_00000X]
Строка 222: Строка 232:
  
 [voip1_00000X] [voip1_00000X]
-type=endpoint+type=registration
 transport=udp-transport-1 transport=udp-transport-1
-context=default 
-disallow=all 
-allow=alaw 
 outbound_auth=voip1_00000X outbound_auth=voip1_00000X
-aors=voip1_00000X +server_uri=sip:​voip1.un 
-from_user=00000X +client_uri=sip:00000X@voip1.un 
-from_domain=voip1.un +;;;​retry_interval=10 
-;direct_media=no +;;;​expiration=10 
-;rtp_symmetric=yes +contact_user=voip1_00000X
-;force_rport=yes +
-;​rewrite_contact=yes+
  
 [voip1_00000X] [voip1_00000X]
Строка 354: Строка 359:
 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>​
 ===== Управление контекстами ===== ===== Управление контекстами =====
Строка 402: Строка 412:
 ... ...
 exten => _8XXXXXXXXXX,​1,​Dial(SIP/​voip1_00000X/​${EXTEN}) exten => _8XXXXXXXXXX,​1,​Dial(SIP/​voip1_00000X/​${EXTEN})
 +
 +;exten => _.XXXXXXXXXX,​1,​Dial(SIP/​voip1_00000X/​8${EXTEN:​-10})
 +
 ;exten => _8XXXXXXXXXX,​1,​Dial(SIP/​${EXTEN}@voip1_00000X) ;exten => _8XXXXXXXXXX,​1,​Dial(SIP/​${EXTEN}@voip1_00000X)
 ;exten => _8XXXXXXXXXX,​1,​Dial(PJSIP/​${EXTEN}@voip1_00000X) ​ ;PJSIP только так ;exten => _8XXXXXXXXXX,​1,​Dial(PJSIP/​${EXTEN}@voip1_00000X) ​ ;PJSIP только так
Строка 599: Строка 612:
 # 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 ==== 
  
 === Настройка местного времени === === Настройка местного времени ===
Строка 612: Строка 623:
 </​code>​ </​code>​
  
-=== Добавление IP адреса ===+==== Добавление IP адреса ​====
  
 <​code>​ <​code>​
Строка 618: Строка 629:
 exten => _4XX,​n,​Dial(SIP/​${EXTEN},,​Tt) exten => _4XX,​n,​Dial(SIP/​${EXTEN},,​Tt)
 </​code>​ </​code>​
 +
 +==== Использование файлов для хранения CDR ====
  
 === Просмотр === === Просмотр ===
Строка 737: Строка 750:
 </​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>​
Строка 755: Строка 771:
 ===== 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]]
Строка 763: Строка 1097:
  
 <​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` (
Строка 860: Строка 1194:
 ) ENGINE=MyISAM;​ ) ENGINE=MyISAM;​
 </​code><​code>​ </​code><​code>​
-# mysql asterisk < sipfriends.sql+# mysql asterisk < chan_sip_realtime.sql
  
 # mysql asterisk # mysql asterisk
Строка 892: Строка 1226:
 ... ...
 </​code>​ </​code>​
- 
 ===== Asterisk MySQL ===== ===== Asterisk MySQL =====
  
Строка 1006: Строка 1339:
 [asterisk] [asterisk]
 enabled => yes enabled => yes
-dsn => asterisk_dsn+dsn => asterisk
 pre-connect => yes pre-connect => yes
 </​code><​code>​ </​code><​code>​
Строка 1038: Строка 1371:
  
 <​code>​ <​code>​
-# cat modules.conf+# cat /​etc/​asterisk/​modules.conf
 </​code><​code>​ </​code><​code>​
 ... ...
Строка 1044: Строка 1377:
 ... ...
 </​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>​
  
Строка 1056: Строка 1396:
 </​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}' ​ORDER BY calldate DESC LIMIT 1;
 </​code><​code>​ </​code><​code>​
 # cat extensions.conf # cat 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})
 ... ...
 </​code>​ </​code>​
Строка 1297: Строка 1639:
 </​code>​ </​code>​
  
-==== Установка из пакетов ​(Debian 9) ====+==== Установка из пакетов ====
  
 <​code>​ <​code>​
Строка 1309: Строка 1651:
 ==== Установка с сайта ==== ==== Установка с сайта ====
 <​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/
Строка 1323: Строка 1665:
 server# cat asterisk.conf server# cat asterisk.conf
 </​code><​code>​ </​code><​code>​
 +...
 +[options]
 ... ...
 defaultlanguage = ru defaultlanguage = ru
Строка 1355: Строка 1699:
 </​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 => ,,
Строка 1387: Строка 1747:
 <​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)
Строка 1419: Строка 1778:
  
   * [[http://​voip.rus.net/​tiki-index.php?​page=Asterisk+ConfBridge|Приложение ConfBridge]]   * [[http://​voip.rus.net/​tiki-index.php?​page=Asterisk+ConfBridge|Приложение ConfBridge]]
 +  * [[https://​asterisk-pbx.ru/​wiki/​asterisk/​app/​originate|Asterisk app: Originate]]
  
 ==== Настройка ==== ==== Настройка ====
Строка 1439: Строка 1799:
 ==== Отладка ==== ==== Отладка ====
 <​code>​ <​code>​
-server# asterisk -x "​confbridge list 1"+server# asterisk -x "​confbridge list 601"
 ... ...
 </​code>​ </​code>​
Строка 1453: Строка 1813:
    
 <​code>​ <​code>​
-# asterisk -x "​channel originate SIP/402 extension ​399@default"​+# asterisk -x "​channel originate SIP/403 extension ​301@default"​
  
 ; сначала вызов телефона оператора,​ затем вызов абонента ; сначала вызов телефона оператора,​ затем вызов абонента
-server*CLI>​ channel originate SIP/402 extension 89161234567@default+server*CLI>​ channel originate SIP/403 extension 89161234567@default
  
 ; сначала вызов абонента,​ затем телефона оператора ​ ; сначала вызов абонента,​ затем телефона оператора ​
-server*CLI>​ channel originate SIP/​voip1_00000X/​89161234567 extension ​402@default+server*CLI>​ channel originate SIP/​voip1_00000X/​89161234567 extension ​403@default
  
 ; сначала вызов обработчика входящих вызовов (секретарь,​ IVR, Queue), затем вызов абонента ; сначала вызов обработчика входящих вызовов (секретарь,​ 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><​code>​
 +# cat /​usr/​share/​originate_cli.sh
 +</​code><​code>​
 +#!/bin/sh
 +
 +asterisk -x "​channel originate SIP/$1 extension $2@default"​
 </​code>​ </​code>​
- 
- 
- 
- 
 ==== С использованием Call файлов ==== ==== С использованием Call файлов ====
  
Строка 1473: Строка 1835:
  
 <​code>​ <​code>​
-server# cat /usr/share/403.call+server# cat /usr/share/401.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 /usr/share/403.call
 </​code><​code>​ </​code><​code>​
-Channel: sip/401+Channel: sip/403 
 +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 /​usr/​share/​start_conference.sh
Строка 1491: Строка 1853:
 #!/bin/sh #!/bin/sh
  
-cp /usr/share/4* /tmp +cp /​usr/​share/​4* /​var/​spool/​asterisk/​outgoing/​
-chown asterisk /tmp/4* +
-mv /tmp/4* /​var/​spool/​asterisk/​outgoing/​+
 </​code><​code>​ </​code><​code>​
 server# chmod +x /​usr/​share/​start_conference.sh server# chmod +x /​usr/​share/​start_conference.sh
Строка 1499: Строка 1859:
 server# /​usr/​share/​start_conference.sh server# /​usr/​share/​start_conference.sh
 </​code>​ </​code>​
 +<​code>​
 +# cat /​usr/​share/​originate_call_file.sh
 +</​code><​code>​
 +#!/bin/sh
  
 +cat <<EOF >/​var/​spool/​asterisk/​outgoing/​$1$2$3 
 +Channel: SIP/$1 
 +Extension: $2 
 +Context: default 
 +CallerId: $2<​$3>​ 
 +EOF 
 +</​code>​
 ==== Пример с использованием Asterisk AMI ==== ==== Пример с использованием Asterisk AMI ====
  
Строка 1521: Строка 1891:
   * [[https://​www.voip-info.org/​wiki/​view/​Asterisk+standard+extensions|Asterisk standard extensions]]   * [[https://​www.voip-info.org/​wiki/​view/​Asterisk+standard+extensions|Asterisk standard extensions]]
  
-**!!! После записи IVR нажмите #** 
  
  
Строка 1532: Строка 1901:
 ... ...
 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()
Строка 1548: Строка 1917:
 ... ...
 [menu] [menu]
-exten => s,​1,​Background(recordings/​greeting)+exten => s,​1,​Background(recordings/​speech)
 exten => s,​2,​Goto(s,​1) exten => s,​2,​Goto(s,​1)
    
Строка 1575: Строка 1944:
 ==== Реализация с использованием AEL ==== ==== Реализация с использованием AEL ====
  
-[[http://​voip.rus.net/​tiki-index.php?​page=Asterisk+AEL]]+  * [[http://​voip.rus.net/​tiki-index.php?​page=Asterisk+AEL|The Asterisk Extension Language (Язык Расширения Астериска)]]
  
 <​code>​ <​code>​
Строка 1592: Строка 1961:
   302 => {   302 => {
     Answer();     Answer();
-    Record(recordings/​greeting:alaw);+    Record(recordings/​speech:alaw);
     Hangup();     Hangup();
   }   }
Строка 1598: Строка 1967:
     Answer();     Answer();
     Playback(beep);​     Playback(beep);​
-    Playback(recordings/​greeting);+    Playback(recordings/​speech);
     Playback(beep);​     Playback(beep);​
     Hangup();     Hangup();
Строка 1610: Строка 1979:
   s => {   s => {
     begin:     begin:
-      Background(recordings/​greeting);+      Background(recordings/​speech);
       goto begin;       goto begin;
   }   }
Строка 1741: Строка 2110:
 exten => 303,​n,​Hangup() exten => 303,​n,​Hangup()
  
-exten => 304,​1,​Answer() +;exten => 304,​1,​Answer() 
-exten => 304,​n,​Set(foo=${FILE(/​tmp/​text.txt)}) +;exten => 304,​n,​Set(foo=${FILE(/​tmp/​text.txt)}) 
-exten => 304,​n,​Festival(${foo}) +;exten => 304,​n,​Festival(${foo}) 
-exten => 304,​n,​Hangup()+;exten => 304,​n,​Hangup() 
 + 
 +;exten => 305,​1,​Answer() 
 +;exten => 305,​n,​Set(foo=${SHELL(uptime | sed -E 's/.* (.*), .*, .*$/​\1/'​ | sed 's/,/ запятая /​g'​)}) 
 +;exten => 305,​n,​Festival(${foo}) 
 +;exten => 305,n,Hangup()
  
-exten => 305,​1,​Answer() 
-;​linux ​  exten => 305,​n,​Set(foo=${SHELL(uptime | sed -E 's/.* (.*), .*, .*$/​\1/'​ | sed 's/,/ запятая /g')}) 
-exten => 305,​n,​Festival(${foo}) 
-exten => 305,​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>​
 ===== Переадресация вызовов на внешний номер ===== ===== Переадресация вызовов на внешний номер =====
Строка 1789: Строка 2168:
 </​code>​ </​code>​
  
-==== Связь номеров и учетных записей ====+==== Использование AstDB для связи номеров и учетных записей ====
 <​code>​ <​code>​
 server*CLI>​ database put num2login 401 user1 server*CLI>​ database put num2login 401 user1
Строка 1809: Строка 2188:
 </​code>​ </​code>​
  
-==== Перенаправление звонков ====+==== Использование AstDB для перенаправления вызовов ====
  
 <​code>​ <​code>​
Строка 1835: Строка 2214:
 exten => _4XX,​1,​Dial(SIP/​${EXTEN},​10,​t) exten => _4XX,​1,​Dial(SIP/​${EXTEN},​10,​t)
  
-exten => _4XX,​n,​Set(REDIRNUM=${DB(redirect/​${EXTEN})}) +exten => _4XX,n,Set(MY-REDIRNUM=${DB(redirect/​${EXTEN})}) 
-exten => _4XX,​n,​GotoIf($[${LEN(${REDIRNUM})} > 0]?​CALLMOBILE)+exten => _4XX,​n,​GotoIf($[${LEN(${MY-REDIRNUM})} > 0]?​CALLMOBILE) 
 +;​попробовать exten => _4XX,​n,​GotoIf(${MY-REDIRNUM}?​CALLMOBILE)
 ... ...
-exten => _4XX,​n(CALLMOBILE),​Goto(default,​${REDIRNUM},​1)+exten => _4XX,​n(CALLMOBILE),​Goto(default,​${MY-REDIRNUM},​1)
 ... ...
 [setredirect] [setredirect]
Строка 1855: Строка 2235:
  
   * [[http://​asterisk.ru/​knowledgebase/​Asterisk+func+sippeer|Функция SIPPEER()]]   * [[http://​asterisk.ru/​knowledgebase/​Asterisk+func+sippeer|Функция SIPPEER()]]
 +  * curcalls работает только если для канала установлено ограничение на число одновременных вызовов (call-limit)
  
 <​code>​ <​code>​
Строка 1864: Строка 2245:
 exten => _4XX,​n,​Dial(SIP/​${EXTEN},,​tTm(${MY-CLASS-MOH})) exten => _4XX,​n,​Dial(SIP/​${EXTEN},,​tTm(${MY-CLASS-MOH}))
 </​code>​ </​code>​
- 
 ==== С использованием GROUP_COUNT ==== ==== С использованием GROUP_COUNT ====
  
Строка 1886: Строка 2266:
 [default] [default]
  
-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})
Строка 1944: Строка 2324:
 [general] [general]
  
-[01]+[801]
 fullname=Ivan Ivanovitch Ivanov fullname=Ivan Ivanovitch Ivanov
-[02]+[802]
 fullname=Petr Petrovitch Petrov fullname=Petr Petrovitch Petrov
-[03]+[803]
 fullname=Your name fullname=Your name
 </​code><​code>​ </​code><​code>​
Строка 1955: Строка 2335:
 [default] [default]
 ... ...
-exten => _6XX,​1,​AgentLogin(${EXTEN:1})+exten => _6XX,​1,​AgentLogin(${EXTEN})
 ... ...
 [agents] [agents]
-exten => _XX,​1,​AgentRequest(${EXTEN})+exten => _6XX,​1,​AgentRequest(${EXTEN})
      same => n,Hangup()      same => n,Hangup()
 </​code>​ </​code>​
Строка 1971: Строка 2351:
 [queue1] [queue1]
 strategy=rrmemory strategy=rrmemory
-member => Local/01@agents +member => Local/601@agents 
-member => Local/02@agents +member => Local/602@agents 
-member => Local/03@agents+member => Local/603@agents
 </​code><​code>​ </​code><​code>​
 server*CLI>​ queue show queue1 server*CLI>​ queue show queue1
Строка 2001: Строка 2381:
   * !!! Название функции только ЗАГЛАВНЫМИ буквами   * !!! Название функции только ЗАГЛАВНЫМИ буквами
   * [[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#​Управление кодировкой]]
  
 <​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>​
Строка 2086: Строка 2484:
   * [[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 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
  
Строка 2119: Строка 2518:
  
 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 ====
  
Строка 2150: Строка 2548:
 enabled = yes enabled = yes
 pretty = yes pretty = yes
-;allowed_origins = http://​ari.asterisk.org +allowed_origins = *
-;​allowed_origins = chrome-extension://​hlnmjkbpmnbgeondjeceaomhafdacmlj+
  
 [asterisk] [asterisk]
Строка 2164: Строка 2561:
  
 <​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>​
  
Строка 2172: Строка 2569:
  
 <​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
Строка 2228: Строка 2625:
 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
Строка 2244: Строка 2642:
 exten => 306,​n,​Hangup() exten => 306,​n,​Hangup()
 ... ...
-exten => _4XX,​1,​Set(MY-CALLED-USER-ID=${SIPPEER(${EXTEN},​chanvar[MY-USER-ID])}) + 
-exten => _4XX,n,NoOp(MY-CALLED-USER-ID ​is ${MY-CALLED-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,​n,​Set(MY-CALLED-USER-STATUS=${JABBER_STATUS(aster,​${MY-CALLED-USER-ID}/​Spark)}) exten => _4XX,​n,​Set(MY-CALLED-USER-STATUS=${JABBER_STATUS(aster,​${MY-CALLED-USER-ID}/​Spark)})
-exten => _4XX,​n,​NoOp(MY-CALLED-USER-STATUS is ${MY-CALLED-USER-STATUS}) 
  
-exten => _4XX,​n,​GotoIf($[${MY-CALLED-USER-STATUS} > 2]?end)+exten => _4XX,​n,​GotoIf($[${MY-CALLED-USER-STATUS} > 2]?busy)
  
 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(end),Hangup()+;exten => _4XX,n,Dial(SIP/​${EXTEN}) 
 +;exten => _4XX,​n,​Dial(PJSIP/​${EXTEN}) 
 +exten => _4XX,​n,​Hangup() 
 + 
 +exten => _4XX,​n(busy),​Playback(tt-allbusy) 
 +exten => _4XX,n,Hangup()
 ... ...
 </​code>​ </​code>​
Строка 2269: Строка 2671:
  
   * Заполняем атрибут Telephone number и переименовываем пользователя указав Full name на русском языке   * Заполняем атрибут Telephone number и переименовываем пользователя указав Full name на русском языке
 +
 +==== Выгружаем данные из Microsoft AD через LDAP ====
  
 <​code>​ <​code>​
Строка 2279: Строка 2683:
 IFS=' ' IFS=' '
  
-LDAPTLS_REQCERT=never ​ldapsearch -x -D "​cn=Administrator,​cn=Users,​dc=corp15,​dc=un"​ -w '​Pa$$w0rd'​ -H ldaps://​ad.corp15.un -b "​dc=corp15,​dc=un"​ "​(telephoneNumber=4*)"​ cn telephoneNumber mail | perl -p00e '​s/​\r?​\n //g'|+ldapsearch -x -D "​cn=Administrator,​cn=Users,​dc=corp15,​dc=un"​ -w '​Pa$$w0rd'​ -H ldap://​ad.corp15.un -b "​dc=corp15,​dc=un"​ "​(telephoneNumber=4*)"​ cn telephoneNumber mail 
 +| perl -p00e '​s/​\r?​\n //g' |
 while read s while read s
 do do
Строка 2297: Строка 2702:
 404 user4@corp15.un Василий Муркович Кошкин 404 user4@corp15.un Василий Муркович Кошкин
 </​code>​ </​code>​
 +
 +==== Добавляем исходные данные для Provisioning ====
  
   * [[Сервис Asterisk#​Provisioning]]   * [[Сервис Asterisk#​Provisioning]]
 +
 +==== Создаем файл конфигурации CHAN SIP ====
  
 <​code>​ <​code>​
Строка 2317: Строка 2726:
         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
Строка 2330: Строка 2740:
 secret=tpassword401 secret=tpassword401
 host=dynamic host=dynamic
 +mailbox=401@corp15
 ... ...
 </​code><​code>​ </​code><​code>​
Строка 2339: Строка 2750:
 ... ...
 </​code>​ </​code>​
 +==== Создаем файл конфигурации PJSIP ====
  
 +<​code>​
 +# cat create_ast_pjsip_wizard.sh
 +</​code><​code>​
 +#!/bin/sh
 +
 +IFS=' '
 +
 +cat $1|
 +while read exten mail name
 +do
 +        password=`cat $2 | grep "​^$exten"​ | cut -d' ' -f2`
 +        echo "​[$exten]"​
 +        echo "​type=wizard"​
 +        echo "​accepts_auth=yes"​
 +        echo "​accepts_registrations=yes"​
 +        echo "​transport=udp-transport-1"​
 +        echo "​inbound_auth/​username=$exten"​
 +        echo "​inbound_auth/​password=$password"​
 +        echo "​endpoint/​allow=alaw"​
 +        echo "​endpoint/​context=default"​
 +        echo "​endpoint/​set_var=MY-USER-ID=$mail"​
 +        echo "​endpoint/​callerid=${name}<​${exten}>"​
 +        echo "​aor/​max_contacts=1"​
 +        echo "​aor/​remove_existing=yes"​
 +        echo
 +done
 +</​code><​code>​
 +# /​root/​create_ast_pjsip_wizard.sh exten_mail_cidname_table.txt exten_secret_proxy_mac_model_table.txt | tee /​etc/​asterisk/​pjsip_wizard.conf
 +
 +# service asterisk restart
 +</​code>​
 ==== Использование sourceforge asterisk AD perl scripts ==== ==== Использование sourceforge asterisk AD perl scripts ====
  
Строка 2395: Строка 2838:
 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
Строка 2538: Строка 2983:
   * [[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
- 
 ==== Настройка сервера ==== ==== Настройка сервера ====
  
Строка 2613: Строка 3061:
 ==== Распознавание речи в 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>​
сервис_asterisk.1561729139.txt.gz · Последние изменения: 2019/06/28 16:38 — val