/
extensions-range.conf
162 lines (143 loc) · 9.89 KB
/
extensions-range.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
; *** WARNING DO NOT EDIT THIS FILE ***
[general]
autofallthrough=no ;Don't let asterisk guss
static=yes ;Don't allow asterisk to change the config file
[globals]
NoFailoverCause=1,16,17,18,19,21,22,28
[HangupCause] ;The messages here need to be installed in /var/lib/asterisk/sounds/
exten => _h-!, 1,Progress()
same => n,Playback(AST_CAUSE_UNSPECIFIED,noanswer)
same => n,Hangup(${HANGUPCAUSE})
exten => h-0, 2,Playback(AST_CAUSE_UNSPECIFIED,noanswer)
exten => h-1, 2,Playback(AST_CAUSE_UNALLOCATED,noanswer)
exten => h-2, 2,Playback(AST_CAUSE_NO_ROUTE_TRANSIT_NET,noanswer)
exten => h-3, 2,Playback(AST_CAUSE_NO_ROUTE_DESTINATION,noanswer)
exten => h-5, 2,Playback(AST_CAUSE_MISDIALLED_TRUNK_PREFIX,noanswer)
exten => h-6, 2,Playback(AST_CAUSE_CHANNEL_UNACCEPTABLE,noanswer)
exten => h-7, 2,Playback(AST_CAUSE_CALL_AWARDED_DELIVERED,noanswer)
exten => h-14, 2,Playback(AST_CAUSE_NUMBER_PORTED_NOT_HERE,noanswer)
exten => h-16, 2,NoOP(AST_CAUSE_NORMAL_CLEARING,noanswer)
exten => h-17, 2,NoOP(AST_CAUSE_USER_BUSY,noanswer)
exten => h-18, 2,NoOP(AST_CAUSE_NO_USER_RESPONSE,noanswer)
exten => h-19, 2,NoOP(AST_CAUSE_NO_ANSWER,noanswer)
exten => h-20, 2,Playback(AST_CAUSE_SUBSCRIBER_ABSENT,noanswer)
exten => h-21, 2,NoOP(AST_CAUSE_CALL_REJECTED,noanswer)
exten => h-22, 2,Playback(AST_CAUSE_NUMBER_CHANGED,noanswer)
exten => h-23, 2,Playback(AST_CAUSE_REDIRECTED_TO_NEW_DESTINATION,noanswer)
exten => h-25, 2,Playback(AST_CAUSE_EXCHANGE_ROUTING_ERROR,noanswer)
exten => h-26, 2,NoOP(AST_CAUSE_ANSWERED_ELSEWHERE,noanswer)
exten => h-27, 2,Playback(AST_CAUSE_DESTINATION_OUT_OF_ORDER,noanswer)
exten => h-28, 2,Playback(AST_CAUSE_INVALID_NUMBER_FORMAT,noanswer)
exten => h-29, 2,Playback(AST_CAUSE_FACILITY_REJECTED,noanswer)
exten => h-30, 2,Playback(AST_CAUSE_RESPONSE_TO_STATUS_ENQUIRY,noanswer)
exten => h-31, 2,Playback(AST_CAUSE_NORMAL_UNSPECIFIED,noanswer)
exten => h-34, 2,Playback(AST_CAUSE_NORMAL_CIRCUIT_CONGESTION,noanswer)
exten => h-38, 2,Playback(AST_CAUSE_NETWORK_OUT_OF_ORDER,noanswer)
exten => h-41, 2,Playback(AST_CAUSE_NORMAL_TEMPORARY_FAILURE,noanswer)
exten => h-42, 2,Playback(AST_CAUSE_SWITCH_CONGESTION,noanswer)
exten => h-43, 2,Playback(AST_CAUSE_ACCESS_INFO_DISCARDED,noanswer)
exten => h-44, 2,Playback(AST_CAUSE_REQUESTED_CHAN_UNAVAIL,noanswer)
exten => h-45, 2,Playback(AST_CAUSE_PRE_EMPTED,noanswer)
exten => h-50, 2,Playback(AST_CAUSE_FACILITY_NOT_SUBSCRIBED,noanswer)
exten => h-52, 2,Playback(AST_CAUSE_OUTGOING_CALL_BARRED,noanswer)
exten => h-54, 2,Playback(AST_CAUSE_INCOMING_CALL_BARRED,noanswer)
exten => h-57, 2,Playback(AST_CAUSE_BEARERCAPABILITY_NOTAUTH,noanswer)
exten => h-58, 2,Playback(AST_CAUSE_BEARERCAPABILITY_NOTAVAIL,noanswer)
exten => h-63, 2,Playback(AST_CAUSE_SERVICE_UNAVAILABLE,noanswer)
exten => h-65, 2,Playback(AST_CAUSE_BEARERCAPABILITY_NOTIMPL,noanswer)
exten => h-66, 2,Playback(AST_CAUSE_CHAN_NOT_IMPLEMENTED,noanswer)
exten => h-69, 2,Playback(AST_CAUSE_FACILITY_NOT_IMPLEMENTED,noanswer)
exten => h-79, 2,Playback(AST_CAUSE_SERVICE_NOT_IMPLEMENTED,noanswer)
exten => h-81, 2,Playback(AST_CAUSE_INVALID_CALL_REFERENCE,noanswer)
exten => h-88, 2,Playback(AST_CAUSE_INCOMPATIBLE_DESTINATION,noanswer)
exten => h-95, 2,Playback(AST_CAUSE_INVALID_MSG_UNSPECIFIED,noanswer)
exten => h-96, 2,Playback(AST_CAUSE_MANDATORY_IE_MISSING,noanswer)
exten => h-97, 2,Playback(AST_CAUSE_MESSAGE_TYPE_NONEXIST,noanswer)
exten => h-98, 2,Playback(AST_CAUSE_WRONG_MESSAGE,noanswer)
exten => h-99, 2,Playback(AST_CAUSE_IE_NONEXIST,noanswer)
exten => h-100, 2,Playback(AST_CAUSE_INVALID_IE_CONTENTS,noanswer)
exten => h-101, 2,Playback(AST_CAUSE_WRONG_CALL_STATE,noanswer)
exten => h-102, 2,Playback(AST_CAUSE_RECOVERY_ON_TIMER_EXPIRE,noanswer)
exten => h-103, 2,Playback(AST_CAUSE_MANDATORY_IE_LENGTH_ERROR,noanswer)
exten => h-111, 2,Playback(AST_CAUSE_PROTOCOL_ERROR,noanswer)
exten => h-127, 2,Playback(AST_CAUSE_INTERWORKING,noanswer)
exten => h, 1,Log(NOTICE,A-Number=${CDR(A-Number)} A-Name=${CDR(A-Name)} A-IMSI=${CDR(A-IMSI)} B-Number=${CDR(B-Number)} B-Name=${CDR(B-Name)} B-IMSI=${CDR(B-IMSI)} hangupcause=${HANGUPCAUSE} dialstatus=${DIALSTATUS} hangupdirection=${CDR(hangupdirection)} duration=${CDR(duration)} billsec=${CDR(billsec)})
same => n,Hangup()
[emergency](HangupCause)
exten => _[+0-9a-zA-Z]!,2,Goto(to-pstn,${emergency},1)
[phones](HangupCause) ;This is the context for handsets provisioned through the realtime database.
exten => _[*#+0-9]!, 1,Set(CDR(B-IMSI)=${ODBC_SQL(select dial from dialdata_table where exten=\"${CDR(B-Number)}\")})
same => n,GotoIf(${EXISTS(${CDR(B-IMSI)})}?B-IPAddr) ;This is a known number
same => n,GoSub(to-e164,${CDR(B-Number)},1) ;try change it to e.164 and try again
same => n,Set(CDR(B-Number)=${GOSUB_RETVAL}) ;update B-Number
same => n,Set(CDR(B-IMSI)=${ODBC_SQL(select dial from dialdata_table where exten=\"${CDR(B-Number)}\")})
same => n,GotoIf($["${CDR(B-IMSI)}"=""]?to-pstn,${CDR(B-Number)},1) ;This is not known number, send call to PSTN
same => n(B-IPAddr),Set(CDR(B-IPAddr)=${ODBC_SQL(select ipaddr from sip_buddies where username=\"${CDR(B-IMSI)}\")})
same => n,ExecIf($["${CDR(B-IPAddr)}"=""]?Set(CDR(B-IPAddr)="127.0.0.1")) ;Port was not set, so set to default. Gets around bug in subscriberRegistry
same => n,Set(CDR(B-Port)=${ODBC_SQL(select port from sip_buddies where username=\"${CDR(B-IMSI)}\")})
same => n,ExecIf($["${CDR(B-Port)}"=""]?Set(CDR(B-Port)=5062)) ;Port was not set, so set to default. Gets around bug in subscriberRegistry
same => n,GoSub(to-openBTS,${CDR(B-Number)},1(${CDR(B-IMSI)},${CDR(B-IPAddr)},${CDR(B-Port)}))
same => n,Goto(h-${HANGUPCAUSE},1)
[sip-local] ;This context is the union of all of the in-network contexts.
include => default
include => phones
[from-pstn](HangupCause)
exten => _[+0-9]!, 1,Set(CDR(B-Number)=${EXTEN})
same => n,Set(CDR(A-Number)=${CALLERID(num)})
same => n,Set(CDR(A-Name)=${CALLERID(name)})
same => n,Set(CDR(B-IMSI)=${ODBC_SQL(select dial from dialdata_table where exten=\"${CDR(B-Number)}\")})
same => n,Set(CDR(B-IPAddr)=${ODBC_SQL(select ipaddr from sip_buddies where username=\"${CDR(B-IMSI)}\")})
same => n,ExecIf($["${CDR(B-IPAddr)}"=""]?Set(CDR(B-IPAddr)="127.0.0.1")) ;Port was not set, so set to default. Gets around bug in subscriberRegistry
same => n,Set(CDR(B-Port)=${ODBC_SQL(select port from sip_buddies where username=\"${CDR(B-IMSI)}\")})
same => n,ExecIf($["${CDR(B-Port)}"=""]?Set(CDR(B-Port)=5062)) ;Port was not set, so set to default. Gets around bug in subscriberRegistry
same => n,GoSub(to-openBTS,${CDR(B-Number)},1(${CDR(B-IMSI)},${CDR(B-IPAddr)},${CDR(B-Port)}))
[to-openBTS](HangupCause) ;GoSub for OpenBTS users
exten => _[+0-9a-zA-Z]!,1,Set(CDR(hangupdirection)=A)
same => n,GoSub(CallLimit,s,1(${CDR(A-Number)},${CDR(B-Number)}))
same => n,Set(CALLERID(num)=${CDR(A-Number)})
same => n,Set(CALLERID(name)=${CDR(A-Number)})
same => n,Dial(SIP/${ARG1}@${ARG2}:${ARG3},${IF(${VM_INFO(${CDR(B-Number)},exists)}?${DialIMSITimeoutVM}:${DialPSTNTimeout})},g)
same => n,Set(CDR(hangupdirection)=${IF($["${DIALSTATUS}"="ANSWER"]?B:SYSTEM)})
same => n,GotoIf(${VM_INFO(${CDR(B-Number)},exists)}?Voicemail,${CDR(B-Number)},1)
same => n,GotoIf($["${NoFailoverCause}"="${LISTFILTER(NoFailoverCause,",",${HANGUPCAUSE})}"]?:h-${HANGUPCAUSE},1)
same => n,Return()
[to-pstn](HangupCause) ;If you had an external trunk, you would dial it here.
exten => _[+0-9a-zA-Z]!,1,Set(CDR(hangupdirection)=A)
same => n,GoSub(CallLimit,s,1(${CALLERID(num)},${CDR(B-number)}))
same => n,Dial(SIP/${CDR(B-Number)}@${GW1},${DialPSTNTimeout},g)
same => n,Set(CDR(hangupdirection)=${IF($["${DIALSTATUS}"="ANSWER"]?B:SYSTEM)})
same => n,GotoIf($["${NoFailoverCause}"="${LISTFILTER(NoFailoverCause,",",${HANGUPCAUSE})}"]?:h-${HANGUPCAUSE},1)
same => n,Dial(SIP/${CDR(B-Number)}@${GW2},${DialPSTNTimeout},g)
same => n,Set(CDR(hangupdirection)=${IF($["${DIALSTATUS}"="ANSWER"]?B:SYSTEM)})
same => n,Goto(h-${HANGUPCAUSE},1)
[CallLimit](HangupCause)
exten => s, 1,GotoIf($["${CDR(B-IMSI)}"=""]?A-IMSI) ;B is not from openBTS no need to count
same => n,Set(GROUP(B)=${CDR(B-IMSI)}) ;Count the B IMSI
same => n,GotoIf($[${GROUP_COUNT(${CDR(B-IMSI)})}>1]?VM) ;Busy if we try to make more that 1 call
same => n(A-IMSI),ExecIf($["${CDR(A-IMSI)}"=""]?Return()) ;A is not from openBTS no need to count
same => n,Set(GROUP(A)=${CDR(A-IMSI)}) ;Count the caller
same => n,GotoIf($[${GROUP_COUNT(${CDR(A-IMSI)})}>1]?VM) ;Busy if we try to receive more that 1 call
same => n,Return()
same => n(VM),GotoIf(${VM_INFO(${CDR(A-Number)},exists)}?Voicemail,${CDR(A-Number)},1)
same => n,Set(CDR(hangupdirection)=SYSTEM)
same => n,Busy(5)
[from-openBTS](HangupCause)
exten => _[*#+0-9]!, 1,Set(CDR(B-Number)=${EXTEN})
same => n,Set(CDR(A-IMSI)=${IF(${EXISTS(${SIP_HEADER(P-IMSI)})}?${SIP_HEADER(P-IMSI)}:${IF($["${CALLERID(name):0:4}"="IMSI"]?${CALLERID(name)}:${CALLERID(num)})})})
same => n,Set(CDR(A-Name)=${CALLERID(name)})
same => n,Set(CDR(A-Number)=${ODBC_SQL(select callerid from sip_buddies where username=\"${CDR(A-IMSI)}\")})
same => n,ExecIf(${ISNULL(${CDR(A-Number)})}?Set(CDR(A-Number)=${CALLERID(num)}):Set(CALLERID(num)=${CDR(A-Number)}))
same => n,GotoIf($[${VALID_EXTEN(emergency,${CDR(B-Number)},1)}]?emergency,${emergency},1)
same => n,GotoIf(${VALID_EXTEN(default,${CDR(B-Number)},1)}?default,${CDR(B-Number)},1)
same => n,Goto(phones,${CDR(B-Number)},1)
[Voicemail](HangupCause)
exten => _[*#+0-9I]!, 1,Answer(${AnswerDelay})
same => n,ExecIF($["${DIALSTATUS}"!="ANSWER"]?VoiceMail(${EXTEN},s${IF($["${DIALSTATUS}"="BUSY"]?b:u)}))
same => n,Goto(h-${HANGUPCAUSE},1)
[VoicemailMain](HangupCause)
exten => _[*#+0-9I]!, 1,Set(CDR(hangupdirection)=A)
same => n,Answer(${AnswerDelay})
same => n,ExecIf(${VM_INFO(${EXTEN},exists)}?VoiceMailMain(${EXTEN},s):Playback(range/NoVMAccount))
same => n,Set(CDR(hangupdirection)=SYSTEM)
same => n,Hangup(16)
[default](HangupCause)