Errata
The errata list is a list of errors and their corrections that were found after the product was released. If the error was corrected in a later version or reprint the date of the correction will be displayed in the column titled "Date Corrected".
The following errata were submitted by our customers and approved as valid errors by the author or editor.
Color key: Serious technical mistake Minor technical mistake Language or formatting error Typo Question Note Update
Version | Location | Description | Submitted By | Date submitted | Date corrected |
---|---|---|---|---|---|
Printed | Page 214f AstDB counting example |
the example shows how to use the AstDB for counting. The SayNumber function included in this example should read the current count value to the caller - but it cannot without Answering the call in the first place. In short: The first lines of the full example should look like this: exten => 678,1,Answer() same => n,Set(COUNT=${DB(test/count)}) same => n,GotoIf($[${ISNULL(${COUNT})}]?:continue) Note from the Author or Editor: |
Marco Meklenburg | Mar 11, 2013 | |
Printed | Page 212 Figure 10-1 |
Figure 10-1 shows a slight different time delay for channel 3 as e.g. Table 10-1 does. Table 10-1 -as well as the text itself - states, that channel 3 shall ring from timecode "15" till "30". But Figure 10-1 states Channel 3 to ring from timecode 15 till something at 38 seconds. Nothing serious, not more than a typo. Note from the Author or Editor: |
Marco Meklenburg | Mar 11, 2013 | |
Printed, ePub | Page 207 1st paragraph, VoiceMail / IF() example |
the line same => n,VoiceMail(${MACRO_EXTEN},${IF($[${DIALSTATUS} = BUSY]?b:u)}) is missing the voicemail context. Used with the examples shipped with the book it should read same => n,VoiceMail(${MACRO_EXTEN}@default,${IF($[${DIALSTATUS} = BUSY]?b:u)}) Note from the Author or Editor: |
Marco Meklenburg | Mar 11, 2013 | |
Safari Books Online | 233 Last foot note |
"So far as we can tell, Polycom sets do not support multicast. We certainly were not able to find a way to use it." The Polycom's implement a multicast paging system in firmware version 4.0.0 and above. Works quite well. I implemented an install of ~80 phones using. Not sure if that is already in edition 4 or not but thought I would throw it out there. Note from the Author or Editor: |
Bryan Anderson | Jan 31, 2013 | |
Safari Books Online | 199 very top |
when using example: exten => 123,1,Set(TEST=example) same => n,SayNumber(${LEN(${TEST})}) I hear no audio, but watching the console out I see the audio played, same with the example shortly following playing a count down from the number 10. http://forums.digium.com/viewtopic.php?f=1&t=80824 This forum posting points out to add same => n,answer() so correction would be exten => 123,1,Set(TEST=example) same => n,Answer() same => n,SayNumber(${LEN(${TEST})}) After doing this all works well, same goes with SayDigits() Note from the Author or Editor: |
Bryan Anderson | Jan 30, 2013 | |
Other Digital Version | Chapter 16 - 'Installing and configuring ODBC' section In the section 'Installing and configuring ODBC' from the chapter 16 'Relational Database Integration' |
The section shows how to install the ODBC module and how to configure it. But it never says that you have to add to the file /etc/asterisk/modules.conf the following lines: preload => res_odbc.so preload => res_config_odbc.so under the lines: [modules] autoload=yes at the top of the file Note from the Author or Editor: |
Javier Zanon | Nov 22, 2012 | |
Other Digital Version | Chapter 16 - 'Using Realtime' section In the section "Using Realtime" of the Chapter 16. "Relational Database Integration" |
When the section talks how we can tell asterisk wich configuration files we want to load from the database (or wich dyinamic realtime objects we want to load from the database) it never says we have to write [settings] at the top of the /etc/asterisk/extconfig.conf file The section doesn't say Note from the Author or Editor: |
Javier Zanon | Nov 22, 2012 | |
Printed | Page 317 Under section "Testing" |
I believe that "jabber show connected" should read as "jabber show connections" in (2) places on this page. I tested using Asterisk 1.8 and the command as documented in the book produces the error: No such command 'jabber show connected' Note from the Author or Editor: |
Tom Mazzotta | Sep 03, 2012 | |
Other Digital Version | 1 [2. Asterisk Architecture][File Structure][The Spool] |
"The spool is where Linux stores files..." - Linux (or any other kernel) does not store anything there, user-space programs are the ones that do so. From the FHS (Filesystem hierarchy Standard): /var/spool : Application spool data Note from the Author or Editor: |
Fedja Beader | Aug 29, 2012 | |
Other Digital Version | 1 Online - table 2.5 Channel Drives |
Table 2.5 (Channel Drives) row 2 - has a pipe character before chan_alsa in column 1. Note from the Author or Editor: |
Anonymous | May 11, 2012 | |
Other Digital Version | 1 Chapter 7. VoIP Connecting two Asterisk systems together with SIP |
Examples show username=xxx but Asterisk 1.8 reports: The 'username' field for sip peers has been deprecated in favor of the term 'defaultuser' Examples just need updated. Thanks Note from the Author or Editor: |
Anonymous | May 08, 2012 | |
Other Digital Version | XIIII Under sla.conf under Key system example with Analog trunk |
Should the template for the 4 station read type=station instead of type=trunk? For the example box just above section extensions.conf Note from the Author or Editor: |
Anonymous | Apr 26, 2012 | |
Other Digital Version | ch 3 |
Kindle version. In section describing how to change the asteriskpbx environment to include specific paths - the file to be changed is NOT called .bash_profile. It is called ".bashrc" Note from the Author or Editor: |
Paul McGrath | Apr 10, 2012 | |
Other Digital Version | ch3 |
Kindle version. Ubuntu community recommend use of admin group - rather than wheel. sudo adduser asteriskpbx sudo adduser asteriskpbx admin Note from the Author or Editor: |
Paul McGrath | Apr 10, 2012 | |
Printed, Safari Books Online | Page 361 'start' extension of 'multirow_example_2' context in sample code. |
The line: same => n,GotoIf($["${ODBC_FETCH_RESULT}" = "FAILURE"]?cleanup,1) Should read: same => n,GotoIf($["${ODBC_FETCH_STATUS}" = "FAILURE"]?cleanup,1) In the example given, if '1104' didn't exist in the database, the dialplan would go into an infinite loop. I believe that it would be better to check for the absence of a success rather than the presence of a failure - that way even with the broken example given, an infinite loop could not happen. I propose that the line should therefore be: same => n,GotoIf($["${ODBC_FETCH_STATUS}" != "SUCCESS"]?cleanup,1) It may be worth while pointing out that infinite loops could occur without sufficient error checking and that it is never a good idea to run Asterisk in realtime mode when testing things like this!! Note from the Author or Editor: |
Nicholas Barnes | Feb 11, 2012 | |
Other Digital Version | 321 |
SOURCE: http://www.asteriskdocs.org/en/3rd_Edition/asterisk-book-html/asterisk-book.html#DeviceStates_id36061103 - Chapter 14. Device States -- Shared Line Appearances --- sla.conf [station](!) type = trunk trunk = line1 trunk = line2 -------------------------- the line "type = trunk" should read "type = station" - Mark Norman Note from the Author or Editor: |
Anonymous | Jan 30, 2012 | |
Safari Books Online | 341 Throughout Chapter 16 |
In chapter 16 on Relational Database Integration many of the readsql variables shown are vulnerable to sql injection. To avoid SQLi an attempt to sanitize user inputs should be made. In this case we are expecting numeric input so that is the only input we should accept. I've listed this as serious technical mistake because depending on implementation it could lead to a loss of confidentiality, integrity, and availability. Please re-classify as you see fit. |
Paul Scott | Dec 20, 2011 | |
Printed, Other Digital Version | Page 155 Top example code |
We're using the [internal] context, but it would make more sense to use [LocalSets]. |
![]() Leif Madsen |
Nov 28, 2011 | |
Printed, PDF | Page 249 2nd sentence of 2nd paragraph in box at bottom of page |
Redundant phrase at beginning and end of sentence: For those countries fortunate enough to have ENUM in produc- tion, you can perform ENUM lookups directly to their e164.arpa zones of those coun- tries fortunate enough to have ENUM in production. Note from the Author or Editor: |
C.J. Adams-Collier | Nov 17, 2011 | |
PDF, Safari Books Online | Page 349 Content of /etc/odbc.ini on page bottom |
On ubuntu 10.04, the line UserName = asterisk must be changed to User = asterisk otherwise the connectivity test $ echo "select 1" | isql asterisk-connector -v gives back: [MYODBCUtilReadDataSource.c][243][ERROR] Unknown attribute (UserName). [08S01][unixODBC][MySQL][ODBC 3.51 Driver]Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) [ISQL]ERROR: Could not SQLConnect Hope this will be useful for improving the experience of future readers. (What I am looking at is the latest HTML/online content; it has been also confirmed to be the same in the PDF, 3rd edition.) Note from the Author or Editor: |
Yassen Damyanov | Nov 05, 2011 | |
Printed | Page 311 Halfway down -- could please as a note or new paragraph |
Since we are running Asterisk as the 'asterisk' user in this book, the instructions as described here for the OpenAIS stuff won't quite work. You'll run into the following error on the Asterisk console when loading res_ais.so: *CLI> module load res_ais.so ERROR[19593]: ais/clm.c:140 ast_ais_clm_load_module: Could not initialize cluster membership service: Unknown To fix this, you need to add some permissions stuff to corosync. I ran into the same issue when trying to load res_ais stuff, and found the solution on this page (we should attribute him): http://felimwhiteley.wordpress.com/2011/07/11/asterisk-invalid-ipc-credentials-or-how-no-interwebs-saved-the-day/#wpl-likebox Solution: cat > /etc/corosync/uidgid.d/asterisk uidgid { uid: asterisk gid: asterisk } CTRL+D |
![]() Leif Madsen |
Oct 22, 2011 | |
Other Digital Version | unknown Chapter 24 configuring SNMP among others |
The book contains "sudo cat > snmpd.conf" and other "sudo cat > somefile" examples. This cannot work, as the user running the shell will be opening the file for output, sudo won't help you there. One could fix it by doing this: sudo sh -c 'cat > snmpd.conf' Or one could tell the user to edit these config files as root (or the owner of the files). Note from the Author or Editor: |
Walter Doekes | Oct 04, 2011 | |
Printed, PDF, Safari Books Online, Other Digital Version | Page AGI United States |
In the AGI section, under the heading: "Async AGI--AMI Controlled AGI", the syntax used to force Asterisk to execute AGI scripts asynchronously is written as: AGI(async:agi) When in reality, it is actually the other way around: AGI(agi:async) Thanks! -Randall Note from the Author or Editor: |
Randall Degges | Sep 24, 2011 | |
Printed | Page 352 res_odbc.conf file |
In the res_odbc.conf file the following line limit => 0 stops asterisk connecting to the MySQL database. When using CLI the command 'odbc show' does not show the DSN asterisk-connector. The solution was to remove the line. Note from the Author or Editor: |
David Hanna | Aug 09, 2011 | Sep 23, 2011 |
Page 352 Example configuration of res_odbc.conf |
If you enable the option "limit =>0" using the PostgreSQL database, Asterisk will can not connect to the database: [asterisk] enabled => yes dsn => asterisk-connector username => asterisk password => welcome pooling => no limit => 0 pre-connect => yes When you execute "odbc show" into the Asterisk CLI the output will look like: ODBC DSN Settings ----------------- You need to disable this option: [asterisk] enabled => yes dsn => asterisk-connector username => asterisk password => welcome pooling => no ; limit => 0 ---Disable this option using PostgreSQL database--- pre-connect => yes After you disabled this option the output of the Asterisk CLI will look like: ODBC DSN Settings ----------------- Name: asterisk DSN: asterisk-connector Last connection attempt: 1969-12-31 19:00:00 Pooled: No Connected: Yes Note from the Author or Editor: |
Juan Muriel | Aug 03, 2011 | ||
Page 265 lower middle |
The paragraph: "We’ve included the Queues context in the LocalSets context so that our telephones can call the queues we’ve set up. In Chapter 15, we’ll define menu items that go to these queues. Save the changes to your extensidons.conf file, and reload the dialplan with the dialplan reload CLI command." Said "extensidons.conf" and should be: extensions.conf: "We’ve included the Queues context in the LocalSets context so that our telephones can call the queues we’ve set up. In Chapter 15, we’ll define menu items that go to these queues. Save the changes to your extensions.conf file, and reload the dialplan with the dialplan reload CLI command." Note from the Author or Editor: |
Juan Muriel | Jul 07, 2011 | Sep 23, 2011 | |
Page 338,339 Subtitle "The Dialplan" - Example code |
In the code for the department's extensions, fax extension, directory extension, operator extension and, invalid and timeout extension (1, 2, 3, #, 0, i, t), the line with the Verbose() application is incomplete: exten => 1,1,Verbose(1, ; Sales Queue - see Chapter 13 for details same => n,Goto(Queues,7002,1) exten => 2,1,Verbose(1, ; Service Queue - see Chapter 13 for details same => n,Goto(Queues,7001,1) exten => 3,1,Verbose(1, same => n,Background() ; Address and fax info same => n,Goto(s,menuprompt) ; Take caller back to main menu prompt exten => #,1,Verbose(1, same => n,Directory() ; exten => 0,1,Verbose(1, ; Operator extension/queue same => n,Dial(SIP/operator) exten => i,1,Verbose(1, same => n,Playback(invalid) same => n,Goto(s,menuprompt) exten => t,1,Verbose(1, same => n,Goto(0,1) Could be something like: exten => 1,1,Verbose(1,Call to the Sales Extension) ; Sales Queue same => n,Goto(Queues,7002,1) exten => 2,1,Verbose(1,Call to the Sales Service) ; Service Queue same => n,Goto(Queues,7001,1) exten => 3,1,Verbose(1,Call to the address and fax info Extension) same => n,Background() ; Address and fax info same => n,Goto(s,menuprompt) ; Take caller back to main menu prompt exten => #,1,Verbose(1,Call to the Directory Service Extension) same => n,Directory() ; exten => 0,1,Verbose(1, Call to the Operator Extension) ; Operator extension/queue same => n,Dial(SIP/operator) exten => i,1,Verbose(1,Incoming call to invalid number) same => n,Playback(invalid) same => n,Goto(s,menuprompt) exten => t,1,Verbose(1,the caller doesn’t give input in time) same => n,Goto(0,1) Note from the Author or Editor: |
Juan Muriel | Jul 06, 2011 | Sep 23, 2011 | |
Printed | Page 202 3rd paragraph |
The syntax for the GotoIfTime() application is incomplete. It omits to show the 'false' path label, after a colon. This is inconsistent with what is show for GotoIf() on page 199. The syntax definition should read: GotoIfTime(times,days_of_week,days_of_month,months?destination1:destination2) and then the following explanation should be modified that destination1 is used if the date and time match the criteria, and destination2 is used otherwise. (what is actually described is, I believe, the Asterisk 1.6 behaviour). Note from the Author or Editor: |
Bob Eager | Jul 03, 2011 | Sep 23, 2011 |
Printed | Page 255 Paragraph commencing with "The magic..." |
The [subFreenum] context at the top of the page starts with a call to Verbose(). However, the paragraph commencing "The magic..." (about two thirds of the page down) says, in the second sentence: "After the NoOp() on the first line...". Clearly this should say something like "After the initial call to Verbose()...". Note from the Author or Editor: |
Bob Eager | Jun 12, 2011 | Sep 23, 2011 |
Printed, PDF, Safari Books Online, Other Digital Version | Page 272 Error in dialplan syntax |
; Used for unpausing agents in all available queues exten => *87,1,Verbose(2,UnPausing member in all queues) same => n,GoSub(subSetupAvailableQueues,start,1()) ; if we don't define a queue, then the member is unpaused from all queues same => n,UnPauseQueueMember(,${MemberChanType}/${MemberChannel}) same => n,GotoIf($[${PQMSTATUS} = PAUSED]?agent_unpaused,1:agent_not_found,1) In Unpause section of dialplan there is a variable error it should be like following same => n,GotoIf($[${UPQMSTATUS} = UNPAUSED]?agent_unpaused,1:agent_not_found,1) Note from the Author or Editor: |
Satish Patel | May 27, 2011 | Sep 23, 2011 |
Printed | Page 569-570 Configuration section - under [Definitions] |
Four of the lines for 'failregex =' are in error. They are functionally all the same in the example - the text after '<HOST>' in each case has been wrapped (no problem there) but has acquired a '#' symbol at the start of the continued line, thus making it into a comment. There are four occurrences of this - one at the bottom of page 569, and three more at the top of page 570. Note from the Author or Editor: |
Bob Eager | May 23, 2011 | Sep 23, 2011 |
Printed | Page 440 First line under 'Using Festival with Asterisk' |
"we need to module" should read "we need to modify". Note from the Author or Editor: |
Bob Eager | May 22, 2011 | Sep 23, 2011 |
Printed | Page 159 Halfway down |
There is an error in the description of the 'maxsilence' option. The relationship to the value of 'minsecs' is inverted; in other words, it should say that if 'maxsilence' is set greater than or equal to 'minsecs', a warning will be generated. Note from the Author or Editor: |
Bob Eager | May 19, 2011 | Sep 23, 2011 |
Printed | Page 133 Second example block |
The first exten => line under [general] has a minor error. It reads: exten => _NXXNXXXXXX,1,Dial({LOCAL}/$EXTEN}) and should of course read: exten => _NXXNXXXXXX,1,Dial({LOCAL}/${EXTEN}) (i.e. there is a missing { before EXTEN) Note from the Author or Editor: |
Bob Eager | May 19, 2011 | Sep 23, 2011 |
Printed | Page 171 Immediately after Table 8-5 |
The text says "To allow users to dial 8500...". But the following dialplan example says: exten => *98,.... which is not the same thing at all! Note from the Author or Editor: |
Bob Eager | May 17, 2011 | Sep 23, 2011 |
Safari Books Online | 2 3rd paragraph (The Zapata Telephony Project) |
Public Switched Telephone Interface(PSTN) -> Public Switched Telephone Network(PSTN) Note from the Author or Editor: |
Kunimitsu Arai | May 16, 2011 | Sep 23, 2011 |
PDF, Other Digital Version | Page 155 Several places |
All of the examples using Goto() are incorrect. They all omit the priority field, e.g.: exten => 911,Goto(dialsap,1) should be: exten => 911,1,Goto(dialpsap,1) This is a consistent error in this section. Note from the Author or Editor: |
Bob Eager | May 16, 2011 | Sep 23, 2011 |
Page 78 lower middle |
The text says to copy the indications.conf.sample from /usr/src/asterisk-complete/1.8/configs/. However, if you're following the setup til this page you would actually copy from ~/src/asterisk-complete/asterisk/1.8/configs. Also, you might want to add sudo cp for those of us who are still learning Linux. Note from the Author or Editor: |
PhilMDev | Apr 13, 2011 | Sep 23, 2011 | |
Printed | Page 61 Middle of the page |
When attempting to follow the instructions regarding menuselect. It appears that it was already setup for curses. Also, you specify (for CentOS) sudo yum install libnewt-devel. It's actually sudo yum install newt-devel. (http://www.hikaro.com/linux/newt-library-libnewt-not-found.html) And, once you have installed newt you have to go through the process to clear out menuselect and create it again. Note from the Author or Editor: |
Anonymous | Apr 13, 2011 | Sep 23, 2011 |
Printed, PDF, Safari Books Online, Other Digital Version | Page 223 findslot row in table |
There is a broken cross reference in the findslot row of the table on page 223. It says: "Configures the parking slot selection behavior. See ??? for more details." "???" should be replaced with some text Note from the Author or Editor: |
Anonymous | Apr 11, 2011 |