Зачем нужна такая программа? Прежде всего, она избавит от рутинной работы в офисе, в ее лице можно будет обрести на редкость верного и толкового друга. Говорящая помощница выручит из любого затруднительного положения. Так, когда вы хотите собрать вместе всех своих многочисленных приятелей, но не желаете обзванивать их, нажимая на кнопки телефона, то можете включить компьютер и пойти вздремнуть — программа все сделает за вас.

Так что же это за чудо? На ум сразу же приходит компактная коробочка со множеством кнопок, подключенная к телефонной линии, благо таких устройств сейчас предостаточно. Но речь здесь пойдет не о ней, а о том, как заставить ПК выполнять подобные функции. На сегодняшний день существует довольно много таких решений и все они прекрасно работают. Загвоздка лишь в том, что они в подавляющем большинстве программно-аппаратные, т. е. требуют специализированных голосовых плат. Мне же хотелось предложить вам чисто программное решение под названием «Автопрозвонка».

Общий принцип работы программы «Автопрозвонка»

Это автоинформатор и интеллектуальный автоответчик «в одном флаконе». Изюминка же данного продукта заключается в том, что для его работы, а именно для передачи данных с компьютера на обычный телефон, теперь достаточно иметь лишь модем, обладающий голосовыми функциями. Причем одновременно с использованием модема программа может взаимодействовать практически с любыми внешними данными, включая электронные таблицы, текстовые и dbf-файлы, базы данных MS Access, MS SQL и даже Oracle. Работа с внешними данными происходит с применением технологии ODBC, открывающей доступ к любой информации, для которой имеется соответствующий драйвер ODBC. Для подавляющего большинства широко распространенных БД драйверы ODBC уже включены в дистрибутив Windows. Благодаря совместному использованию двух разных технологий программа позволяет превратить компьютер в своеобразный шлюз между телефонной линией и БД. Причем алгоритм взаимодействия модема и БД определяется сценарием, который легко настроить под собственные требования.

Сценарий «Автопрозвонки»

Основная функция сценария — создание процесса взаимодействия между абонентом телефонной сети и программой (или сведениями в БД). В результате абонент получает возможность управлять логикой работы сценария, нажимая на клавиши тонального набора на своем телефоне. Например, с помощью команд сценария допускается выбрать в цикле1 строку данных и набрать номер телефона, приведенный в ней. Если номер телефона набран успешно, начнется анализ состояния линии. Если в процессе распознавания будет обнаружено, что абонент поднял трубку, то ему будет передано голосовое сообщение. Когда абонент прослушает его, то соответствующая команда сценария запишет в БД, когда, во сколько и с какой попытки получено сообщение. Если же он не ответит или номер окажется занят, то можно указать в БД, что абоненту звонили и не дозвонились, а также занести туда дату и время очередной попытки. Потом сценарий повторит цикл, выберет следующую запись и выполнит прозвон следующего абонента. Количество выбираемых записей ограничивается только возможностями используемого источника данных. Выборку кандидатов можно делать в любом порядке, поскольку она задается обычным SQL-запросом.

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

Еще один вариант сценария может выглядеть так. Сценарий инициализирует модем и ожидает входящего звонка. Когда тот поступит, программа «поднимает трубку» и начинает работать с абонентом. Она способна, в частности, определить номер звонящего абонента, используя АОН, и произнести сообщение, связанное с определенным номером (скажем, передать сведения для партнеров). А если программа определит, что звонит тот клиент, которого не хотят видеть, то она вообще откажется обслуживать определенный номер. Кроме того, можно запросить у абонента код или пароль, чтобы открыть ему доступ к какой-либо информации, которую программа выберет из БД. Код вводится нажатием клавиш тонального набора на телефонном аппарате. Программа также предлагает систему голосового меню. Путешествуя по нему, абонент получает необходимую информацию, например, узнает, каково состояние его лицевого счета или расписание сеансов в кинотеатре.

В сценариях не предусмотрено жесткого деления на функции автопрозвонки и автоответчика. Функциональное назначение сценария определяется только логикой команд, входящих в его состав. Так, можно легко разработать сценарий, проводящий социологический опрос. В этом случае программа дозвонится до абонента, произнесет приветственное сообщение, задаст ему вопрос и предложит варианты ответа. Нужный вариант абонент наберет, нажав на клавиши тонального набора на своем аппарате. Затем программа занесет его ответ в БД и либо продолжит опрос и задаст ему следующий вопрос, либо поблагодарит абонента за участие в опросе и перейдет к другому абоненту. Одно из достоинств подобного подхода заключается в том, что пользователь сам определяет, что сделает программа в конкретной ситуации, какие данные будет использовать и как изменять их в процессе работы сценария.

Остановимся на сценариях чуть более подробно. Они хранятся в виде внешних файлов, благодаря чему их можно легко переносить между компьютерами и подключать к программе. Сценарий представляет собой своеобразный визуальный язык программирования. При работе с ним не нужно изучать синтаксис команд — их свойства становятся видны сразу же после того, как команду выделят в дереве. Эти свойства тут же можно изменить. При переходе к другому элементу дерева измененные свойства команды проверяются на корректность, и если все будет правильно, то они сохранятся, а если же обнаружится несоответствие, то в ответ выводится сообщение.

Команды сценария

Команды сценария делятся на два вида:

  • производящие определенные действия, не связанные с порядком выполнения сценария;
  • управляющие последовательностью команд сценария.

К первым относятся команды взаимодействия с модемом, с источником данных, с запуском внешних модулей и т. д. Они довольно многообразны, и их функциональность достаточно широка. Здесь более подробно рассмотрим лишь команды второго типа, управляющие порядком выполнения сценария, в частности команду проверки условия и команду «цикл».

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

Еще одна команда, управляющая последовательностью выполнения команд, — это «цикл». Она позволяет организовывать три вида циклов.

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

С переменной цикла. В этом случае цикл будет выполнен с переменной цикла, т. е. при входе в цикл переменной цикла присваивается заданное начальное значение, которое в каждом цикле изменяется на заданную величину приращения. Выполнение цикла прекращается, если значение его переменной превысит заданную максимальную величину или встретится команда «завершение цикла» либо «завершение сценария». Переменная цикла доступна для всех команд, входящих в его тело. Циклы допускают вложенность, что очень удобно, например, для прозвона диапазона номеров телефонов без использования БД.

Курсор. В качестве основного параметра задается SQL-запрос к источнику данных для выборки необходимых сведений. Тело цикла выполняется по одному разу для каждой строки, полученной в результате запроса. Значения полей, выбранных из БД, доступны для команд, составляющих тело цикла. Выполнение цикла прекращается тогда, когда выборка данных завершена или когда встретилась команда «завершение цикла» либо «завершение сценария». Если запрос не возвратил ни одной записи, то тело цикла не выполняется ни разу. В этом случае удобно использовать данную команду для поиска определенных значений в БД.

Программа «Автопрозвонка»

Формирование звукового сообщения

Для того чтобы оценить голосовые возможности программы, рассмотрим способы формирования звукового сообщения. Оно может либо содержать информацию, находящуюся в базе данных, либо быть сформированным. Если это цифры, то тогда программа сможет произнести указанное число в любом роде, числе, падеже на четырех языках: русском, грузинском, узбекском и английском. Если число нужно произнести с указанием денежной единицы, то программа справится и с этим, правильно подобрав необходимый вариант. В качестве денежной единицы могут быть выбраны рубль, копейка, гривна, доллар, цент, лари и сум. Преобразовать текстовую информацию в голосовую программа может тремя способами:

  • Произнесение заданного голосового файла, т. е. просто задается имя обычного wav-файла. Причем оно может быть как статическим (неизменным в процессе выполнения сценария), так и динамическим, формирующим на основании значения выражения, либо выбирается из БД.
  • Комбинирование, т. е. программа составляет сообщение из отдельных звуковых файлов, сформированных заранее. Используется только для произнесения числовой информации. Когда нужно, например, произнести слова "сто двадцать рублей", то должны существовать три файла "сто.wav", "двадцать.wav" и "рублей.wav". Голосовые файлы - это обычные wav-файлы в несжатом PCM-формате.
  • Синтез, т. е. никаких звуковых файлов заранее готовить не нужно, ведь программа может синтезировать голосовые сообщения по тексту, используя внешние голосовые машины (TTS Engine). Чтобы возможности синтеза были доступны в системе нужно установить хотя бы одну голосовую машину, синтезирующую голос на нужном языке. Нередко качество и длительность синтеза современных голосовых машин оказываются неудовлетворительными, и потому, как правило, отдают предпочтение более трудоемкому комбинированию. Но синтез абсолютно незаменим тогда, когда требуется произнести текстовую информацию, хранящуюся в БД или динамически сформированную в процессе выполнения сценария.

Кроме того, перед формированием фразы допускается задать формат произнесения числа. Например, если нужно произнести телефонный номер 343343, то можно задать маску произнесения числа как ## ## ##, и тогда номер будет произнесен как 34-33-43, а для маски ### ### — как 343-343.

* * *

На первый взгляд «Автопрозвонка» кажется довольно сложной для понимания. Действительно, для того чтобы разобраться, как эта программа работает, придется затратить некоторое время. Зато когда для вас станет ясна логика ее работы и когда она «подружится» с вашим модемом, то вы получите надежный инструмент с богатыми функциональными возможностями.

Ознакомиться с программой «Автопрозвонка» можно на сайте http://www.smpsoft.ru. Там предлагается версия, выполняющая все функции в полном объеме, за исключением того, что все циклы сценария ограничены тремя повторениями.

ОБ АВТОРЕ

Евгений Абрамов — автор программы «Автопрозвонка». C ним можно связаться по e-mail:jugin@smpsoft.ru.


1 Сценарий умеет делать циклы по данным, полученным из БД.