Scripts (версия 3.xx)/Приём SMS: различия между версиями
Перейти к навигации
Перейти к поиску
McBurns (обсуждение | вклад) |
McBurns (обсуждение | вклад) |
||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 62: | Строка 62: | ||
var SMS; | var SMS; | ||
var | var InText = (SMSList[i].Text + '').replace(/'/g, "''"); // Экранируем одинарные кавычки | ||
var OutText = ''; | |||
Script.InLogInfo ('"' + InText + '"'); | |||
var DataSearchSMS = new CDataSearch (); | var DataSearchSMS = new CDataSearch (); | ||
Строка 92: | Строка 95: | ||
} | } | ||
OutText = Script.GetExpressionValue (OutText, {'intext': | OutText = Script.GetExpressionValue (OutText, {'intext': InText, | ||
'inphone': Phone}); | 'inphone': Phone}); | ||
Строка 103: | Строка 106: | ||
var Query = Script.GetExpressionValue (DataWrite.Query (), | var Query = Script.GetExpressionValue (DataWrite.Query (), | ||
{'ColumnSMS': | {'ColumnSMS': InText, | ||
'ColumnPhone': Phone, | 'ColumnPhone': Phone, | ||
'intext': | 'intext': InText, | ||
'inphone': Phone}); | 'inphone': Phone}); | ||
Текущая версия на 07:38, 24 февраля 2014
eval (GetFileContent ('Common\\Classes\\Script.js')); // необходимо для работоспособности сценария
var Script = new Script (); // необходимо для работоспособности сценария
// =================== Подключение модулей ===================
eval (Script.GetFileContent ('Common\\Classes\\Database.js')); // База данных
eval (Script.GetFileContent ('Common\\Classes\\Time.js')); // Расписание
eval (Script.GetFileContent ('Common\\Classes\\SMS.js')); // Работа с сообщениями
eval (Script.GetFileContent ('Common\\Classes\\Device.js')); // Устройство
eval (Script.GetFileContent ('Common\\Classes\\DataSearch.js')); // Поиск данных
// локальные модули для конкретного решения
eval (Script.GetFileContent ('Solutions\\Basic\\ReceiveSMS\\Info.js')); // Информация и статистика
eval (Script.GetFileContent ('Solutions\\Basic\\ReceiveSMS\\CAnswerMode.js'));
eval (Script.GetFileContent ('Solutions\\Basic\\ReceiveSMS\\CDataWriteSMS.js')); // Запись данных
// =================== Начало работы сценария ===================
Script.InLogInfo ('Старт');
try {
var Info = new CInfo ();
var Device = new CDevice ();
if (Device.Open ()) {
var Time = new CTime ();
if (!Time.CheckTime ()) Device.Wait (1000); // Ждём наступления времени обзвона
while (Time.CheckTime ()) { // Выполняем, пока совпадает время обзвона
var AnswerMode = new CAnswerMode ();
AnswerMode.Purge (); // Проверка на необходимость удаления имеющихся сообщений
var Database = new CDatabase ();
if (Database.Open ()) {
while (!Script.IsStop ()) { // Основной цикл ожидания входящих SMS
Script.WaitPause (); // Ожидание, если нажали на Паузу
var SMSList = Device.SMSList ();
if (SMSList.length) {
Script.InLogInfo ('Количество входящих SMS сообщений: ' + SMSList.length);
for (var i in SMSList) {
if (Script.IsStop ()) break;
try {
var Phone = SMSList[i].Phone;
if (Phone) Script.InLogInfo ('Входящее сообщение от %s поступило', Phone);
else Script.InLogInfo ('Входящее сообщение поступило');
var SMS;
var InText = (SMSList[i].Text + '').replace(/'/g, "''"); // Экранируем одинарные кавычки
var OutText = '';
Script.InLogInfo ('"' + InText + '"');
var DataSearchSMS = new CDataSearch ();
if (AnswerMode.IsAnswer ()) { // Ответное сообщение требуется
if (AnswerMode.IsSearch ()) { // Есть поиск в БД
var Record = DataSearchSMS.GetRecord (Database, Phone);
if (Record.Fetch () && Phone) { // Нашли телефон в БД
SMS = Script.GetConfig ('SMS', 'Found');
OutText = Record.GetExpressionValue (SMS.Text);
Info.Ok++; // добавляем найденный телефон в статистику
}
else { // НЕ нашли
SMS = Script.GetConfig ('SMS', 'NotFound');
OutText = Record.GetExpressionValue (SMS.Text);
Info.Fail++; // добавляем неизвестный телефон в статистику
}
Record.Close ();
}
else { // Общее сообщение без поиска в БД
SMS = Script.GetConfig ('SMS', 'ForAll');
}
}
OutText = Script.GetExpressionValue (OutText, {'intext': InText,
'inphone': Phone});
Info.All++; // Увеличиваем счетчик принятых звонков в статистике
Info.Update (DataSearchSMS.IsSearch ()); // Показываем статистику
if (AnswerMode.IsRecord ()) { // Если запись
DataWrite = new CDataWriteSMS ();
var Query = Script.GetExpressionValue (DataWrite.Query (),
{'ColumnSMS': InText,
'ColumnPhone': Phone,
'intext': InText,
'inphone': Phone});
try {
Script.InLogInfo ('Сохранение входящего SMS');
Database.Query (Query);
Script.InLogInfo ('Сохранение входящего SMS завершено');
}
catch (Err) {
Script.InLogError ('Ошибка в SQL запросе для записи входящего SMS: %s. %s. Код ошибки: %s',
Query, Err.description, Err.number);
Script.StopError ();
}
}
if (AnswerMode.IsAnswer ()) { // Если требуется ответ
if (Script.IsStop ()) break;
try {
if (/^[\+0-9]+$/.test (Phone)) {
Script.InLogInfo ('Отправка ответного сообщения <i>%s</i> по номеру %s', OutText, Phone);
var ResultSend = Device.SendSMS (SMSList[i].Phone, OutText, SMS.Sender);
switch (ResultSend) {
case 0: Script.InLogInfo ('Ответное сообщение отправлено успешно'); break;
case 4: Script.InLogError ('Отправка ответного сообщения прервана пользователем'); break;
case 5: Script.InLogError ('Время ожидания отправки ответного сообщения истекло'); break;
default: Script.InLogError ('Неизвестная ошибка отправки ответного сообщения: ' + ResultSend); break;
}
}
else {
Script.InLogError ('Номер телефона %s не цифровой. Ответное сообщене не отправлено.', Phone);
}
}
catch (Err) {
Script.InLogError ('Ошибка отправки ответного SMS: ' + Err.description);
}
}
Script.InLogInfo ('Удаление входящего SMS (Id = %s)', SMSList[i].Id);
Device.DeleteSMS (SMSList[i].Id);
Script.InLogInfo ('Удаление входящего SMS (Id = %s) завершено', SMSList[i].Id);
Script.InLogInfo ('Входящее SMS № %s обработано', Info.All);
}
catch (Err) {
Script.InLogError ('Ошибка обработки входящего сообщения. %s. Код ошибки: %s',
Err.description, Err.number);
if (Script.StopError ()) break;
}
}
}
Script.InLogInfo ('Поступившие SMS обработаны');
Script.InLogInfo ('Ожидание входящего сообщения...');
switch (Device.WaitForIncoming (Time.TimeOut (), 2)) { // Ждем входящего СМС заданное время
case 0: // СМС поступило
break;
default:
Script.Stop ();
}
}
}
Database.Close ();
if (Script.IsStop ()) break;
}
Device.Close ();
}
Script.InLogInfo ('Стоп');
}
catch (Err) {
Script.InLogError ('Ошибка при работe сценария. %s. Код ошибки: %s', Err.description, Err.number);
if (Database) Database.Close ();
if (Device ) Device.Close ();
}