VoiceXML 2.1 Development Guide Home  |  Frameset Home


<voxeo:recordcall>  element


The <voxeo:recordcall> element is a proprietary extension to the VoiceXML specification that allows the developer to record both sides of a call, recording the human and the application interaction to a wav file that is stored in the developer's Voxeo File Manager in the 'recordings' subdirectory. On a premise install these recordings will be saved to the voxeo/webapps/www/MRCP/Recordings folder.  <voxeo:recordcall> can record to a stereo audio file and contains *two* 8-bit streams, (note that two 8-bit streams is not the same as recording in 16 bit). Note that using the <vxml xmlns:voxeo> element/attribute pairing is required for the inclusion of this extension element in your code. Also be aware that attempting to 'turn on' call recording while it has already been enabled will result in a fatal application error. However, you are free to turn it on and off at your leisure within the application by using the 'value' attribute.


usage

<voxeo:recordcall info="CDATA" infoexpr="(ECMAScript Expression)" value="(0-100)">


attributes

info Data Type: CDATA Default: Required
The 'info' attribute allows the developer to specify information that is inserted into the resultant recorded wav filename that makes identification easier. Note that ECMA values are NOT supported; (for instance, specifying the 'info' attribute with a value of 'application.MyVar' is not valid). Resultant audio filenames will be in the following format:

AccountID -ApplicationID-SessionID-UserData(Info).wav

As such, a sample file might well look like this:

111-22222-abcdefg1234567abcdefg1234567-MyUserDefinedInformation.wav
infoexpr Data Type: (ECMAScript Expression) Default: "" (undefined)
The 'infoexpr' attribute allows the developer to specify an ECMAScript expression that is inserted into the resultant recorded audio file name that makes identification easier. Resultant audio filenames will be in the following format:

AccountID -ApplicationID-SessionID-UserData(Info).wav

As such, a sample file might well look like this:

111-22222-abcdefg1234567abcdefg1234567-MyUserDefinedInformation.wav
value Data Type: (0-100) Default: Required
The 'value' attribute specifies what percentage of calls will be recorded. Setting this value to '100' will record all calls that hit the application, while setting it to '30' will record 3 out of 10 calls that come in. Setting this value to '0' allows the developer to programmatically turn call recording on and off within the application flow



shadow variables

none


parents

<block>


children

none


code samples

<voxeo:recordcall> sample
<?xml version="1.0" encoding="UTF-8" ?>

<!-- declaring the 'xmlns:voxeo' attribute is required -->

<vxml version="2.1" xmlns="http://www.w3.org/2001/vxml"
    xmlns:voxeo="http://community.voxeo.com/xmlns/vxml">

<meta name="author" content="Matthew Henry"/>
<meta name="copyright" content="2005 voxeo corporation"/>
<meta name="maintainer" content="YOUR_EMAIL@HERE.COM"/>


    <form id="F1">
        <block>
            <!-- the value of 100 will start recording -->
            <voxeo:recordcall value="100" info="Passcode" />

            <prompt>
                Thank you for calling.
                Please note that all calls into this system
                are recorded for training purposes.
            </prompt>
        </block>

        <field name="F_1" type="digits?length=4">
            <prompt>
                Please enter your passcode to access the system.
            </prompt>

            <filled>
            <prompt>
              Thank you. Your passcode is being verified.
            </prompt>
            <goto nextitem="B_1"/>
            </filled>
        </field>

        <block name="B_1">
          <!-- the value of '0' will turn off recording -->
          <voxeo:recordcall value="0" info="Passcode" />

            <prompt>
                We will now grant access to the application, oh Chosen One.
            </prompt>
            <exit/>
        </block>
    </form>
</vxml>



additional links

none


  ANNOTATIONS: EXISTING POSTS
feel012
9/9/2008 10:56 PM (EDT)
I have a question..
Is <voxeo:recordcall> element extension element??
It is not a standard element??
Does it use only in voxeo vxml parser???
jdyer
9/9/2008 11:17 PM (EDT)
Hi!

  Yes [b]<voxeo-recordcall>[/b] is a proprietary Voxeo element and as such it is relegated to our Prophecy platform.  Please let us know if there are any other questions, we are certainly always more then happy to assist our developers!


Regards,

John
Customer Engineer
w1redone
10/3/2008 2:39 AM (EDT)
is there a length/time limit on the recordcall parameter?
voxeoJeffK
10/3/2008 2:57 AM (EDT)
Hi,

While there is no predefined upper limit on the recordings at this time, we would ask you to keep recordings reasonable on our free staging environment.

regards,
Jeff K.
w1redone
10/4/2008 8:04 PM (EDT)
I am not having any luck recording bridged calls. Here is the code I am trying to use:

<voxeo:recordcall value="100" info="save" />
<transfer name="MyCall" dest="tel:+12225556633" bridge="true" connecttimeout="20s" maxtime="600s">  
</transfer>

Is this even possible?

Thanks!
voxeojeremyr
10/4/2008 8:48 PM (EDT)
Hi,

It sure is possible.  I went ahead and created a little application that would do that for you.  The only thing you will want to change is the phone number of the transfer destination.
[code] 
<?xml version="1.0" encoding="UTF-8" ?>

<!-- declaring the 'xmlns:voxeo' attribute is required -->

<vxml version="2.1" xmlns="http://www.w3.org/2001/vxml"
    xmlns:voxeo="http://community.voxeo.com/xmlns/vxml">

<meta name="author" content="Richmond"/>
<meta name="copyright" content="2005 voxeo corporation"/>
<meta name="maintainer" content="YOUR_EMAIL@HERE.COM"/>


    <form id="F1">
        <block>
            <!-- the value of 100 will start recording -->
            <voxeo:recordcall value="100" info="Passcode" />
            <prompt>
                Thank you for calling.
                Please note that all calls into this system
                are recorded for training purposes.
            </prompt>
        </block>

       
        <transfer name="T_1" bridge="true"
                dest="tel:+14075551234">
        <prompt> Placing the call, y'all</prompt>
      <filled>
        <if cond="T_1 == 'busy'">
            <prompt>The line is busy, Lizzie. </prompt>
            <exit/>
        <elseif cond="T_1 == 'noanswer'"/>
            <prompt> No one's home, metronome. </prompt>
        </if>
      </filled>
  </transfer>
    </form>
</vxml>[/code]

If this doesn't work for you, go ahead and open an account ticket and either attach the logs of your test call or give us the time of the call and I can look it up to get a better idea of what is happening

Thanks,
Jeremy Richmond
Voxeo Support
ievolve
1/21/2009 3:03 AM (EST)
My client wants to record conversations between sales reps and clients, I suppose that the rep could click a button in their admin which would trigger a voiceXML app that would 1)call the rep 2)connect in the client, and 3) record the whole conversation.  Is this possible?

Once the call has been recorded though I need to have that call accessible so a manager can listen to those calls.  It would be nice if those recordings could be posted back to me via FTP or form post.

If those recordings are stored in the "recordings" directory on the voxeo end, is there some sort of a way to know what the URL is to that recording so I could record it in our DB for future reference?
voxeoJeffK
1/21/2009 5:05 AM (EST)
Hello,

Yes this is certainly possible. May I recommend using <voxeo:recordcall> in the VoiceXML to record both call legs:

http://docs.voxeo.com/voicexml/2.0/recording.htm

The recordings are stored in your account under the directory "root/recordings/year/month/day/", and are uniquely named. You may fetch them from your account via FTP by connecting to

ftp://[voxeo-username]:[voxeo-password]@webhosting.voxeo.net

If there are any details you would like to explore, or have any questions at all we hope you will feel free to ask.

regards,
Jeff K.
Voxeo Support
dimagi
3/11/2009 4:19 PM (EDT)
I am trying to only record one side of a bridged call.  Is this possible or do I have to record both ends?
voxeojeff
3/11/2009 4:57 PM (EDT)
Hi there,

Unfortunately, <voxeo:recordcall> will only record both sides of the call.  However, as the recording will be in stereo, you have the ability to split the call into two channels.  You can then delete one, leaving you with just one side of the call.

Hope this helps,
Jeff Menkel
Voxeo Corporation
ranm
7/26/2010 5:55 AM (EDT)
Hi,
When setting the info attribute to "myinfo", recording on a premise install of P10, I get a file name for example:
1-8a8a828c2954ffdb0129557796e70084-97ebad67b546cfb3e20563b0f8a0d397-0-myinfo.wav
It seems this name does not match the format described above, as there is an additional portion "-0-", just before "myinfo.wav".
What is this additional portion? Can I control it from my vxml?
Regards,
Ran
voxeoTonyT
7/26/2010 7:23 AM (EDT)
Hello,

We tend to see an those kinds of additions to recorded files when there are multiple recordings in one session.  The '0' you are encountering may be the first recording in a case where there are multiple recorded files for a specific session.  So at first glance it seems like that '0' is an incremental character.  Let us know if this information helps or not. 

Regards,

Tony Taveras
Customer Engineer
Voxeo Support
ranm
7/26/2010 7:30 AM (EDT)
Note the useful attribute "infoexpr", which allows to set the info attribute as an ECMA value. I suggest updating the current description with this attribute.
regards,
Ran
VoxeoDustin
7/26/2010 11:38 AM (EDT)
Hello Ran,

Thanks for pointing that out. I have updated the documentation to reflect that attribute and you should see the change now.

Regards,
Dustin Hayre
Solutions Engineer
Voxeo Corporation
SSA_Test_Voxify
9/8/2010 6:05 PM (EDT)
In all my applications, I start with a value of 100, to record all calls. But in certain parts of the application, I want to disable call recording while capturing sensitive information. I will have to set the value to '0' for those nodes. My questions are:

1. Does the '0' setting disable recording only for the current call or do all new calls to the application also stop recording?
2. Can I turn recording back on for the same call once I am past the sensitive data collection node?
3. Is there a limit to the number of times I can turn on/off call recording in a given call?

Thanks,
-hari
voxeoJeffK
9/9/2010 12:51 AM (EDT)
Hello Hari,

I'll answer your questions in order:
[code]
1. Does the '0' setting disable recording only for the current call or do all new calls to the application also stop recording?
[/code]
Each session is based on the code you have for that application. Changing your code will then affect every new session that executes it. Since the default is 0, simply removing voxeo-recordcall altogether will disable recording completely.

[code]
2. Can I turn recording back on for the same call once I am past the sensitive data collection node?
[/code]
Certainly. You can set/reset/disable as desired within the application code. here's an example of enabling recording, and then disabling it for secure input, and then re-enabling.

    <form id="F1">
        <block>
            <!-- the value of 100 will start recording -->
            <voxeo:recordcall value="100" info="myCall" />
            <prompt>
                Thank you for calling.
                Please note that all calls into this system
                are recorded for training purposes.
            </prompt>
            <!-- the value of '0' will turn off recording -->
            <voxeo:recordcall value="0" info="Passcode" />
        </block>

        <field name="F_1" type="digits?length=4">
            <prompt>
                Please enter your passcode to access the system.
            </prompt>

            <filled>
            <prompt>
              Thank you. Your passcode is being verified.
            </prompt>
            <goto nextitem="B_1"/>
            </filled>
        </field>

        <block name="B_1">
            <!-- the value of 100 will start recording -->
            <voxeo:recordcall value="100" info="myCall" />
            <prompt>
                We will now grant access to the application, oh Chosen One.
            </prompt>
            <exit/>
        </block>
    </form>

[code]
3. Is there a limit to the number of times I can turn on/off call recording in a given call?
[/code]

No, you are welcome to change it as desired.

Regards,
Jeff Kustermann
Voxeo Support
ferante
10/8/2010 6:55 PM (EDT)
Hi I was wondering if it's possible to access the caller's phone number and pass it to either the "info" or "infoexpr" field.  If you can give an example too, that would be great.  It seems like this should be possible but I couldn't seem to find the info anywhere, so if I missed that, you can just point me to the relevant page.  Thanks,
Abe
VoxeoDante
10/8/2010 7:21 PM (EDT)
Hello Abe,

The callerID for a user is available in the application scope in a session variable.

Take a look at the VoiceXML session Variable page which shows all the available variables;

http://www.vxml.org/mot_sessionvars.htm

You should be able to set the value of session.callerid to your own variable and use that in the infoexpr attribute of voxeo:recordcall.

<voxeo:recordcall value="100" infoexpr="myVar" />

I hope this helps.

Regards,
Dante Vitulano
ferante
10/8/2010 7:41 PM (EDT)
Thanks Dante,

I tried some things from that page. I got it working with inbound calls, but not with outbound calls.


What worked: For inbound calls, the callers number can be appended to recorded filename with:
(works for inbound calls, null/undefined for outbound token calls)
<voxeo:recordcall value="100" infoexpr="session.callerid" />

So now I'm wondering how to get the same information from an outbound call (using a call token).  I tried several things like
infoexpr="session.calledid",
infoexpr="session.connection.local.uri", ...

None of the things I tried worked, so I'm wondering if this is possible and if so, how.

thanks,
Abe
voxeoTonyT
10/8/2010 8:43 PM (EDT)
Hello,

We may need to review your code and the log file generated when you execute your application so we can see what is going on.  If you'd like to go that route then I think it would be best to take that communication into an account ticket or if you'd like to try copying and pasting the example at the bottom of http://www.vxml.org/mot_sessionvars.htm and test that to see if you still get null values on calledid when you place an outbound call that would be a good route to take as well.  Let us know how you would like to proceed.

Regards,

Tony Taveras
Customer Engineer
Voxeo Support
ferante
10/10/2010 6:21 PM (EDT)
Hi Tony,

Thanks for your help.  I figured out how to get it to work by using cgi/php.  Up until now, I had been using a static vxml file and I was trying to get the session variables (like session.calledid) from this file with the infoexpr attribute of voxeo:recordcall.  This is what wasn't working.  I had been a little reluctant to move to a dynamic cgi type vxml file to save myself the server configuration.  Today though, I set up my server to serve the vxml from php (as per some of the documentation like http://www.vxml.org/frame.jsp?page=qs_vars.htm ).  With this setup, I can pass any arbitrary info (I may need to anonymize the phone numbers at some point) using the call token query string. 

For anyone facing similar problems in the future, here are the relevant snips of code:

////////////////request:
wget "http://session.voxeo.net/VoiceXML.start?tokenid=<yourTokenHere>&callerid=<yourCallerId>&numbertodial=<theirNumber toDial>&subjectId='Abe'"

////////////////PHP file
<?php
//grab the subjectid from querystring
//If not isset -> set with dumy value
if (!isset($_REQUEST['subjectId']))
{
$_REQUEST['subjectId'] = "unknown";
}
$subjectId = $_REQUEST["subjectId"];
//this is dynamic s***, do not cache
header('Cache-Control: no-cache');
?>

<?xml version="1.0" encoding="UTF-8"?>
<vxml version="2.1" xmlns="http://www.w3.org/2001/vxml"
xmlns:voxeo="http://community.voxeo.com/xmlns/vxml">

  <var name="subjectId"
    expr="<?php echo $subjectId ?>" />

...

  <block>
  <voxeo:recordcall value="100" infoexpr="subjectId" />
  </block>


I never did figure out exactly why the session.calledid wasn't working (my original problem).  However, this solution (using cgi/server-side php) was good for me b/c now I can pass whatever arbitrary information I need.

Thanks again,
Abe
DPagliarulo
11/26/2012 8:03 PM (EST)
Hello,

I was wondering if one is able to use the <voxeo:recordcall> in a similar way to the <record> element, in which a caller would be prompted to record something, and using a termchar like # to end the recording?

Thanks!
-D.P.
MattHenry
12/3/2012 10:52 PM (EST)


Hi there,

This isn't really what recordcall was designed for, but if you want to stick with VXML I suppose you could do something like this:

<block name="B1">
<!-- enable recordcall -->
</block>

<field>
<!-- set termchar -->
<!-- upon match, goto nextitem B2 -->
</field>

<block name="B2">
<!-- disable recordcall -->
</block>

However, I suspect that the end recording would also include the DTMF tone.

=(


SHOT IN THE DARK: Depending on what you really want to do here, you might want to consider using a CCXML join/unjoin conference, where you could unjoin call leg #3 via termchar; where leg#3 is an outbound call to a VXML dialog that consists of recordcall + <break time="60m"/> in a form/block document....not sure if this suits your use-case, though.


Cheers,

Matthew Henry

Premise_CityofScottsdale
1/14/2013 4:26 PM (EST)
When using RecordCall from CCXML, when I listen to the recording any DTMF tones appear to be muted.  What is left in the wav file is very short, maybe 10ms.  Is this a feature?  If so, is there any way to disable it.
VoxeoDante
1/28/2013 5:21 PM (EST)
Hello,

The Voxeo Platform will usually negotiate out-of-band DTMF on all calls.  This means that rather than the DTMF tone coming through the line as an audible tone, it is sent as an asynchronous RTP event that is passed to the intended target.  Basically this means that the DTMF tones are not sent as audio, but rather as events.

If you wanted to disable to that, you would need to modify the data that we were to supply in the SDP.  While this can be done, it is not recommended.

If you have some issue that you are trying to solve, please let us know, and we can take a look.

Regards,
Danté Vitulano
Solutions Architect

[url=http://www.voxeo.com/university/home.jsp]
[img=http://www.voxeo.com/images/logos/VoxeoUnivLogo.png/]
[/url]
[b][color=blue]Interested in Training? Visit the Voxeo University Page to Learn More![/color][/b]
zviag
5/13/2013 5:55 AM (EDT)
Hello,

Is there a way to configure Prophecy to delete the recorded calls files after - let say - 30 day?

Thanks
Zvi Agmon
VoxeoBrianChurch
5/20/2013 12:42 PM (EDT)
Hello,

Prophecy does not have the functionality to schedule file deletions. This is something you will need to do via your own scripting or OS services.

Regards,
Brian Church
Customer Support Engineer
Voxeo Corporation

login



© 2013 Voxeo Corporation  |  Voxeo IVR  |  VoiceXML & CCXML IVR Developer Site