SMS shlyuzga birinchi qadam

SMS shlyuzga birinchi qadam
Shu kunlarda ko'p sayt egalari mandan SMS jo'natishni avtomatlashtirishni, yani sayt uchun SMS shlyuz qanday qilishni so'rab murojaat qildi. Ushbu maqolada Linuxda SMS qabul qilish va jo'natishni avtomatlashtirishni oddiy usulini ko'rsatib o'taman.
Buning uchun bizga bitta linux mashina va kompyuterga ulangan telefon kerak bo'ladi. Linuxga gnokii-cli paketini o'rnatamiz:
sudo apt-get install gnokii-cli gnokii-smsd

gnokii-cli — buyruqlar satri interfeysi, gnokii-smsd — sms bilan ishlash uchun demon.
Murakkab avtomatlashtirish tizim yaratish uchun, yani to'laqonli SMS shlyuz yaratish uchun PERL ning GSM::SMS yoki GSMD::Gnokii modullaridan foydalansa bo'ladi.
Telefonni USB orqali kompyuterga ulaymiz.
tail /var/log/messages
yoki
tail /var/log/syslog
buyrugi orqali telefon qaerga ulanganini kurib olamiz. Mani holatimda /dev/ttyACM0 bo'ldi. Konfiguratsiya faylini yaratamiz /home/foydalanuvchi/.gnokiirc
[global]
model = AT
connection = serial
port = /dev/ttyACM0

model — qurilma turi, AT — ko'plab telefonlar uchun, series40 — nokia telefonini s40 platformasida ishlaydigan modellari uchun, gnapplet — eski nokia s60 telefonlari uchun.
connection — ulanish turi, serial — usb/rs-232, irda — infraqizil port, bluetooth — bluetooth orqali ulanish uchun.
Port — usb uchun /dev/ttyACM0 yoki /dev/ttyUSB0, Bluetooth uchun qurilma adresini ko'rsatamiz («aa:bb:cc:dd:ee:ff»).
Endi telefon qo'llab quvvatlashini tekshirib ko'ramiz:
root@netbook:/home/netbook# gnokii --identify 
GNOKII Version 0.6.29 
IMEI         : 359327031124930 
Manufacturer : Nokia 
Model        : Nokia E52-1 
Product name : Nokia E52-1 
Revision     : V ICPR82_09w46.8 
Monitoring uchun:
root@netbook:/home/netbook# gnokii --monitor 
GNOKII Version 0.6.29 
Entering monitor mode... 
Network: Coscom, Узбекистан (434 05) 
LAC: 7aa8 (31400), 
CellID: 0000855d (34141) 
RFLevel: 6 
Power Source: Unknown 
CALL0: IDLE 
CALL1: IDLE

gnokii yordamida telefonni to'liq boshqarsa bo'ladi, lekin bizni faqat sms qiziqtiradi :).
Smsni o'qib olamiz:
gnokii --getsms xotira_turi start stop
bu erda: xotira_turi, SM — sim karta xotirasi, ME — ichki hotira va MT kombinatsiya qilingan hotira, IN — inbox, OU — outbox. Telefon qanaqa hotiralar ishlatishini «gnokii —showsmsfolderstatus» buyrug'i yordamida aniqlash mumkin. Start — boshlangich pozitsiyadagi sms yani nechinchiligi, end — ohirgi pozitsiyadagi sms. Agar start va end kursatilmasa bitta sms o'qiladi.
Barcha saqlangan smslarni chiqarish:
gnokii --getsms MT 1 end

SMS quyidagi buyruq yordamida jo'natish mumkin:
echo "matn" | gnokii --sendsms raqam

Masalan:
echo "test" | gnokii --sendsms '+998991234567'     
Send succeeded with reference 131!
SMS gatewayni sozlaymiz:

SMS shlyuz tashkillashtirish imkonini beradigan SMSD demoni gnokii tarkibiga kiradi. Bu demon kiruvchi va chiquvchi smslarga ishlov beradi. Chiquvchi va kiruvchi smslarni saqlash uchun SMSD MySQL (gnokii-smsd-mysql plagini) va PostgreSQL (gnokii-smsd-pgsql plagini) bazalari yoki fayl ko'rinishida (--module file) saqlashi mumkin.
Kerakli paketlarni o'rnatamiz:
sudo apt-get install gnokii-smsd-mysql mysql-server

Ma'lumotlar bazasini yaratamiz:
mysql -u root -p  > create database smsshlyuz;
Endi gnokii-smsd-mysql uchun MB strukturasini yaratamiz:
mysql -u root -p smsshlyuz < /usr/share/doc/gnokii-smsd-mysql/sms.tables.mysql.sql

natijada inbox, outbox va multipartinbox oddiy jadvallari yaratiladi,
yani quyidagicha jadvallar yaratiladi:
CREATE TABLE inbox (     id int(10) unsigned NOT NULL auto_increment,     number varchar(20) NOT NULL default '',     smsdate datetime NOT NULL default '0000-00-00 00:00:00',     insertdate timestamp DEFAULT CURRENT_TIMESTAMP,     text text,     phone tinyint(4),     processed tinyint(4) NOT NULL default '0',     PRIMARY KEY  (id)   );   CREATE TABLE outbox (     id int(10) unsigned NOT NULL auto_increment,     number varchar(20) NOT NULL default '',     processed_date timestamp DEFAULT 0,     insertdate timestamp DEFAULT CURRENT_TIMESTAMP,     text varchar(160) default NULL,     phone tinyint(4),     processed tinyint(4) NOT NULL default '0',     error tinyint(4) NOT NULL default '-1',     dreport tinyint(4) NOT NULL default '0',     not_before time NOT NULL default '00:00:00',     not_after time  NOT NULL default '23:59:59',     PRIMARY KEY  (id)   );   CREATE TABLE multipartinbox (     id int(10) unsigned NOT NULL auto_increment,     number varchar(20) NOT NULL default '',     smsdate datetime NOT NULL default '0000-00-00 00:00:00',     insertdate timestamp DEFAULT CURRENT_TIMESTAMP,     text text,     phone tinyint(4),     processed tinyint(4) NOT NULL default '0',     refnum int(8) default NULL,     maxnum int(8) default NULL,     curnum int(8) default NULL,     PRIMARY KEY  (id)   );
shu bilan xammasi tayyor, endi smsd ni ishga tushuramiz:
/usr/sbin/smsd -u root -p -d smsshlyuz -c localhost -m mysql -f /var/log/smsdaemon.log
bu erda "-u" — ma'lumotlar bazasi foydalanuvchisi «root», «-p» — parol mavjudligi, "-d" — MB nomi, "-с" — host, va "-m" — smslarni saqlash moduli.
Kompyuterga ulangan telefon raqamiga sms jo'natilsa, smsd darhol ushlab olib, bazaga yozib qo'yadi.

«select * from inbox;» so'rov berilsa, taxminan quyidagicha natija bo'ladi:

| id | number | smsdate | insertdate |text | phone | processed |
| 1 | +998930000000 | 2012-03-27 06:11:05 | 20120327061123 | Test | NULL | 0 |

sms xabar jo'natish uchun outbox jadvaliga yozish yetarli, smsd darhol uni o'qib oladi va jo'natadi. Masalan:
insert into outbox (number,text) values('+998974255459', 'Test');
yuqorida aytilganidek smsd Mbsiz xam ishlaydi, yani oddiy fayllar bilan xam ishlatish ancha qulay. Ishga tushurish quyidagicha:
/usr/sbin/smsd -m file -c spool-papka

SMS jo'natish uchun spool-papkasiga xoxlagan nom bilan quyidagi formatda fayl yaratish kifoya:
nomer
matn

muvvaffaqiyatli jo'nailgandan keyin fayl o'chiriladi.

Kiruvchi SMS ga ishlov berish uchun -u opsiyasiga skriptni ko'rsatish mumkin. Bu skript har SMS kelganda ishga tushadi, aks holda kiruvchi smslar «amal nomer sana < matn» formatida standart chiqaruvchi potokga chiqariladi.

Boshlanishiga manimcha shu yetarli, uyog'iga har kim o'z maqsadlaridan kelib chiqqan holda davom ettirishi mumkin.
Keyingi maqolalarimda davomini yoritishga harakat qilaman, yani man o'z maqsadimda qanday foydalanganimni. Savollar bo'lsa mavzu doirasidan chiqib ketmagan holda bemalol berishingiz mumkin :) imkonim boricha javob beraman. Katta raxmat!

11 комментариев

ruslanmedia
Qo‘shimcha qilaman. Kimgadir no flags deb error chiqsa config oxiriga quyidagicha yozing
[flags]
huawei=model
1
geniuz
bu eski maqola bir joylardan kovlab topdim…
0
mageUz
SMS paket sotib olib spam bilan shug'ullansa bo'larmikin? Yuqoridagi toollar bilan buni iloji bor, lekin operatorlar qandaydir to'sqinlik qilmasmikin?
-2
geniuz
umuman olganda maqola u maqsadda yozilmagandi :)
1
sarvar_uz
judayam foydali maqola.
0
JET
afsuski rassilka masalasida gnokii u qadar mahtagulimas. 1ta mobil prefiks, yani 10000ta abonent uchun 2 kundan ziyodroq vaqt sarflidi. 2ta sim karta yordamida tekshirib ko'rish kere. Balki shunda tez ishlar
0
geniuz
mavzudan malumki bu «birinchi qadam» bundan ancha yaxshi reshenielar bor
bu eng oddiy narsalar uchun, masalan saytga registratsiya va shunga uxshash masalalar uchun!
0
JET
unda boshqa resheniyala haqidayam azgina uchini chiqarib keting :D
0