[Gammu dan VFP] Mengirim dan menerima Pesan lebih dari 160 karakter

September 4, 2016

OK langsung aja yaa, cara menerima dan mengirim sms dengan gammu yang karakternya lebih dari 160, bagaimana implemntasinya di foxpro, gampang aja

Capture

pertama, untuk kirim sms


lcNope=ALLTRIM(Thisform.text1.Value)
lnSms=Len(Thisform.edit1.Value)

i=0
If lnSms >160
lcPesan =Alltrim(Thisform.edit1.Value)
*total Sms
lnByk = CEILING(lnSms/153)

=SQLExec(Thisform.konek,"SHOW TABLE STATUS LIKE 'outbox'","mOutbox")
Select mOutBox
lcId=VAL(mOutBox.Auto_increment)

For i=1 To lnByk
If i=1
lcPesanSplit = Substr(lcPesan,1,153)
lcPesan=SUBSTR(lcPesan,154)
lcudh= "050003A7"+Padl(Alltrim(Str(lnByk)),2,"0")+Padl(Alltrim(Str(i)),2,"0")

TEXT TO lcsql NOSHOW TEXTMERGE PRETEXT 7
INSERT INTO outbox (DestinationNumber, UDH, TextDecoded,ID, MultiPart,CreatorID)
VALUES ('<<lcnope>>', '<<lcudh>>', '<<lcPesanSplit>>','<<lcID>>', 'true','Gammu')
ENDTEXT

lnh=SQLexec(Thisform.konek,lcsql)
IF lnh <0
AERROR(laerror)
MESSAGEBOX(laerror[1,2])
endi
Else
lcPesanSplit=Substr(lcPesan,1,153)
lcPesan=SUBSTR(lcPesanSplit,154)
lcudh= "050003A7"+Padl(Alltrim(Str(lnByk)),2,"0")+Padl(Alltrim(Str(i)),2,"0")

TEXT TO lcsql NOSHOW TEXTMERGE PRETEXT 7
INSERT INTO outbox_multipart(UDH, TextDecoded, ID, SequencePosition)
VALUES ('<<lcUdh>>', '<<lcPesanSplit>>','<<lcId>>' ,' <<i>>')
ENDTEXT
lnh=SQLexec(Thisform.konek,lcsql)
IF lnh <0
AERROR(laerror)
MESSAGEBOX(laerror[1,2])
ENDIF
Endif
Endf

ENDIF

kedua, menerima/membaca inbox yang lebih dari 160 karakter


SELECT inbox
ZAP

=SQLEXEC(thisform.konek,"select * from inbox","mInbox")
SELECT * FROM mInbox INTO CURSOR TempInbox READWRITE
SELECT mInbox
SCAN
lcNope = SenderNumber
lcUDH = UDH

IF !EMPTY(lcUDH)

*Header UDH
lcHeader = SUBSTR(lcUdh,1,8)

*Total SMS
lcSplit=SUBSTR(lcUDH,9,2)
m=0
i=0
FOR i=1 TO INT(val(lcSplit))
lcUdhx = lcHeader+lcSplit+PADL(ALLTRIM(STR(i)),2,"0")
SELECT * FROM TempInbox WHERE senderNumber=lcNope AND UDH=lcUDHx INTO CURSOR InboxUDH

IF RECCOUNT("InboxUDH")>0
m=m+1
ENDIF
endf
lctext=""
IF m=INT(val(lcSplit))
FOR j=1 TO m
lcUdhx = lcHeader+lcSplit+PADL(ALLTRIM(STR(j)),2,"0")
SELECT * FROM TempInbox WHERE senderNumber=lcNope AND UDH=lcUDHx INTO CURSOR InboxUDH

SELECT inBoxUDH
lcNope = inboxUDH.senderNumber
lcText= lctext+inBoxUDH.Textdecoded
ldTgl=inboxUDH.ReceivingDateTime
lcId=inboxUDH.id
DELETE from TempInbox where id=lcId
* =SQLEXEC(thisform.konek,"DELETE from inbox where id=?lcId")
endf
INSERT INTO Inbox values(lcnope,lctext,ldTgl)

ENDIF
ENDIF
ends
SELECT inbox
GO top
thisform.grid1.Refresh

OK berikut saya sertakan formnya https://www.dropbox.com/s/gmweh2nxg01hayy/SmsGammu.rar?dl=0

 

[Tambahan]

sesuai penjelasan di blog om http://blog.rosihanari.net/teknik-mengirim-long-text-sms-gammu-dengan-query-sql/
yaitu tentang format UDH adalah “AAAAAAAA XX YY”, yang mana “AAAAAAA”  adalah format random hexadecimal, pertanyaannya bagaimana membuat format random hexadecimal?

ok berikut copasnya, bikin function

FUNCTION DecToHex
PARAMETERS liDecNumber
lsHexNumber = ""
IF liDecNumber > 0 && It's not negative, so do a straight TRANSFORM.
lsHexNumber = TRANSFORM(liDecNumber, "@0")
ELSE

*-- The number is negative, so we'll have to do a little more work,
*-- since it's not as straight forward as converting and adding a
*-- minus sign.

*-- Find the length of the resulting hex string.
lsHexNumber = TRANSFORM(ABS(liDecNumber), "@0")
IF SUBSTR(lsHexNumber, 3, 1) = "0" && The number has filled the
&& eight places of DWORD.
liLength = LEN(SUBSTR(lsHexNumber, NotAt("0", lsHexNumber, 2)))
ELSE
*-- Subtract to account for "0x".
liLength = LEN(TRANSFORM(ABS(liDecNumber), "@0")) - 2
ENDIF

lsTempHex = 0xFFFFFFFF
lsHexNumber = TRANSFORM(lsTempHex-ABS(liDecNumber) + 1, "@0")
ENDIF
RETURN lsHexNumber

selanjutnya edit tombol kirim,yang mana sebelumnya cuma statis yaitu “050003A7” , jadi dinamis dengan merubah jadi begini


lcHex =RIGHT(Dectohex(RAND()*100),2)
lcUDH1="050003"+lcHex

...

...

..

for i=1 to lnByk

...

if  i=1

....

lcudh= lcUDH1+Padl(Alltrim(Str(lnByk)),2,"0")+Padl(Alltrim(Str(i)),2,"0")

else

.....

lcudh= lcUDH1+Padl(Alltrim(Str(lnByk)),2,"0")+Padl(Alltrim(Str(i)),2,"0")

....

endif

endfor

Ok, silahkan dicopas aja, mg sukses selalu kawan

Iklan

Kirim Sms dengan AT Command menggunakan Visual Foxpro

September 18, 2014

Bukan barang baru sih he, cuma sebagai catatan aja biar ga ilang nih he, Ok dulu saya pernah posting sms gateway dengan gammu yang mana hanya soppurt pada modem tertentu saja yang udah di uji pake gammu, liat aja sendiri di situsnya,, Naa bagaimana jika ada client yang ga mau di ribetkan ama modem tertentu gitu, pokonya klo bisa support aja dah ama modem yang ada ini :D, naa untuk itu solusi bisa gunakan AT Command, Apa itu AT Command  atau Attention Command yang di gunakan untuk berkomunikasi atau berhubungan antara komputer dengan terminal (modem/ phone modem) , naa ok lah, langsung aja penggunaanya dengan visual foxpro saya menggunakan modem huawei E150 (Not Support Gammu),

1. Bikin Form baru masukkan ActiveX Control Msccomm

Screenshot_1

Screenshot_2

2. Buat Method baru kasih nama sentsms, scriptnya gini


PARAMETERS lcnope,lcpesan

Local lcinputsend,lcmsglen
Declare Sleep In Win32API Integer
With Thisform.Comm1
.Output="ATZ"+Chr(13) &&+chr(10)
Sleep(1000)
lcinputsend=.Input
.Output="AT+CMGF=1"+Chr(13) &&+chr(10)
Sleep(1000)
lcinputsend=.Input
.Output='AT+CMGS="'+lcnope+'"'+Chr(13)
Sleep(1000)
lcinputsend=.Input
lcinputsend=.Input
.Output=lcpesan+Chr(13)
Sleep(1000)
.Output=Chr(26)
Sleep(10000)
Endwith
lcmsglen=Len(Alltrim(lcpesan))
If Not 'OK' $Substr(lcinputsend,m.lcmsglen+1,5000) And Not 'ERROR' $Substr(lcinputsend,m.lcmsglen+1,5000)
lcinputsend=lcinputsend+Thisform.Comm1.Input
Endif
lcinputsend=lcinputsend+Thisform.Comm1.Input
If Not 'ERROR' $Upper(Substr(lcinputsend,m.lcmsglen+1,5000))
Messagebox('Pesan Terkirim')

Else

Messagebox('Gagal Terkirim')
Endif

thisform.Comm1.Portopen=.F.

 

4. Command Cek, script


lcPort=thisform.combo1.ListIndex
thisform.comm1.CommPort=lcPort
declare Sleep in Win32API integer
if !thisform.comm1.portopen
thisform.comm1.portopen = .T.
endif
thisform.comm1.output='AT'+CHR(13)
thisform.comm1.output='ATZ'+CHR(13)
thisform.comm1.output='ATE1'+CHR(13)

thisform.comm1.output='AT+CMGF=1'+CHR(13)
MESSAGEBOX('Connection to mobile device Sipp',64,'Informasi')

5. Form. init, script


FOR i=1 TO 20
this.combo1.AddItem('COM'+ALLTRIM(STR(i)))
ENDFOR

6. Command Sent, Script


lcnope=ALLTRIM(thisform.text1.Value)
lcpesan=ALLTRIM(thisform.edit1.Value)
thisform.label4.caption='Sending SMS to :'+lcNope
thisform.sentsms(lcnope,lcpesan)

7. Run,

naa gimana Bagus kan, bisa kirim sms kq, untuk informasi AT-* yang lain bisa download di https://www.mediafire.com/?16u75xc93y06dh3  baca kuat kuat

 


Aplikasi SmsSkyGet (gammu+vfp)

Mei 24, 2011

[MAAF]

lama ga post nih,,udah rada-rada hank 😀 (lagi belajar) ini saya uploadkan project saya yang lama ga saya rampungkan, yaa paling ga ini project bisa run koq coba aja silahkan

link :

SmsSkyGet

*jika ada pertanyaan silakan


Autoreply dengan Foxpro

Maret 15, 2011

ok kmarin udah dijelaskan gimana cara membuat sms baru naa sekarang kita akan belajar membuat autorepl sederhana dengan format REG DARAH

ingat yaa harus punya databasenya terlebih dulu

ok silakan download aja

Autoreply

ok selamat mencoba


New sms dengan foxpro

Maret 10, 2011

sesuai judul nih kita hari ini buat new sms dengan foxpro..kita buat sms gateway loo step by step hehe ok langsung aja nih

desain form spt ini

Terus kodingnya gimana? Ikuti aja dah

Pada form.load

PUBLIC konek,jlhno,a

konek=0

jlhno=0

dsnku=”DRIVER={MySQL ODBC 5.1 Driver};”;

+”UID=root;”;

+”PWD=12345;”;

+”SERVER=localhost;”;

+”DATABASE=sms;”;

+”PORT=3306;”

SQLSETPROP(0,”DispLogin”,3)

konek=SQLSTRINGCONNECT(dsnku)

 

form.init

thisform.text1.value=’’

thisform.text3.value=’’

thisform.edit1.value=’’

 

terus untuk commandnya

commandbottun.click   –àsent

 

Nope=ALLTRIM(Thisform.text1.Value)

T=Messagebox(‘Apakah SMS akan dikirim…?’,36,’Konfirmasi’)

If T=6

If Substr(Nope,1,1)=’0′

Nope1=’+62’+Substr(nope,2,30)

Else

If Substr(Nope,1,3)=’+62′

Nope1=Nope

Endif

Endif

 

issms=Allt(Thisform.edit1.Value)

cdefa=’Default_No_Compression’

If SQLExec(konek,”insert into outbox(destinationnumber,Coding,textdecoded) ;

values (?Nope1,?cdefa,?issms)”)>0

MESSAGEBOX(‘Pesan sedang dikirim’,0+64,’Waiting…’)

fsms.balas

Messagebox(‘SMS gagal dikirim….!’,16,’Pemberitahuan’)

Else

Messagebox(‘SMS gagal dikirim….!’,16,’Pemberitahuan’)

Endif

Else

Return

Endif

Ok sampai sini aja dah saya jelaskan selanjutnya yaaa buat ndri hehehe 🙂

mg sukses yaa