Структура файла исходящих сообщений nhsms

Файл имеет структуру INI файла, каждый раздел задаёт одно исходящее сообщение или один USSD запрос.

Благодаря этому:

  • файл может содержать практически неограниченное число исходящих смс или ussd запросов – при условии размера файла до 100 МБ
  • для каждого смс или ussd можно указывать только те поля, которые нужны для него – гибкая структура, в отличие от таблицеобразных форматов типа csv
  • файл удобен для чтения – в отличие от xml

Файл может быть сохранён в Unicode, UTF-8, ANSI, OEM. Кодировка определяется автоматически по заголовкам и содержимому файла, кроме OEM. Чтобы отправить СМС в кодировке 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=срок действия смс (подробнее)
SendingPriority=B|L|N*|P|T
    B - низший приоритет
	L - низкий приоритет 
	N - обычный приоритет
	P - высокий приоритет
	T - высший приоритет
SendingTime=время с,время до,дни
    время с  - в формате h:mm
	время до - в формате h:mm
	дни      - дни недели Sun,Mon,Tue,Wed,Thu,Fri,Sat или дата yyyy-M-d

Параметры ussd

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

Описание параметров файла исходящих сообщений

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 недель)

SendingPriority — приоритет отправки смс и ussd

Параметр SendingPriority применяется к каждому смс или ussd и задаёт приоритет отправки этого сообщения.

Используя этот параметр, можно отправить более важное смс или ussd вне очереди.

Приоритет сообщения задаётся латинской буквой:

B - низший приоритет (Bottom)    
L - низкий приоритет (Low)
N - обычный приоритет (Normal)
P - высокий приоритет (Priority)
T - высший приоритет (Top)

Программа отправляет в первую очередь сообщения с высшим приоритетом (T), затем с высоким (P) и так далее.

SendingPriority добавлен в версии nhsms v3.0, в предыдущих версиях он игнорируется.

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

SendingTime — время отправки смс и ussd

Параметр SendingTime применяется к каждому смс или ussd и задаёт разрешённое время отправки этого сообщения.

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

  • смс о статусе заказа – в рабочие дни с 9 до 19 часов
  • смс-поздравления с днём рождения – строго в день рождения, начиная с 10 часов утра
  • ussd запроса баланса – в заданное время суток

Отправка в рабочее время:

SendingTime=10:00,19:00,Mon,Tue,Wed,Thu,Fri

Отправка в определённую дату:

SendingTime=10:00,19:00,2017-03-07

SendingTime добавлен в версии nhsms v3.0, в предыдущих версиях он игнорируется.

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

Примеры файла исходящих сообщений

Пример файла с двумя сообщениями и одним 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 v3.0 и старше, если использование базы включено в файле конфигурации, см. раздел база данных, программа отправляет сообщения из базы данных, в соответствии приоритетом и разрешённым временем отправки.

Программа выбирает из очереди сообщений (из базы данных) сообщение для отправки:

  • выбираются сообщения, которые можно отправить сейчас (по разрешенному времени отправки)
  • из них выбираются сообщения с максимальным приоритетом
  • из них выбирается одно сообщение – которое было поставлено в очередь первым

Таким образом, ведение общей очереди сообщений в базе данных даёт больший контроль над очерёдностью отправки смс, по сравнению с отправкой из файлов.

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

Информация о сообщениях сохраняется в базе данных.

  • Статус сообщения – ожидает отправки, отправлено, доставлено или ошибка
  • Время постановки в очередь
  • Время отправки

Конфигурация без базы данных

В этом режиме работает nhsms версии версии v3.0+ при отключенной базе данных (см. раздел база данных) и nhsms v1-v2.

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

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

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

Отправка смс

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

Если неправильно заданы параметры СМС, например, поле 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

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

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

Для 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 " Полный ответ модема

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

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