Страница 1 из 8

SMS Tools 3

Добавлено: 2008-11-06 16:53:23
lexy
NB!1) Проба пера, так что не ругайте сильно :roll:
NB!2) Не нашел, как вставить таблицы, поэтому полная версия статьи во вложениях

Статья про SMSTools3

xxx: мой телефон крякнул :-(
xxx: все. я теперь не мобильная. сссукаааааааа . ну не прет так сразу во всем ]:->
yyy: че с ним? ))
xxx: он уже не жилец((((. у него белый свет ....в конце тунеля
xxx: экран белым светиться ..ни че не вижу...
yyy: знач будешь ходить со старым сименсом :-P
xxx: откуда у меня появится старый сименс?
yyy: у всех есть старые сименсы :-D
Цитата #400329 bash.org.ru


Нет, мы, как раз, немобильными не останемся, именно потому, что у нас есть «старый сименс»!
Постановка задачи: есть база партнеров по бизнесу, которых нужно уведомлять о состоянии их счета независимо от менеджеров, которые с ними работают. Переговоры с сотовыми операторами по поводу SMS-гейтов зашли в тупик в виду неадекватного ценника, неповоротливости (срок исполнения ведь обычно - «уже вчера должно работать») или сложности реализации, поэтому
имеем:
  • старый Siemens M75;
  • родной (семёновский) дата-кабель DCA-510 к нему;
  • машинку с правильной осью (FreeBSD 7.0)
надо: создать автоматизированную систему рассылки SMS

Детали полной реализации я выкладывать не буду, т.к. задача весьма специфическая, но рассмотрю все основные моменты отправки SMS.

В портах нашел вот что:

Код: Выделить всё

Port:   smstools-3.1.3
Path:   /usr/ports/comms/smstools3
Info:   SMS Gateway software for GSM modems and mobile phones
Maint:  mm@FreeBSD.org
WWW:    http://smstools3.kekekasvi.com

Код: Выделить всё

sudo make -C /usr/ports/comms/smstools3 install clean
Теперь цепляем телефон. Как я понял, проблем при подключении датакабеля через обычный comm-port не возникает, но в данной ситуации кабель USB. Чип используется PL2303, в FreeBSD поддерживается. Проверяем:

Код: Выделить всё

 ~> kldstat -v | grep 'u[pl]*com'
если не видим чего-то подобного:

Код: Выделить всё

                212 ucom
                223 uhub/uplcom
берем бубен и собираем ядро, добавив в конфигурацию следующиме опции:

Код: Выделить всё

device          ucom
device          uplcom
как это сделать очень хорошо расписано здесь: http://www.lissyara.su/?id=1072, поэтому, повторятся не буду (а можно и отдельно модули собрать, но это тема другой статьи).
ВНИМАНИЕ! Без установленных модулей кабель тоже будет определятся как /dev/ugenX, но работать не будет.
Если все модули на месте — подключаем кабель и смотрим:

Код: Выделить всё

 ~> ls -lah /dev/cuaU*
crw-rw----  1 uucp  dialer    0,  69 28 окт 15:01 /dev/cuaU0
crw-rw----  1 uucp  dialer    0,  70 24 окт 10:27 /dev/cuaU0.init
crw-rw----  1 uucp  dialer    0,  71 24 окт 10:27 /dev/cuaU0.lock
Кабель увидели, можно подключать телефон и приступать к настройке SMS-шлюза.
Так как по умолчанию smsd стартует от рута, а это не тру, создаем пользователя:

Код: Выделить всё

~# pw groupadd smsd -g 151
~# pw  useradd -n smsd -u 151 -c 'SMS Gate worker' -g smsd -G uucp,dialer -w no -s /sbin/nologin -d /nonexistent
теперь настраиваем SMS Tools, файл /usr/local/etc/smsd.conf

Код: Выделить всё

# структура файла такая:
# глобальные настройки
# ...
# ...
# [ модем 1 ]
# ...
# [ модем 2 ]
# ...
# [ модем 3 ]
# ...

# используемые устройства, если несколько — пишем через запятую
devices = GSM0
# лог, если не указан — пишется в syslog, если = 1, пишет в stdout
logfile = /var/log/smsd.log
# писать фсё
loglevel = 7

# No comments, я надеюсь ;-)
USER = smsd
GROUP = dialer

# No comments too , главное — не забыть создать /var/run/smsd/ и дать все права юзеру smsd
PIDFILE= /var/run/smsd/smsd.pid
INFOFILE= /var/run/smsd/smsd.working

# Теперь настраиваем все телефоны, ГСМ-момеды и пр. шелезяки
# Siemens M75
[GSM0]
# порт
device = /dev/cuaU0
# скорость в нем
baudrate = 115200
# аппаратное управление потоком
rtscts = no
# строка инициализации (взял с сайта программы), 
# подробная справка по командам в приложениях
init = AT+CPMS="ME","ME","ME"
init2 = AT+CNMI=1,1,0,2
# приоритет входящих сообщений
incoming = high
# хотим отчет о доставке
report = yes
# задержка перед отправкой
send_delay = 20
По минимуму достаточно, уже будет работать.
Еще пару движений:
в /usr/local/etc/rc.d/smsd

Код: Выделить всё

pidfile=/var/run/smsd.pid
меняем на

Код: Выделить всё

pidfile=/var/run/smsd/smsd.pid

Код: Выделить всё

~# echo smsd_enable=»YES» >> /etc/rc.conf
~# /usr/local/etc/rc.d/smsd start
смотрим

Код: Выделить всё

~> ps ax | grep smsd
16711  ??  Ss     0:00,00 /usr/local/bin/smsd
16712  ??  S      0:00,01 /usr/local/bin/smsd

Код: Выделить всё

 ~> tail -f /var/log/smsd.log
Oct 28 16:39:40 smsgate smsd: Smsd v3.1.3 started.
Oct 28 16:39:40 smsgate smsd: Running as smsd:dialer.
Oct 28 16:39:40 smsgate smsd: File mode creation mask: 022 (0644, rw-r--r--).
Oct 28 16:39:40 smsgate smsd: Outgoing file checker has started. PID: 16711.
Oct 28 16:39:40 smsgate GSM0: GSM0: Modem handler 0 has started. PID: 16712.
Oct 28 16:39:40 smsgate GSM0: GSM0: Checking device for incoming SMS
Oct 28 16:39:40 smsgate GSM0: GSM0: Checking if modem is ready
Oct 28 16:39:40 smsgate GSM0: GSM0: -> AT^M
Oct 28 16:39:40 smsgate GSM0: GSM0: Command is sent, waiting for the answer
Oct 28 16:39:40 smsgate GSM0: GSM0: <- OK
Oct 28 16:39:40 smsgate GSM0: GSM0: Pre-initializing modem
Все завелось, комментируем в конфиге 'logfile', ставим loglevel = 5, в /etc/syslog.conf добавляем:

Код: Выделить всё

!+smsd,GSM0
*.*                                             /var/log/smsd.log
(если надо, после GSM0 через запятую перечисляем все названия модемов из smsd.conf)
в /etc/newsyslog.conf добавляем:

Код: Выделить всё

/var/log/smsd.log       smsd:dialer     644  7     100  *     JC
Теперь самое вкусное — отправлять эсэмэски.
Ничего сложного, процесс отправки похож на процесс печати, в /var/spool/sms/ есть три каталога:
checked, incoming, outgoing. В каталог outgoing кидаются файлы для отправки, по формату очень похожие на MIME: сначала заголовки, потом, через пустую строку, тело сообщения. Подробнее формат опишу ниже. В пакет входит утилита sendsms, надо добавить пользователя, от которого будут отправлятся sms в группу smsd. Затем пробуем:

Код: Выделить всё

sendsms 79xxxxxxxxx 'Hello! How are You?'
(обратите внимание, номера вводятся в международном формате но без знака «+»)
И, о Чудо!, через несколько секунд придет желанная SMS. Но мы рано радуемся. Вавилон нас ждет! А точнее — отправка SMS кириллицей, а значит, берем бубен, напильник, и дорисовываем все как надо. SMSTools умеет обрабатывать события при помощи внешних программ, значит рисуем скрипт проверки сообщения перед отправкой (за прототип был взят unicode2sms, все скрипты пакета можно найти в /usr/local/share/smstools):

Код: Выделить всё

#!/bin/sh

# checkhandler for SMS Tools 3
# autoconverts cyrillic messages to UCS-2BE
# add checkhandler=/path/to/ucsautoconvert into global part of smsd.conf
# written by lexy (lexy@mrlexy.ru), 2008 

FILE=`mktemp /tmp/smsd_XXXXXX`

if [ ! `grep '[А-Яа-я]' $1` -or `grep 'Alphabet:\s*U' $1`]
    then exit 0 
fi

cat $1 | awk '{if(NF==0) {s=1} if(s==0 && NF>0 && $0!~/Alphabet:[ \t]*U/){print}}' > $FILE
echo Alphabet: Unicode >> $FILE
cat $1 | awk '{if(NF==0) {s=1} if(s==1){print}}' | iconv -t UCS-2BE >> $FILE

mv $FILE $1
chmod 644 $1
добавляем в smsd.conf, в основную часть (до описания модемов):

Код: Выделить всё

checkhandler=/path/to/ucsautoconvert
перезапускаем smsd:

Код: Выделить всё

#~ /usr/local/etc/rc.d/smsd restart
пробуем: sendsms 79xxxxxxxxx 'Привет! Мы победили Вавилон ?'
ждем...ждем... телефончик — Плюмммм!!! Смотрим... Аллилуя!
DSCN0638.jpg
Кроме того можно добавить поддержку обработки и других событий (SENT, RECEIVED, FAILED, REPORT, CALL), белый и черный список.
За это отвечают параметры конфигурации:

Код: Выделить всё

eventhandler = /path/to handler
whitelist = /path/to/list
blacklist = /path/to/list
Т.к. гейт не публичный, то чернобелые списки я использовать не стал, а вот обработчик событий написал. Вы можете его найти в приложениях. Это perl-скрипт, в принципе неплохо откоменнтированный, чтоб допилить его под свои нужды.

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

Код: Выделить всё

To: 491721234567

Hello, this is the sms.


Номер указывается в международном формате но без знака «+». Если необходимо отправить сообщение на короткий номер, то перед номером нужно указать "s".
Расширеный пример:

Код: Выделить всё

To: 491721234567
Flash: yes
Alphabet: ISO

Hello Stefan, how are you?


ВАЖНО: Заголовки регистрозависимые.
Можно добавлять свои собственные заголовки. Они игнорируются программой, но не удаляются. Можно, к примеру, привязать к сообщению ключ базы данных добавив заголовок

Код: Выделить всё

X-Db-Id: 777888
После отправки файл сообщения сохранится в папке отправленных с этим заголовком.
Заголовки
Приводится с сокращениями
Булевы значения могут быть для значения «истина» true, yes, on или 1. Все остальные значения трактуются ка «ложь»

======================================================
далее пошли таблицы, поэтому текст обрывается....
в приложениях пока только полный текст статьи в pdf и скрипты,
справочники по AT командам для GSM залью в доки

Re: SMS Tools 3

Добавлено: 2008-11-06 17:04:28
Alex Keda
маладца.
=======
вопрос - пермишены на девайс выставить не надо - если юзера меняешь?
И зачем менять юзера? Каким-то мегасообщением мона выполнить переполенние буфера и отправку SMS на произвольный номер с произвольным текстом? =))))

Re: SMS Tools 3

Добавлено: 2008-11-06 17:08:50
lexy
да я ж пояснил, просто не тру ))))))))
как в том анекдоте про ОБХСника и бармена:
- мне дешевле тебе штраф заплатить, чем руку сбить
а пермишены - вот они: pw useradd -n smsd -u 151 -c 'SMS Gate worker' -g smsd -G uucp,dialer -w no -s /sbin/nologin -d /nonexistent

Re: SMS Tools 3

Добавлено: 2008-11-06 17:10:38
lexy
кста, на ftp в Upload
AT_Command_pdf_ru.zip и NokiaAtCmd.zip

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

Re: SMS Tools 3

Добавлено: 2008-11-06 17:51:06
Alex Keda
ОК.
Ну а на сайт?

Re: SMS Tools 3

Добавлено: 2008-11-06 19:47:50
manefesto
тема интересная конечно, но вот бы научиться пользоваться sms шлюзами это было бы гуд.
/me ушел читать как сделать это

Re: SMS Tools 3

Добавлено: 2008-11-06 20:13:02
kmb
мне понравилось %)

Re: SMS Tools 3

Добавлено: 2008-11-07 1:04:20
lexy
manefesto писал(а):тема интересная конечно, но вот бы научиться пользоваться sms шлюзами это было бы гуд.
/me ушел читать как сделать это
дык судя по описанию на сайте программы - это и есть шлюз )))))))
а шлюзы провов - дело геморное и неблагодарное, смотри начало статьи.

Re: SMS Tools 3

Добавлено: 2008-11-07 1:05:13
lexy
lissyara писал(а):ОК.
Ну а на сайт?
а доступ? не было до сих пор, жду подробностей ))))

Re: SMS Tools 3

Добавлено: 2008-11-07 9:03:18
manefesto
lexy писал(а):
manefesto писал(а):тема интересная конечно, но вот бы научиться пользоваться sms шлюзами это было бы гуд.
/me ушел читать как сделать это
дык судя по описанию на сайте программы - это и есть шлюз )))))))
а шлюзы провов - дело геморное и неблагодарное, смотри начало статьи.
нене...ты не понял...есть ведь бесплатные шлюзы....

Re: SMS Tools 3

Добавлено: 2008-11-07 9:06:39
Alex Keda
lexy писал(а):
lissyara писал(а):ОК.
Ну а на сайт?
а доступ? не было до сих пор, жду подробностей ))))
http://www.lissyara.su/?id=1025
тут всё написано. ПОловину ты уже сделал =)))
==========
2 манефесто
в москве и питере нет гейтов у большей части операторов.
Причина проста - лягут =)))

Re: SMS Tools 3

Добавлено: 2008-11-07 9:06:39
lexy
manifesto писал(а): нене...ты не понял...есть ведь бесплатные шлюзы....
покажи мне хоть один рабочий и реально бесплатный, мэйлруагент и рамблёрссикю не в счет.
при условии необходимости отправки 1-2К сообщений в течении дня-двух - любой гейт тебя забанит

Re: SMS Tools 3

Добавлено: 2008-11-07 14:34:28
princeps
Как раз думал, как мне получать смски с сервера в случае сбоев каких-нибудь. Шлюзы операторов действительно левая вещь -работают через раз.

Re: SMS Tools 3

Добавлено: 2008-11-07 16:56:47
lexy
princeps писал(а):Как раз думал, как мне получать смски с сервера в случае сбоев каких-нибудь. Шлюзы операторов действительно левая вещь -работают через раз.
Во-во.... особенно если слетела внешняя сеть - гейты уже не помогут.
Об этом следующим этапом уже думаю: внутренний мониторинг и удаленное управление через мобилу :cf:

Re: SMS Tools 3

Добавлено: 2008-11-08 16:44:11
Alex Keda
на сайте-то дописал или ент?

Re: SMS Tools 3

Добавлено: 2008-11-09 19:39:01
lexy
lissyara писал(а):на сайте-то дописал или ент?
я ж тебе в личку вопрос кидал...... по таблицам
все кроме них я сделал

Re: SMS Tools 3

Добавлено: 2008-11-09 22:58:31
Alex Keda
lexy писал(а):
lissyara писал(а):на сайте-то дописал или ент?
я ж тебе в личку вопрос кидал...... по таблицам
все кроме них я сделал
я ж ответил =)
нет, нету возможности. тока запятые чем-то заменять...
Они правда нужны?

Re: SMS Tools 3

Добавлено: 2008-11-09 23:55:35
InventoR
Один вопрос: а за чей счет этот банкет?

Re: SMS Tools 3

Добавлено: 2008-11-09 23:56:20
Alex Keda
InventoR писал(а):Один вопрос: а за чей счет этот банкет?
владельца симки, разуметтся =)))
Не за счёт же телефонной компании =)

Re: SMS Tools 3

Добавлено: 2008-11-10 8:41:51
lexy
lissyara писал(а):нет, нету возможности. тока запятые чем-то заменять...
Они правда нужны?
в личке пусто, ну да хрен с ним.... тем более, вложенные таблицы тоже не поддерживаются.
Табличную часть в приложениях кину.

Re: SMS Tools 3

Добавлено: 2008-11-10 9:13:57
Alex Keda
зачем тебе вложенные? =)

Re: SMS Tools 3

Добавлено: 2008-11-10 9:41:00
lexy
смотри приложение )))))))))
выложил статью.

Re: SMS Tools 3

Добавлено: 2008-11-10 9:55:13
Alex Keda
коё-чё поправил чтоб по ширине влезло.
Иконку к pdf заодно прикрутил =)))
публику.

Re: SMS Tools 3

Добавлено: 2008-11-10 9:56:22
Alex Keda
блин...
ну спасиба...
ты её тоже правил в этот момент. мои изменения похерились =(

Re: SMS Tools 3

Добавлено: 2008-11-10 10:23:28
lexy
ггг! ;-)
а где это видно было?