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.
Version |
Location |
Description |
Submitted By |
Date submitted |
Date corrected |
Printed, PDF, , 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: Fixed in:
https://prod.oreilly.com/external/authors/books/9780596517342/branches/3rd_edition
Merged to
https://prod.oreilly.com/external/authors/books/9780596517342/current
|
Randall Degges |
Sep 24, 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: Russell has also said another trick we can use would be something like:
$ cat | sudo tee -a foo.txt
|
Walter Doekes |
Oct 04, 2011 |
|
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: Not an issue in the 4th edition.
|
Paul McGrath |
Apr 10, 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: Fixed in subversion in the 3rd edition. Removed from 4th edition as it is not required for RHEL 6.x
|
Paul McGrath |
Apr 10, 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: This is going to be updated and fixed in the 4th edition as that section is going to be reviewed and fixed. No change required for the 3rd edition at this time.
|
Anonymous |
Apr 26, 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: Fixed in subversion, 4th edition
|
Javier Zanon |
Nov 22, 2012 |
|
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: Fix in subversion in ATDG 4e
|
Javier Zanon |
Nov 22, 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: Thanks for submitting errata! As this is deprecated functionality, but not broken in the 3rd edition, the change has not been made there. However, it has been made for the 4th edition. Thanks!
|
Anonymous |
May 08, 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: pipe should be removed, already removed in repo for 4th edition
|
Anonymous |
May 11, 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: Fixed in the repository for the 4th edition, thanks!
|
Fedja Beader |
Aug 29, 2012 |
|
|
2
3rd paragraph (The Zapata Telephony Project) |
Public Switched Telephone Interface(PSTN) -> Public Switched Telephone Network(PSTN)
Note from the Author or Editor: Public Switched Telephone Network
Leif: I have fixed this in subversion.
|
Kunimitsu Arai |
May 16, 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: I have updated the sidebar in subversion to say "yum install newt-devel".
O'Reilly, you'll need to update 'CentOS: yum install libnewt-devel' to be 'CentOS: yum install newt-devel'.
This is in the sidebar in chapter 3.
|
Anonymous |
Apr 13, 2011 |
Sep 23, 2011 |
PDF |
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: Throughout the book (chapters 3, 4, 6, 18, and 24) there is 1-2 instances of /usr/src/asterisk-complete/... which should be changed to ~/src/asterisk-complete/...
I've changed this in subversion and merged from the 3rd_edition repo to current.
|
PhilMDev |
Apr 13, 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: The $EXTEN} is incorrect, and should be changed to be ${EXTEN}.
Leif: I have changed this in subversion.
|
Bob Eager |
May 19, 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: [emergency-services]
exten => 911,1,Goto(dialpsap,1)
exten => 9911,1,Goto(dialpsap,1) ; some people will dial '9' because
; they're used to doing that from the PBX
exten => 999,1,Goto(dialpsap,1)
exten => 112,1,Goto(dialpsap,1)
exten => dialpsap,1,Verbose(1,Call initiated to PSAP!)
same => n,Dial(${LOCAL}/911) ; REPLACE 911 HERE WITH WHATEVER
; IS APPROPRIATE TO YOUR AREA
[internal]
include => emergency-services ; you have to have this in any context
; that has users in it
[no-emergency-services]
exten => 911,1,Goto(nopsap,1)
exten => 9911,1,Goto(nopsap,1) ; for people who dial '9' before external calls
exten => 999,1,Goto(nopsap,1)
exten => 112,1,Goto(nopsap,1)
exten => nopsap,1,Verbose(1,Call initiated to PSAP!)
same => n,Playback(no-emerg-service) ; you'll need to record this prompt
[remote-users]
include => no-emergency-services
|
Bob Eager |
May 16, 2011 |
Sep 23, 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 |
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: fixed and committed in 3rd edition and current branches
|
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: Change verbiage from "To allow users to dial 8500 to check their voicemail" to "To allow users to dial an extension to check their voicemail, you could add an extension to the dialplan like this:"
|
Bob Eager |
May 17, 2011 |
Sep 23, 2011 |
|
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: Modified in svn for ATDG 4e.
|
Bryan Anderson |
Jan 30, 2013 |
|
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: We should change the syntax example from:
GotoIfTime(times,days_of_week,days_of_month,months?label)
to:
GotoIfTime(times,days_of_week,days_of_month,months?labeliftrue[:labeliffalse])
|
Bob Eager |
Jul 03, 2011 |
Sep 23, 2011 |
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: I have committed a change in 606153 of the 9781449332426/current repo.
|
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: This figure shows channel 3 as extending from 15 seconds until about 38 seconds or so. The graphic should be updated to match the text, by showing a bar from 15 seconds to 30 seconds on channel 3 (third line). Thanks!
|
Marco Meklenburg |
Mar 11, 2013 |
|
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: I have corrected this in rev 606183 within the 9781449332426 repository.
|
Marco Meklenburg |
Mar 11, 2013 |
|
Printed, PDF, , 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: I don't have access to the latest changes, but if this is true, it should be pretty obvious what needs to be updated :) If not, then let me know!
Leif: I have updated the 3rd_edition and current repositories. In chapter 11, in the table where findslot is documented, there is a link to findslot_details which has no text. I've added "Parking Lots" as the link text.
|
Anonymous |
Apr 11, 2011 |
|
|
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: Fixed in the 4th edition
|
Bryan Anderson |
Jan 31, 2013 |
|
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: Edit sentence to read:
For those countries fortunate enough to have ENUM in production, you can perform ENUM lookups directly to their e164.arpa zones.
|
C.J. Adams-Collier |
Nov 17, 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: Fixed in 3rd_edition repo and current repo.
|
Bob Eager |
Jun 12, 2011 |
Sep 23, 2011 |
PDF |
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: Should be corrected as noted.
|
Juan Muriel |
Jul 07, 2011 |
Sep 23, 2011 |
Printed, PDF, , 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: Fixed and committed to 3rd_edition and current repos
|
Satish Patel |
May 27, 2011 |
Sep 23, 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 |
|
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: Thanks for catching this. It's been fixed in this and future versions.
|
Tom Mazzotta |
Sep 03, 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: Fix in subversion.
|
Anonymous |
Jan 30, 2012 |
|
PDF |
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: Updated and fixed. Committed to 3rd_edition repo and current.
|
Juan Muriel |
Jul 06, 2011 |
Sep 23, 2011 |
|
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 |
|
PDF, |
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: No change required. Use a newer version of Ubuntu.
|
Yassen Damyanov |
Nov 05, 2011 |
|
PDF |
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: Fixed!
|
Juan Muriel |
Aug 03, 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: Updated to be limit => 1 so that we would open at least one connection.
Committed to 3rd edition repo and current.
|
David Hanna |
Aug 09, 2011 |
Sep 23, 2011 |
Printed, |
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: I have fixed this in subversion.
|
Nicholas Barnes |
Feb 11, 2012 |
|
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: Fixed and committed to 3rd_edition and current.
|
Bob Eager |
May 22, 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: Fixed and committed to 3rd_edition and current repo
|
Bob Eager |
May 23, 2011 |
Sep 23, 2011 |