Научите правильно слать СМС

Started by sabonez, October 03, 2012, 04:30:19 PM

Previous topic - Next topic

sabonez

Помогите разобраться с СМС-ками.

Имеется модем из "Связного", что за модель ХЗ, но lsusb видит его так:

Bus 002 Device 006: ID 1bbb:0000 T & A Mobile Phones

Через gnokii --sendsms - отправляется как надо.

NetXMS при попытке отправить тестовую СМС выдает следующее:

[03-Oct-2012 17:14:59] [CLSN-0] Received message CMD_SEND_SMS
[03-Oct-2012 17:14:59] ConfigReadStr: name=AllowDirectSMS value="1"
[03-Oct-2012 17:14:59] SMS send: to {+7920XXXXXXX}: {PREVED}
[03-Oct-2012 17:15:00] SMS send: ATZ sent, got {}
[03-Oct-2012 17:15:01] SMS send: ATE0 sent, got {}
[03-Oct-2012 17:15:02] SMS send: AT+CMGF=0 sent, got {}
[03-Oct-2012 17:15:03] SMS send: AT+CSCA? sent, got {}
[03-Oct-2012 17:15:03] SMSCreatePDUString: Formatted phone before: 7920XXXXXXXF,12
[03-Oct-2012 17:15:03] SMSCreatePDUString: Formatted phone: 9702476904F2
[03-Oct-2012 17:15:03] SMSCreatePDUString: Got payload size: 6
[03-Oct-2012 17:15:03] SMS send: AT+CMGS=20
[03-Oct-2012 17:15:03] SMS about to send: 0011000C919702476904F20000AA065069D15A2402
[03-Oct-2012 17:15:04] SMS send: AT+CMGS + message body sent, got {}


Однако на телефон так ничего и не пришло. Подскажите, куда копать?

sabonez

ЗЫ. И откуда в логе такой странный Formatted phone, который начинается на 970 а не 920??? м ;D

Weird

Так и должно быть. При отправке в PDU mode номер кодируется. Просто поменяйте местами старший и младший полубайт в каждом байте. 9702476904F2 получается из 7920XXXXXXX (пусть останется интрига, так и быть ;))

Вообще, странно что ответом на ATZ является пустая строка.
[03-Oct-2012 17:15:00] SMS send: ATZ sent, got {}

Используете libnxsms_generic?

Victor Kirhenshtein

Я сталкивался с проблемами со скоростью порта. Generic SMS драйвер по умолчанию пытается работать на 9600. Попробуйте поставить скорость побольше - 38400 или выше, и проверьте что в настройках самого виртуального порта тоже эта скорость стоит (это для Windows актуально, про Linux не знаю).

sabonez

Quote from: Weird on October 03, 2012, 08:33:17 PM
Используете libnxsms_generic?

Да. А есть ли ей альтернатива?

sabonez

#5
Quote from: Victor Kirhenshtein on October 04, 2012, 09:13:04 AM
Я сталкивался с проблемами со скоростью порта. Generic SMS драйвер по умолчанию пытается работать на 9600. Попробуйте поставить скорость побольше - 38400 или выше, и проверьте что в настройках самого виртуального порта тоже эта скорость стоит (это для Windows актуально, про Linux не знаю).

К сожалению, скорость не помогла:

[04-Oct-2012 11:33:32] Loading Generic SMS Driver (configuration: /dev/ttyUSB1,38400,8,n,1)
[04-Oct-2012 11:33:32] SMS init: port={/dev/ttyUSB1}, speed=38400, data=8, parity=NONE, stop=1
[04-Oct-2012 11:56:44] [CLSN-0] Received message CMD_SEND_SMS
[04-Oct-2012 11:56:44] SMS send: to {+79100751498}: {TEST}
[04-Oct-2012 11:56:45] SMS send: ATZ sent, got {}
[04-Oct-2012 11:56:46] SMS send: ATE0 sent, got {}
[04-Oct-2012 11:56:47] SMS send: AT+CMGF=0 sent, got {}
[04-Oct-2012 11:56:48] SMS send: AT+CSCA? sent, got {}
[04-Oct-2012 11:56:48] SMSCreatePDUString: Formatted phone before: 79100751498F,12
[04-Oct-2012 11:56:48] SMSCreatePDUString: Formatted phone: 9701701594F8
[04-Oct-2012 11:56:48] SMSCreatePDUString: Got payload size: 4
[04-Oct-2012 11:56:48] SMS send: AT+CMGS=18
[04-Oct-2012 11:56:48] SMS about to send: 0011000C919701701594F80000AA04D4E2940A
[04-Oct-2012 11:56:49] SMS send: AT+CMGS + message body sent, got {}

Попробую еще поиграть со скоростями.

ЗЫ. Пришел к успеху. Помогла смена порта на ttyUSB2, и скорости на 19200 - все СМС доходят как надо.

Большое спасибо всем за помощь!

sabonez

#6
А вот теперь вылез вопрос с кодировкой, можно ли кириллицу корректно по СМС отправить и как?

Вполне даже устроит решение по прикручиванию транслита к СМС-рассылкам. ;)

SKYnv

#7
Quote from: sabonez on October 04, 2012, 03:01:19 PM
А вот теперь вылез вопрос с кодировкой, можно ли кириллицу корректно по СМС отправить и как?

Вполне даже устроит решение по прикручиванию транслита к СМС-рассылкам. ;)
Ну кириллица это хорошо, однако транслитом смску можно длиннее в два раза отправить или на английском. Да и по дефолту смс же в UTF Идут? У вас юникод сборка netxms?
--enable-unicode при сборке и CodePage = UTF-8 в конфиг.

sabonez

СМС-ки вроде в UCS-2.

База у меня в 1251, с utf-8 почему-то java-console под вендой не задружилась - резала русские имена. Если это как-то лечится, может есть смысл конвертнуть базу в UTF?


Victor Kirhenshtein

Quote from: sabonez on October 05, 2012, 09:14:21 AM
СМС-ки вроде в UCS-2.

SMS с русскими буквами можно посылать только в PDU режиме насколько я понимаю. Кроме того, сам сервер должен работать в UNICODE или code page должен быть выставлен в CP-1251.

Quote from: sabonez on October 05, 2012, 09:14:21 AM
База у меня в 1251, с utf-8 почему-то java-console под вендой не задружилась - резала русские имена. Если это как-то лечится, может есть смысл конвертнуть базу в UTF?

Здесь скорее проблема с самим сервером, а не с базой. Проверьте что параметр CodePage в netxmsd.cond выставлен в CP1251, или попробуйте UNICODE сборку сервера.

sabonez

Quote from: Victor Kirhenshtein on October 05, 2012, 11:47:10 AM
SMS с русскими буквами можно посылать только в PDU режиме насколько я понимаю. Кроме того, сам сервер должен работать в UNICODE или code page должен быть выставлен в CP-1251.

А про какой code page речь?

У меня вроде все верно - в netxmsd.conf:
CodePage = CP1251
База, соотвественно, тоже  везде DEFAULT CHARSET=cp1251.

Впринципе я без юникода вполне себе обхожусь, вот только с СМС-ками загвоздка. Можно конечно gnokii прикрутить на сервере.
Виктор, а не сложно ли будет реализовать такую хотелку - галочку в настройках сервера "Отправлять SMS транслитом", ну и в зависимости от настройки CodePage, конвертить сообщения из UTF или 1251 в транслит перед отправкой? Было бы прекрасно, и доступного текста в 2 раза больше опять же ;)

SKYnv

Quote from: sabonez on October 05, 2012, 12:22:26 PM
Quote from: Victor Kirhenshtein on October 05, 2012, 11:47:10 AM
SMS с русскими буквами можно посылать только в PDU режиме насколько я понимаю. Кроме того, сам сервер должен работать в UNICODE или code page должен быть выставлен в CP-1251.

А про какой code page речь?

У меня вроде все верно - в netxmsd.conf:
CodePage = CP1251
База, соотвественно, тоже  везде DEFAULT CHARSET=cp1251.

Впринципе я без юникода вполне себе обхожусь, вот только с СМС-ками загвоздка. Можно конечно gnokii прикрутить на сервере.
Виктор, а не сложно ли будет реализовать такую хотелку - галочку в настройках сервера "Отправлять SMS транслитом", ну и в зависимости от настройки CodePage, конвертить сообщения из UTF или 1251 в транслит перед отправкой? Было бы прекрасно, и доступного текста в 2 раза больше опять же ;)
Вам легче написать трасформейшн скрипт и отправлять сообщения через макрос потом %[translit("очень важно сообщение")]
Ну, UCS это и есть юникод насколько я понимаю.