Asterisk: The Future of Telephony by Jared Smith, Jim Van Meggelen, Leif Madsen This errata page lists errors outstanding in the most recent printing. If you have technical questions or error reports, you can send them to booktech@oreilly.com. Please specify the printing date of your copy. This page was updated July 20, 2007. Here's a key to the markup: [page-number]: serious technical mistake {page-number}: minor technical mistake : important language/formatting problem (page-number): language change or minor formatting problem ?page-number?: reader question or request for clarification Confirmed errors: {160} first footnote; In the footnote phrase: "If safe_9780596009625 was used to start Asterisk, the first Asterisk console will be on TTY9, which means that you will not be able to view AGI errors remotely". In really, we can use the 'conspy' software for view TTY9 from remote access. It works like a vnc access, but to console instead X. You can access the server via ssh or telnet, then run conspy 9 , a voila! {213} regcontext (channel) & regexten (channel) entries; Replace regcontext (channel) & regexten (channel) entries with the following: regcontext (channel) The regcontext option is used in conjunction with the regexten option to automatically create a NoOp() application entry into the dialplan at the first priority of the specified context when a peer registers. The extension will also automatically be removed from the dialplan upon the peer either becoming unreachable, or unregistered. The regcontext option is valid in both the iax.conf and sip.conf channel configuration files and can be set globally or on a per-peer basis. If regcontext is configured, and a regexten is not explicitly configured for a peer definition, the peer name will be used as the extension to be created. The context is not automatically created by Asterisk and must defined manually in extensions.conf. An example of the regcontext and regexten options may be in combination with the DUNDi protocol. The context pointed to by the regcontext option could be used as the "advertisement context" defined in the [mappings] section of the dundi.conf file. regcontext=registered-phones regexten (channel) The regexten option is used in conjunction with the regcontext option to automatically create a NoOp() application entry into the dialplan at the first priority of the specified context when a peer registers. One or more extensions may automatically be created by separating them with an ampersand (&) on the same line. You may add dialplan logic to the context defined by the regcontext option starting at priority 2, or optionally using the 'n' priority. regexten=myphone {221} add an entry to this page; Below "recordhistory", add the following: regcontext The regcontext option is used in conjunction with the regexten option to automatically create a NoOp() application entry into the dialplan at the first priority of the specified context when a peer registers. The extension will also automatically be removed from the dialplan upon the peer either becoming unreachable, or unregistered. The regcontext option is valid in both the iax.conf and sip.conf channel configuration files and can be set globally or on a per-peer basis. If regcontext is configured, and a regexten is not explicitly configured for a peer definition, the peer name will be used as the extension to be created. The context is not automatically created by Asterisk and must defined manually in extensions.conf. An example of the regcontext and regexten options may be in combination with the DUNDi protocol. The context pointed to by the regcontext option could be used as the "advertisement context" defined in the [mappings] section of the dundi.conf file. regcontext=registered-phones {227} regcontext (peer) entry; remove the regcontext entry from this section {228} regexten (peer) entry; replace the regexten (peer) entry with the following: regexten (peer) The regexten option is used in conjunction with the regcontext option to automatically create a NoOp() application entry into the dialplan at the first priority of the specified context when a peer registers. One or more extensions may automatically be created by separating them with an ampersand (&) on the same line. You may add dialplan logic to the context defined by the regcontext option starting at priority 2, or optionally using the 'n' priority. regexten=myphone [238] first actual line of code under Congestion() heading; The original text says: ; if the Caller ID is 555-1234, always play congestion exten => 123,1,GotoIf($[${CALLERIDNUM} = 5551234]?5:2) exten => 123,2,Playtones(congestion) exten => 123,3,Congestion() exten => 123,4,Hangup() exten => 123,5,Dial(Zap/1) But in fact this will do the exact opposite. It will dial only if the calledID is 5551234 and play congestion for all other callerIDs. The actual code should be: ; if the Caller ID is 555-1234, always play congestion exten => 123,1,GotoIf($[${CALLERIDNUM} = 5551234]?2:5) ; swapped 5 and 2 at the end exten => 123,2,Playtones(congestion) exten => 123,3,Congestion() exten => 123,4,Hangup() exten => 123,5,Dial(Zap/1) (239) Curl() heading; Currently reads: "Curl() is often used to signal external applications of dialplan events." It should read: "Curl() is often used to signal remote applications of dialplan events." Reasoning: System() is used to invoke external applications with dialplan events. Curl() is unique in that it can invoke remote applications, something that System cannot (directly) do. (240) Top of page; Somewhere in the description for Cut(), it should say: the real benefit of Cut is that it allows parsing of variable-length fields. {264} NoOp() heading; The description of NoOp() should note that its usage for debugging is entirely a side effect of the dialplan, but only works if your verbose level is 3 or higher. For true control of verbose output at any verbosity, see the Verbose() application. (267) First line of second paragraph under PrivacyManager() heading; "The privacy.conf configuration file changes the functionality of the PrivacyManger() application" should read: "The privacy.conf configuration file changes the functionality of the PrivacyManager() application" (269) Random() heading; Currently reads: "The application will jump to the specified destination priority percent of the time." Should read: "The application will jump to the specified destination priority that percent of the time." (281) SetVar() heading; "Reprecated" should be "Deprecated". {287} VMAuthenticate() heading; The description of this app notes that the variable AUTH_MAILBOX will be set. It neglects to note that AUTH_CONTEXT is also set at the same time.