Tuesday, November 15, 2011

Registrasi via SMS dengan Gammu

REG#Semester#Nama (baca: Reg Pagar Semester Pagar Nama), itulah keyword yang biasa orang gunakan untuk melakukan registrasi ke nomor operator via SMS. Bukan hanya format seperti tersebut diatas yang biasa dipakai, masih banyak format-format lain yang biasa digunakan untuk melakukan registrasi.

Pada postingan kali ini saya ingin berbagi pengetahuan dari yang saya ketahui, masih seputar penggunaan tools SMS Gateway gammu dengan bahasa pemrograman Visual Basic Classic dan database MySQL. Untuk mengikuti paparan yang saya sampaikan ini, saya harap kawan-kawan sudah mengetahui cara melakukan konfigurasi gammu, membuat database gammu, cek konektifitas handphone dengan gammu, atau silahkan mempelajari postingan saya sebelumnya yang ini Pengantar Membuat Aplikasi SMS dan yang ini juga Kirim SMS ke banyak Nomor dengan VB 6.



Tahapan selanjutnya yang harus kita lakukan setelah gammu sudah mampu membaca handphone, membuat database di MySQL yaitu :
1. Buka Visual Basic Classic
2. Buat desain interface seperti dibawah ini, object yang dipakai dalam form tersebut antara lain 3 object label, 1 images dan 1 timer.
Form Registrasi SMS

3. Setting Properties untuk timer1 intervalnya menjadi 1000
4. Buat Coding untuk form tersebut, silahkan salin tempel (baca:copy paste) coding dibawah ini :
Option Explicit

Dim xNomor  As String
Dim xSMS    As String

Private Sub CekInSMS()
    Dim xKunci As String
    
    Set RsInbox = New ADODB.Recordset
    RsInbox.CursorLocation = adUseClient
    
    'Tampilkan data inbox
    StrSQL = ""
    StrSQL = "Select * From Inbox WHERE Processed='false'"
    RsInbox.Open StrSQL, Conn, adOpenStatic, adLockReadOnly
        
        If Not RsInbox.EOF Then
        
            'Ambil record ID
            xKunci = RsInbox.Fields("ID")
            xNomor = RsInbox.Fields("SenderNumber")
            xSMS = RsInbox.Fields("TextDecoded")
        
            'Ubah data
            StrSQL = "UPDATE inbox SET Processed='true'" _
                    & "WHERE ID='" & xKunci & "'"
            Conn.Execute StrSQL
            
            'panggil prosedur kirimsms
            Call KirimSMS

        Else
            xNomor = vbNullString
            xSMS = vbNullString

        End If
        
    RsInbox.Close
    Set RsInbox = Nothing
    Exit Sub
End Sub

Private Sub KirimSMS()
On Error GoTo salah

    Dim xPesan As String
    Dim xFormat1 As String, xFormat2 As String
    
    Dim xHasil() As String
    
    
    xFormat1 = VBA.Left(xSMS, 3)
    xHasil = VBA.Split(xSMS, "#")
    xFormat2 = xHasil(1)
    
    If xFormat1 = "REG" And VBA.IsNumeric(xFormat2) Then
        xPesan = ""
        xPesan = "Terima Kasih Anda Sudah Melakukan Registrasi" _
            & " ke SMS Center Pranata Indonesia"
            
        StrSQL = "INSERT INTO outbox (`DestinationNumber`," _
                & "`TextDecoded`) VALUES" _
                & "('" & xNomor & "','" & xPesan & "')"
        
        Conn.Execute StrSQL
        Exit Sub
    ElseIf xFormat1 <> "REG" And IsNumeric(xFormat2) Then
        xPesan = ""
        xPesan = "Maaf !!!, Registrasi Anda Gagal, Silahkan Cek Kembali" _
            & " Format Isian Registrasinya," _
            & "Contoh REG#Semester#Nama (exp. REG#10#Eka Riana)" _
            & "(SMS Center Pranata Indonesia)"
            
        StrSQL = "INSERT INTO outbox (`DestinationNumber`," _
                & "`TextDecoded`) VALUES" _
                & "('" & xNomor & "','" & xPesan & "')"
        Conn.Execute StrSQL

        Exit Sub
    Else
        xPesan = ""
        xPesan = "Maaf !!!, Registrasi Anda Gagal," _
                & "Silahkan Cek Kembali" _
                & "Format Isian Registrasinya, Contoh REG#Semester#Nama" _
                & "(exp. REG#10#Eka Riana)" _
                & "(SMS Center Pranata Indonesia)"
                    
        StrSQL = "INSERT INTO outbox (`DestinationNumber`," _
                & "`TextDecoded`) VALUES" _
                & "('" & xNomor & "','" & xPesan & "')"
        
        Conn.Execute StrSQL
        Exit Sub
    End If
salah:
    xPesan = ""
    xPesan = "Maaf !!!, Registrasi Anda Gagal," _
                & "Silahkan Cek Kembali" _
                & "Format Isian Registrasinya, Contoh REG#Semester#Nama" _
                & "(exp. REG#10#Eka Riana)" _
                & "(SMS Center Pranata Indonesia)"
            
    StrSQL = "INSERT INTO outbox (`DestinationNumber`," _
            & "`TextDecoded`) VALUES" _
            & "('" & xNomor & "','" & xPesan & "')"
        
    Conn.Execute StrSQL
    Exit Sub
End Sub

Private Sub Form_Load()
    Call KoneksiMySQL
End Sub

Private Sub Timer1_Timer()
    Call CekInSMS
End Sub

5. Test Program; jangan lupa untuk mengaktifkan daemon smsd-mysql nya, kemudian coba lakukan SMS dengan format REG#SEMESTER#NAMA, misalnya REG#1#Eka Riana, kirim ke nomor anda (awas jangan kirim ke nomor yang salah :D ).

Demikian ulasan mengenai tools gammu dan Visual Basic yang digunakan untuk melakukan registrasi via SMS, dan hal yang perlu diketahui yaitu paparan ini hanyalah sebatas dokumentasi pribadi, dan sebatas hanya "SHARED FOR YOU". Bila ada yang mau ditanyakan silahkan berikan komentar.


34 comments:

  1. Assalamu'alaikum pak, mau nanya klo misal layanan SMS yg ditawarkan lebih dari satu, kayak REG, UNREG, NILAI (tanya Nilai) dll itu bagaimana Pak??

    Trus ini pak, mohon penjelasannya:
    xFormat1 = VBA.Left(xSMS, 3)
    xHasil = VBA.Split(xSMS, "#")
    xFormat2 = xHasil(1)
    sama,
    knp code untuk info format salah diulang 3X?? "MAAF!! Registrasi Anda Gagal ....."

    sorry banyak nanya, pengen beljaran bikin aplikasi sprti itu jg. Thanks

    ReplyDelete
  2. Sangat bisa, berarti ketika sms masuk berisi REG, Maka nomor dari registrasi tersebut otomatis tersimpan ke tabel data registrasi, sedangkan ketika sms masuk berisi UNREG maka otomatis nomor telpon tersebut terhapus didalam tabel registrasi,,,

    Untuk memberikan info tentang nilai berarti harus membuat terlebih dahulu tabel tambahan untuk menyimpan data nilai, sedangkan untuk untuk meminta info nilai dan memberikan info nilai dari sms center ke nomor pengirim tinggal mainkan bahasa Querynya.

    Bisa aja tidak di ulang, itu cuma sekedar contoh aja, tinggal di modifikasi dikit....

    Mudah-mudahan faham,,,,,

    ReplyDelete
  3. Oke pak, paham :D

    jadi untuk UNREG query DELETE data ditulis pada Timer??? (seperti koding anda di atas)

    Oh ya pak, mohon dijelaskan untuk koding ini:

    VBA.Left(xSMS, 3) >>> VBA itu apa? dan angka 3 itu untuk apa?

    nanya satu lagi pak, hehehe...
    code untuk menyimpan data member (REG) ke dalam tabel "Peserta" berdasarkan field NIS, NAMA, KELAS, No.HP itu gmana ya pak??

    ThankS

    ReplyDelete
  4. VBA.Left(xSMS,3) Digunakan untuk mengambil character dari sebelah kiri, sedangkan VBA sendiri artinya ,,,, ane juga engga tau ... heheh..

    Untuk menyimpan data Member, berarti harus diubah terlebih dahulu format registrasinya menjadi seperti ini :

    REG#Nama#Kelas --->REG#Eka Riana#X

    Dan untuk codingnya kurang lebih seperti dibawah ini, tapi dengan asumsi bahwa tabel peserta sudah anda buat :

    ReplyDelete
  5. hehehe... Oh berarti angka 3 itu untuk membaca 3huruf "REG" ya??? setelah itu isi SMS displit berdasarkan "#", xFormat(2) = xHasil(1) <<< angka 1 disitu untuk menunjukkan pada program letak keyword "REG" ya??

    mana pak code buat nyipan datanya? Koq ga ada? :D

    ReplyDelete
  6. Tepat sekali ,,,,,

    Ohhh codingnya belum ada yah ? lupa saia,,,

    Tar ane create dulu yah ...

    ReplyDelete
  7. Oke deh pak, aq tunggu codingan-nya "I'm so excited" :D

    ReplyDelete
  8. Maaf saya baru bisa on, lumayan peperangan coding udah mulai mereda :D

    Untuk coding agar setiap yang melakukan registrasi itu bisa tersimpan datanya ke tabel tertentu, misal : tabel registrasi yang memiliki field NPM, NamaMahasiswa, Jurusan, Telp

    Maka untuk contoh coding tersebut mungkin bisa seperti dibawah ini.

    Agar tidak terjadi masalah dan bentrok dengan coding yang sudah dibuat, sebaiknya tambahkan 1 timer lagi dan set intervalnya menjadi 1000.

    Ini dia codingnya :


    Private Sub Timer1_Timer()
    Dim xPesan, xIsi() As String
    Dim xTelp, xKunci As String
    Dim i As Integer

    Set RsInbox = New ADODB.Recordset

    'Seleksi isi inbox berdasarkan TextDecoded='REG'
    'Dan processed='false'

    StrSQL = ""
    StrSQL = "SELECT * FROM inbox WHERE LEFT(TextDecoded,3)='REG' And Processed='false' "
    RsInbox.Open StrSQL, Conn, adOpenDynamic, adLockReadOnly

    If Not RsInbox.EOF Then
    xKunci = RsInbox.Fields("ID")
    xPesan = RsInbox.Fields("TextDecoded")
    xIsi = Split(xPesan, "#")
    xTelp = RsInbox.Fields("SenderNumber")

    'Simpan data ke tabel registrasi
    For i = 1 To UBound(xIsi)
    StrSQL = "INSERT INTO Registrasi (NPM, NamaMahasiswa," _
    & " Semester,Telp) VALUES ('" & xIsi(1) & "'," _
    & "'" & xIsi(2) & "','" & xIsi(3) & "'," _
    & "'" & xTelp & "')"
    Conn.Execute StrSQL
    Next i

    'Lakukan Replay ke Nomor Pengirim
    '------------
    '------------


    'Ubah data record Processed
    StrSQL = "UPDATE inbox SET Processed='true'" _
    & "WHERE ID='" & xKunci & "'"
    Conn.Execute StrSQL

    Else
    RsInbox.Close
    Set RsInbox = Nothing
    End If
    End Sub

    Semoga membantu ...

    ReplyDelete
  9. Maaf, silahkan di revisi coding untuk simpan ke tabel registrasi, ada double simpan setelah saya test, jadi untuk codingnya seperti ini aja :

    'Simpan data ke tabel registrasi
    'xIsi(1)=Berisi data NPM
    'xIsi(2)=Berisi data Nama Mahasiswa
    'xIsi(3)=Berisi Data Jurusan

    StrSQL = "INSERT INTO Registrasi (NPM, NamaMahasiswa," _
    & " Semester,Telp) VALUES ('" & xIsi(1) & "'," _
    & "'" & xIsi(2) & "','" & xIsi(3) & "'," _
    & "'" & xTelp & "')"
    Conn.Execute StrSQL

    ReplyDelete
  10. Assalamu'alaikum..,Pak!! Saya baru belajar pake VB.NET, boleh gak pak saya minta postingan coding untuk reg SMS pake VB.NET??

    buat belajar dirumah pak!!Hehe..
    Mohon bimbingannya ya pak, Makasih!

    ReplyDelete
    Replies
    1. Wa`alaikum salam, ngomong2 yang untuk vb classicnya udah bisa belum ?

      Delete
  11. Mikum!! Pak,boleh nanya ga? kalo VBA.Left(xSMS,3) di VB.NET nya gimana ya pak codingnya? Bingung saya..

    ReplyDelete
    Replies
    1. Wa`alaikum salam, BOleh

      VBA.Left adalah fungsi STRING, penulisannya sama kaya LEFT(x,n), nah kalau di vb net hampir sama, coba lihat ke sini http://lab-informatika.com/category/vb/tutorial/string/fungsi-left-vbdotnet-t119.html

      Delete
  12. Satu lagi pak! kalo RsInbox itu apa ya pak?

    ReplyDelete
    Replies
    1. RsInbox itu variabel yang sudah dideklarasikan sebagai recordset untuk menampung data sms yang masuk, nama rsinbox bisa disesuaikan, misalnya RSMasuk atau yang lainnya ...

      Delete
  13. Pak bisa minta seluruh script nya gak?

    ReplyDelete
    Replies
    1. Diatas itu source codenya, coba aja dulu ,,,,

      Delete
  14. Bisa minta keseluruhan scriptnyya gak pak?

    ReplyDelete
    Replies
    1. Lah emang gak baca balasan komentar ane, itu script udah okke, tinggal kembangkan aja, dan kalau ada masalah tinggal tanyakan kembali ke sini, gampang khan ... :P

      Delete
  15. ass,..

    saya mw tnya di dalam databasenya table pa ja yang di perlukan?

    ReplyDelete
    Replies
    1. Tabelnya berjumlah 9 tabel, sebab itu sudah mutlak harus dibuat, karena paparan yang saya sampaikan ini adalah kelanjutan dari Pengantar Membuat SMS Gateway memakai gammu engine,

      SIlahkan pelajari terlebih dahulu Pengantar Membuat Aplikasi SMS pada postingan sebelumnya.

      Delete
  16. Gan, saya minta tolong dong, ada tutorial sms gateway ini tapi menggunakan vb.net ga?? Kalo ada tolong kirim ke adit_leedunk@yahoo.com
    Terimakasih banyak gan.

    ReplyDelete
    Replies
    1. Untuk VB.NET saya tidak punya, sebenarnya kalau anda sudah bisa insert, delete, edit, save di VB.NET akan dengan mudah tutorial di atas di implementasikan,

      Mudah-mudahan saya ada waktu untuk menyusun pakai VB.NET

      Delete
  17. oom, ane masih keluar E_FAIL STATUS kalo ada SMS masuk ke tabel Inbox ..
    gimana yah oom ??

    ReplyDelete
  18. Paman, SMS Registrasi ko ga masuk ke tabel inbox yah .??

    ReplyDelete
    Replies
    1. Harusnya masuk, kalau tidak masuk berarti modem atau handphone yang tidak support

      Delete
  19. Terima kasih banyak atas ilmu-ilmunya. moga mendapat balasan yang setimpal bahkan lebih...

    ReplyDelete
  20. Terimakasih ilmunya.. semoga mendapat balasan yang lebih...

    ReplyDelete
  21. maaf gan,,mohon bantuannya sya newbee !! gan ane udah sampai inject tpi sms nya gax ada nerima terus gan minta contoh form vb nya yang auto respon

    ReplyDelete
  22. maaf gan mohon bantuannya sya masih newbee!! gan saya udah nyampe inject tapi sms nya gax nerima terus ke HP,,cm masuk ke databasenya aja..gan klw ada minta tampilan Form sm source kode yang auto respon

    ReplyDelete
    Replies
    1. Yang tidak terima smsnya ke Nomor yang tujuan apa nomor agan ???

      Delete
  23. gan, kok data registrasi tidak masuk ke tabel registrasi kayak penjelasan di atas

    ReplyDelete