Перейти к содержанию

Dialplan — Исходящие

Файл: /etc/asterisk/extensions_outbound.conf

[outbound-calls]
exten => _X.,1,NoOp(=== Outbound call v2 to ${EXTEN} ===)
 same => n,Set(ENDPOINT_ID=${CHANNEL(endpoint)})
 same => n,Set(OUTBOUND_DATA=${ODBC_GET_ENDPOINT_OUTBOUND_CLI(${ENDPOINT_ID})})
 same => n,Set(OUTBOUND_CLI=${CUT(OUTBOUND_DATA,|,1)})
 same => n,Set(ALLOW_LONG=${CUT(OUTBOUND_DATA,|,2)})
 same => n,GotoIf($["${OUTBOUND_CLI}" = ""]?no_cli)
 same => n,Set(ROUTING_DATA=${ODBC_GET_ORG_ROUTING(${ENDPOINT_ID})})
 same => n,Set(ORG_CITY_CODE=${CUT(ROUTING_DATA,|,1)})
 same => n,Set(ORG_ZONE_CODE=${CUT(ROUTING_DATA,|,2)})
 same => n,Set(ORG_LOCAL_DIGITS=${CUT(ROUTING_DATA,|,3)})
 same => n,NoOp(Routing: city=${ORG_CITY_CODE} zone=${ORG_ZONE_CODE} local_digits=${ORG_LOCAL_DIGITS})
 same => n,GotoIf($["${ORG_CITY_CODE}" = ""]?no_routing)
 same => n,Set(CDR_CALL_TYPE=outbound)
 same => n,Set(CDR_TENANT_ID=${ODBC_GET_TENANT_BY_ENDPOINT(${ENDPOINT_ID})})
 same => n,Set(CDR_ENTERED_EPOCH=${EPOCH})
 same => n,Set(CDR_ENTERED_TIME=${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)})
 same => n,Set(CDR_CALL_DATE=${STRFTIME(${EPOCH},,%Y-%m-%d)})
 same => n,Set(CDR_CALL_TIME=${STRFTIME(${EPOCH},,%H:%M:%S)})
 same => n,Set(CDR_CALLER=${OUTBOUND_CLI})
 same => n,Set(CDR_CALLED=${EXTEN})
 same => n,Set(CDR_TERMINAL=PJSIP/${ENDPOINT_ID})
 same => n,Set(CDR_LOGGED=0)
 same => n,Set(CDR_CALL_CATEGORY=)
 same => n,Set(RECORDING_FILE=${STRFTIME(${EPOCH},,%Y%m%d)}-${STRFTIME(${EPOCH},,%H%M%S)}-${UNIQUEID}.wav)
 same => n,MixMonitor(/var/spool/asterisk/monitor/${RECORDING_FILE},b)
 same => n,Set(NUM_LENGTH=${LEN(${EXTEN})})
 same => n,NoOp(Dialed: ${EXTEN}, length: ${NUM_LENGTH})
 same => n,GotoIf($["${NUM_LENGTH}" >= "5" & "${NUM_LENGTH}" <= "7"]?normalize_local)
 same => n,GotoIf($["${NUM_LENGTH}" = "11" & "${EXTEN:0:1}" = "8"]?normalize_8)
 same => n,GotoIf($["${NUM_LENGTH}" = "12" & "${EXTEN:0:2}" = "+7"]?classify)
 same => n,GotoIf($["${NUM_LENGTH}" = "10" & "${EXTEN:0:1}" = "7"]?normalize_7)
 same => n,Goto(invalid_number)
 same => n(normalize_local),NoOp(Local short dial: ${EXTEN})
 same => n,Set(FULL_NUMBER=+7${ORG_CITY_CODE}${EXTEN})
 same => n,Set(CDR_CALL_CATEGORY=local)
 same => n,NoOp(Normalized local: ${FULL_NUMBER})
 same => n,Goto(check_permissions)
 same => n(normalize_8),Set(FULL_NUMBER=+7${EXTEN:1})
 same => n,NoOp(Normalized 8->+7: ${FULL_NUMBER})
 same => n,Goto(classify)
 same => n(normalize_7),Set(FULL_NUMBER=+7${EXTEN})
 same => n,NoOp(Normalized 7->+7: ${FULL_NUMBER})
 same => n,Goto(classify)
 same => n(classify),NoOp(Classifying: ${FULL_NUMBER})
 same => n,Set(NUM_ABC=${FULL_NUMBER:2:3})
 same => n,NoOp(ABC code: ${NUM_ABC})
 same => n,GotoIf($["${NUM_ABC}" = "700"]?cat_mobile)
 same => n,GotoIf($["${NUM_ABC}" = "701"]?cat_mobile)
 same => n,GotoIf($["${NUM_ABC}" = "702"]?cat_mobile)
 same => n,GotoIf($["${NUM_ABC}" = "705"]?cat_mobile)
 same => n,GotoIf($["${NUM_ABC}" = "707"]?cat_mobile)
 same => n,GotoIf($["${NUM_ABC}" = "708"]?cat_mobile)
 same => n,GotoIf($["${NUM_ABC}" = "747"]?cat_mobile)
 same => n,GotoIf($["${NUM_ABC}" = "771"]?cat_mobile)
 same => n,GotoIf($["${NUM_ABC}" = "775"]?cat_mobile)
 same => n,GotoIf($["${NUM_ABC}" = "776"]?cat_mobile)
 same => n,GotoIf($["${NUM_ABC}" = "777"]?cat_mobile)
 same => n,GotoIf($["${NUM_ABC}" = "778"]?cat_mobile)
 same => n,GotoIf($["${NUM_ABC}" >= "710" & "${NUM_ABC}" <= "718"]?check_geo)
 same => n,GotoIf($["${NUM_ABC}" >= "721" & "${NUM_ABC}" <= "729"]?check_geo)
 same => n,Goto(invalid_number)
 same => n(cat_mobile),Set(CDR_CALL_CATEGORY=mobile)
 same => n,NoOp(Category: mobile)
 same => n,Goto(check_permissions)
 same => n(check_geo),NoOp(Geographic number, zone: ${NUM_ABC})
 same => n,Set(ORG_CODE_LEN=${LEN(${ORG_CITY_CODE})})
 same => n,Set(NUM_CITY=${FULL_NUMBER:2:${ORG_CODE_LEN}})
 same => n,NoOp(Comparing city: NUM_CITY=${NUM_CITY} vs ORG_CITY_CODE=${ORG_CITY_CODE})
 same => n,GotoIf($["${NUM_ABC}" = "${ORG_ZONE_CODE}" & "${NUM_CITY}" = "${ORG_CITY_CODE}"]?cat_local_full)
 same => n,GotoIf($["${NUM_ABC}" = "${ORG_ZONE_CODE}"]?cat_zone)
 same => n,Set(CDR_CALL_CATEGORY=long_distance)
 same => n,NoOp(Category: long_distance)
 same => n,Goto(check_permissions)
 same => n(cat_local_full),Set(CDR_CALL_CATEGORY=local)
 same => n,NoOp(Category: local (same city code))
 same => n,Goto(check_permissions)
 same => n(cat_zone),Set(CDR_CALL_CATEGORY=zone)
 same => n,NoOp(Category: zone (same zone, different city))
 same => n,Goto(check_permissions)
 same => n(check_permissions),NoOp(Category: ${CDR_CALL_CATEGORY}, checking permissions)
 same => n,GotoIf($["${CDR_CALL_CATEGORY}" = "local"]?do_dial)
 same => n,GotoIf($["${ALLOW_LONG}" = "t"]?do_dial:no_long_distance)
 same => n(do_dial),NoOp(Dialing ${FULL_NUMBER} via m-core, category=${CDR_CALL_CATEGORY})
 same => n,Set(CALLERID(num)=${OUTBOUND_CLI})
 same => n,Set(CALLERID(name)=${OUTBOUND_CLI})
 same => n,Dial(PJSIP/${FULL_NUMBER}@m-core,60,tT)
 same => n,Goto(h,1)
 same => n(no_cli),NoOp(No CLI for ${ENDPOINT_ID})
 same => n,Answer()
 same => n,Playback(silence/1)
 same => n,Playback(callbox/templates/outbound_restricted_kz)
 same => n,Playback(callbox/templates/outbound_restricted_ru)
 same => n,Hangup()
 same => n(no_routing),NoOp(No routing data for ${ENDPOINT_ID})
 same => n,Answer()
 same => n,Playback(silence/1)
 same => n,Playback(callbox/templates/outbound_restricted_kz)
 same => n,Playback(callbox/templates/outbound_restricted_ru)
 same => n,Hangup()
 same => n(no_long_distance),NoOp(Long distance not allowed: ${CDR_CALL_CATEGORY})
 same => n,Answer()
 same => n,Playback(silence/1)
 same => n,Playback(callbox/templates/outbound_restricted_kz)
 same => n,Playback(callbox/templates/outbound_restricted_ru)
 same => n,Hangup()
 same => n(invalid_number),NoOp(Invalid number: ${EXTEN})
 same => n,Answer()
 same => n,Playback(silence/1)
 same => n,Playback(invalid)
 same => n,Hangup()
exten => h,1,NoOp(=== Call hangup handler ===)
 same => n,GotoIf($["${CDR_CALL_TYPE}" = "direct"]?log_direct)
 same => n,GotoIf($["${CDR_CALL_TYPE}" != "outbound"]?skip)
 same => n,GotoIf($["${CDR_LOGGED}" = "1"]?skip)
 same => n,StopMixMonitor()
 same => n,Set(TOTAL_TIME=$[${EPOCH} - ${CDR_ENTERED_EPOCH}])
 same => n,Set(TALK_TIME=${CDR(billsec)})
 same => n,GotoIf($["${DIALSTATUS}" = "ANSWER"]?answered)
 same => n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy)
 same => n,GotoIf($["${DIALSTATUS}" = "NOANSWER"]?no_answer)
 same => n,Goto(failed)
 same => n(answered),Set(CALL_STATUS=answered)
 same => n,Goto(log_it)
 same => n(busy),Set(CALL_STATUS=busy)
 same => n,Set(TALK_TIME=0)
 same => n,System(rm -f /var/spool/asterisk/monitor/${RECORDING_FILE})
 same => n,Set(RECORDING_FILE=)
 same => n,Goto(log_it)
 same => n(no_answer),Set(CALL_STATUS=no_answer)
 same => n,Set(TALK_TIME=0)
 same => n,System(rm -f /var/spool/asterisk/monitor/${RECORDING_FILE})
 same => n,Set(RECORDING_FILE=)
 same => n,Goto(log_it)
 same => n(failed),Set(CALL_STATUS=failed)
 same => n,Set(TALK_TIME=0)
 same => n,System(rm -f /var/spool/asterisk/monitor/${RECORDING_FILE})
 same => n,Set(RECORDING_FILE=)
 same => n(log_it),NoOp(CDR: status=${CALL_STATUS} category=${CDR_CALL_CATEGORY} duration=${TALK_TIME}s)
 same => n,Set(ODBC_RESULT=${ODBC_LOG_OUTBOUND_CALL(${UNIQUEID},${LINKEDID},${CDR_ENTERED_TIME},${CDR_CALL_DATE},${CDR_CALL_TIME},${CDR_CALLER},${CDR_CALLED},${CDR_TERMINAL},${CALL_STATUS},${TALK_TIME},0,${CDR_TENANT_ID},${RECORDING_FILE},${CDR_CALL_CATEGORY})})
 same => n,NoOp(CDR logged: status=${CALL_STATUS} category=${CDR_CALL_CATEGORY} id=${ODBC_RESULT})
 same => n,Set(CDR_LOGGED=1)
 same => n,Goto(skip)
 same => n(log_direct),Gosub(cdr-log-direct,s,1)
 same => n(skip),NoOp(Hangup handler done)