<?xml version="1.0" encoding="utf-8"?>
<config>
<!-- 
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
-->
  <input>
    <property-list>
      <property name="incompletetimeout"  value="1s"/>
      <property name="completetimeout"  value="1s"/>
    </property-list>
    <prompt-list>
        <prompt>Select the equipment for which you would like to schedule repairs. The options are <enumerate/></prompt>
    </prompt-list>
    <help-list>
      <help>
        <prompt>I want to know the type of equipment for which you want to schedule repairs. Please say the name of the equipment. </prompt>
      </help>
      <help>
        <prompt> For instance, say microwave. </prompt>
      </help>
    </help-list>
    <noinput-list>
      <noinput>
        <prompt>I'm sorry, I didn't hear you. Say the equipment name.</prompt>
      </noinput>
      <noinput>
        <prompt>I'm sorry, I still didn't hear you. If you're unsure, say help.</prompt>
      </noinput>
      <noinput>
        <prompt>I appear to be having trouble hearing
        Waiting for you to say a equipment type. </prompt>
      </noinput>
    </noinput-list>
    <nomatch-list>
      <nomatch>
        <prompt>I'm sorry, I didn't understand what you said. Say the equipment name. </prompt>
      </nomatch>
      <nomatch>
        <prompt>Please repeat the equipment name.</prompt>
      </nomatch>
    </nomatch-list>
  </input>
  <confirm>
    <property-list>
      <property name="incompletetimeout" value="1s"/>
      <property name="completetimeout" value="1s"/>
    </property-list>
    <prompt-list>
      
        <prompt>I think you said #{model.utterance}. Is that
      right? </prompt>
    </prompt-list>
    <help-list>
      <help>
        <prompt>I am confirming the equipment type to be #{model.utterance}. Say yes. Else say no to modify the details submitted.</prompt>
      </help>
    </help-list>
    <noinput-list>
      <noinput>
        <prompt>If equipment name #{model.utterance} is acceptable say yes otherwise say no. </prompt>
      </noinput>
    </noinput-list>
    <nomatch-list>
      <nomatch>
        <prompt>If equipment name #{model.utterance} is acceptable say yes otherwise say no. </prompt>
      </nomatch>
    </nomatch-list>
    <reject>
      <prompt>OK, lets try again. Tell me the equipment name.</prompt>
    </reject>
  </confirm>
  <validate>
    <handler errorCode="635463">
      <prompt>That is an invalid equipment type.</prompt>
    </handler>
   </validate>
  <echo>
    <property-list>
      <property name="universals" value="all"/>
    </property-list>
    <prompt-list>
      <prompt>OK, #{model.utterance}. Got it.</prompt>
    </prompt-list>
  </echo>
</config>
