Scripts (версия 3.xx)/Отправка SMS

Материал из Call Office Wiki
Перейти к навигации Перейти к поиску
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\\Device.js'));
eval (Script.GetFileContent ('Common\\Classes\\SMS.js'));
eval (Script.GetFileContent ('Common\\Classes\\DataRead.js'));

eval (Script.GetFileContent ('Solutions\\Basic\\SendSMS\\Info.js'));
eval (Script.GetFileContent ('Solutions\\Basic\\SendSMS\\CDataWriteSMS.js'));
eval (Script.GetFileContent ('Solutions\\Basic\\SendSMS\\COptions.js'));

Script.InLogInfo ('Старт');

try {

   var Device   = new CDevice ();

   if (Device.Open ()) {

      Script.InLogDebug ('Устройство открыто успешно');

      var Options = new COptions ();

      var CycleCount = 1;

      var DataRead = new CDataRead ();

      while (DataRead.CheckCycle (CycleCount)) {    // Проверка количества попыток обзвона в сеансе

         Script.InLogInfo ('Цикл рассылки <b>%s</b>', CycleCount);

         var Database = new CDatabase ();

         if (Database.Open ()) {

            var Info = new CInfo ();

            if (Info.Count (Database, DataRead)) {

               var Record = Database.Query (DataRead.Query ());      // Выбор записей в базе данных
               if (Record) {

                  var DataWriteSMS = new CDataWriteSMS ();

                  if (DataRead.CheckFields  (Record) &&
                      DataWriteSMS.CheckFields (Record)) {

                     while (Record.Fetch ()) {

                        Script.WaitPause ();                               // Ожидание, если нажали на Паузу

                        Info.DataShow (Record);

                        var Time = new CTime ();

                        if (Time.CheckTime ()) { // Проверка расписания

                           var Status = '';

                           var Phone = DataRead.GetPhone (Record);

                           if (!empty (Phone)) {   // Если номер телефона не пуст

                              if (!DataRead.CheckIsOK (Record)) { // Если статус - не прозвонен
                                                                  // и не достигнут предел количества попыток
                                 try {

                                    for (var i in Phone) {

                                       if (DataRead.WaitBeforeCall ()) {    // Ожидание перед звонком

                                          var SMS = new CSMS ();

                                          var TextSMS = SMS.GetText (Record);

                                          if (!empty (TextSMS)) {

                                             var PhoneStatus = 'OK';

                                             switch (Device.SendSMS (Phone[i], TextSMS, SMS.GetSender ())) {
                                                case 0:  Script.InLogInfo ('Сообщение по номеру %s отправлено успешно', Phone[i]); break;
                                                case 4:  PhoneStatus = 'Отправка сообщения прервана пользователем'; break;
                                                case 5:  PhoneStatus = 'Истекло время ожидания отправки сообщения абоненту ' + Phone[i]; break;
                                                default: PhoneStatus = 'Ошибка отправки сообщения'; break;
                                             }

                                             if (Status != 'OK') Status = PhoneStatus; // Статус записи

                                             if (DataRead.IsRemaining (PhoneStatus)) break; // Если удачный дозвон
                                                                                            // и не включен параметр звонить
                                                                                            // по оставшимся номерам в ячейке
                                             if (Script.IsStop ()) break;

                                          } else Script.StopError ('Отсутствует текст сообщения. Выполнение сценария прервано.');

                                          if (!Record.SetStatus (Status)) break;

                                       }

                                       if (Script.IsStop ()) break;
                                    }

                                    if (Script.IsStop ()) break;
                                 }
                                 catch (Err) {
                                    Status = Err.description;
                                    Script.StopError ('Ошибка в процессе отправки сообщений. ' + Err.description);
                                 }

                                 DataWriteSMS.SetStatus (Record, DataRead.GetPhone (Record, true), Status); // Запись результата звонка
                                 Info.Update (Status);
                              }
                           } else Script.StopError ('Номер телефона пуст.');
                        } else Device.Wait (1000);

                        if (Script.IsStop ()) break;

                         Record.Next ();
                     }

                     if (Script.IsStop ()) break;
                  } // Отсутствуют необходимые поля базы данных

                  Record.Close ();
                  if (Script.IsStop ()) break;
               } else Script.InLogError ('Ошибка получения данных для отправки сообщения');
            } else Script.InLogInfo ('Отсутствуют кандидаты на отправку SMS');

            Database.Close ();
         }

         CycleCount++;

         if (Script.IsStop ()) break;
      }

      Device.Close ();
   }
}
catch (Err) {
   Script.InLogError ('Ошибка при работe сценария. %s. Код ошибки: %s', Err.description, Err.number);
   if (Database) Database.Close ();
   if (Device  ) Device.Close ();
}

Script.InLogInfo ('Стоп');