You are on page 1of 13

02 03

Dim rsSend Dim cmd

As cRecordset As cCommand

04 05 Dim objGsmOut As ASmsCtrl.GsmOut

06 07

Dim objConstants

As ASmsCtrl.Constants

08 09

Dim phoneNumber Dim keyword

As String As String

10 11

Dim smsBalasan

As String

12 13

On Error GoTo errHandle

14 15

'cek sms yang belum di proses, ditandai dg status = 0

strSql = "SELECT id, phone_number, sms_keyword " & _

16 17

"FROM sms_in " & _ "WHERE status = 0 " & _ "ORDER BY id" Set rsSend = conn.OpenRecordset(strSql)

18 19

20 21

If Not rsSend.EOF Then Set objGsmOut = New ASmsCtrl.GsmOut

22 23

Set objConstants = New ASmsCtrl.Constants

24 25 26 27 28 29

objGsmOut.Activate SERIAL_NUMBER objGsmOut.device = cmbPORT.Text objGsmOut.DeviceSpeed = 0 objGsmOut.RequestStatusReport = False objGsmOut.MessageType = objConstants.asMESSAGETYPE_TEXT_MULTIPART

30 31

Do While Not rsSend.EOF


'ganti prefix nomor hp 0 -> +62

32 33

phoneNumber = rep0to62("" & rsSend("phone_number").Value) keyword = rsSend("sms_keyword").Value

34 35 smsBalasan = getBalasanSms(keyword, phoneNumber)

36 37 38 objGsmOut.MessageRecipient = phoneNumber objGsmOut.MessageData = smsBalasan

39

objGsmOut.Send

40 If objGsmOut.LastError = 0 Or objGsmOut.LastError = 23140 Then 'sms sukses dikirim

41

42 43

'update status sms -> 1

strSql = "UPDATE sms_in SET status = ?, no_ref = ? " & _ "WHERE id = ?" Set cmd = conn.CreateCommand(strSql)

44 45

46 47 48 49

With cmd .SetInt32 1, 1 .SetInt32 2, objGsmOut.MessageReference .SetInt32 3, rsSend("id").Value

50 51 .Execute

52 53

End With Set cmd = Nothing

54 55
'insert ke tabel sms_out, untuk histori sms keluar

56

strSql = "INSERT INTO sms_out (phone_number, replay_msg, date_out, time_out) VALUES (?, ?, ?, ?)"

57

Set cmd = conn.CreateCommand(strSql)

58 59 60 61 62 63

With cmd .SetText 1, phoneNumber .SetText 2, smsBalasan .SetDate 3, Format(Now, "yyyy/MM/dd") .SetTime 4, Format(Now, "hh:mm:ss")

64 65

.Execute End With

66 67

Set cmd = Nothing

68 69

Else 'sms gagal dikirim


'update status sms -> 1

70
'ini masih bisa dikembangkan lagi dengan menambah kolom max_jumlah_kirim di tabel sms_in

71

72

'jadi bisa diberi aturan sms yg gagal dikirim > 3x baru status smsnya diupdate menjadi 1

73

strSql = "UPDATE sms_in SET status = ?, no_ref = ? " & _ "WHERE id = ?"

74

75

Set cmd = conn.CreateCommand(strSql)

76 77 78 79

With cmd .SetInt32 1, 1 .SetInt32 2, objGsmOut.MessageReference .SetInt32 3, rsSend("id").Value

80 81 .Execute

82 83

End With Set cmd = Nothing

84 85

End If

86 87

Call Wait(5000)

88 89 Loop

rsSend.MoveNext

90 91

Set objConstants = Nothing Set objGsmOut = Nothing

92

End If

93

94 95

Exit Sub errHandle:

96 97

Resume Next End Sub

Prosedur sendSMS akan mengolah sms masuk yg belum di proses (ditandai dengan status = 0), mengupdate statusnya menjadi 1 jika berhasil mengirimkan sms, kemudian menyimpannya ke tabel sms_out sebagai histori pengiriman sms.

1 2

Public Function rep0to62(ByVal phoneNumber As String) As String


'fungsi untuk mengganti prefix 0 -> +62

3 4 rep0to62 = phoneNumber

If Left(phoneNumber, 1) = "0" Then rep0to62 = "+62" & Right(phoneNumber, Len(phoneNumber) - 1) End Function

Sesuai namanya fungsi ini berguna untuk mengganti prefix nomor hp 0 menjadi +62 (kode indonesia). Terakhir fungsi untuk memproses keyword sms yang masuk dan sekaligus sebagai balasan untuk sms keluar.

00 1 00 2

Public Function getBalasanSms(ByVal keywordSms As String, ByVal phoneNumber As String) AsString

Dim rs

As cRecordset

003

Dim param1

As String

004

Dim arrKeyword()

As String

005 006 Dim prefix As String

007 008

Dim nilai Dim nama

As String As String

009 010 Dim tha As String

011 012

Dim semester

As String

013 014

If Len(keywordSms) > 0 Then If InStr(1, keywordSms, "#") > 0 Then 'karakter # -> separator keyword arrKeyword = Split(keywordSms, "#") If Not (Len(arrKeyword(0)) > 0) Then getBalasanSms = "Keyword sms salah" Exit Function

015 016

017 018

019 020 021 Else

'do nothing

022

End If

023 024 Else

025 026

ReDim arrKeyword(0) arrKeyword(0) = keywordSms

027 028

End If

029 030

Else getBalasanSms = "Keyword sms salah"

031 032

Exit Function End If

033 034 035 036 prefix = arrKeyword(0) prefix = UCase$(prefix)

037

If UBound(arrKeyword) > 0 Then param1 = arrKeyword(1) 'untuk contoh


disini param1 bernilai nomor induk siswa

038

039

'untuk pengembangan lebih lanjut tahun ajaran dan semester dibuat settingan tersendiri

040 041 042

tha = "2009/2010" semester = 2

043 044

Select Case prefix Case "TGS"

045

'validasi nis siswa

046

If Not isValidNIS(param1) Then getBalasanSms = Replace(NIS_SALAH, "<nis>", param1): Exit Function

047 048 049 050


'validasi no hp siswa

'nama sekolah sebaiknya disimpan didalam variabel

If Not isValidHPSiswa(param1, phoneNumber) Then getBalasanSms = Replace(HP_UNREG, "<nama_sekolah>", "SMA Negeri Yogyakarta") getBalasanSms = Replace(getBalasanSms, "<no_hp>", phoneNumber): ExitFunction

051

052

053 054

End If

055

strSql = "SELECT UPPER(nama) FROM siswa WHERE nis = '" & param1 & "'" nama = CStr(dbGetValue(strSql, ""))

056

057 058
'mulai proses pencarian nilai

059 060

strSql = "SELECT matapelajaran_kode, nilai " & _ "FROM nilai_tugas " & _

061

"WHERE siswa_nis = '" & param1 & "' AND tahun_ajaran = '" & tha & "' AND semester = " & semester & " " & _ "ORDER BY matapelajaran_kode"

062

063 064

Set rs = conn.OpenRecordset(strSql) If Not rs.EOF Then

065

Do While Not rs.EOF nilai = nilai & rs("matapelajaran_kode").Value & "=" & rs("nilai").Value & ", " rs.MoveNext Loop

066

067 068

069 070

End If

071 072

If Len(nilai) > 0 Then nilai = Left(nilai, Len(nilai) - 2)

073 074

getBalasanSms = "Nilai tugas (" & nama & ") : " & nilai

075

Else getBalasanSms = "Nilai tugas (" & nama & ") sedang dalam proses pendataan"

076

077 078

End If

079 080

Case "UH"
'validasi nis siswa

081

If Not isValidNIS(param1) Then getBalasanSms = Replace(NIS_SALAH, "<nis>", param1): Exit Function

082

083 084

'validasi no hp siswa

'nama sekolah sebaiknya disimpan didalam variabel

085

If Not isValidHPSiswa(param1, phoneNumber) Then getBalasanSms = Replace(HP_UNREG, "<nama_sekolah>", "SMA Negeri Yogyakarta") getBalasanSms = Replace(getBalasanSms, "<no_hp>", phoneNumber): ExitFunction End If

086

087

088

089 strSql = "SELECT UPPER(nama) FROM siswa WHERE nis = '" & param1 & "'" nama = CStr(dbGetValue(strSql, ""))

090

091

092

093 094

'mulai proses pencarian nilai

strSql = "SELECT matapelajaran_kode, nilai " & _

095

"FROM nilai_ulangan " & _ "WHERE siswa_nis = '" & param1 & "' AND tahun_ajaran = '" & tha & "' AND semester = " & semester & " " & _ "ORDER BY matapelajaran_kode" Set rs = conn.OpenRecordset(strSql)

096

097 098

099 100

If Not rs.EOF Then Do While Not rs.EOF nilai = nilai & rs("matapelajaran_kode").Value & "=" & rs("nilai").Value & ", " rs.MoveNext Loop End If

101

102 103 104

105 106 If Len(nilai) > 0 Then nilai = Left(nilai, Len(nilai) - 2) getBalasanSms = "Nilai ulangan (" & nama & ") : " & nilai

107 108

109

110

Else

111

getBalasanSms = "Nilai ulangan (" & nama & ") sedang dalam proses pendataan" End If

112

113 114 Case Else getBalasanSms = "Keyword sms salah" End Select

115 116

117

End Function

You might also like