Catch

Материал из VXML
Перейти к: навигация, поиск


Введение

Обработка событий (Event hadling). Платформа выдает события, когда пользователь "не отвечает". Не отвечает в том смысле, что приложение делает вывод, запрос help и т.д. Интерпретатор выдает события, если находит семантическую ошибку (semantic error) в VXML-документе или, когда присутствует элемент <throw>. Каждый элемент, в котором событие может произойти, имеет набор захватывающих элементов, таких как:

Элемент наследует захватывающие элементы ("как копия") от каждого его предка, при необходимости. Если поле(<field>), например, не содержит захватывающего элемента nomatch, а форма содержит, то в элементе формы nomatch используется. Таким образом, поведение общей обработки событий может быть указано на любом уровне и это относится ко всем потомкам.

Тег <catch> ассоциирует элемент с документом/диалогом (например, форма или меню). Включает в себя выполняемый сценарий. Элемент catch включает в себя анонимную переменную _event, которая содержит имя события которое будет выброшено. Переменная _event используется для выбора аудиофайла, который будет проигрываться, при условии события, которое было выброшено. Также данный элемент включает в себя анонимную переменную _message строкового типа из соответствующего элемента <throw>. Если <catch> элемент содержит элемент <throw> с одним и тем же событием, то может получиться бесконечный цикл. Платформа может заметить данную ситуацию и выдать ошибку semantic error.

Синтаксис

<catch cond="CDATA"
       count="CDATA"
       event="NMTOKEN">

Атрибуты

  • event — событие или события, которые необходимо захватить. Разделенный пробелами список событий может быть указан для захвата нескольких событий. Пустая строка или одна точка соответствует всем событиям.
    (Необходимость указания: необязательно)
    По умолчанию: все события
  • count — Атрибут count позволяет обрабатывать различные варианты одного и того же события по-разному. Каждая форма, меню, и элемент формы имеет счетчик для каждого события, которое происходит во время ее выполнения; эти счетчики сбрасываются каждый раз, когда меню, форма или элемент формы введен заново.
    (Необходимость указания: необязательно)
    По умолчанию: 1
  • cond — условие, при выполнении которого действия, заключенные между тегами <catch> и </catch>, будут выполнены.
    (Необходимость указания: необязательно)
    По умолчанию: true

Родители

<field> <form> <initial> <menu> <record> <subdialog> <transfer> <vxml>

Потомки

<assign> <audio><clear> <disconnect> <enumerate> <exit> <goto> <if> <log> <prompt> <reprompt> <return> <script> <submit> <throw> <value>

Выбор элемента <catch> из списка нескольких

Элемент наследует <catch>-элементы из каждого его элемента-предка при необходимости. Например, если <field>-элемент является предком <catch>, тогда <catch> неявно копируется в <field> Когда событие выброшено, область видимости, в которой событие обрабатывалось и область действия элемента <catch> сравниваются, для того чтобы найти наиболее квалифицированный (best qualified) <catch> элемент, согласно следующему алгоритму:

  1. Формируется упорядоченный список из <catch>-элементов, состоящих из всех <catch> из текущей области видимости и из всех областей действия элемента (элементы формы, форма, корневой документ, интерпретируемый сценарий). Они упорядочиваются по области видимости (начиная с текущей) и далее в областях видимости по порядку в документе.
  2. Убираются из списка все элементы, у которых имена событий не совпадают с выброшенными событиями или у которых значение атрибута cond равно FALSE после конверсии в булевские значения.
  3. Находится "истинный счетчик" (correct count): наибольший среди элементов, но не превосходящий текущего значения счетчика.
  4. Обозначается первым в списке тот, у которого correct count.

ЗАМЕЧАНИЕ: обратите внимание, что данный алгоритм дает приоритет тем элементам, которые появляются в документе раньше над теми, которые появляются позже, но НЕ дает приоритета тем элементам, которые более определенные, над теми, которые менее определенные. Таким образом, рекомендуется в процессе написания кода упорядочивать элементы от более определенных к менее определенным.

<catch event="error.foo"> 
 <prompt>Caught an error dot foo event</prompt>
</catch> 
<catch event="error"> 
 <prompt>Caught an error event</prompt> 
</catch>

Если <catch>-элементы указаны в обратном порядке, тогда элемент, отвечающий за "error.foo", никогда не будет выполнен.

Пример

<?xml version="1.0" encoding="UTF-8"?>
<vxml version="2.1" xmlns="http://www.w3.org/2001/vxml" xml:lang="ru-RU">
  <form id="input">
    <property name="maxspeechtimeout" value="3s"/>
    <field name="number">
      <prompt bargein="true">
        Назовите число от одного до десяти.
      </prompt>
      <grammar xml:lang="ru-RU" root="main" mode="voice" version="1.0" tag-format="semantics/1.0">
        <rule id="main">
          <one-of>
            <item>один</item>
            <item>два</item>
            <item>три</item>
            <item>четыре</item>
            <item>пять</item>
            <item>шесть</item>
            <item>семь</item>
            <item>восемь</item>
            <item>девять</item>
            <item>десять</item>
          </one-of>
        </rule>	   
      </grammar>
      <filled>
        <prompt>
          Вы выбрали <value expr="number"/>.
        </prompt>
      </filled>	   
    </field>
  </form>
  <catch count="1" event="maxspeechtimeout">
    <prompt bargein="false">
      Распознать не удалось.
    </prompt>
    <reprompt/>
  </catch>
  <catch count="2" event="maxspeechtimeout">
    <prompt bargein="false">
      Распознать не удалось!
    </prompt>
    <reprompt/>
  </catch>
</vxml>


Добавить новый комментарий
Если не хотите писать от анонимного пользователя, зарегистрируйтесь или представьтесь системе.

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Статьи
Грамматики
Элементы VXML
Элементы SSML
Инструменты