Summary:ASTERISK-10008: ExternalIVR changes not playing audio
Reporter:Chris Tooley (ctooley)Labels:
Date Opened:2007-08-01 15:52:14Date Closed:2011-06-07 14:03:01
Versions:Frequency of
Environment:Attachments:( 0) app_deadexternalivr.c-1.4.10
( 1) app_externalivr.c.unified_diff-1.4.10
( 2) play_beep.sh
Description:Attached is a diff against Asterisk 1.4.9 for some proposed changes to
app_externalivr.c which improves functionality and adds support for
socket connections instead of running an application.  However, I
can't seem to get the audio to play when it uses the socket

I've also attached a simple script that plays a standard prompt and
here is the dialplan entries to  play the script:

exten => s,1,Answer()
exten => s,n,ExternalIVR(/root/play_beep.sh)

That will play the beep audio file in the asterisk sounds directory.

Changing the dialplan to:
exten => s,1,Answer()
exten => s,n,ExternalIVR(ivr://localhost:2949)

You should be able to have netcat listen to port 2949
   nc -l -p 2949
and have asterisk connect to that.  Then, typing the following in the
nc session should do the same thing:

It doesn't play the audio and I can't seem to figure out why.  I'm
guessing the generator isn't working as expected?
Comments:By: Chris Tooley (ctooley) 2007-08-02 08:49:46

Also, DTMF from the user isn't getting to ExternalIVR.  You should be able to see that in netcat.  Doesn't this point to the data not getting passed to/from core?

By: Chris Tooley (ctooley) 2007-08-07 16:50:40

The socket mode of ExternalIVR works just fine if asterisk is started with -f.  There seems to be something wrong with thread communication?

By: Chris Tooley (ctooley) 2007-08-07 18:47:25

Last 2 files work.  ExternalIVR now supports socket mode via:


And DeadExternalIVR is now included so that an ExternalIVR connection can be made on a hung up channel.  This could probably be implemented in ExternalIVR with some channel status checks, but this works fine.

By: Chris Tooley (ctooley) 2007-08-07 18:59:00

Don't use that version of app_deadexternalivr.c, it's broken.  I have a replacement but can't upload it until someone removes the attachment that's there.

By: Jared Smith (jsmith) 2007-08-07 19:08:46

Attachment deleted at ctooley's request

By: Chris Tooley (ctooley) 2007-08-07 19:10:43

Ok, the version of DeadExternalIVR up there now should work fine.

By: Chris Tooley (ctooley) 2007-08-07 20:04:05

The files ending in -1.4.10 work in the 1.4.10 release (should work with any 1.4 release).  All instances of free() were changed to ast_free().

By: Donny Kavanagh (donnyk) 2007-10-02 14:22:29

My thoughts:

1) Follow the model of agi in trunk, there is no need for a DeadExternalIVR, when ExternalIVR runs let it decide which mode to run in based on the channel status.

2) Allow a call to transition from live -> dead mode if a user hangs up and the external ivr writer wishes to do so.  (much like you can ignore a sighup from agi and continue talking to asterisk)

3) Flag the externalivr commands as being avail on live only, or both live and dead.  If a user tries to use a live command on a dead channel, yell at them.

4) Network support is a great idea!

By: Russell Bryant (russell) 2007-11-06 15:25:28.000-0600

When we talked about this at Astricon, you were saying that you would port it to trunk, and then we'd merge it in.  Have you had any time to look into doing that?

By: Tilghman Lesher (tilghman) 2007-12-07 14:38:23.000-0600

No response from reporter.