Начало работы с nhsms

Использование nhsms

Редактор конфигурации nhsms

Командная строка nhsms

Файл исходящих сообщений nhsms

Функции программы

Отправка одной смс с указанием параметров в командной строке

Запуск с интерфейсом командной строки:

nhsmscl.exe [-com:<номер порта COM>] [-phone:<номер телефона>] [-smsc:<номер центра обслуживания>] [-ini:<имя файла с настройками>] [-alert] [-license:<лиц. файл>] [-esc:<упр. символ>] {<текст сообщения>|-textfromfile:<имя файла>}

Запуск с графическим интерфейсом:

nhsms.exe [-com:<номер порта COM>] [-phone:<номер телефона>] [-smsc:<номер центра обслуживания>] [-ini:<имя файла с настройками>] [-alert] [-license:<лиц. файл>] [-esc:<упр. символ>] [-out:{s[ilent]|e[rror]|a[ll]}] {<текст сообщения>|-textfromfile:<имя файла>}

В этом варианте конфиг файл необязателен.

Отправка списка смс/ussd из файлов

Запуск с интерфейсом командной строки:

nhsmscl.exe [-com:<номер порта COM>] [-ini:<имя файла с настройками>] [-alert] [-license:<лиц. файл>] [-esc:<упр. символ>]

Запуск с графическим интерфейсом:

nhsms.exe [-com:<номер порта COM>] [-ini:<имя файла с настройками>] [-license:<лиц. файл>] [-out:{s[ilent]|e[rror]|a[ll]}]

В этом варианте конфиг файл обязателен, в нём должны быть заданы файлы с исходящими смс.

При отправке списка sms/ussd из файла имеется два режима работы, режим задается в конфигурационном файле параметром Parameters|RunMode.

  • Однократное выполнение (значение once). В этом режиме программа однократно выполняет заданные в конфигурации действия (отправка и/или прием смс/ussd) и завершает свою работу. При каждом запуске программа заново устанавливает соединение с модемом.
  • Постоянная работа (значение continuous). В этом режиме программа ожидает появления файлов с исходящими сообщениями и приёма входящих смс на модем. При появлении файла с исходящими СМС сообщениями программа отправляет все сообщения из этого файла. В процессе работы программа сохраняет соединение с модемом. Завершение программы происходит по команде пользователя ( Ctrl-C в консольной версии NHSMSCL, через меню на значке системной панели в графической версии NHSMS).

Параметры запуска

Запуск программы в консольном режиме:

nhsmscl.exe [-com:<номер порта COM>] [-phone:<номер телефона>] [-smsc:<номер центра обслуживания>] [-ini:<имя файла с настройками>] [-alert] [-license:<лиц. файл>] [-esc:<упр. символ>] {<текст сообщения>|-textfromfile:<имя файла>}

Запуск программы с графическим интерфейсом пользователя:

nhsms.exe [-com:<номер порта COM>] [-phone:<номер телефона>] [-smsc:<номер центра обслуживания>] [-ini:<имя файла с настройками>] [-alert] [-license:<лиц. файл>] [-esc:<упр. символ>] [-out:{s[ilent]|e[rror]|a[ll]}] {<текст сообщения>|-textfromfile:<имя файла>}
  -com:<номер       Номер последовательного порта с телефоном. 
   порта COM>       Указывайте  только номер, например, 1, 48 или 250. 
                    Допустимы номера от 1 до 255 (ограничение Windows).

  -phone:<номера    Один или несколько номеров телефонов, на которые 
   телефонов>       будет отправлено сообщение, в международном формате. 
                    Например, -phone:79011234567. Несколько номеров разделите 
                    запятыми, например, -phone:79011234567,79033216548.

  -smsc:<номер      Номер центра обслуживания СМС сотового оператора в
   центра           международном формате, например, -smsc:79011234567. 
   обслуживания>    Это необязательный параметр: если не указан, программа
                    использует номер центра обслуживания, настроенный в
                    телефоне.

  -ini:<имя файла>  Задает имя файла с настройками (формат файла).
                    В имени файла можно использовать переменные окружения, а 
                    также дополнительную переменную:
                        %StartPath% - путь к каталогу с EXE файлом.
                    Это необязательный параметр. Если не задан, то программа 
                    обращается к файлу nhsms.ini в том же каталоге, что и
                    запущенный файл. 
                    Если какой-то параметр одновременно задан и в файле, и в 
                    командной строке, то будет использовано значение, указанное
                    в командной строке.

  -alert            Если задан режим ALERT, сообщение будет сразу выведено 
                    на экран телефона (режим Alert-SMS или Flash-SMS).

  -license:<лиц.    Задаёт файл лицензии. Если не задан, программа ищет файл nhsms.lic.
   файл>            Вместо файла можно указать SMSONLY, который включает режим 
                    отправки только СМС, но без ограничения по количеству отправки.

  -esc:<упр.        Задает управляющий символ для служебных символов
   символ>          (по умолчанию используется обратная косая черта).

  -out:s[ilent]|    Задает режим показа информации пользователю (только для версии
   e[rror]|a[ll]    графического интерфейса). Имеется три режима (можно указывать
                    также первую букву вместо полного названия):
                    silent  Программа никак не показывается пользователю ни в 
                            при успешном выполнении, ни при ошибке.
                    error   В случае ошибки программа показывает пользователю 
                            окно сообщения (MessageBox), которое автоматически
                            закрывается через 15 сек.							
                    all     Программа показывается пользователю в виде значка на
                            системной панели (tray icon), значок не реагирует на 
                            мышь, просто показывает, что программа работает.

  <текст            Текст передаваемого сообщения. Максимальная длина сообщения
  сообщения>        17085 символов. Можно вставлять символы форматирования 
                    после служебного символа (см. параметр -esc): 
                    перевод строки - n, табуляция - t, например, \n и \t. 
                    Нельзя использовать одновременно с -textfromfile

  -textfromfile:    Указывает, что текст следует взять из файла. Поддерживаются
   <имя файла>      файлы ANSI и Unicode. Отправляет текст так, как он отформатирован
                    в файле (вставка символов форматирования с помощью служебного
                    символа -ESC не работает).

Краткую справку по программе можно посмотреть, запустив ее с параметром /?.

Варианты запуска

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

Приложение командной строки

Приложение командной строки nhsmscl.exe открывает консольное окно, в котором выводится ход работы программы. Этот вариант запуска удобен для программиста, чтобы контролировать работу программы, но пользователю, работающему в программе 1С или Office, чёрное консольное окно будет создавать неудобство.

Приложение с графическим интерфейсом

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

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

Служба

Служба nhsmssvc.exe предназначена для фоновой работы, т.к. служба Windows может работать сразу после включения компьютера без участия пользователя. Также служба защищена от действий пользователя (не администратора) Windows, т.к. он не имеет полномочий для остановки службы

Служба требует установки. Для удобства в пакет программы входят командные файлы:

nhsmssvc_create.cmd устанавливает службу nhsms
nhsmssvc_delete.cmd удаляет службу nhsms

По умолчанию, установка службы производится с режимом запуска Вручную. Чтобы установить с автоматическим запуском, замените в командном файле параметр demand на auto.

Для запуска и остановки службы можно использовать команды: sc start nhsms, sc stop nhsms, net start nhsms, net stop nhsms.
Параметры, заданные в командной строке nhsms/nhsmscl, имеют приоритет над параметрами, указанными в конфигурационном файле.

Считывание сообщений

Программа nhsms считывает входящие СМС сообщения и отчёты о статусе отправленных СМС, если:

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

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

sms_type            Тип считанного СМС:
                    SMS-STATUS-REPORT - отчет о статусе,
                    SMS-DELIVER       - входящее СМС.

sms_sender          Телефонный номер отправителя (только для SMS-DELIVER).

sms_destination     Телефонный номер адресата (только для SMS-STATUS-REPORT).

sms_smsc            Номер СМС центра.

sms_senttime        Время отправки сообщения в формате yyyy-MM-dd HH:mm:ss.
sms_senttime_year   Год в формате yyyy.
sms_senttime_month  Месяц в формате MM.
sms_senttime_day    День в формате dd.
sms_senttime_hour   Час в формате HH.
sms_senttime_min    Минуты в формате mm.
sms_senttime_sec    Секунды в формате ss.

sms_statustime      Время формирования статуса в формате yyyy-MM-dd HH:mm:ss
                    (только для SMS-STATUS-REPORT).
sms_statustime_year Год в формате yyyy.
sms_statustime_month  
                    Месяц в формате MM.
sms_statustime_day  День в формате dd.
sms_statustime_hour Час в формате HH.
sms_statustime_min  Минуты в формате mm.
sms_statustime_sec  Секунды в формате ss.

sms_statuscode      Код статуса сообщения в десятичном виде.

sms_statustext      Текстовое пояснение (только общая информация):
                    - сообщение доставлено или
                    - ошибка доставки, продолжаются попытки доставки или
                    - ошибка доставки, попытки доставки прекращены.

sms_readtime        Время считывания сообщения из телефона/модема программой,
                    в формате yyyy-MM-dd HH:mm:ss.
sms_readtime_year   Год в формате yyyy.
sms_readtime_month  Месяц в формате MM.
sms_readtime_day    День в формате dd.
sms_readtime_hour   Час в формате HH.
sms_readtime_min    Минуты в формате mm.
sms_readtime_sec    Секунды в формате ss.

sms_messagetext     Текст сообщения. Программа заменяет символы форматирования
                    (символы \r, \n и \t) с использованием параметра ESC,
                    чтобы можно было передавать сообщения, содержащие
                    перевод строки.

Примеры запускаемых команд:

commandline=process_sms.cmd
commandline=write_sms.cmd "%sms_type%" "%sms_sender%" "%sms_destination%" "%sms_messagetext%" "%sms_senttime%" "%sms_statustime%"

Исполняемые файлы CMD и EXE должны лежать в папках, по которым ведётся автоматический поиск (например, указаны в %PATH%) или же для них должен быть указан полный путь.

Как записать считанное СМС в файл?

Создайте командный файл write_sms.cmd:

@echo off
echo %* >>read-sms.txt

и настройте его запуск по приёму СМС:

commandline=write_sms.cmd "%sms_type%" "%sms_sender%" "%sms_destination%" "%sms_messagetext%" "%sms_senttime%" "%sms_statustime%"

Или используя переменные среды в самом командном файле:

@echo off
echo "%sms_type%" "%sms_sender%" "%sms_destination%" "%sms_messagetext%" "%sms_senttime%" "%sms_statustime%" >>read-sms.txt

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

Как записать считанное СМС в файл в своем формате, например, с разделителями-запятыми?

Просто измените командный файл write_sms.cmd:

@echo off
echo "%sms_sender%","%sms_senttime%","%sms_messagetext%" >>read-sms.txt

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

Как выполнить сложную команду?

Настроив программу NHSMS на приём в автоматическом режиме (например, с помощью Назначенных заданий Windows), мы сможем выполнять команды на компьютере по команде с сотового телефона.
Например, чтобы иметь возможность перезагрузить компьютер по команде с сотового телефона, в конфигурационный файл добавим команду:

commandline=process_sms.cmd

А в файле process_sms.cmd выполним следующие действия:

@echo off
if not "%sms_type%"=="SMS-DELIVER" goto End
if not "%sms_sender%"=="79261234567" goto End
if "%sms_messagetext%"=="Перезагрузка" nhss -r
:End

Командный файл проверяет, что полученное СМС имеет тип SMS-DELIVER, что сообщение отправлено с определенного номера (номера сисадмина, конечно), и что текст СМС имеет строго предопределенное значение. При выполнении всех условий будет выполнена программа nhss -r, дающая команду на перезагрузку компьютера (см. о программе NHSS http://nhutils.ru/ss.htm).
Таким образом, при получении каждого нового СМС программа NHSMS будет запускать командный файл, выполняющий необходимые проверки и запускающий запрограммированные действия.
Естественно, что можно настроить и другие команды на выполнение по приёму СМС.

Связь с модемом

При поиске модема программа пытается установить связь на каждой возможной скорости: 115200, 57600, 56000, 38400, 19200, 14400, 9600, 4800, 2400, 1200, 600, 300, 110 бод. В результате улучшается совместимость по скорости коммуникации, но увеличивается время поиска. Для уменьшения времени поиска предусмотрена возможность выбора скоростей. Чтобы указать программе скорости для поиска, необходимо поместить файл syncmodem.ini рядом с nhsms.exe/nhsmscl.exe и добавить в него нужные скорости:

[Connection]
BaudRates=115200,57600,14400

Тогда программа будет пытаться подключиться с перечисленными скоростями в том порядке, в котором они перечислены.

Файл исходящих сообщений

Файл исходящих сообщений может содержать неограниченное число смс или ussd запросов.

Кодировка файла может быть: Unicode, ANSI, OEM. Кодировка Unicode определяется автоматически по формату файла. Если же файл не Unicode, он считается ANSI. Чтобы отправить СМС в кодировке OEM, необходимо сформировать текст СМС в кодировке OEM и добавить параметр CodePage=OEM для каждой СМС в кодировке OEM. Таким образом, в одном файле можно смешивать СМС в кодировках ANSI и OEM.

Параметры смс

[<Обозначение СМС>]
Phone=‹номер телефона адресата, без плюса, можно несколько номеров через запятую›
PhoneType=‹international*|national›
    international - международный номер вида 79851234567 
    national - короткий номер, например, 111
SMSC=‹номер центра обслуживания, без плюса›
Alert=‹0*|1›
    0 - обычная смс 
    1 - сразу по приёму смс выводится на экран (alert-sms, flash-sms)
StatusReportRequest=‹0*|1›
    0 - не запрашивать статус смс 
    1 - запрашивать статус смс
Text=<текст сообщения в одну строку>
CodePage=
    OEM - означает, что поле Text записано в кодировке OEM.
    Для других кодировок этот параметр не используется.
ValidityPeriod=<срок действия смс (подробнее)>

Параметры ussd

[<Обозначение USSD запроса>]
USSD=‹запрос ответа›,"‹текст запроса›"[,‹схема кодирования данных›]
    ‹запрос ответа› - 0|1, 0 = не показывать ответ, 1 = показывать ответ 
    ‹текст запроса› - собственно запрос, например, *100#
    ‹схема кодирования данных› - число, по умолчанию 15
Coding=‹text*|pdu›
    Кодирование запроса перед отправкой (смотря какую кодировку
    поддерживает ваш модем): 
    text - в виде текста, т.е. без перекодировки 
    pdu - кодирование в 7 бит
CommandLine=<команда, которая будет запущена после выполнения запроса>

Пример ussd

Пример файла с двумя сообщениями и одним USSD запросом:

[1]
Phone=79161111111
Alert=1
Text=Нет связи с контроллером домена
ValidityPeriod=2d

[2]
Phone=79162222222,79163333333
Text=Нет связи с контроллером домена
ValidityPeriod=1d

[balance]
USSD=1,"#100#",15
CommandLine=ussd_balance.js

Там, где параметры SMSC, Alert, StatusReportRequest не заданы, используются значения, заданные в конфиг файле.

Особенности отправки сообщений

Обработка файла сообщений

Программа nhsms отправляет сообщения из файла в том порядке, в котором они перечислены в файле. После отправки каждого сообщения программа переносит информацию о нём в файл отправленных сообщений (файл, заданный параметром Parameters|SmsFileOnComplete). Записываемая информация включает результаты отправки и описана в параграфе Особенности отправки смс.

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

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

После выполнения USSD запроса программа запускает команду, заданную параметром CommandLine. В создаваемый процесс передаются параметры запроса в виде переменных окружения:

ussd_request        Отправленный USSD запрос
ussd_response       Ответ на запрос - текстовая часть (то, что между кавычками) 
                    из ответа +CUSD: 0,"..."
ussd_resultcode     Код ошибки (0-успешно, иначе - ошибка)
ussd_resulttext     Описание результата: текст ошибки, может включать полный ответ модема

Особенности отправки смс

Программа проверяет результат отправки сообщения, в случае ошибки, делает повторную попытку. По умолчанию, делается не больше трёх попыток отправки СМС.

Если неправильно заданы параметры СМС, например, поле Phone не содержит номера, программа не пытается отправить СМС, а сразу записывает соответствующий результат отправки.

Кодировка сообщения 7 или 16 бит выбирается автоматически: если отправляемый текст совместим с кодировкой GSM 7 bit, смс будет закодирована в 7 бит, иначе в 16 бит. Одно 7 битное сообщение может содержать 160 символов, одно 16-битное — 70 символов.

Более длинные сообщения автоматически разбиваются на части. Каждая часть может содержать 153 символа в 7-битной кодировке или 67 символов в 16-битной кодировке.

Результаты отправки сообщений записываются в соответствующий файл. Для сообщений, отправляемых из файлов, выходной файл определяется параметром Parameters|SmsFileOnComplete. Для сообщений, заданных параметром командной строки, файл определяется параметром CommandLineSmsFile. Для коротких сообщений программа записывает параметры сообщения и следующие поля:

SentTm=2010-04-06 18:45:40                            Дата и время отправки ГГГГ-ММ-ДД чч:мм:сс
ResultCode=0                                          Код выполнения (0-успешно, иначе код ошибки)
ResultText=                                           Текстовое пояснение для ошибок
Parts=1                                               Число частей (1 означает короткое СМС)
MessageReference=0                                    Идентификационный номер сообщения (только для короткого)

Для длинных сообщений программа записывает информацию по сообщению в целом и по каждой части (нумерация частей с нуля):

SentTm=2010-04-06 18:45:40                            Дата и время отправки сообщения (последней части) ГГГГ-ММ-ДД чч:мм:сс
ResultCode=0                                          Код выполнения (итоговый код отправки для всего длинного сообщения)
ResultText=                                           Текстовое пояснение для ошибок
Parts=2                                               Число частей (2 или больше означает длинное СМС)
SentTm_Part0=2010-04-06 18:45:30                      Информация по первой части
ResultCode_Part0=0
ResultText_Part0= 
MessageReference_Part0=8
SentTm_Part1=2011-04-06 18:45:40                      Информация по второй части
ResultCode_Part1=0
ResultText_Part1= 
MessageReference_Part1=48

Для USSD запросов программа добавляет поля:

USSDResponse=Minus:1974,18r,Limit:50000000r           Текст ответа
SentTm=2010-04-06 18:45:40                            Дата и время отправки
ResultCode=0                                          Код выполнения (0-успешно)
ResultText=+CUSD: 0,"Minus:1974,18r,Limit:50000000r " Полный ответ модема

Срок действия сообщений

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

5m,10m…55m      значения от 5 до 55 минут с шагом 5 минут или
1h,1h5m…11h55m  значения от 1 часа до 11 часов 55 минут с шагом 5 минут или
12h,12h30m…24h  значения от 12 часов до 24 часов с шагом 30 минут или
1d,2d…30d       значения от 1 до 30 дней или
5w,6w…63w       значения от 5 до 63 недель.
Все значения 'включительно'.
Вместо латинских букв m, h, d, w можно использовать русские м, ч, д, н.

Примеры:
15m или 15м – 15 минут,
1h или 1ч – 1 час,
1h30m или 1ч30м – полтора часа,
24h или 24ч или 1d или 1д – один день,
30d или 30д – один месяц,
25w или 25н – примерно полгода (25 недель).

Точность выполнения запрошенного срока действия смс зависит от оператора связи.

Если у вас остались вопросы по работе программы nhsms, вы можете задать их через поле комментария внизу страницы (регистрация необходима для защиты от спама).

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

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