User Tools

Site Tools


сервис_asterisk

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
сервис_asterisk [2024/07/30 15:29]
val [Распознавание речи в Asterisk с использованием Yandex SpeechKit HTTP API]
сервис_asterisk [2024/12/06 13:36] (current)
val [Аутентификация и учет звонков в RADIUS]
Line 1503: Line 1503:
 ... ...
 </​code>​ </​code>​
-===== Аутентификация и учет звонков в RADIUS ===== 
  
-  * [[Сервис FreeRADIUS]] 
- 
-<​code>​ 
-# cat /​usr/​share/​auth.sh 
-</​code><​code>​ 
-#!/bin/sh 
- 
-CALL_FROM=$1 
- 
-# chown asterisk /​tmp/​auth.log 
- 
-if echo "​User-Name=${CALL_FROM},​User-Password=${CALL_FROM},​NAS-IP-Address=127.0.0.1"​ | radclient localhost auth testing123 >>/​tmp/​auth.log 
-then 
-        echo -n YES 
-else 
-        echo -n NO 
-fi 
- 
-exit 0 
-</​code><​code>​ 
-# cat /​usr/​share/​acct-start.sh 
-</​code><​code>​ 
-#!/bin/sh 
- 
-CALL_ID=$1 
-CALL_FROM=$2 
-CALL_TO=$3 
- 
-echo "​User-Name=${CALL_FROM},​Acct-Session-Id=${CALL_ID},​Called-Station-Id=${CALL_TO},​Calling-Station-Id=${CALL_FROM},​Acct-Status-Type=Start,​NAS-IP-Address=127.0.0.1,​NAS-Port=${CALL_FROM}${CALL_TO}"​| radclient localhost acct testing123 
- 
-exit 0 
-</​code><​code>​ 
-# cat /​usr/​share/​acct-stop.sh 
-</​code><​code>​ 
-#!/bin/sh 
- 
-CALL_ID=$1 
-CALL_FROM=$2 
-CALL_TO=$3 
- 
-echo "​User-Name=${CALL_FROM},​Acct-Session-Id=${CALL_ID},​Acct-Status-Type=Stop,​NAS-IP-Address=127.0.0.1,​NAS-Port=${CALL_FROM}${CALL_TO}"​| radclient localhost acct testing123 
- 
-exit 0 
-</​code>​ 
- 
-Примечания:​ 
- 
-  * Помещаем абонента,​ звонки которого надо тарифицировать,​ в контекст billing 
-  * Переводим все тарифицируемые вызовы в контекст aaa-call (что-бы отследить событие окончания разговора через контекст "​h"​) 
-  * В случае MYAUTH!=NO разрешаем абоненту совершить звонок. С помощью макроса "​U"​ программируем вызов кода в момент снятия трубки для начала тарификации. По какой то причине переменные ${CALLERID(num)} ${CALLERID(dnid)} не передаются,​ а ${UNIQUEID} меняет значение в этом коде, поэтому занчения передаются через аргументы. 
-  * В контексте "​h"​ проверяем факт наличия разговора и только в этом случае тарифицируем его окончание 
- 
-<​code>​ 
-# cat /​etc/​asterisk/​extensions.conf 
-</​code><​code>​ 
-... 
-[billing] 
-... 
-exten => _4XX,​1,​Goto(aaa-call,​s,​1) 
-... 
-[aaa-call] 
-exten => s,​1,​Verbose(AUTH CALL_ID=${UNIQUEID} CALL_FROM=${CALLERID(num)} CALL_TO=${CALLERID(dnid)}) 
-exten => s,​n,​Set(MYAUTH=${SHELL(/​usr/​share/​auth.sh ${CALLERID(num)})});​ 
-exten => s,​n,​GotoIf($["​${MYAUTH}"​ = "​NO"​]?​end_call) 
-exten => s,​n,​Dial(SIP/​${CALLERID(dnid)},,​U(aaa-call-beg-acct,​${UNIQUEID},​${CALLERID(num)},​${CALLERID(dnid)}));​ 
-exten => s,​n(end_call),​Hangup() 
- 
-exten => h,​1,​GotoIf($["​${DIALSTATUS}"​ != "​ANSWER"​]?​no-answer) 
-exten => h,​n,​Verbose(END ACCT DIALSTATUS=${DIALSTATUS} CALL_ID=${UNIQUEID} CALL_FROM=${CALLERID(num)} CALL_TO=${CALLERID(dnid)}) 
-exten => h,​n,​System(/​usr/​share/​acct-stop.sh ${UNIQUEID} ${CALLERID(num)} ${CALLERID(dnid)}) 
-exten => h,​n(no-answer),​NoOp() 
- 
-[aaa-call-beg-acct] 
-exten => s,​1,​Verbose(BEGIN ACCT CALL_ID=${ARG1} CALL_FROM=${ARG2} CALL_TO=${ARG3}) 
-exten => s,​n,​System(/​usr/​share/​acct-start.sh ${ARG1} ${ARG2} ${ARG3}) 
-exten => s,n,return 
-... 
-</​code>​ 
 ===== Настройка дополнительных видов обслуживания ===== ===== Настройка дополнительных видов обслуживания =====
  
сервис_asterisk.1722342544.txt.gz · Last modified: 2024/07/30 15:29 by val