I did as you stated however I get the same error. Here is
my config file. Did I miss something?
Thanks From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Wade J. Weppler Sent: Monday, July 05, 2004 10:54 AM To: [EMAIL PROTECTED] Subject: RE: [Asterisk-Users] Question about x100P and zap Your $EXTEN’s need to be changed to ${EXTEN}. You’ll also need to include any substr #’s within the brackets (ie. ${EXTEN:1}).
-wade
From:
[EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Hall, Eric M.
I have 2 X100P card and configured everything based on configs here http://www.onlamp.com/onlamp/2004/01/22/examples/config_files.txt I changed the area codes to match mine.
When I try to dial out I get
app_dial.c:554 dial_exec: Unable to create channel of type 'Zap'
A zap show channels gives me this
Chan Extension
Context Language
MusicOnHold
Any ideas? |
[general] static=yes ; These two lines prevent the command-line interface writeprotect=yes ; from overwriting the config file. Leave them here. ; ; ; [from-sip-external] ; ; Take unknown callers that are sending calls to our system, ; and send them to the appropriate extension. It is in this ; area that we do name-to-number mapping for SIP extensions. ; ; This context will allow calls to "[EMAIL PROTECTED]" or calls ; to "[EMAIL PROTECTED]" to be answered on the relevant SIP ; phones. We also do some name-to-number mapping here; see below. ; ; The SIP URI of sip://[EMAIL PROTECTED] will be handled here. ; Note that we assume Sidney is on the SIP phone described as ; extension "2000" in sip.conf, so this short routine just ; re-directs the call flow recursively back into the same ; context, but we change the extension and priority. Since ; we're including [local-extensions], this will get picked up ; by the dialplan contained in local-extensions. ; ; I could be more space-efficient and put all these lines into ; a single regexp, but for clarity I put them each on their ; own lines. ; ; Here are Sidney's aliases ; exten => sidney,1,Goto(2000,1) exten => sidney.zweibel,1,Goto(2000,1) exten => info,1,Goto(2000,1) ; ; ...and John's aliases. ; exten => john,1,Goto(2001,1) exten => john.whorfin,1,Goto(2001,1) exten => sales,1,Goto(2001,1) ; ; ; Include the numbers which we have defined in local-extensions ; and allow them to be accessed from within this context. This ; is how we are able to use the "Goto" commands above, since ; we will be including extensions 2000 and 2001 (and 0 and 2999) ; as available extensions to which we may re-route calls within ; this context. ; include => local-extensions ; ; If the line hangs up, it's always good to have the "h" ; extension in each context that is the "master" handler ; for calls. This cleanly exits and closes dial path routes. ; exten => h,1,Hangup ; ; The user has dialed an "i"nvalid number, which means that ; there was no match by any other matching routines. Set an ; absolute timeout on the call (15 seconds), play a Congestion ; tone, and hangup. We set the absolute timeout to prevent easy ; DoS attacks from consuming too much bandwidth. However, it ; is possible that we could still be attacked in some fashion ; by someone making many calls to bogus numbers on our server. ; We could reduce this threat by removing the Congestion ; playback and going straight to hangup, but that is very ; difficult to debug at the remote end, so we are good VoIP ; citizens and we create some audio if the call reaches us. ; exten => i,1,AbsoluteTimeout(15) exten => i,2,Congestion exten => i,3,Hangup ; ; ; [from-sip-internal] ; Calls that come in from our two SIP phones will land here ; first and match against extensions listed below. ; ; The context [from-sip-internal] is really just a collection ; of include statements that pull the extension matching lists ; in from other contexts. A well-designed dialplan segregates ; extensions with similar functions into contexts, and then ; uses the "include" referencer. This should be a familiar ; concept to anyone who does programming - segmenting a block ; of phone numbers makes them more re-usable in a generic way ; so that the administrator can avoid re-typing the same configs ; over and over. ; ; First, we include [local-extensions], since that's what ; we should try matching on first. If anyone on one of our ; local SIP phones dials an extension that appears in ; [local-extensions], then send the call to whatever priority ; list exists for that number. This is for local-to-local call ; termination. ; include => local-extensions ; ; Next, we include and try to match against extensions contained ; in [always-out-pots]. These are mostly wildcarded matches, ; so we make sure to put them second when we list our "include" ; statements, since Asterisk will process the matching lists in ; a predictable way ONLY based on the order in which multiple ; contexts are included in some other context. This is an important ; point, since often dialplans will contain a "catch-all" at the ; bottom of the matching list. If that "catch-all" (usually ; something like "_X." or "_.") is just jumbled in with the rest ; of the extensions, then it may be matched FIRST, which would ; be opposite of the desired effect. Any time it is the case that ; you have possible overlapping extension matches in a context, ; you should order them by creating multiple sub-contexts and ; using the "include =>" method to order them in the right sequence. ; include => always-out-pots ; ; Include the "local" numbers which we want to send out our ; POTS line since they don't cost us anything. ; include => local-calls-pots ; ; Include the long-distance matching lines to hand off calls to non- ; local area codes and international dialing. ; include => ld-calls ; ; As usual, include "h"angup and "i"nvalid extensions to allow for ; appropriate handling of those two cases. ; exten => h,1,Hangup exten => i,1,Congestion exten => i,2,Hangup ; ; ; [always-out-pots] ; ; The [always-out-pots] context is where we store numbers that will ; always go out the local analog POTS connection. When working ; with any priority list for these numbers, it is important to ; remember that if the POTS line is unavailable for some reason ; (such as the line not being connected to the card) then the ; Zap drivers will force the call to go to the next priority. ; In our case, there is no "next-best-path" for things like 911 ; or 411, so play a congestion tone which should indicate to the ; caller that the system is unavailable for their use. Just ; like any other PBX, if it's not connected to the outside world, ; calls outbound won't work. ; ; In all of the examples below, we use the "Zap" technology ; specifyer (analog) and select channel "1", since we only have ; one channel in this particular computer (a single Digium X100P ; FXO card.) In a situation where there are multiple cards or ; channels, a "group" could be created in the zapata.conf file ; that allows the call to be sent to the group, and Asterisk will ; choose the first available channel automatically. ; ; Calls to 911, 411, 511, etc. are all handed off to the local ; analog channel. The "X" matches any digit, so 911/411/511 etc. ; are handed to the local provider of those services. ; ; Each number matching sequence contains an priority chain at ; priority 102. See the explanation in section [local-calls-pots] ; ; We NEVER fail these calls over to the IPCSP account, since the ; IPCSP almost never has the correct location to which to send calls ; for 911, 411, etc. There is work towards solving this problem, but ; most IPCSP's are still some months away from implementation. In ; the meantime, always hand these numbers off to the POTS line. ; exten => _X11,1,Dial(Zap/1/${EXTEN}) exten => _X11,2,Congestion exten => _X11,3,Hangup exten => _X11,102,Congestion exten => _X11,103,Hangup ; ; Make sure if the user dials the external line seizure number that ; the calls is handled in the same way, but strip off the leading ; "9" from the ${EXTEN} variable because the local POTS system ; won't know how to deal with it. ; exten => _9X11,1,Dial(Zap/1/${EXTEN:1}) exten => _9X11,2,Congestion exten => _9X11,3,Hangup exten => _9X11,102,Congestion exten => _9X11,103,Hangup ; ; Send calls out to the operator if the user has indicated that they ; want to talk to the PSTN operator. Note that we grab "0" by itself ; in the [local-extensions] context; this is for outside operator ; requests only. ; exten => _90,1,Dial(Zap/1/${EXTEN:1}) exten => _90,2,Congestion exten => _90,3,Hangup exten => _90,102,Congestion exten => _90,103,Hangup ; ; ; So, we should also always provide an "escape" route for our ; users so that they can call out on the local analog line in ; the way that they expect. Most office phone systems have "9" ; as the "seize external line" prefix. Since SIP phones ; take their dial strings all at one time, there is no secondary ; dialtone that the user will hear; they should just dial the ; number like "914155551212" on their SIP phones, without waiting ; for a second dialtone. ; ; We match on any number that begins with a "9" and is 7 or more digits, ; which is the minimum we need for a standard phone call. The "." ; stands for "zero or more digits" ; exten => _9XXXXXXX.,1,Dial(Zap/1/${EXTEN:1}) ; ; If we get an "out of service" or busy signal error on the ; attempt, send a fast busy to the user and hangup. ; exten => _9XXXXXXX.,2,Goto(102) ; exten => _9XXXXXXX.,102,Congestion exten => _9XXXXXXX.,103,Hangup ; ; ; [local-calls-pots] ; This next section is a tricky part. Each phone company in the US ; seems to have different rules about how you can or cannot dial ; a local number. The concept of local numbers is one that is ; going the way of the dinosaur, and only in rural areas does ; the concept of a single non-overlapping area code still exist. ; That being said, our imaginary example here has a phone company ; that requires all local numbers to be ten digits (area code plus ; seven digit prefix/subscriber number.) HOWEVER, we are going to ; be responsible members of the e.164 world community, and force ; users to dial a "1" in front of all numbers. This will make ; some people complain, especially if they're used to just dialing ; the seven-digit prefix/subscriber number (123-4567) or if they ; aren't used to dialing the "1" in front of the area code. Well, ; they should get used to it - that is the way the dialing plan ; in North America is moving, and it eliminates huge tables for ; the phone administrator. ; ; ; First, we want to hand off numbers that are "local" to our POTS ; line to the X100P board and subsequently to the local phone system. ; Our area code in this hypothetical example is "614", so we'll ; match any numbers dialed that start with 1614 and strip off the ; leading digit (:1) and pass it to the Zap channel driver (POTS line.) ; We don't have a dial time limit on this, nor are we passing any ; special settings to the Dial statement; this is an extremely simple ; invocation of "Dial". ; ; If we get a "Busy", jump to 102 - see notes there for why and how ; this jump happens. ; exten => _1614XXXXXXX,1,Dial(Zap/1/${EXTEN:1}) ; ; ; Now, what if the Zap line is showing an error? Asterisk has some ; error routines that allow for failover if a particular channel ; is unavailable due to an error. If the line is disconnected, ; then Asterisk will increment the priority counter by 1, and ; continue.
; In the case of a failure on our first dial attempt, we'll try handing ; off the call to the IPCSP account, since something is wrong with ; our local POTS line. Note that we hand off the whole number, ; including the leading '1', since iconnecthere expects a fully ; qualified e164 address (country code, area code, prefix, subscriber) ; such as 16145551212 ; ; If this second attempt results in an error, jump to 103 ; exten => _1614XXXXXXX,2,Dial(SIP/[EMAIL PROTECTED]) ; ; If we get an error on the dial to the IPCSP, just give up. ; This means we've tried both the analog like and the IPCSP, ; but both have given us "out of service" errors. ; exten => _1614XXXXXXX,3,Goto(203) ; ; ; There are two kinds of errors that may be given back by the Dial ; statement. The first is a generic error, which jumps to +1 in ; the priority list. The second type of error is the "Busy" error ; which will jump to +101 from the current priority. "Busy" may ; is a misleading term - if there is no dialtone on the line, that ; is considered "Busy", along with several other circumstances. ; ; We are faced with the problem that if the statement at priority 1 ; gets a busy, it will jump to 102, and now also if priority 2 gets ; a busy, it will jump to 103. ; ; I personally dislike the +101 auto-jump syntax; it's a kludge, but to this ; point nobody has submitted a better patch to handle Dial results. ; ; exten => _1614XXXXXXX,102,Dial(SIP/[EMAIL PROTECTED]) ; ; We get to priority 103 either because priority 2 got a "busy" ; error, or because priority 102 got a "not in service" error. ; In either case, we want to jump to 203, which is the end of ; the road. ; exten => _1614XXXXXXX,103,Goto(203) ; ; ; Priority 203 is where we go if we've tried everything and it all ; didn't work. Jumps get to 203 via a +101 leap from priority 102, ; or from explicit "Goto" calls elsewhere. ; We play a congestion tone (fast busy) then hang up. ; exten => _1614XXXXXXX,203,Congestion exten => _1614XXXXXXX,204,Hangup ; ; ; ; We re-do the prior match, but slightly modify it for those very ; annoying phone companies that force you to dial a "1" in front ; of only certain exchanges. The user would dial "116143334444" to ; call those exchanges. This sounds pretty unpleasant, and it is. ; However, until all phone companies standardize on 1+ten-digit ; dialing, this will be an issue. Really, the only difference ; between this small matching set and the "1614XXXXXXX" matching ; set is that we clip a digit off of the dialed strings when ; we send the call to our IPCSP. When we dial via the Zap analog ; interface, we clip off only one of the two leading "1"'s when ; we pass the ${EXTEN} to the channel. ; ; Another way to get around this would be to build a big table ; of all "non-local" exchanges and then match on those exchanges, ; and add a "1" to the dialing string. That is beyond the ; scope of this example... ; ;exten => _1614XXXXXXX,1,Dial(Zap/1/${EXTEN}:1) ;exten => _1614XXXXXXX,2,Dial(SIP/${EXTEN}:[EMAIL PROTECTED]) ;exten => _1614XXXXXXX,3,Goto(203) ;exten => _1614XXXXXXX,102,Dial(SIP/${EXTEN}:[EMAIL PROTECTED]) ;exten => _1614XXXXXXX,103,Goto(203) ;exten => _1614XXXXXXX,203,Congestion ;exten => _1614XXXXXXX,204,Hangup ; ; ; ; [ld-calls] ; ; Here is where we define any other calls outbound from the system ; that seem to be using NANP numbers. If the iconnecthere.com ; system fails, then send the call out the analog line. It is ; perhaps the case that an audio hint should be played if the call ; fails to go out via the SIP long distance provider and uses the ; more expensive analog line, but that can be added later if desired. ; exten => _1XXXXXXXXXX,1,Dial(SIP/[EMAIL PROTECTED]) exten => _1XXXXXXXXXX,2,Dial(Zap/1/${EXTEN}) exten => _1XXXXXXXXXX,3,Hangup exten => _1XXXXXXXXXX,102,Dial(Zap/1/${EXTEN}) exten => _1XXXXXXXXXX,103,Hangup exten => _1XXXXXXXXXX,203,Hangup ; ; ; And do the same for calls that are prefixed with the international ; dialing code of "011" ; exten => _011XXXXXXXXXX,1,Dial(SIP/[EMAIL PROTECTED]) exten => _011XXXXXXXXXX,2,Dial(Zap/1/${EXTEN}) exten => _011XXXXXXXXXX,3,Hangup exten => _011XXXXXXXXXX,102,Dial(Zap/1/${EXTEN}) exten => _011XXXXXXXXXX,103,Hangup exten => _011XXXXXXXXXX,203,Hangup ; ; ; [local-extensions] ; The "local-extensions" context used to be called "from-sip" in ; the first example article. Other than the name change, it is ; identical. The comments have been removed for brevity. ; exten => 2000,1,Dial(SIP/2000,20) exten => 2000,2,Voicemail(u2000) exten => 2000,102,Voicemail(b2000) exten => 2000,103,Hangup ; exten => 2001,1,Dial(SIP/2001,20) exten => 2001,2,Voicemail(u2001) exten => 2001,102,Voicemail(b2001) exten => 2001,103,Hangup ; exten => 2999,1,VoicemailMain($CALLERIDNUM) ; exten => 0,1,Goto(2000,1) ; ; ; [from-analog] ; ; The [from-analog] context deals with calls coming in from ; the Zap card. Since the Zap card doesn't "know" what number ; is attached to it, we use the "s" extension to handle all inbound ; calls. Caller ID tells us who is calling, but Asterisk uses ; the concept of what number was _called_ as the primary matching ; criteria in the dialplan. Since all we know is that there is ; a call coming in on the analog line, we have to just use the ; "default" value of "s" as our matching criteria. (Note: Asterisk ; can in fact use the Caller ID as a match method, but we won't ; cover that in this example. See the "ex-girlfriend" portion ; of the Asterisk manual.) ; ; We're going to install a nice little trick in here that nabs ; telemarketers. What it does is look for any call on the channel ; that does NOT have a valid caller ID (or caller ID is "blocked") ; Then, a pleasant voice asks for the person to enter in a valid ; ten digit caller ID. If they fail three times, it hangs up. ; I have stopped about 90% of the telemarketing calls on my home ; line with this trick. ; exten => s,1,PrivacyManager ; ; ; We could also put an auto-attendant here, or a menu system, or ; any number of other tools. However, this is going to be kept as ; a simple demo. We just ring both office lines. ; ; Now, this is pretty simple. We ring both extension 2000 and 2001 ; at the same time, and whoever answers first gets the call. If there ; is no answer after 30 seconds, then send the call to voicemail with ; the unavailable message. If both phones are unavailable, send the ; call to the busy message. The voicemail box we use is John Whorfin, ; since he is the manager responsible for answering messages. It is ; possible to define a "company" mailbox, and then send the calls ; there instead of to a particular person if one chose to do that. ; exten => s,2,Dial(SIP/2000&SIP/2001,30) exten => s,3,Voicemail2(u2000) exten => s,4,Hangup exten => s,103,Voicemail2(b2000) exten => s,104,Hangup ; ; ; Always put these two extensions in any "main" context that handles ; call processing, for good form and graceful hangups. ; exten => i,1,Hangup exten => h,1,Hangup