VoiceXML 2.1 Development GuideHome  |  Frameset Home


<record>  element

The record element is an input item which records audio from the caller, and stores the resultant audio file in it’s namespace variable. Recorded audio files are stored on the Voxeo servers until the application ends, at which point the file is deleted. This being the case, a developer who wants to save his recorded audio file must submit the file and store it on his webserver using a server-side language. Recorded audio must be submitted by using the POST method only in order to successfully transfer the file.

In addition, the record element has a number of shadow variables available which contain specific information about the recordings duration, filesize, maximum time, and termcharacters pressed during the recording. See the documentation for shadow variables for further information.

Important Note: The Voxeo Voicecenter 5.5 VoiceXML platform has a known limitation in regards to the maximum allowable recording length. This is limited to 10 minutes maximum, (600s), due to an inherent limitation in the Nuance 8.5 ASR. While Voxeo has no control over this limitation, it should be noted that the Prophecy/Voicecenter 7.0 platform is not subject to this limitation.



usage
<record beep="(true|false)" cond="CDATA" dtmfterm="(true|false)" expr="CDATA" finalsilence="CDATA" maxtime="CDATA" modal="(true|false)" name="NMTOKEN" type="CDATA">


attributes
beepData Type: (true|false)Default: Optional (false)
The beep attribute, when set to true, allows the developer to insert a ‘beep tone’ to indicate to the caller that the application has begun recording. If set to 'false', (default), the caller will not hear the beep indicating that the recording has started.
condData Type: CDATADefault: Optional (true)
The cond attribute specifies a Boolean expression, which must equate to ‘true’ in order for the content to be visited and executed. (Additionally, the expr attribute must also be set to ‘undefined’, see below).
dtmftermData Type: (true|false)Default: Optional (true)
The dtmfterm attribute specifies whether the caller will be allowed to terminate the recording in progress with the press of a dtmf key. When set to 'true', (default), any dtmf keypress can end the recording session. If set to 'false', then the recording continues until a maxtime or finalsilence event is reached.
exprData Type: CDATADefault: Optional
The expr attribute specifies the initial value of  the element; if this value is ‘undefined’, (default), then the element will be visited by the FIA and executed. If  this attribute has a  value other than ‘undefined’, then the element will not be visited until explicitly set to 'undefined', by use of the clear element.
finalsilenceData Type: CDATADefault: 5s
The finalsilence attribute defines the amount of time that a caller can remain silent while the recording is being executed before the interpreter decides that the caller has finished recording the intended message. The value of this attribute is subject to the strict time formatting where ‘s’ or ‘ms’ must be appended to the actual time value, i.e.: In addition the value for this must not exceed '10s', else an error.semantic will be thrown.

<record name=”R1” finalsilence=”3s”>
maxtimeData Type: CDATADefault: Optional
The maxtime attribute specifies the maximum length of a recording in seconds, (s) or milliseconds, (ms). When a message exceeds the maxtime value, the caller will be prompted to re-record the message, (this behavior changes in VXML 2.0). Note that the maximum length of a recording on Voxeo's Staging network is limited to two minutes, (120s). However, this can be enabled for a production application; contact the support team for details.
modalData Type: (true|false)Default: False
This attribute is currently ignored in the voice browser. A modal setting of ‘true’ will disable all non-local speech grammars while executing the record element. When set to 'false', this would activate local grammars while in the record element.
nameData Type: NMTOKENDefault: Optional
The name attribute specifies the field item variable name used when referencing the recorded audio.
typeData Type: CDATADefault: Optional
The type attribute is an parameter which designates the MIME type of the recorded file. Allowable values are as follows:
  • audio/basic
  • audio/x-alaw-basic
  • audio/x-wav or audio/wav
  • * audio/x-nist-sphere

  • * = this value is supported in Voice Center 5.5, only, and is not supported on the Prophecy platform



shadow variables
RecordName$.durationThis shadow variable will tell us just how long the recorded message is, in milliseconds:

<record name="R_1"..>
..
<filled>
<prompt> the message was exactly <value expr="R_1$.duration"/> milliseconds long
</prompt>
..
RecordName$.sizeThis will return to us the actual filesize of the recorded message, in bytes. This can be useful for determining whether or not to submit our message, thus conserving server resources:

<if cond="R_1$.size < 0">
<!--dont do anything-->
<else/>
<submit next="Myserver.com"/>
RecordName$.termcharIf we need to find out if the caller used a termdigit to end the recording, this variable will return a boolean value that will satisfy this need. Note that in VWS 2.0, this shadow variable will return the actual dtmf key that was pressed, rather than a Boolean value.
RecordName$.maxtimeIf we need to find out if the caller reached the maxtime while within a <record> field, the developer can use this shadow variable. If maxtime was reached, then this shadow variable will return a value of 'true'; otherwise, it will return 'false'.



parents
<form>


children
<audio> <catch> <enumerate> <error> <filled> <grammar> <help> <noinput> <nomatch> <prompt> <property> <value>


code samples
<Record beep-dtmftem> sample
<?xml version="1.0" encoding="UTF-8"?>

<vxml version = "2.1">

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

<form id="F1">

  <record name="R_1" beep="true" dtmfterm="true">
    <prompt>
      here you will hear a beep indicating
      that you should start your recording.
    </prompt>

    <prompt>
      after you are finished, you may press any DTMF key to indicate that you are done recording.
    </prompt>

    <filled>
      <log expr="R_1$.duration"/>
      <log expr="R_1$.termchar"/>
      <log expr="R_1$.size"/>


      <prompt> your recording was <value expr="R_1"/> </prompt>
    </filled>

  </record>

</form>

</vxml>

<record cond-expr> sample
<?xml version="1.0" encoding="UTF-8"?>

<vxml version = "2.1">

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

<form id="F1">

  <record name="R_1" cond="false" expr="'SomeValue'">
    <prompt>
      this record element will be skipped, as the condition
      is set to false, and the expression is not set to undefined.
    </prompt>

    <filled>
      <prompt> never happen, buddy. </prompt>
    </filled>

  </record>

  <record name="R_2" cond="true" expr="">
    <prompt>
      this record element will get executed, as
      the condition is set to true and the
      expression is set to undefined.
    </prompt>

    <filled>
      <log expr="R_2$.duration"/>
      <log expr="R_2$.termchar"/>
      <log expr="R_2$.size"/>


      <prompt> your recording was <value expr="R_2"/> </prompt>

    </filled>

  </record>

</form>

</vxml>

<Record maxtime-finalsilence> sample
<?xml version="1.0" encoding="UTF-8"?>

<vxml version = "2.1">

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

<form id="F1">

  <record name="R_1" maxtime="20s" finalsilence="5s">
    <prompt>
      the maximum length of his message is 20 seconds.
      In addition, the longest a caller can remain silent is
      no more than 5 seconds, else the recording will be submitted.
    </prompt>

    <filled>
      <log expr="R_1$.duration"/>
      <log expr="R_1$.termchar"/>
      <log expr="R_1$.size"/>


      <prompt> your recording was <value expr="R_1"/> </prompt>
  </filled>

  </record>

</form>

</vxml>



additional links
W3C 2.0 Specification


  ANNOTATIONS: EXISTING POSTS
Deke
8/22/2005 3:05 PM (EDT)
This is kind of nitpicky, but the description of maxtime is inconsistent with the example.

You say:

The maxtime attribute specifies the maximum length of a recording in milliseconds, (ms), only. When a message exceeds the maxtime value...

And then in the example:

<record name="R_1" maxtime="20s" finalsilence="5s">

You specify seconds.
MattHenry
8/22/2005 5:05 PM (EDT)
Hiya Deke,

You are 100% correct; I think tat this 'ms only' line was due to limitations on our older voice browser, (VWS1.3/2.0), that made its way into the Motorola docs. I have this corrected, and it should be live sometime in the next week or two.

Thanks again!

~Matt
awirtz
1/3/2006 7:47 PM (EST)
Although the VXML platform is supposed to automatically use multipart encoding for submission of a form containing recorded audio, I have run into a few cases where it defaulted to x-www-form-urlencoded even with audio data.  Therefore it is a good idea to set the enctype of the submit explicitly to avoid any suprises. (not that urlencoded couldn't work, but it is much slower to decode than multipart and bloats the data significantly as well)

(I think what triggered this may have been submitting the recording not from inside the record tag, but from a subsequent field's filled block)

-Aaron
DaveMorris
3/27/2006 12:45 PM (EST)
It might be of some importance to note that if a person records a message and terminates it by simply hanging up, instead of pressing a digit, you will lose that recording unless you catch the disconnect error and do the transfer to your permanent storage.

Dave Morris
mikethompson
3/27/2006 1:42 PM (EST)
Hi Dave,

That sounds like something worth adding to our documentation.  I'll be sure to let the keepers know about this and see that they add this note to the next build of our docs.

Thanks,
Mike Thompson
Voxeo Extreme Support
moshe
3/27/2006 6:50 PM (EST)
The option "destexpr" references the option "dest," but "dest" is not defined.
MattHenry
3/27/2006 7:10 PM (EST)


Hiya Moshe,


'destexpr' should have been taken out upon my last edit to this element, as both 'dest' and 'destexpr' are Nuance-proprietary, and are not supported with our VXML browsers. I'll have this fixed in a jiffy in our docs.

~Matt

SSA_MarkPMiller
9/11/2006 5:11 PM (EDT)
Matt,

In your <record cond-expr> sample, each of the 'record' elements must have a unique name.

  <record name="R_2" cond="false" expr="'SomeValue'">
  ...
  </record>

  <record name="R_2" cond="true" expr="">
  ...
  </record>

An over sight, I'm sure, since you just caught me on that one in another post :-)

Mark
mikethompson
9/11/2006 6:25 PM (EDT)
Mark,

Good catch!  This certainly looks like a typo to me!  I will run this by Matt and make sure he sees his mistake.

Best,
Mike Thompson
Voxeo Corporation
movoco
10/20/2006 12:05 PM (EDT)
What is the best method for capturing and stopping a caller once they exceed the maxtime? I have tried this but it didn't get caught.

<if cond="msg$.maxtime == 'true'">
Sorry, you reached the max recording time of 15 seconds.
<goto next="#frm_record_by_area_record_message"/>
</if>
VoxeoTony
10/20/2006 7:21 PM (EDT)
Hello John,

Thanks for adding to this thread with that question.  In looking at your sample we assume you have a record tag that looks like this?

<record name="msg" beep="true" maxtime="15s">
<prompt> You have fifteen seconds to record after the beep </prompt>

  <filled>
<log expr="-------=====| msg filled |======------"/>
  <if cond="msg$.maxtime==true">
    Sorry, you reached the max recording time of 15 seconds.
    <goto next="#frm_record_by_area_record_message"/>
  </if>
</filled>
</record>

Please give this a test and let us know if this is what you are looking for.

Regards,

Tony
vinayagan
12/28/2006 5:59 AM (EST)
Hi,

  while recording when we press dtmf key(dtmfterm attribute is true) before speaking anything what will happen..

will it terminate recording and assign empty in record variable?
or
it will terminate and revisit the record again
Thanks
Nayagan
MattHenry
12/28/2006 12:34 PM (EST)


Hello Nayagan,

I believe that in this case, it would be treated as an immediate <reprompt>, which would then revisit the <record> field.

~Matt
yana
1/22/2007 11:01 AM (EST)
Hi,
I didn't understand what name of record file should be stored. I have to submit. If this is correct:
<form>
  <record name="http://one/1.wav" 
                type="audio/wav">
      <filled>
        <if cond = "http://one/1.wav">
          <submit next="http://www.test.com"
              method="post"
              namelist = "http://one/1.wav"/>
        </if>
        <clear/>
      </filled>
    </record>
  </form>
What way to get the "no input" information by GET or POST methodes?
MattHenry
1/22/2007 3:07 PM (EST)


Hi there,

I'd be happy to help explain as best I can:

1 - The naming of the recorded audio file is done on the server side when using VXML: The dialog itself just captures the multipart data, and submits it via POST to a JSP/PHP/whatever script, which then performs the post-processing, which includes the naming of the file, and the uploading it to your application servers. You may want to take a look at the below link, which illustrates this in greater detail:

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

2 - Regarding your second question, it is not clear to me exactly what it is that you are asking:

"What way to get the no input information by GET or POST methods"

Are you asking whether or not you can trap, and store to a backend database whether or not someone received a noinput event for a given record field?

Standing by,

~Matthew Henry
yana
1/23/2007 4:33 AM (EST)
Matthew Henry,

Thank you for help. The first question is clear. And you right, I'd like to ask, whether or not I can trap noinput event for a given record field. In my application I do not catch events. If I may to use something like to indicate this case:
<record name="rec_prompt" type="audio/wav">
  <noinput>
    <submit next=" http://www.test.com"
          method="post" namelist = "rec_prompt"
          fetchaudio = "empty.wav"/>
  </noinput>
....

Thanks.
mikethompson
1/23/2007 4:55 PM (EST)
Hi Yana,

Yes, you can easily capture a <noinput> within a <record> field and submit whatever you want to a backend database.  In fact, I have a handy script here which will take the <noinput> and ask the user if they really want to record anything for this prompt.  The user will say "yes" or "no" and the application will either revisit the recording field or go on to the next form item.  Take a look, I think you will find it very useful! :)

Best,
Mike Thompson
Voxeo Corporation


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


<form id="F1">

<var name="firstTime" expr="true"/>

<block name="b1">

<if cond="firstTime">
<assign name="firstTime" expr="false"/>
<else/>
<goto next="#norecord"/>
</if>

<clear namelist="b1"/>
<goto nextitem="R_1"/>
</block>

<record name="R_1" beep="true" maxtime="120s" finalsilence="2500" dtmfterm="true" type="audio/wav">

<prompt timeout="5s" bargein="false">
  here you will hear a beep indicating that you should start your recording. 
</prompt>

<nomatch>
<log expr="'-------------- NOMATCH'"/>
nomatch
<goto nextitem="R_1"/>

</nomatch>

<noinput>
<log expr="'-------------- NOINPUT'"/>
<goto next="#wantrecord"/>
</noinput>

<filled>
<log expr="'-------------- FILLED'"/>
<!--
<log expr="'duration==' + R_1$.duration"/>
<log expr="'size==' + R_1$.size"/>
<log expr="'termchar==' + R_1$.termchar"/>
<log expr="'maxtime==' + R_1$.maxtime"/>
-->
you said:
<value expr="R_1" />
<goto next="#done"/>
</filled>
</record>
</form>

<form id="norecord">
<block>
<log expr="'-------------- norecord'"/>
you did not want to record anything.
</block>
</form>

<form id="wantrecord">
<block>
<log expr="'-------------- wantrecord'"/>
</block>
<field name="b" type="boolean">
<prompt> Did you want to record </prompt>
<filled>
<if cond="b">
<goto next="#F1"/>
<else/>
<goto next="#norecord"/>
</if>
</filled>
</field>
</form>

<form id="done">
<block>
<log expr="'-------------- done'"/>
you left a recording and filled the vxml field
</block>
</form>

</vxml>
kettle
1/24/2007 12:31 AM (EST)
With regard to the dtmfterm attribute, the definition states the following:

"The dtmfterm attribute specifies whether the caller will be allowed to terminate the recording in progress with the press of a dtmf key. When set to 'true', (default), any dtmf keypress can end the recording session. If set to 'false', then the recording continues until a maxtime or finalsilence event is reached."

Not to be too picky, but this definition is ambiguous with regard to what happens when dtmf is set to 'true' and the user does not press a key.  Seeing as 'true' is the default setting, and I've never pressed a key to end a recording, I am assuming that in the event that no key is pressed within the maxtime, the 'fals' behavior takes over.  However, it would be nice if this ambiguity were cleared up with a few words in the definition.

joe
mikethompson
1/24/2007 1:27 PM (EST)
Hi Joe,

I agree with you, one who is not familiar with the specific behavior of the <record> element could easily get confused by the ambiguity of that statement.  I will get with the keepers of the documentation on this  and see if we can clear this up for you. :)

Best,
Mike Thompson
Voxeo Corporation
vinodhjain
6/12/2007 7:31 AM (EDT)
Hi,

While recording when we press any dtmf key(dtmfterm attribute is true) before speaking anything,

it would be treated as an immediate <reprompt>, which would then revisit the <record> field.

However how do we trap if we want to limit the same to 3 DTMF entries and catch it without endlessly reprompting the caller.

Your response is highly appreciated.

Thanks,
Vinodh Jain
jbassett
6/12/2007 8:13 AM (EDT)
Hello,

While I am not 100% sure of what you are asking, let me address.

If you set the dtmfterm to false, you will still be able to terminate the recording with the # key.  Now, you would not be able to capture the DTMF presses of other numbers in the application, but they would be heard on the recording and would not terminate it.

Thanks
Jesse Bassett
Voxeo Support
vinodhjain
6/13/2007 2:10 AM (EDT)
Hi Jesse Bassett,

Thanks for your response,

let me provide some more details:

Issue:
If instead of recording a message, when we press a DTMF key, it replays the record prompt, but it never maxes out;

currently I have set dtmfterm=true [as per our Requirement any key should terminate the recording].

Iam able to capture <noinput>, but, when caller does not speak and just press any DTMF key after beep. the <record> tag loops endless'ly .

Requirement:
dtmfterm needs to set as true (and not false)
iam not able to capture and limit the caller after 3 tries [when DTMF is pressed without speech input after the beep], the <record> is reprompted endlessly.

I tried to capture the shadow variable(s), but still the same is filled only after the recording at <filled> tag and not in above case discussed in Issue.

can we capture such DTMF event within <record> tag or is there any alternative way to catch/handle and limit caller to 3 DTMF entries
and proceed with the call flow palying "maximum tries reached".

Thanks,
VinodhJain

mikethompson
6/13/2007 11:47 AM (EDT)
Hi VinodhJain,

I am quite familiar with your troubles concerning the <record> element.  As I understand it, you are wishing to escape the <record> element by pressing a DTMF key when the caller gives no input.  This behavior can actually be achieved with some clever manipulation of the VoiceXML FIA (Form Interpretation Algorithm).  By including some conditional logic above the <record> element, we can figure out when the user attempts to escape the recording with no input by pressing a DTMF.

I happen to have some handy sample code for you which illustrates this perfectly.  I have attached it to the ticket for you.  You can tweak the conditional logic as you see fit for your application.

Hope this helps,
Mike Thompson
Voxeo Corporation
vinodhjain
6/14/2007 2:20 AM (EDT)
Mike Thompson,

I had not registered as a ticket yesterday,
However the same is registered as Voxeo Account Ticket #350877 now,

May be thats the reason iam not able to view the sample code you said is attached with the ticket.

also you can email it to my ID --> dvinodh@servion.com

Thanks,
Vinodh Jain
VoxeoDante
6/14/2007 10:09 AM (EDT)
Hello,

I have attached the sample code to an email and sent it to the address you provided. 
Please let us know the results of your testing.

All the Best,
Dante Vitulano
vinodhjain
6/15/2007 5:13 AM (EDT)
Thanks,

The sample you provided worked fine,

Thanks to support team.
Vinodh Jain
MyMercial
9/24/2007 6:44 PM (EDT)
Is there a way to concatinate audio recordings?  After the user has made a recording, I'd like to give him the choice of listening to it and then continue recording.  Can your service concatinate the audio recordings, or do I have to do it manually on my end?
voxeojeremy
9/24/2007 8:20 PM (EDT)
Hi there,


This is not something that the VoiceXML browser is capable of; you will need to do it server-side.  If you have any other questions, feel free to ask! :)


Regards,

Jeremy McCall
Voxeo Extreme Support
hhamid
12/23/2007 6:37 AM (EST)
Hello,

I am trying to write a simple vxml program to record voice and submit it to a web server using cisco-destexpr field in the <record> tag of the vxml (I know this can be simply done by a submit tag but I am trying to do it using cisco-destexpr). The vxml code is as follows:

<?xml version="1.0" encoding="iso-8859-1"?>
<vxml version="2.0">

<form id="main">
    <record cisco-destexpr=" http://192.168.0.134/streamrec.php?file=stream.au" maxtime="10s" dtmfterm="true">
        <prompt>
            <audio src="audio/record.au"/>
        </prompt>
        <prompt><audio src="audio/beep.au"/></prompt>
    </record>
</form>

</vxml> 

I am running the code using a cisco 2811 voice gateway with ios version 12.4(15)T (also tested with 12.4(7)) and I am testing the application using apache web server. After the request is submitted to the web server using a POST request, it responds with an http error code 411 (length required). I am wondering what is wrong? Is this a bug in the cisco ios? As it doesn't send the content-length field in the http header request which it sends by POST?

Anyone has any idea? or is there anyone who has done this using cisco-destexpr field?

Thanks
VoxeoTony
12/23/2007 11:41 AM (EST)
Hello,

We see that you have also posted this same question in an account ticket; as such we will update you on that ticket and post back to this one with relevant information for the forum.


Cheers,

Tony
shawnaslam1
2/4/2008 1:01 PM (EST)
I am getting this ,which might be strange,behaviour that in record tag if i dont speak call terminated.I have the requirement that if customer dont have the information then he/she shouldn't speak.Below is the sample of code
<record name="rec_1" beep="true" maxtime="20s" finalsilence="2000ms" type="audio/wav">
<prompt bargein="false">
<audio expr="mesg('1000')">

</audio>
</prompt>
<noinput count="1">
<assign name="rec_1" expr="'empty'"/>
<assign name="AM1" expr="'I'"/>

<reprompt/>
</noinput>

If you try this and dont speak after the tone call will be terminated ut not be captured by noinput tag.
Any idea or suggesion will be great.
mikethompson
2/4/2008 1:23 PM (EST)
Hello,

Setting the rec_1 variable to the string 'empty' will not clear the variable.  In fact, it will give the rec_1 recording variable the value of empty.  Hence, the VXML FIA considers this input item complete and moves on with the application.  If you have no additional code to be visited, VXML consider the entire application complete and will just exit.

Fortunately, I happen to have a neat noinput and record script I whipped up a while back.  Look at my annotation posted on 1/23/2007 4:55 PM (EST), I think you may find it useful... :)

Best,
Mike Thompson
Voxeo Corporation
wishful_st
2/20/2008 2:15 AM (EST)
Hi there,

I wish to terminate the recording when *any* of these conditions are met:

- max recording time has been met (let's say, 30 seconds)
- 4 seconds of silence is encountered
- DTMF '1' is pressed

The first 2 points are obvious to me.  However, how can I implement the 3rd point?

Thanks!
mikethompson
2/20/2008 11:25 AM (EST)
Hello,

You can always set the dtmfterm attribute to "true."  However, this will kill the recording when *any* key is pressed.  If you're only looking to terminate the recording on DTMF-1, and no other key presses, there is a solution.

As you might notice by looking at the documentation for the <record> element, you will see <grammar> is a valid child of <record>.  As such, you can write a simple inline GSL grammar to allow a dtmf-1 key press to be accepted to finish the recording.

It would look something like this:

<record name="R_1" beep="true" dtmfterm="true">

  <grammar type="text/gsl">
      [dtmf-1]
  </grammar>
   
    <prompt>
      here you will hear a beep indicating
      that you should start your recording.
    </prompt>

    <filled>
      <log expr="R_1$.duration"/>
      <log expr="R_1$.termchar"/>
      <log expr="R_1$.size"/>

      <prompt> your recording was <value expr="R_1"/> </prompt>
    </filled>

  </record>

Hope this helps,
Mike Thompson
Voxeo Corporation
wishful_st
2/20/2008 2:18 PM (EST)
Hi Mike,

Thanks for your quick reply.  I've actually tried similar code previously, and the other DTMF tones are still triggering to end recording.  I've also tried exactly your code by cutting and pasting and the result is the same.

Any ideas?

Simon
mikethompson
2/20/2008 2:54 PM (EST)
Simon,

It sounds like you might have come across a bug.  Are you trying this on our hosted environment?  If so, what specific platform are you using?  If you're testing this on a local installation, what build are you using?

Please advise,
Mike Thompson
Voxeo Corporation
wishful_st
2/20/2008 4:47 PM (EST)
Hi Mike,

I am using Voxeo's development site.  The application entry point is through Prophecy 7.0 - CCXML W3C 1.0.  Is this information what you are looking for?  Should I open a ticket using my dev account?

Also note that I am using <vxml version = "2.1">
mikethompson
2/20/2008 6:22 PM (EST)
Hello,

I did some testing and was able to re-create the problem.  Per the spec, here is how <record> is supposed to work:
------------
The <record> element contains a 'dtmfterm' attribute as a developer convenience. A 'dtmfterm' attribute with the value 'true' is equivalent to the definition of a local DTMF grammar which matches any DTMF input. The dtmfterm attribute has priority over specified local DTMF grammars.
------------

This being said, if you only want specific DTMF keys to match, you'll want to use dtmfterm set to false and specify your own grammar.  Unfortunately, I cannot get it to work.  As such, I need to follow up with Engineering on this and see if we have a bug on our hands.

Stay tuned,
Mike Thompson
Voxeo Corporation
mikethompson
2/22/2008 2:24 PM (EST)
Hello,

After doing some more testing, this does appear to be a bug with Prophecy 7 in staging.  Fortunately, this has been corrected in Prophecy 8, which you should be able to map to within your Voxeo Application Manager when creating a new application.  One thing to note, make sure you specify the mode to dtmf.  Here's a small working example on Prophecy 8:

<record name="R_1" beep="true" dtmfterm="false">

  <noinput>
      <log expr="'************************ NO INPUT ***********************'"/>
  </noinput>

  <nomatch>
      <log expr="'*************************NOMATCH***************************'"/>
  </nomatch>
 
  <grammar mode="dtmf">
      [dtmf-1]
  </grammar>
 
    <prompt>
      here you will hear a beep indicating
      that you should start your recording.
    </prompt>

    <filled>
      <log expr="R_1$.duration"/>
      <log expr="R_1$.termchar"/>
      <log expr="R_1$.size"/>

      <prompt> your recording was <value expr="R_1"/> </prompt>
    </filled>

  </record>

Hope this helps,
Mike Thompson
Voxeo Corporation
wishful_st
2/25/2008 4:37 PM (EST)
That did the trick.  Thanks Mike!
georgelai
3/13/2008 12:21 PM (EDT)
I have a question.  Is there a way to save the audio file into something with better fidelity than wav at 8 bit, 11kHz?  Can I store it as 16 bit, 11 kHz (or higher)?

Thanks.

George
voxeojeff
3/13/2008 12:36 PM (EDT)
Hi George,

Unfortunately, the recordings will always be saved as 8bit, 8khz audio files.  You can convert them afterwards, if you wish, using your own audio converter.  For more information on "all things audio," please see our VoiceXML documentation specific to telephony audio:

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

Hope this helps,

Jeff
fahdbaig
7/15/2008 7:26 AM (EDT)
Hi,

I am trying to record small bits (say 2 secs) of callers speech. I want to know if the caller has spoken or not in a particular bit.
I have tried to use <noinput> with record but it doesn't seem to work!
<noinput> works fine with <filled> tags etc
Is there an example around that I can follow?

The following doesn't seem to work nor does it even if I have noinput placed elsewhere in the form or document it still doesnt work!
<form>
  <record>
      <noinput>
          nothing recorded
      </noinput>
  </record>
</form>

please help? thank you
VoxeoDustin
7/15/2008 9:23 AM (EDT)
Hey,

The noinput handler will work with the record element, as you have it, but it will only be thrown if there is no audio detected for the length of the timeout property - the default is 5s. In most cases, especially with SIP/VoIP phones or cell phones, there will always be some background noise caught during a record and a noinput is very unlikely.

<?xml version="1.0" encoding="UTF-8"?>
<vxml version="2.0" xmlns="http://www.w3.org/2001/vxml"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.w3.org/2001/vxml
  http://www.w3.org/TR/voicexml20/vxml.xsd">
<form>
  <record  name="msg" beep="true" maxtime="10s"
      finalsilence="4000ms" dtmfterm="true" type="audio/x-wav">
      <prompt timeout="5s">
        Record a message after the beep.
      </prompt>
      <noinput>
        I didn't hear anything, please try again.
      </noinput>
      <catch event="connection.disconnect.hangup">
          <submit next="./voicemail_server.asp"/>
      </catch>
  </record>
</form>
</vxml>

Let us know if we can be of further assistance.

Cheers,
Dustin

login



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