We've Moved! Please visit our new and improved forum over at our new portal: https://portal.plumvoice.com/hc/en-us/community/topics
Odd issue with my form fields - what am I doing wrong here?
Odd issue with my form fields - what am I doing wrong here?
This worked fine when I had bargein set to false. As soon as I allowed the caller to barge in, what will happen is they will enter their response, the system will immediately tell them they did not understand their response and immediately play the prompt for the next field. I suspect the error message is not for the field they just entered but for the next field in the list.
Here's the code. I've removed the code for zip3 - 6 as it's just the same as 1 and 2:
<form id="docanada">
<field name="zip1" type="digits?maxlength=5">
<property name="interdigittimeout" value="4s" />
<prompt bargein="true" count="1">
<audio src="http://audio.plumgroup.com/root/4665518 ... 182_10.wav"/>
</prompt>
<noinput>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<reprompt/>
</noinput>
<nomatch>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<reprompt/>
</nomatch>
<filled>
<goto nextitem="zip2"/>
</filled>
</field>
<field name="zip2" type="digits?maxlength=2">
<property name="interdigittimeout" value="4s" />
<prompt bargein="true" count="1">
<break time="500ms"/><audio src="http://audio.plumgroup.com/root/4665518 ... 182_11.wav"/>
</prompt>
<noinput>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<reprompt/>
</noinput>
<nomatch>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<reprompt/>
</nomatch>
<filled>
<goto nextitem="zip3"/>
</filled>
</field>
</form>
As you can see I've even tried adding breaks and gotos thinking maybe the fields were running over each other.
The system still sucessfully recognizes the user entry and everything works. you just get the annoying error messages between the prompts.
Any idea?
Here's the code. I've removed the code for zip3 - 6 as it's just the same as 1 and 2:
<form id="docanada">
<field name="zip1" type="digits?maxlength=5">
<property name="interdigittimeout" value="4s" />
<prompt bargein="true" count="1">
<audio src="http://audio.plumgroup.com/root/4665518 ... 182_10.wav"/>
</prompt>
<noinput>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<reprompt/>
</noinput>
<nomatch>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<reprompt/>
</nomatch>
<filled>
<goto nextitem="zip2"/>
</filled>
</field>
<field name="zip2" type="digits?maxlength=2">
<property name="interdigittimeout" value="4s" />
<prompt bargein="true" count="1">
<break time="500ms"/><audio src="http://audio.plumgroup.com/root/4665518 ... 182_11.wav"/>
</prompt>
<noinput>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<reprompt/>
</noinput>
<nomatch>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<reprompt/>
</nomatch>
<filled>
<goto nextitem="zip3"/>
</filled>
</field>
</form>
As you can see I've even tried adding breaks and gotos thinking maybe the fields were running over each other.
The system still sucessfully recognizes the user entry and everything works. you just get the annoying error messages between the prompts.
Any idea?
update to issue
Update to issue.
It's specifically a <nomatch> error that is being thrown.
Oddly, if I set the bargein on my prompts to "false" it works like a charm every time.
Anyone have any idea with this?
It's specifically a <nomatch> error that is being thrown.
Oddly, if I set the bargein on my prompts to "false" it works like a charm every time.
Anyone have any idea with this?
Inputmodes in IVR system are set to both dtmf and voice
Hi,
By default, inputmodes are set to both dtmf and voice. When you specify a built-in IVR grammar like:
<field name="zip1" type="digits?maxlength=5">
the IVR system is listening for both speech ("one two three four five") and keypad input ("12345"). Any background noise will barge into the prompt, be processed by the SDU (speech detection unit) and throw a <nomatch> (since the background noise probably won't sound like spoken digits).
If you're not planning to use any voice IVR grammars or speech recognition in your IVR application, you can easily fix the problem by adding the inputmodes property at the topmost scope of your IVR script/application:
<property name="inputmodes" value="dtmf" />
Hope this helps.
Regards,
Plum Support
By default, inputmodes are set to both dtmf and voice. When you specify a built-in IVR grammar like:
<field name="zip1" type="digits?maxlength=5">
the IVR system is listening for both speech ("one two three four five") and keypad input ("12345"). Any background noise will barge into the prompt, be processed by the SDU (speech detection unit) and throw a <nomatch> (since the background noise probably won't sound like spoken digits).
If you're not planning to use any voice IVR grammars or speech recognition in your IVR application, you can easily fix the problem by adding the inputmodes property at the topmost scope of your IVR script/application:
<property name="inputmodes" value="dtmf" />
Hope this helps.
Regards,
Plum Support
Last edited by support on Mon Feb 22, 2010 1:39 pm, edited 3 times in total.
Another solution?
We use mixed dtmf and voice and can't turn it off globally.
I've tried this as the latest, without success. Setting a grammar for each field that restricts the input to dtmf. Still doesn't work.
Is there something else I can try?
We were supposed to launch this project 7/1.
Thanks
field name="zip1" type="digits?maxlength=5">
<grammar type="application/x-jsgf" mode="dtmf">
( 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 )+
</grammar>
<prompt bargein="true" count="1">
<audio src="http://audio.plumgroup.com/root/4665518 ... 182_10.wav"/>
</prompt>
<noinput>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<clear namelist="zip1"/>
<goto next="#zip1"/>
</noinput>
<nomatch>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<clear namelist="zip1"/>
<goto next="#zip1"/>
</nomatch>
</field>
I've tried this as the latest, without success. Setting a grammar for each field that restricts the input to dtmf. Still doesn't work.
Is there something else I can try?
We were supposed to launch this project 7/1.
Thanks
field name="zip1" type="digits?maxlength=5">
<grammar type="application/x-jsgf" mode="dtmf">
( 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 )+
</grammar>
<prompt bargein="true" count="1">
<audio src="http://audio.plumgroup.com/root/4665518 ... 182_10.wav"/>
</prompt>
<noinput>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<clear namelist="zip1"/>
<goto next="#zip1"/>
</noinput>
<nomatch>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<clear namelist="zip1"/>
<goto next="#zip1"/>
</nomatch>
</field>
Another comment
Also.
I figured it was background noise so I've tested it with the mute button on. Same problem.
So background noise wouldn't seem to be the issue.
I figured it was background noise so I've tested it with the mute button on. Same problem.
So background noise wouldn't seem to be the issue.
IVR script post
Hi,
Please post your entire IVR script or a link thereto. Specifying inputmodes="dtmf" on a per-field basis should work.
Plum Support
Please post your entire IVR script or a link thereto. Specifying inputmodes="dtmf" on a per-field basis should work.
Plum Support
Last edited by support on Thu Jan 14, 2010 2:21 pm, edited 1 time in total.
Thanks!
<?xml version="1.0"?>
<vxml version="2.0">
<meta name="author" content="Mike Chytracek"/>
<meta name="maintainer" content="mike@ignitesolutions.com"/>
<property name="audiomaxage" value="120"/>
<property name="timeout" value="30"/>
<property name="sensitivity" value="0.0"/>
<property name="interdigittimeout" value="4s" />
<menu id="welcome">
<prompt bargein="true">
<audio src="http://audio.plumgroup.com/root/46655182/46655182_3.wav"/>
</prompt>
<choice next="#us">
<grammar type="application/srgs+xml" root="r_us" version="1.0">
<rule id="r_us" scope="public">
<item>U S</item>
</rule>
</grammar>
</choice>
<choice dtmf="1" next="#us"/>
<choice next="#canada">
<grammar type="application/srgs+xml" root="r_canada" version="1.0">
<rule id="r_canada" scope="public">
<item>canada</item>
</rule>
</grammar>
</choice>
<choice dtmf="2" next="#canada"/>
<nomatch>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<reprompt/>
</nomatch>
<noinput>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<reprompt/>
</noinput>
</menu>
<menu id="us">
<prompt bargein="true">
<audio src="http://audio.plumgroup.com/root/46655182/46655182_5.wav"/>
</prompt>
<choice next="#dous">
<grammar type="application/srgs+xml" root="confirm_us_yes" version="1.0">
<rule id="confirm_us_yes" scope="public">
<item>YES</item>
</rule>
</grammar>
</choice>
<choice dtmf="1" next="#dous"/>
<choice next="#welcome">
<grammar type="application/srgs+xml" root="confirm_us_no" version="1.0">
<rule id="confirm_us_no" scope="public">
<item>NO</item>
</rule>
</grammar>
</choice>
<choice dtmf="2" next="#welcome"/>
<noinput>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<reprompt/>
</noinput>
<nomatch>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<reprompt/>
</nomatch>
</menu>
<form id="dous">
<field name="zipcode" type="digits?maxlength=6">
<prompt bargein="true">
<audio src="http://audio.plumgroup.com/root/46655182/46655182_6.wav"/>
</prompt>
<noinput>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<reprompt/>
</noinput>
<nomatch>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<reprompt/>
</nomatch>
</field>
<filled>
<submit next="http://www.******.com/vxml/getclassesv2.cfm"/>
</filled>
</form>
<menu id="canada">
<prompt bargein="true">
<audio src="http://audio.plumgroup.com/root/46655182/46655182_9.wav"/>
</prompt>
<choice next="#docanada">
<grammar type="application/srgs+xml" root="confirm_ca_yes" version="1.0">
<rule id="confirm_ca_yes" scope="public">
<item>YES</item>
</rule>
</grammar>
</choice>
<choice dtmf="1" next="#docanada"/>
<choice next="#welcome">
<grammar type="application/srgs+xml" root="confirm_ca_no" version="1.0">
<rule id="confirm_ca_no" scope="public">
<item>NO</item>
</rule>
</grammar>
</choice>
<choice dtmf="2" next="#welcome"/>
<noinput>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<reprompt/>
</noinput>
<nomatch>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<reprompt/>
</nomatch>
</menu>
<form id="docanada">
<field name="zip1" type="digits?maxlength=5">
<grammar type="application/x-jsgf" mode="dtmf">
( 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 )+
</grammar>
<prompt bargein="true" count="1">
<audio src="http://audio.plumgroup.com/root/4665518 ... 182_10.wav"/>
</prompt>
<noinput>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<clear namelist="zip1"/>
<goto next="#zip1"/>
</noinput>
<nomatch>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<clear namelist="zip1"/>
<goto next="#zip1"/>
</nomatch>
</field>
<field name="zip2" type="digits?maxlength=2">
<grammar type="application/x-jsgf" mode="dtmf">
( 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 )+
</grammar>
<prompt bargein="true" count="1">
<break time="500ms"/><audio src="http://audio.plumgroup.com/root/4665518 ... 182_11.wav"/>
</prompt>
<noinput>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<clear namelist="zip2"/>
<reprompt/>
</noinput>
<nomatch>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<clear namelist="zip2"/>
<reprompt/>
</nomatch>
</field>
<field name="zip3" type="digits?maxlength=5">
<grammar type="application/x-jsgf" mode="dtmf">
( 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 )+
</grammar>
<prompt bargein="true" count="1">
<break time="500ms"/><audio src="http://audio.plumgroup.com/root/4665518 ... 182_16.wav"/>
</prompt>
<noinput>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<clear namelist="zip3"/>
<reprompt/>
</noinput>
<nomatch>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<clear namelist="zip3"/>
<reprompt/>
</nomatch>
</field>
<field name="zip4" type="digits?maxlength=2">
<grammar type="application/x-jsgf" mode="dtmf">
( 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 )+
</grammar>
<prompt bargein="true" count="1">
<break time="500ms"/><audio src="http://audio.plumgroup.com/root/4665518 ... 182_19.wav"/>
</prompt>
<noinput>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<clear namelist="zip4"/>
<reprompt/>
</noinput>
<nomatch>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<clear namelist="zip4"/>
<reprompt/>
</nomatch>
</field>
<field name="zip5" type="digits?maxlength=5">
<grammar type="application/x-jsgf" mode="dtmf">
( 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 )+
</grammar>
<prompt bargein="true" count="1">
<break time="500ms"/><audio src="http://audio.plumgroup.com/root/4665518 ... 182_17.wav"/>
</prompt>
<noinput>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<clear namelist="zip5"/>
<reprompt/>
</noinput>
<nomatch>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<clear namelist="zip5"/>
<reprompt/>
</nomatch>
</field>
<field name="zip6" type="digits?maxlength=2">
<grammar type="application/x-jsgf" mode="dtmf">
( 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 )+
</grammar>
<prompt bargein="true" count="1">
<break time="500ms"/><audio src="http://audio.plumgroup.com/root/4665518 ... 182_18.wav"/>
</prompt>
<noinput>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<clear namelist="zip6"/>
<reprompt/>
</noinput>
<nomatch>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<clear namelist="zip6"/>
<reprompt/>
</nomatch>
<filled>
<submit next="http://www.******.com/vxml/getclassesv2.cfm"/>
</filled>
</field>
</form>
</vxml>
<vxml version="2.0">
<meta name="author" content="Mike Chytracek"/>
<meta name="maintainer" content="mike@ignitesolutions.com"/>
<property name="audiomaxage" value="120"/>
<property name="timeout" value="30"/>
<property name="sensitivity" value="0.0"/>
<property name="interdigittimeout" value="4s" />
<menu id="welcome">
<prompt bargein="true">
<audio src="http://audio.plumgroup.com/root/46655182/46655182_3.wav"/>
</prompt>
<choice next="#us">
<grammar type="application/srgs+xml" root="r_us" version="1.0">
<rule id="r_us" scope="public">
<item>U S</item>
</rule>
</grammar>
</choice>
<choice dtmf="1" next="#us"/>
<choice next="#canada">
<grammar type="application/srgs+xml" root="r_canada" version="1.0">
<rule id="r_canada" scope="public">
<item>canada</item>
</rule>
</grammar>
</choice>
<choice dtmf="2" next="#canada"/>
<nomatch>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<reprompt/>
</nomatch>
<noinput>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<reprompt/>
</noinput>
</menu>
<menu id="us">
<prompt bargein="true">
<audio src="http://audio.plumgroup.com/root/46655182/46655182_5.wav"/>
</prompt>
<choice next="#dous">
<grammar type="application/srgs+xml" root="confirm_us_yes" version="1.0">
<rule id="confirm_us_yes" scope="public">
<item>YES</item>
</rule>
</grammar>
</choice>
<choice dtmf="1" next="#dous"/>
<choice next="#welcome">
<grammar type="application/srgs+xml" root="confirm_us_no" version="1.0">
<rule id="confirm_us_no" scope="public">
<item>NO</item>
</rule>
</grammar>
</choice>
<choice dtmf="2" next="#welcome"/>
<noinput>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<reprompt/>
</noinput>
<nomatch>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<reprompt/>
</nomatch>
</menu>
<form id="dous">
<field name="zipcode" type="digits?maxlength=6">
<prompt bargein="true">
<audio src="http://audio.plumgroup.com/root/46655182/46655182_6.wav"/>
</prompt>
<noinput>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<reprompt/>
</noinput>
<nomatch>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<reprompt/>
</nomatch>
</field>
<filled>
<submit next="http://www.******.com/vxml/getclassesv2.cfm"/>
</filled>
</form>
<menu id="canada">
<prompt bargein="true">
<audio src="http://audio.plumgroup.com/root/46655182/46655182_9.wav"/>
</prompt>
<choice next="#docanada">
<grammar type="application/srgs+xml" root="confirm_ca_yes" version="1.0">
<rule id="confirm_ca_yes" scope="public">
<item>YES</item>
</rule>
</grammar>
</choice>
<choice dtmf="1" next="#docanada"/>
<choice next="#welcome">
<grammar type="application/srgs+xml" root="confirm_ca_no" version="1.0">
<rule id="confirm_ca_no" scope="public">
<item>NO</item>
</rule>
</grammar>
</choice>
<choice dtmf="2" next="#welcome"/>
<noinput>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<reprompt/>
</noinput>
<nomatch>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<reprompt/>
</nomatch>
</menu>
<form id="docanada">
<field name="zip1" type="digits?maxlength=5">
<grammar type="application/x-jsgf" mode="dtmf">
( 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 )+
</grammar>
<prompt bargein="true" count="1">
<audio src="http://audio.plumgroup.com/root/4665518 ... 182_10.wav"/>
</prompt>
<noinput>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<clear namelist="zip1"/>
<goto next="#zip1"/>
</noinput>
<nomatch>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<clear namelist="zip1"/>
<goto next="#zip1"/>
</nomatch>
</field>
<field name="zip2" type="digits?maxlength=2">
<grammar type="application/x-jsgf" mode="dtmf">
( 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 )+
</grammar>
<prompt bargein="true" count="1">
<break time="500ms"/><audio src="http://audio.plumgroup.com/root/4665518 ... 182_11.wav"/>
</prompt>
<noinput>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<clear namelist="zip2"/>
<reprompt/>
</noinput>
<nomatch>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<clear namelist="zip2"/>
<reprompt/>
</nomatch>
</field>
<field name="zip3" type="digits?maxlength=5">
<grammar type="application/x-jsgf" mode="dtmf">
( 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 )+
</grammar>
<prompt bargein="true" count="1">
<break time="500ms"/><audio src="http://audio.plumgroup.com/root/4665518 ... 182_16.wav"/>
</prompt>
<noinput>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<clear namelist="zip3"/>
<reprompt/>
</noinput>
<nomatch>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<clear namelist="zip3"/>
<reprompt/>
</nomatch>
</field>
<field name="zip4" type="digits?maxlength=2">
<grammar type="application/x-jsgf" mode="dtmf">
( 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 )+
</grammar>
<prompt bargein="true" count="1">
<break time="500ms"/><audio src="http://audio.plumgroup.com/root/4665518 ... 182_19.wav"/>
</prompt>
<noinput>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<clear namelist="zip4"/>
<reprompt/>
</noinput>
<nomatch>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<clear namelist="zip4"/>
<reprompt/>
</nomatch>
</field>
<field name="zip5" type="digits?maxlength=5">
<grammar type="application/x-jsgf" mode="dtmf">
( 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 )+
</grammar>
<prompt bargein="true" count="1">
<break time="500ms"/><audio src="http://audio.plumgroup.com/root/4665518 ... 182_17.wav"/>
</prompt>
<noinput>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<clear namelist="zip5"/>
<reprompt/>
</noinput>
<nomatch>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<clear namelist="zip5"/>
<reprompt/>
</nomatch>
</field>
<field name="zip6" type="digits?maxlength=2">
<grammar type="application/x-jsgf" mode="dtmf">
( 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 )+
</grammar>
<prompt bargein="true" count="1">
<break time="500ms"/><audio src="http://audio.plumgroup.com/root/4665518 ... 182_18.wav"/>
</prompt>
<noinput>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<clear namelist="zip6"/>
<reprompt/>
</noinput>
<nomatch>
<audio src="http://audio.plumgroup.com/root/46655182/46655182_4.wav"/>
<clear namelist="zip6"/>
<reprompt/>
</nomatch>
<filled>
<submit next="http://www.******.com/vxml/getclassesv2.cfm"/>
</filled>
</field>
</form>
</vxml>
Altered a bit
I used to use the </reprompt> and replaced it with the brute force goto instead, fyi.
Seems to work
Thanks! I placed the
<property name="inputmodes" value="dtmf"/>
right after the <form> tag and it seems to have done it!
Thanks alot!
<property name="inputmodes" value="dtmf"/>
right after the <form> tag and it seems to have done it!
Thanks alot!