Немного ознакомимся что же такое SMS(СМС) сообщение.

SMS (СМС — кириллицей) - (Short Message Service — "служба коротких сообщений"). Технология, позволяющая осуществлять приём и передачу коротких текстовых сообщений с помощью устройств включающих в себя модуль модема. Входит в стандарты сотовой связи.

Текст СМС может состоять из алфавитно-цифровых символов. Максимальный размер сообщения в стандарте GSM - 140 байт (1120 бит).

Таким образом, при использовании 7-битной кодировки (латинский алфавит и цифры) можно отправлять сообщения длиной до 160 символов.

При использовании 8-битной кодировки (немецкий, французский язык) можно отправлять сообщения длиной до 140 символов.

Для поддержки других национальных алфавитов (китайского, арабского, русского и др.) используется 2-байтовая (16-битная) кодировка UCS-2.

Таким образом, SMS, написанное кириллицей, не может превышать 70 знаков.


SMS-сообщения можно отправлять в двух форматах – текстовом и PDU (Packet Data Unit - единица/блок/модуль пакетных данных).

Текстовый формат чрезвычайно прост и везде достаточно подробно описан. Но из-за своей простоты он содержит несколько ограничений. Например, из текстового режима нельзя отправить сообщения русскими буквами. Кроме того, в текстовом режиме нельзя управлять параметрами сообщения, такими, например, как его тип. Некоторые модемы вообще не поддерживают текстовый режим.


Список АТ команд:

AT+CMGF= - установка режима работы, 0 для цифрового режима, или 1 для текстового.

AT+CMGS= - отправка СМС сообщения


Существуют несколько способов отправки СМС:

- В ручную используя АТ команды и терминальное ПО

- Используя специализированное ПО по отправке СМС сообщений


1. Ручной режим отправки СМС через терминальное ПО

Как подавать АТ команды: Статья

Терминальное ПО: Статья

1.1. Текстовый режим

Текстовый режим достаточно прост. Рассмотрим отправку СМС через программу Hterm на примере модема TELEOFIS RX301-R4

Проверим, какой режим установлен на данный момент:

AT+CMGF?

+CMGF: 0


Ответ 0 означает, что модем работает через PDU режим. Переведем в текстовый режим командой:

AT+CMGF=1

OK


Зададим номер телефона на который будем отправлять СМС

AT+CMGS="89514562536"

>


Примечание: В зависимости от модели модуля, номер нужно вводить, либо в кавычках, как в примере, либо без кавычек!


В ответ увидим символ приглашения ">". Это означает, что уже можно набирать текст сообщения. Но как Вы помните, только на латинице!!!

Введем текст "Hello world" но без переноса строки. В программе Hterm нужно убрать символ перевода каретки (с CR на None).

Отправка СМС завершается после подачи комбинации клавиш Ctrl+Z. Но для того, чтобы отправить её в модем необходимо использовать HEX кодировку этой комбинации 1A

> Hello world

+CMGS: 4



В других терминальных программах возможно будет немного по другому. Но основной принцип и последовательность действий не меняются.


1.2. PDU режим

По сути, это просто текстовая строка, состоящая из шестнадцатеричных байтов, которая содержит в себе все параметры сообщения.

Сообщение в PDU-режиме представляет собой такую хитрую формулу:

SMS = SCA+TPDU

где,

SMS — это целиком сформированное сообщение

SCA – это Service Center Address — номер телефона SMS-центра, через который отправляется SMS

TPDU – это Transport Protocol Data Unit – единица данных транспортного протокола. Именно этот блок содержит номер получателя, текст сообщения и несколько служебных полей.


Рассмотрим отправку СМС через программу Hterm на примере модема TELEOFIS RX301-R4

Устанавливаем режим PDU

AT+CMGF=0

OK


Т.к. в PDU режиме мы уже можем отправлять СМС на кириллице, попробуем отправить слово "Привет!!!"

Для перекодирования текста в PDU воспользуемся онлайн конвертером: Конвертер сообщений

Заполняем поля:

Receiver: - номер на который отправляем сообщение. (обязательно указывать + в начале Т.е. Российский номер будет начинаться с +7)

Alphabet Size: - 7 для латиницы, 16 для кириллицы.

Text: - текст сообщения

Все остальные пункты выключаем или стираем.

Нажимаем кнопку Convert и в поле PDU Message Entry/Display видим необходимый результат для отправки.


В начале мы подаем длину сообщения командой AT+CMGS. Эта команда требует пояснения: Длина сообщения в данном случае подразумевает не длину всего сообщения, а длину блока TPDU!

AT+CMGS=31

>


Видим символ строки приглашения для ввода. Теперь нам нужно ввести закодированную строку в PDU формате

0001000B919715542635F6000812041F04400438043204350442002100210021

И следом отправляем завершающую комбинацию Ctrl+Z или в HEX кодировке 1A

Если все хорошо, получим в ответ индекс отправленного сообщения:

+CMGS: 5


Таким образом только PDU режим позволяет отправлять СМС в русской символике.

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

Или же можно воспользоваться каким-либо сторонним ПО.


2. Получение СМС сообщений

У модемов есть несколько видов памяти, в которых могут храниться SMS-сообщения.

Память модема делится на три логических секции:

- первая для просмотра, чтения и удаления сообщений

- вторая для сохранения и отправки исходящих сообщений

- третья для только что полученных сообщений


Кроме логического деления на секции у модема ещё есть несколько видов физической памяти:

- память SIM-карты

- внутренняя память модема

- прочее.


Каждая физическая память назначается определенной логической секции. Таким образом, можно назначить память SIM-карты для чтения и удаления сообщений, а память модема для написания и отправки.

Каждая область физической памяти имеет свое имя, для того, чтобы ей можно было оперировать в командах модема. Вот несколько возможных имен областей:

SM – память SIM-карты

ME – память модема/телефона

MT – это общая память SIM-карты и модема, т.е. MT=SM+ME

BM – память для широковещательных сообщений сети

SR – память для отчётов (о доставке и т.п.)

Для чтения сообщений нам понадобится только SM и ME память, либо MT, которая включает в себя и SM, и ME


Для настройки памяти модема существует специальная AT-команда:

AT+CPMS

AT+CPMS? - узнать, какая область назначена для какой секции

+CPMS: "MT",29,255,"ME",29,255,"ME",29,255

Самое главное для чтения входящих сообщений – это первая секция


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

AT+CPMS="MT"

+CPMS: 29,255,29,255,29,255


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

Когда область памяти установлена, можно приступить к чтению сообщения.
Для чтения сообщений существует 2 команды: AT+CMGL и AT+CMGR. Разница их в том, что первая команда выдаёт сразу все сохраненные в памяти сообщения, а вторая – только одно сообщение, индекс которого передается ей в параметрах. Индекс начинается с нуля.

AT+CMGL=<status>

где <status>:

0 - Полученные непрочитанные сообщения

1 - Полученные прочитанные сообщения

2 - Сохраненные не отправленные сообщения

3 - Сохраненные отправленные сообщения

4 - Все сообщения


AT+CMGR=<index>

где <index> – индекс сохраненного сообщения.


Попробуем прочитать сообщение с индексом 0

AT+CMGR=0

+CMGR: 1,"",155

07919762929090F040038111F10008511121304343218C0500033F0302043E0431044904380442044C00200431043B04380437043A0438043C0020043E00200412043004480435043C0020043D043E0432043E043C0020043D043E043C0435044004350020043F04400438002004370432043E043D043A04350020043D043000200441044204300440044B0439002E0020041F043E04340440043E0431043D04350435

OK


Как можно видеть, сообщение хранится только в PDU формате

Если переключиться в текстовый режим измениться только заголовок сообщения, а само сообщение так и останется в PDU формате

+CMGR: "REC READ","111","","15/11/12,03:34:34+12


Используем онлайн конвертер для преобразования сообщения: Конвертер сообщений

Добавляем PDU сообщение в окно PDU Message Entry/Display и нажимаем Convert

В поле Result мы увидим раскодированное сообщение:

SMS DELIVER (receive)
Receipt requested: no
SMSC: 79262909090
Sender: 111
TOA: 81 unknown, Numbering Plan: unknown
TimeStamp: 12/11/15 03:34:34 GMT +03:00
TP-PID: 00
TP-DCS: 08
TP-DCS-desc: Uncompressed Text, No class
Alphabet: UCS2 (16bit)
User Data Header: 05 00 03 3F 03 02


общить близким о Вашем новом номере при звонке на старый. Подробнее
Length: 70


Т.е. получать СМС мы можем исключительно в PDU формате.


3. Удаление СМС сообщений

Для удаления СМС сообщений используется команда:

AT+CMGD=<index>[,<flag>]

,где

<index> – индекс сообщения в памяти.

<flag> - удаление СМС сообщения по критерию (не обязательный параметр)


Критерии:

0 — удалить сообщение по индексу (по умолчанию)

1 — удалить все прочитанные сообщения

2 — удалить прочитанные и отправленные сообщения

3 — удалить прочитанные, отправленные и не отправленные сообщения

4 — удалить все сообщения


Например для удаления всех сообщений из модема используем команду:

AT+CMGD=1,4


4. Отправка и получение СМС сообщений через специализированное ПО

Т.к. при ручной отправке и получении СМС мы имеем дело с PDU режимом, сообщения в котором еще необходимо перекодировать. Отправлять и получать сообщения становится неудобно.

Для облегчения этой задачи можно использовать специализированное ПО.

Примером могут послужить две программы:

SMSGate - данное ПО платное!

Gnokii - данное ПО бесплатно для использования.


4.1. SMSGate

Для получения более подробной информации изучите руководство по данному ПО:

Руководство


4.2. Gnokii

Данное ПО в большинстве своем работает в операционной системе Linux.

Есть версии и для Windows, но режим работы остается таким же. Т.е. из консоли.

Можно рассмотреть пример команды отправки СМС и настройку под модем:

В Linux модем отображается как файл устройства, например для USB модема TELEOFIS RX301-R4 может выглядеть так:

/dev/ttyUSB0


Настройки хранятся в файле /etc/gnokiirc и могут выглядеть таким образом:

[global]
port = /dev/ttyUSB0
model = AT
initlength = default
connection = serial
use_locking = no
serial_baudrate = 115200
smsc_timeout = 10


Пример команды по отправке СМС:

echo 'Hello!!!' | gnokii --sendsms +79260000000


Получить больше информации по работе данного приложения Вы можете на официальном сайте данного приложения: http://gnokii.org/


В сети присутствуют совершенно различные системы по отправке и приему СМС сообщений. В том числе и онлайн сервисы.

Также обладая необходимыми знаниями, Вы можете написать собственное ПО для отправки и приёма СМС сообщений.


5. Диагностика неисправностей при отправке или получении СМС

В процессе отправки или приема СМС сообщений могут проявляться различные ошибки.

Основные известные проблемы:

+CMS ERROR: 304 (Invalid PDU mode parameter)Проверьте правильность ввода содержимого PDU. Попробуйте добавить номер центра обслуживания (SMSC)
+CMS ERROR: 500 (Unknown error)Этот код ошибки формируется при проблемах на самых разных стадиях отправки сообщения, поэтому может быть вызван разными причинами:
- модем не зарегистрирован в сети
- на счету недостаточно средств для передачи сообщения
- сеть испытывает перегрузку и не может отправить сообщение в данный момент
- задан неправильный номер центра обслуживания
- задан неправильный номер абонента
- программа некорректно работает с данным модемом (При использовании ПО для отправки)
+CMS ERROR 330 (SMSC address unknown)
Часто встречается с 3G-модемами, это означает, что номер центра обслуживания не определен
+CMS ERROR 331 (No network service)
Проверьте уровень сигнала. Баланс на СИМ карте. Свяжитесь с оператором мобильной связи для выявления причины.



Дополнительная информация:

GSM/3G/4G модемы TELEOFIS

GSM модемы TELEOFIS серии RX. Руководство по эксплуатации


Ссылки по теме:

Конвертер сообщений

SMSGate

Руководство SMSGate

Gnokii