Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия Следующая версия Следующая версия справа и слева | ||
сервис_asterisk [2019/06/28 16:40] val [Интеграция с Microsoft AD и LDAP] |
сервис_asterisk [2019/10/22 10:20] val [Реализация с использованием стандартного языка описания диалплана] |
||
---|---|---|---|
Строка 114: | Строка 114: | ||
* [[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: | Строка 135: | ||
</code> | </code> | ||
- | === Настройка точки подключения телефона === | + | === Настройка PJSIP точки подключения телефона === |
Базовый вариант | Базовый вариант | ||
Строка 153: | Строка 153: | ||
;callerid=Ivan I. Ivanov<401> | ;callerid=Ivan I. Ivanov<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: | Строка 176: | ||
!!! Изменение отдельных параметров требует либо удаление/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: | Строка 188: | ||
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: | Строка 200: | ||
... | ... | ||
[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: | Строка 226: | ||
[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: | Строка 353: | ||
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> | ||
===== Управление контекстами ===== | ===== Управление контекстами ===== | ||
Строка 1297: | Строка 1301: | ||
</code> | </code> | ||
- | ==== Установка из пакетов (Debian 9) ==== | + | ==== Установка из пакетов ==== |
<code> | <code> | ||
Строка 1323: | Строка 1327: | ||
server# cat asterisk.conf | server# cat asterisk.conf | ||
</code><code> | </code><code> | ||
+ | ... | ||
+ | [options] | ||
... | ... | ||
defaultlanguage = ru | defaultlanguage = ru | ||
Строка 1419: | Строка 1425: | ||
* [[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: | Строка 1446: | ||
==== Отладка ==== | ==== Отладка ==== | ||
<code> | <code> | ||
- | server# asterisk -x "confbridge list 1" | + | server# asterisk -x "confbridge list 601" |
... | ... | ||
</code> | </code> | ||
Строка 1453: | Строка 1460: | ||
<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), затем вызов абонента | ||
Строка 1533: | Строка 1540: | ||
exten => 302,1,Authenticate(1234) | exten => 302,1,Authenticate(1234) | ||
exten => 302,n,Playback(beep) | exten => 302,n,Playback(beep) | ||
- | exten => 302,n,Record(recordings/greeting:alaw) | + | exten => 302,n,Record(recordings/greeting.alaw,,,xk) |
exten => 302,n,Hangup() | exten => 302,n,Hangup() | ||
Строка 1575: | Строка 1582: | ||
==== Реализация с использованием 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> | ||
Строка 1789: | Строка 1796: | ||
</code> | </code> | ||
- | ==== Связь номеров и учетных записей ==== | + | ==== Использование AstDB для связи номеров и учетных записей ==== |
<code> | <code> | ||
server*CLI> database put num2login 401 user1 | server*CLI> database put num2login 401 user1 | ||
Строка 1809: | Строка 1816: | ||
</code> | </code> | ||
- | ==== Перенаправление звонков ==== | + | ==== Использование AstDB для перенаправления вызовов ==== |
<code> | <code> | ||
Строка 1835: | Строка 1842: | ||
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(CALLMOBILE),Goto(default,${REDIRNUM},1) | + | exten => _4XX,n(CALLMOBILE),Goto(default,${MY-REDIRNUM},1) |
... | ... | ||
[setredirect] | [setredirect] | ||
Строка 1855: | Строка 1862: | ||
* [[http://asterisk.ru/knowledgebase/Asterisk+func+sippeer|Функция SIPPEER()]] | * [[http://asterisk.ru/knowledgebase/Asterisk+func+sippeer|Функция SIPPEER()]] | ||
+ | * curcalls работает только если для канала установлено ограничение на число одновременных вызовов (call-limit) | ||
<code> | <code> | ||
Строка 1864: | Строка 1872: | ||
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: | Строка 1893: | ||
[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: | Строка 1951: | ||
[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: | Строка 1962: | ||
[default] | [default] | ||
... | ... | ||
- | exten => _6XX,1,AgentLogin(${EXTEN:1}) | + | exten => _8XX,1,AgentLogin(${EXTEN}) |
... | ... | ||
[agents] | [agents] | ||
- | exten => _XX,1,AgentRequest(${EXTEN}) | + | exten => _8XX,1,AgentRequest(${EXTEN}) |
same => n,Hangup() | same => n,Hangup() | ||
</code> | </code> | ||
Строка 1971: | Строка 1978: | ||
[queue1] | [queue1] | ||
strategy=rrmemory | strategy=rrmemory | ||
- | member => Local/01@agents | + | member => Local/801@agents |
- | member => Local/02@agents | + | member => Local/802@agents |
- | member => Local/03@agents | + | member => Local/803@agents |
</code><code> | </code><code> | ||
server*CLI> queue show queue1 | server*CLI> queue show queue1 | ||
Строка 2244: | Строка 2251: | ||
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: | Строка 2280: | ||
* Заполняем атрибут Telephone number и переименовываем пользователя указав Full name на русском языке | * Заполняем атрибут Telephone number и переименовываем пользователя указав Full name на русском языке | ||
+ | |||
+ | ==== Выгружаем данные из Microsoft AD через LDAP ==== | ||
<code> | <code> | ||
Строка 2298: | Строка 2311: | ||
404 user4@corp15.un Василий Муркович Кошкин | 404 user4@corp15.un Василий Муркович Кошкин | ||
</code> | </code> | ||
+ | |||
+ | ==== Добавляем исходные данные для Provisioning ==== | ||
* [[Сервис Asterisk#Provisioning]] | * [[Сервис Asterisk#Provisioning]] | ||
+ | |||
+ | ==== Создаем файл конфигурации CHAN SIP ==== | ||
<code> | <code> | ||
Строка 2341: | Строка 2358: | ||
</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 ==== | ||