Введение


В этой статье мы рассмотрим создание голосового приложения, которое считывает последовательность цифр, введенных пользователем через номеронабиратель, а затем подтверждает корректность ввода, проигрывая абоненту введенные цифры. Согласитесь, это довольно частая задача в порталах телефонного самообслуживания.
 
Наше приложение будет выполнять эту задачу, используя 3CX Call Flow Designer. Приложение работает следующим образом:

  1. 3CX CFD сообщает: Введите ваш номер пользователя
  2. Пользователь набирает 1234
  3. 3CX CFD сообщает: Введенный номер пользователя 1234. Для подтверждения нажмите 1, для повторного ввода нажмите 2.

Поскольку воспроизведение цифр может потребоваться в различных частях нашего приложения, вынесем его в отдельный пользовательский компонент. CFD позволяет создавать такие пользовательские компоненты.

Напомним, что в предыдущих статьях мы рассмотрели создание CFD приложения для исходящего обзвона (по завершении обзвона можно отсылать отчет, используя компонент Email Sender), работу CFD с базами данных (которые также можно использовать для получения номера абонента), маршрутизацию входящих вызовов в зависимости от времени суток (которую можно комбинировать с исходящим обзвоном) и отправку e-mail сообщения (например, для уведомления о заказе по телефону).
 
Обратите внимание — среда разработки 3CX CFD поставляется бесплатно. Но голосовые приложения будут выполняться только на 3CX редакции Pro и Enterprise. Скачать CFD можно отсюда.     
 
Демо-проект этого голосового приложения поставляется вместе с дистрибутивом 3CX CFD и находится в папке Documents\3CX Call Flow Designer Demos. Приступим.

Создание проекта


Для создания проекта CFD перейдите в File > New > Project, укажите папку размещения проекта и его имя, например, «PlayDigitsDemo».



Создание пользовательского компонента


Создаваемый компонент будет получать последовательность цифр от пользователя и последовательно проигрывать их.

Для создания компонента в окне Project Explorer кликните правой кнопкой мыши на имени проекта, выберите New Component и назовите его PlayDigits.



Затем кликните на компоненте PlayDigits.comp и в разделе Properties Window нажмите кнопку рядом с коллекцией Variables. Добавьте две переменные — Digits и Index. Переменная Digits — принимает цифры, которые компонент затем проигрывает. Переменная Index — внутренняя, она позволяет компоненту переходить от цифры к цифре.



Для добавления переменных нажмите кнопку Add, чтобы добавить переменную и измените ее имя (свойство Name) на Digits. Переменная Digits должна иметь следующие свойства: Accessibility: ReadWrite, Initial Value: , Scope: Public. Еще раз нажмите кнопку Add, добавьте новую переменную и измените ее имя на Index. Переменная Index должна иметь следующие свойства: Accessibility: ReadWrite, Initial Value: 0, Scope: Private

Теперь займемся архитектурой компонента. Мы будем использовать компонент Loop для перебора последовательности цифр (цикла). В компонент Loop добавим компонент Prompt Playback для воспроизведения очередной цифры в последовательности. В этот же компонент Loop добавим компонент Increment Variable, который будет увеличивать значение переменной Index. Такая конструкция позволит последовательно воспроизвести все цифры, введенные пользователем.

Создание цикла


  1. Перетащите компонент Loop в основное окно среды разработки.
  2. В окне Properties измените имя компонента на digitsLoop

    Выберите компонент digitsLoop и в его свойстве Condition укажите строку

    LESS_THAN(callflow$.Index,LEN(callflow$.Digits)).

    Это выражение повторяет цикл до тех пор, пока переменная Index (callflow$.Index) меньше количества введенных пользователем цифр LEN(callflow$.Digits).

Воспроизведение сообщений


  1. Прежде всего нам необходимы звуковые файлы, соответствующие каждой цифре. Подготовьте и скопируйте файлы 0.wav, 1.wav и т.д. до 9 в папку Audio вашего проекта.
  2. Перетащите компонент Prompt Playback в основное поле приложения на компонент Loop.
  3. Измените имя компонента на playDigit.
  4. Выберите этот компонент и в окне свойств нажмите на кнопку возле коллекции Prompts, чтобы открыть редактор набора звуковых сообщений Prompt Collection Editor.
  5. Нажмите кнопку Add и измените тип на Dynamic Audio File Prompt

    В поле Audio File Expression введите строку

    CONCATENATE(MID(callflow$.Digits,callflow$.Index,1),".wav").

    Выражение использует цифру текущей итерации и объединяет ее с расширением файла (строкой) .wav. Таким образом, абоненту воспроизводится соответствующая цифра.



Компонент увеличения номера переменной


  1. Перетащите компонент Increment Variable на компонент Loop, ниже компонента playDigit

    Измените имя компонента на incrementIndex

    Для свойства VariableName укажите выражение

    callflow$.Index

Цикл выполнения будет иметь следующий вид:



Наш компонент готов. Теперь мы будем вызывать его из основного приложения.

Вызов компонента для воспроизведения цифр


После того, как пользовательский компонент готов, задействуем его в нашем приложении:

  1. В окне Project Explorer кликните Main.flow, чтобы открыть основное приложение
  2. Добавьте компонент User Input, который будет запрашивать ввод от пользователя. Переименуйте его в requestInput и добавьте заранее подготовленное сообщение пользователю о необходимости ввода.
  3. В ветвлении Valid Input из окна User Defined Components добавьте созданный пользовательский компонент PlayDigits

    Переименуйте его в playEnteredDigits

    Выберите его и в свойстве Digits укажите следующее выражение

    requestInput.Buffer

Запрашиваемые цифры будут сперва помещаться в буфер, а затем проигрываться пользователю. Готовое приложение будет иметь примерно такой вид:



Компиляция и установка приложения на сервер 3CX


Голосовое приложение готово! Теперь его следует скомпилировать и загрузить на сервер 3CX. Для этого:

  • Перейдите в меню Build > Build All, и CFD создаст файл PlayDigitsDemo.tcxvoiceapp.

  • Перейдите в интерфейс управления 3CX, в раздел Очереди вызовов. Создайте новую Очередь вызовов, укажите название и добавочный номер Очереди, а затем установите опцию Голосовые приложения и загрузите скомпилированный файл.
  • Сохраните изменения в Очереди вызовов. Голосовое приложение готово к использованию.


Заключение


Наше приложение решает конкретную задачу, однако важно отметить возможность инкапсулировать определенную логику работы в отдельный пользовательский компонент. Это весьма мощный механизм, предлагающий ряд преимуществ:

  • Ускорение разработки приложения благодаря повторному использованию уже созданных компонентов.
  • Упрощение структуры основного приложения и предотвращение разрастания архитектуры приложения до размера, которым уже будет сложно управлять.
  • Голосовое приложения получается понятным и легко изменяемым.

По этому же принципу мы можем создавать пользовательские компоненты, проигрывающие время и даты, делающие валидацию ввода пользователя и т.п.

Комментарии (0)