This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
сервис_asterisk [2025/07/22 17:03] val [Запись по желанию абонента] |
сервис_asterisk [2025/08/21 16:14] (current) val [Добавление своих классов] |
||
---|---|---|---|
Line 134: | Line 134: | ||
* Переменные канала: [[https://wiki.asterisk.org/wiki/display/AST/Asterisk+13+Function_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]] | ||
+ | * [[https://voxlink.ru/kb/asterisk-configuration/opisanie-parametrov-konfiguracii-pjsip-v-asterisk-s-primerami/|Описание параметров конфигурации PJSIP в Asterisk с примерами]] | ||
=== Настройка PJSIP транспорта === | === Настройка PJSIP транспорта === | ||
Line 140: | Line 141: | ||
</code><code> | </code><code> | ||
[general] | [general] | ||
- | udpbindaddr=0.0.0.0:5061 | + | udpbindaddr=0.0.0.0:6050 |
</code><code> | </code><code> | ||
# cat /etc/asterisk/pjsip.conf | # cat /etc/asterisk/pjsip.conf | ||
Line 152: | Line 153: | ||
=== Настройка PJSIP точки подключения телефона === | === Настройка PJSIP точки подключения телефона === | ||
- | Базовый вариант | + | == Базовый вариант == |
<code> | <code> | ||
Line 178: | Line 179: | ||
max_contacts=1 | max_contacts=1 | ||
remove_existing=yes | remove_existing=yes | ||
+ | mailboxes=401@corpX | ||
;qualify_frequency=60 | ;qualify_frequency=60 | ||
+ | |||
[401] | [401] | ||
Line 188: | Line 191: | ||
</code> | </code> | ||
- | Wizard вариант | + | == Вариант с шаблонами == |
+ | <code> | ||
+ | # cat /etc/asterisk/pjsip.conf | ||
+ | </code><code> | ||
+ | ... | ||
+ | [endpoint-office](!) | ||
+ | type=endpoint | ||
+ | transport=udp-transport-1 | ||
+ | context=default | ||
+ | disallow=all | ||
+ | allow=alaw | ||
+ | [aor-reg](!) | ||
+ | type=aor | ||
+ | max_contacts=1 | ||
+ | remove_existing=yes | ||
+ | [auth-userpass](!) | ||
+ | type = auth | ||
+ | auth_type = userpass | ||
+ | |||
+ | [401](endpoint-office) | ||
+ | aors=401 | ||
+ | auth=401 | ||
+ | callerid=Иван Иванов<401> | ||
+ | [401](aor-reg) | ||
+ | mailboxes=401@corp13 | ||
+ | [401](auth-userpass) | ||
+ | password=tpassword401 | ||
+ | username=401 | ||
+ | |||
+ | [403](endpoint-office) | ||
+ | aors=403 | ||
+ | auth=403 | ||
+ | callerid=Вячеслав Лохтуров<403> | ||
+ | [403](aor-reg) | ||
+ | mailboxes=403@corp13 | ||
+ | [403](auth-userpass) | ||
+ | password=tpassword403 | ||
+ | username=403 | ||
+ | ... | ||
+ | </code> | ||
+ | |||
+ | == Wizard вариант == | ||
!!! Изменение отдельных параметров требует либо удаление/reload/добавление/reload всего описания точки подключения, либо перезапуска asterisk | !!! Изменение отдельных параметров требует либо удаление/reload/добавление/reload всего описания точки подключения, либо перезапуска asterisk | ||
Line 834: | Line 878: | ||
exten => _4XX,1,GoSub(sub-monitor,s,1) | exten => _4XX,1,GoSub(sub-monitor,s,1) | ||
exten => _4XX,n,Dial(SIP/${EXTEN}) | exten => _4XX,n,Dial(SIP/${EXTEN}) | ||
+ | ... | ||
+ | exten => _8XXXXXXXXXX,1,GoSub(sub-monitor,s,1) | ||
+ | exten => _8XXXXXXXXXX,n,Dial(...) | ||
... | ... | ||
;[macro-monitor] | ;[macro-monitor] | ||
Line 887: | Line 934: | ||
echo " <td class=\"record_col\"><a href=\"download.php?audio=$recorded_file.$system_audio_format\" title=\"Listen to call recording\"><img src=\"templates/images/sound.png\" alt=\"Call recording\" /></a><audio controls><source src=\"download.php?audio=$recorded_file.$system_audio_format\"></audio></td>\n"; | echo " <td class=\"record_col\"><a href=\"download.php?audio=$recorded_file.$system_audio_format\" title=\"Listen to call recording\"><img src=\"templates/images/sound.png\" alt=\"Call recording\" /></a><audio controls><source src=\"download.php?audio=$recorded_file.$system_audio_format\"></audio></td>\n"; | ||
+ | |||
</code> | </code> | ||
===== Asterisk realtime ===== | ===== Asterisk realtime ===== | ||
Line 1521: | Line 1569: | ||
dsn=asterisk | dsn=asterisk | ||
readsql=SELECT dstchannel FROM cdr WHERE src='${ARG1}' AND disposition='ANSWERED' ORDER BY calldate DESC LIMIT 1; | readsql=SELECT dstchannel FROM cdr WHERE src='${ARG1}' AND disposition='ANSWERED' ORDER BY calldate DESC LIMIT 1; | ||
+ | |||
+ | |||
</code><code> | </code><code> | ||
# cat /etc/asterisk/extensions.conf | # cat /etc/asterisk/extensions.conf | ||
Line 1785: | Line 1835: | ||
;;;debian# service asterisk restart | ;;;debian# service asterisk restart | ||
;imapserver=server.corpX.un | ;imapserver=server.corpX.un | ||
+ | ;imapserver=localhost | ||
+ | ;imapflags=notls | ||
;imapfolder=INBOX | ;imapfolder=INBOX | ||
+ | |||
;;;For SMTP | ;;;For SMTP | ||
Line 1890: | Line 1943: | ||
server*CLI> channel originate SIP/403 extension 89161234567@default | server*CLI> channel originate SIP/403 extension 89161234567@default | ||
- | ; Сначала вызов абонента, затем обработчика (например - IVR) | + | ; Сначала вызов абонента, затем обработчика, например - IVR (не работает с текущим провайдером, |
+ | ; можно использовать call файлы, или AMI/ARI, где есть возможность указать CallerId) | ||
server*CLI> channel originate SIP/voip1_00000X/89161234567 extension voip1_00000X@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 | server*CLI> channel originate PJSIP/89161234567@voip1_00000X extension voip1_00000X@default | ||
- | ; сначала вызов обработчика (например - все телефоны в офисе или оператор/агент из членов очереди), затем вызов абонента | + | ; сначала вызов обработчика (например - все телефоны в офисе или оператор/агент из членов очереди), |
+ | ; затем вызов абонента (работает с текущим провайдером) | ||
server*CLI> channel originate Local/voip1_00000X@default extension 89161234567@default | server*CLI> channel originate Local/voip1_00000X@default extension 89161234567@default | ||
</code><code> | </code><code> | ||
Line 1923: | Line 1978: | ||
server# cp call.txt /var/spool/asterisk/outgoing/ | server# cp call.txt /var/spool/asterisk/outgoing/ | ||
- | server# ls /var/spool/asterisk/outgoing_done | + | debian11# ls /var/spool/asterisk/outgoing_done |
</code><code> | </code><code> | ||
# cat /usr/share/originate_call_file.sh | # cat /usr/share/originate_call_file.sh | ||
Line 2075: | Line 2130: | ||
... | ... | ||
exten => _5XX/402,1,ChanSpy(SIP/4${EXTEN:1},qw) | exten => _5XX/402,1,ChanSpy(SIP/4${EXTEN:1},qw) | ||
+ | |||
+ | ;exten => _5XX,1,Verbose(1,Значение CALLERID равно ${CALLERID(number)}) | ||
+ | ;exten => _5XX,n,ChanSpy(SIP/4${EXTEN:1},qw) | ||
... | ... | ||
</code> | </code> | ||
Line 2196: | Line 2254: | ||
</code><code> | </code><code> | ||
... | ... | ||
- | exten => voip1_00000X,1,Dial(SIP/4NN,,m(incoming)t) | + | exten => voip1_00000X,1,Answer() |
+ | exten => voip1_00000X,n,Dial(SIP/4NN,,m(incoming)t) | ||
</code> | </code> | ||
===== Синтез речи с использованием пакета Festival ===== | ===== Синтез речи с использованием пакета Festival ===== | ||
Line 2237: | Line 2296: | ||
;exten => _4XX,n,Set(MY-CALLED-USER-NAME=${ODBC_SIPFRIENDS_BY_NAME(${EXTEN})}) | ;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=${SIPPEER(${EXTEN},callerid_name)}) | ||
- | ;exten => _4XX,n,Set(MY-CALLED-USER-NAME=${PJSIP_ENDPOINT(${EXTEN},callerid)}) | + | ;exten => _4XX,n,Set(MY-CALLED-USER-NAME=${CUT(PJSIP_ENDPOINT(${EXTEN},callerid),\",2)}) |
exten => _4XX,n,Festival(${MY-CALLED-USER-NAME} не может ответить) | exten => _4XX,n,Festival(${MY-CALLED-USER-NAME} не может ответить) | ||
Line 2434: | Line 2493: | ||
;timeout=10 | ;timeout=10 | ||
- | ;для демонстрации на многоканальном телефоне установить call-limit=1 | + | ;member => SIP/403 |
- | ;member => SIP/403 ; (можно занять звонком на 311) | + | |
;member => SIP/user1@mailcgp | ;member => SIP/user1@mailcgp | ||
Line 2535: | Line 2593: | ||
# cat /var/www/html/asterisk/addrbook.txt | # cat /var/www/html/asterisk/addrbook.txt | ||
</code><code> | </code><code> | ||
- | Вячеслав Лохтуров<+74951234569> | + | Вячеслав Лохтуров<84951234569> |
- | Вячеслав Лохтуров<+74951234560> | + | Вячеслав Лохтуров<84951234560> |
- | Ваше ФИО<+7ВАШМОБИЛЬНЫЙ> | + | Ваше ФИО<8ВАШМОБИЛЬНЫЙ> |
</code><code> | </code><code> | ||
# cat /usr/local/bin/get-customer-callerid-all.sh | # cat /usr/local/bin/get-customer-callerid-all.sh | ||
Line 2711: | Line 2769: | ||
* [[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]] | ||
+ | * [[https://habr.com/ru/articles/264819/|Asterisk Manager Interface в диалплане]] | ||
* [[https://voxlink.ru/kb/book/interfejs-upravlenija-asterisk-ami/]] | * [[https://voxlink.ru/kb/book/interfejs-upravlenija-asterisk-ami/]] | ||
* Программирование диалогов expect [[Программирование диалогов expect#Asterisk AMI]] | * Программирование диалогов expect [[Программирование диалогов expect#Asterisk AMI]] | ||
Line 2799: | Line 2858: | ||
* [[https://stackoverflow.com/questions/28064526/how-to-get-all-dialer-events-from-asterisk-rest-api-ari|How to get all dialer events from Asterisk REST API (ARI)?]] | * [[https://stackoverflow.com/questions/28064526/how-to-get-all-dialer-events-from-asterisk-rest-api-ari|How to get all dialer events from Asterisk REST API (ARI)?]] | ||
+ | * nodejs | ||
<code> | <code> | ||
- | debian9# curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash - | ||
- | |||
# apt install -y nodejs npm | # apt install -y nodejs npm | ||
Line 2807: | Line 2865: | ||
# wscat -c "ws://localhost:8088/ari/events?api_key=asterisk:asterisk&app=my-first-app" | # wscat -c "ws://localhost:8088/ari/events?api_key=asterisk:asterisk&app=my-first-app" | ||
+ | </code> | ||
+ | |||
+ | * python | ||
+ | <code> | ||
+ | # apt install python3-websocket | ||
+ | |||
+ | # python3 | ||
+ | </code><code> | ||
+ | import websocket | ||
+ | def on_message(wsapp, message): | ||
+ | print(message) | ||
+ | |||
+ | wsapp = websocket.WebSocketApp("ws://localhost:8088/ari/events?api_key=asterisk:asterisk&app=my-first-app", on_message=on_message) | ||
+ | wsapp.run_forever() | ||
+ | |||
+ | |||
</code><code> | </code><code> | ||
*CLI> ari show apps | *CLI> ari show apps |