Добавляем в программу 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-хбитной платформе (подробнее).
Озвучивание входящих смс сообщений