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:
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.
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:
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:
SMS quyidagi buyruq yordamida jo'natish mumkin:
Masalan:
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:
Ma'lumotlar bazasini yaratamiz:
natijada inbox, outbox va multipartinbox oddiy jadvallari yaratiladi,
yani quyidagicha jadvallar yaratiladi:
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:
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!
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/messagesyoki
tail /var/log/syslogbuyrugi 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.8Monitoring 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.logbu 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!
[flags]
huawei=model
bu eng oddiy narsalar uchun, masalan saytga registratsiya va shunga uxshash masalalar uchun!