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

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

Скрипт readout_incoming.js проверяет параметры смс, открывает компонент Speech и проговаривает текст:

var for_appending = 8;
var cp_unicode    = true;

function OpenTextFileEC(filename,iomode,create,format)
{
    var f = null;
    do {
        try 
        {
            f = fso.OpenTextFile(filename,iomode,create,format);
        }
        catch (e) 
        {
            WScript.Sleep(50);
        }
    }
    while ( f == null );
    return f;
}

// открываем компонент с проверкой, на случай если компонент занят
function open_speech() 
{
    var s = null;
    do {
        try 
        {
            s = WScript.CreateObject("Speech.SpVoice");
        }
        catch(e) 
        {
            WScript.Sleep(50);
        }
    }
    while ( s == null );
    return s;
}

// Считываем параметры СМС из переменных окружения
var shell = WScript.CreateObject("WScript.Shell");
var type = shell.ExpandEnvironmentStrings("%sms_type%");
var phone = shell.ExpandEnvironmentStrings("%sms_sender%");
var sent_time = shell.ExpandEnvironmentStrings("%sms_senttime%");
var text = shell.ExpandEnvironmentStrings("%sms_messagetext%");

// Обрабатываем только входящие сообщения type == SMS-DELIVER
if ( type!="SMS-DELIVER") 
    WScript.Quit(0);

var fso = WScript.CreateObject("Scripting.FileSystemObject");
var flog = OpenTextFileEC("readout_incoming.log",for_appending,true,cp_unicode);
var speech = open_speech();

if ( phone.length == 11 ) {
    var p = phone.substr(0,1) + " " +
        phone.substr(1,3) + " " +
        phone.substr(4,3) + " " +
        phone.substr(7,2) + " " +
        phone.substr(9,2);
    phone = p;
}
var t = "Сообщение от абонента " + phone + "\r\n" + text;
speech.Speak(t);
flog.Close();

Скрипт имеет следующие особенности:

  • открывает компонент Speech.SpVoice с проверкой через открытие файла, это сделано на случай, если компонент занят другой копией этого же скрипта или другим скриптом: в этом случае компонент будет открыт, как только освободится;
  • преобразовывает стандартный 11-символьный номер телефона из вида 79001234567 к виду 7 900 123 45 67, т.е. вставляет пробелы для более правильного прочитывания номера компонентом.
  • собирает весь проговариваемый текст в одну переменную, это необходимо в случае одновременного выполнения нескольких таких скриптов, т.к. метод Speak выполняется по очереди, т.е. несколько скриптов «встают в очередь», не забивая друг друга.

Теперь добавляем в nhsms команду обработки входящих сообщений:

  • На странице Считывание входящих сообщений добавляем команду %windir%\sysnative\wscript.exe readout_incoming.js
  • Указание виртуального пути %windir%\sysnative\ необходимо для нормальной работы скрипта на 64-хбитной платформе (подробнее).

 

Озвучивание входящих смс сообщений
Метки:         

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *