Отправить 'Отправка и прием SMS через GSM шлюз' другу по e-mail
Отправить другу по Email копию 'Отправка и прием SMS через GSM шлюз'


Сети, настройка оборудования, сетевые сервисы.
![]() |
|
||||||||
Subnets.ru Регистрация IP и Автономных систем mega-net.ru |
Отправить другу по Email копию 'Отправка и прием SMS через GSM шлюз'
plastilin сказал:
А по поводу вот такого устройства что можно сказать
http://gprs-modem.ru/TELEOFIS_RX101_USB_GPRS.htm
Нужно сделать веб страничку через которую пользователи из корп. сети смогут отправлять смс и получать результат о доставке с возможностью выбора кириллицы, англ. яз. или транслита. Сталкивался?
10.02.2009, 15:34lehisnoe сказал:
Сказать можно следующее: Если фря его нормально видит, скажем, как /dev/ttyU0, и на команду ATI девайс что-то отвечает, то это значит, что все хорошо 🙂
10.02.2009, 16:02Да, мы делали как отправку СМС, так и их прием (скрипт сам определяет, преобразовывать ли мессагу в/из UCS2). Единственное, чем не заморачивались — это «составными» СМС (у нас «составная» принятая СМС выглядит как две независимых СМС, но глазами «склеиваются» нормально :), на отправку просто не даем возможности юзеру ввести длину мессаги больше, чем на одну СМС).
stramilov сказал:
как можно сделать так чтоб используя телефон gsm можем, можно было через веб интерфейс удаленно делать рассылку?
если не сложно давай поговорим в скайпе. мой ник stramilov или аське 145800415
21.02.2009, 18:25lehisnoe сказал:
Не вижу проблем: на основе статьи это можно сделать (и у нас есть такая схема в работе: GSM-модем подключен com-портом к серверу с FreeBSD, с которого шлются SMS либо введенные через вэб интерфейс (аналогичный сотовым операторам) либо извещающие о произошедших событиях в сети).
Если вопросы остались, то добро пожаловать на наш форум
P.S. По аське вопрос, конечно, решить можно, но нужно позаботиться и о других людях, ищущих ответ на этот вопрос: если все будут только «читателями», то какие результаты будет выдавать гугл?
21.02.2009, 20:26phil_qwerty сказал:
очень хорошая статья!!!
23.05.2009, 22:50у меня вопрос: у меня ОС Linux Ubuntu, GSM модем Siemens MC35i терминальный с com портом. когда я отправляю смс с помощью AT команд через утилиту minicom, то все проходит на УРА. Но вот наладить работу скрипта для отправки смс никак не получается. Сначала пробовал написать сам на php, в принципе удачно, но все время создается ощущуние, что AT команда зацикливается в порту тем самым мешая модему корректно отработать задачу. Брал другие готовые скрипты написанные на питоне и php, история та же самая. модем не может отработать команды, или отрабатывает и присылает в смс «лишнюю» информацию, которая повисла в порту.
Вопрос: в чем может быть проблема? не требуется ли какая нибудь настройка ком порта или модема?
буду благодарен отозвавшимся помочь
phil_qwerty сказал:
требуется ли какая нибудь дополнительная настройка ком порта или модема? не то у меня некоторые проблемы при отправке смс с помощью скрипта
23.05.2009, 23:06admin сказал:
нет, дополнительных настроек не требуется
25.05.2009, 09:43ты пробовал отправлять СМСки через AT команды вводя их руками в консоли ?
phil_qwerty сказал:
да, пробовал!!! замечательно отправляются без всяких проблем.
26.05.2009, 07:40но вот когда дело доходит до скрипта, то тут начинаются танцы с бубнами. Не знаю в чем проблема. Модем даже простую команду ATZ успевает отработать 1,5 — 2,5 раза. это примерно выглядит так:
ATZ
A
OK
TZATZ
OK
freeneutron сказал:
Познавательная статья, но вот что мне так и не удалось понять. Если я хочу наладить прием прием SMS сразу на 100 разных номеров, то мне придется использовать 100 GSM шлюзов или можно найти более экономичное решение?
15.04.2010, 06:50admin сказал:
1 GSM-шлюз = 1 сим карта, 100 номеров = 100 сим-карт
Не совсем понятно зачем тебе 100 номеров, но если нужно, то протокол SMPP для тебя.
15.04.2010, 08:37Заключаешь с GSM оператором договор, берешь 100 номеров, настраиваешь у себя kannel (он поддерживает протокол SMPP) и вперед.
pwn сказал:
Мне пришлось решать аналогичную задачу, только средствами perl-а а не php и кроме того нужно было отправлять фрагментированные СМС. Труды автора сильно сэкономили мне время жизни, так что считаю своим долгом поделится своими наработками. Так как у меня отправка в основном смешанного текста (кирилица+латынь) то с текстовым режимом решено было не морочиться, что в разы упростило модуль. Итак кодировка СМС оформлена в виде пелового модуля SMSCode.pm, так как у меня все отправляемые сообщения в koi8r кодировке, то присуствует перекодирование текста в cp1251 (кому не надо — достаточно убрать пару строк)
SMSCode.pm
#
02.07.2011, 19:56package SMSCode;
require Exporter;
#
our @ISA = qw(Exporter);
our @EXPORT = qw(smscode ucs2encode);
our $VERSION = 1.00;
#
use strict; # отменить халяву c переменнымми
use warnings; # включить вывод предупреждений
use Text::Iconv; # Функции перекодировки текста
#
#######################################################################
# Кодировка СМС сообщения в UDH формате #
# #
# $Phone — телефон, на который отправить СМС #
# $Txt — текст в кодировке koi8r #
# return -> массив кодированных строк, одна строка на фрагмент СМС #
#######################################################################
sub smscode($$) {
#
# —- Объявляем переменные
my ($t,$NumPart,$IdGroup,$Head,$Part,$NumSMS,$Udh);
my (@Parts,@UDH);
#
# —- Разбор параметров
my ($Phone,$Txt) = @_ ;
#
# —- Кодируем заголовок СМС
$Head =»00″; # Номер СМС центра
$Head.= length($Txt)>70 ? «51» : «11»; # Первый октет SMS-SUBMIT message. Для рагментированных СМС надо устанавливать бит TP-UDHI (наличие заголовка)
# и поэтому для фрагментированных — 51h дла простых — 11h
$Head.=»00″; # количество успешно переданых (0..FFh) сообщений с телефона
$Head.=»0B»; # Длина номера телефона (11 цифр)
$Head.=»91″; # Тип номера телефона. 91h — международный формат
#
# —- Рихтуем переданный номер
$Phone = «7».$Phone.»F»;
#
# —- Если в итоге получилось не 12 символов — лесом
unless (length($Phone)==12) {return ();}
#
# —- Цикл кодирования номера телефона
foreach $t ($Phone=~m/(.{2})/g) {
#
# —- Дописываем очередную пару символов номера меняя местами первую и вторую цифры
$Head.=substr($t,1,1).substr($t,0,1);
}
#
# —- Дописываем хвост заголовка
$Head.=»00″; # Идентификатор протокола. 00h -> SMS
$Head.=»08″; # Кодировка. 08h — юникод+сохранять СМС в истории телефона 18 — тоже но не сохранять историю
$Head.=»C1″; # Период доставки СМС. C1 -> 1 неделя, полсе чего если юзер свой телефон не включит, то эту СМС он уже
# не увидит никогда
#
# —- Создаем объект для перекодировки кои8 в ср1251
my $KOI2UTF = Text::Iconv->new(«koi8-r», «cp1251»);
#
# —- Перекодируем текст в ср1251
$Txt = $KOI2UTF->convert($Txt);
#
# —- Если длинна сообщения больше чем 70 символов
if (length($Txt)>70) {
#
# —- Разрезаем сообщение на фрагменты не более 67 символов
@Parts = $Txt=~m/(.{1,67})/g;
#
# —- Извлекаем число частей
$NumPart = scalar(@Parts);
#
# —- Генерим уникальный номер группы для отправляемых СМС
$IdGroup = int(rand(255));
#
# —- Цикл перебора фрагментов и формирования фрагментированной СМС
$NumSMS = 1;
foreach $Part (@Parts) {
#
# —- Формируем заголовок фрагментированной СМС
$Udh = «050003»; # Признак фрагментированной СМС
$Udh.= sprintf(«%02X»,$IdGroup); # Уникальный для данной группы СМС номер
$Udh.= sprintf(«%02X»,$NumPart); # Количество СМС для склейки
$Udh.= sprintf(«%02X»,$NumSMS); # порядковый номер СМС
#
# —— Дописываем закодированный текст фрагмента
$Udh.= ucs2encode($Part);
#
# —- Рассчитываем длину строки и дописываем ее в начало
$Udh = sprintf(«%02X»,length($Udh)/2).$Udh;
#
# —- Добавляем очередной элемент к возвращаемому массиву
$UDH[$NumSMS-1] = $Head.$Udh;
#
# —- Наращиваем порядковый номер СМС в группе
$NumSMS++;
}
}
else {
#
# —- Кодируем текст ссобщения
$Txt = ucs2encode($Txt);
#
# —- Рассчитываем длину строки и дописываем ее в начало
$Txt = sprintf(«%02X»,length($Txt)/2).$Txt;
#
# —- Добавляем единственный элемент к возвращаемому массиву
$UDH[0] = $Head.$Txt;
}
#
# —- Возвращаем массив закодированных СМС
return @UDH;
}
#
# End of sub smscode
#
#
#
# —- Кодирование строки ср1251 в UCS2
sub ucs2encode ($) {
#
# —- Объявляем переменные
my ($UCS,$Chr);
#
# —- Разбор параметров
my ($Str) = @_ ;
#
# —- Цикл кодирования символов
$UCS = »;
foreach $Chr (split(//,$Str)) {
#
# —- Если код символа меньше 127
if (ord($Chr) < 127) {
#
# —- Английские символы кодируем как есть
$UCS.= sprintf("%04X",ord($Chr));
}
#
# —- С буковкой ё морока отдельная
elsif (ord($Chr)==184) { #ё
$UCS.="0451";
}
elsif (ord($Chr)==168) { #Ё
$UCS.="0401";
}
#
# —- Остальные русские буковки кодируются линейно
else {
$UCS.= sprintf("%04X",ord($Chr)-192+1040);
}
}
#
# —- Возвращаем закодированную строку
return $UCS;
}
#
# End of sub ucs2encode
# End of module SMSCode.pm
1;
pwn сказал:
Пример использования. (Кодирует заданное сообщение и выводит массив строк которые достаточно скормить модему через буфер обмена чтобы СМС было отправлено.)
test.pl
#
02.07.2011, 20:00# —- Подключаем модули
use FindBin; # для того, чтобы модули используемые этим скриптом были доступны
use lib $FindBin::Bin; # независимо от того, откуда запущен этот скрипт
use SMSCode; # функции кодирования СМС
#
# —- Тест отправки СМС
$Txt = «текст который отправляем»;
$Tel = ‘1111111111’; # телефон (без +7 и 8 в начале)
#
# —- Кодируем СМС
@SMS = smscode($Tel,$Txt);
#
# —- Отображаем фрагменты как есть, готовые чтоб их слить в GSM модуль
foreach $SMS (@SMS) {
$l = length($SMS)/2-1;
print «AT+CMGS=$l\n»;
print «$SMS\n»;
}
lehisnoe сказал:
2pwn: благодарю за обмен опытом!
03.07.2011, 19:27pwn сказал:
не за что 🙂
05.07.2011, 09:53файлики скриптов только надо как-то по другому залить, а то и кавычки заколбасились и отступы съехали. Тому кто их попробует передрать потом надо будет после еще html чудачества руками рихтовать.
lehisnoe сказал:
Ждем архив с файлами на мыло root[гав-гав]subnets.ru, после чего выложим их.
05.07.2011, 18:45