Fungsi Send SMS yang berisi 1 atau lebih dari 1 SMS dengan Gammu menggunakan PHP


Bingung mau posting apa, ya daripada kosong ni blog aku posting aja salah satu fungsi PHP yang pernah aku buat. Fungsi / Script PHP ini digunakan untuk kirim SMS dengan Gammu sebagai connectornya. Di dalam fungsi ini kalian bisa SMS dengan panjang karakter terserah kalian, jadi SMSnya mau berisi sampe lebih dari 153 Karakter (1 SMS) insyaAllah bisa kekirim jadi satu, karena udah aku buktikan dan sudah banyak aku pakai. Oke silahkan lihat sourcenya dibawah ini :

<?php
function sendSMS($nomorHP, $smsN){
	// $nomorHP = 08484565156,1516546565,61516165165;
	// $nomorHandPhone memecah data dari $nomorHP dalam bentuk array nomor handphone
	$nomorHandPhone = explode(",",$nomorHP);

	$noHp = $nomorHandPhone;
	// menghitung jumlah nomor yang akan dikirimi SMS
	$juml = count($noHp);

	for($i=0;$i<$juml;$i++){
		$qryStatus = "SHOW TABLE STATUS LIKE 'outbox'";
		$hasilQery = mysql_query($qryStatus);
		$dataQuery = mysql_fetch_array($hasilQery);
		// $newForSMS digunakan untuk menyimpan ID yang terbaru dari Primary Key yang ada di table outbox
		// ID ini nanti yang menghubungkan antara table "outbox" dengan table "outbox_multipart"
		$newForSMS = $dataQuery['Auto_increment'];

		$hp = $noHp[$i];

		// jika panjang pesan SMS kurang dari sama dengan 153 karakter
		// dalam gammu 153 karakter = 1 SMS
		if(strlen($smsN)<=153){
			mysql_query("INSERT INTO outbox (DestinationNumber, TextDecoded) VALUES ('".$hp."','".$smsN."')");
		}else{
			// pembulatan keatas berapa total SMS yang akan dikirimkan nantinya
			$jmlSMS = ceil(strlen($smsN)/153);
			// memecah pesan SMS per 153 karakter
			$pecah = str_split($smsN, 153);

			for($j=1;$j<=$jmlSMS;$j++){
				$udh = "050003A7".sprintf("%02s", $jmlSMS).sprintf("%02s", $j);
				$msg = $pecah[$j-1];
				if ($j==1){
					// pesan sms yang sudah dipecah per 153 karakter tadi
					// pecahan pertama disimpan dalam tabel outbox
					$querySend = "INSERT INTO outbox (DestinationNumber, UDH, TextDecoded, ID, MultiPart)
								  VALUES ('".$hp."', '$udh', '".$msg."', '$newForSMS', 'true')";
				}else{
					// pecahan selanjutnya disimpan pada tabel outbox_multipart
					$querySend = "INSERT INTO outbox_multipart(UDH, TextDecoded, ID, SequencePosition)
								  VALUES ('$udh', '".$msg."', '$newForSMS', '$j')";
				}
				mysql_query($querySend);
			}
		}
	}
}
?>

Semoga bermanfaat, mohon saran / kritiknya yang membangun😀
Trima Kasih

23 thoughts on “Fungsi Send SMS yang berisi 1 atau lebih dari 1 SMS dengan Gammu menggunakan PHP

  1. Pingback: Contoh Program Php Yang Menggunakan Insert

  2. saya kan coba bkin SI nilai berbasis SMS dngan format nim (spasi) semester.
    dan nanti pengennya setelah direquest blasannya muncul makul dan nilainya
    tapi yang kok yang mncul hanya 1 makul dan 1 nilai..
    pdahal selama 1 semester ada beberpa makul dan nilainya..
    mhon pencerahnnya..
    ini scriptnya :
    <?php
    echo "”;
    ?>
    Ketik:
    NIM(spasi)SEMESTER
    201201(spasi)I

  3. web yang simpel.. tpi banyak mamfaat… mhon pencerahan bro admin.. kalo no hpnya diambil dari daftar tabel no hp yang telah kita buat.. scriptnya gimana ??

    • pertama kamu harus buat 1 variabel untuk menampung nomor handphone semuanya,
      misalkan $handphone = “”;
      nah, ntar di bagian looping waktu retrieve data dari database, bisa ditambahkan value nya ke variabel tersebut, misalnya gini :

      $query = mysql_query("SELECT nomor FROM kontak");
      while($data = mysql_fetch_array($query)){
      $handphone .= $data["nomor"].",";
      }
      sendSMS("pesan", $handphone);
      

      begitu deh,,,

  4. gan.. bantu dunkk..

    script yang diatas udah aq coba kok ga bs ya gan..

    ni dia script nya

    <?php
    if(isset($_POST['Submit'])){
    if($_POST['Submit']=="Kirim SMS"){

    $nomorHP = $_POST['no'];
    $smsN = $_POST['pesan'];

    //function sendSMS($nomorHP, $smsN){

    // $nomorHP = 08484565156,1516546565,61516165165;
    // $nomorHandPhone memecah data dari $nomorHP dalam bentuk array nomor handphone
    $nomorHandPhone = explode(",",$nomorHP);
    $noHp = $nomorHandPhone;
    // menghitung jumlah nomor yang akan dikirimi SMS
    $juml = count($noHp);
    for($i=0;$i<$juml;$i++){
    $qryStatus = "SHOW TABLE STATUS LIKE 'outbox'";
    $hasilQery = mysql_query($qryStatus);
    $dataQuery = mysql_fetch_array($hasilQery);
    // $newForSMS digunakan untuk menyimpan ID yang terbaru dari Primary Key yang ada di table outbox
    // ID ini nanti yang menghubungkan antara table "outbox" dengan table "outbox_multipart"
    $newForSMS = $dataQuery['Auto_increment'];
    $hp = $noHp[$i];
    // jika panjang pesan SMS kurang dari sama dengan 153 karakter
    // dalam gammu 153 karakter = 1 SMS
    if(strlen($smsN)<=153){
    mysql_query("INSERT INTO outbox (DestinationNumber, TextDecoded) VALUES ('".$hp."','".$smsN."')");
    //mysql_query("insert into outbox values ('', '', '', NULL, '".$hp."', 'Default_No_Compression', NULL, -1, '".$smsN."','', 'false',-1, '', '', '', '')");
    }else{
    // pembulatan keatas berapa total SMS yang akan dikirimkan nantinya
    $jmlSMS = ceil(strlen($smsN)/153);
    // memecah pesan SMS per 153 karakter
    $pecah = str_split($smsN, 153);
    for($j=1;$j

  5. <html>
    <head>
    <!-- refresh script setiap 5 detik -->
    <meta http-equiv="refresh" content="10; url=<?php $_SERVER['PHP_SELF']; ?>">
    </head>
    
    <body>
    
    <?php
    mysql_connect("localhost", "root","");
    mysql_select_db("dbmahasiswa");
    
    $query = "SELECT * FROM inbox WHERE Processed = 'false'";// query untuk membaca SMS yang belum diproses
    $hasil = mysql_query($query);
    while ($data = mysql_fetch_array($hasil))
    {
      $id = $data['ID'];
      $noPengirim = $data['SenderNumber'];  
      $msg = strtoupper($data['TextDecoded']);
      $pecah = explode(" ",$msg );
           
       if($pecah[0]!="UAS"){// jika kata terdepan dari SMS adalah 'NILAI' maka cari nilai Kalkulus
    
        }
    
     { //jika format SMS: NILAI<spasi>MATAKULIAH<spasi>NIM
      if ($pecah[0] == "UAS"){
            $kode = $pecah[1];
         $nim = $pecah[2];
    	 	 $query2 = "SELECT nilai FROM nilai WHERE nim = '$nim' and kode_matakuliah='$kode' and kategori='UAS'";
        	 $hasil2 = mysql_query($query2);
         if (mysql_num_rows($hasil2) == 0) $reply = "NIM/ KODE matakuliah tidak ditemukan periksa kembali NIM dan KODE matakuliah anda";
         else
         {
    	    $data2 = mysql_fetch_array($hasil2);
            $nilai = $data2['nilai'];
            
    	 $reply = "NILAI MAHASISWA DENGAN NIM ".$nim." PADA MATAKULIAH ".$kode." adalah ".$nilai;
    	 }
      }
    
      $query3 = "INSERT INTO outbox(DestinationNumber, TextDecoded) VALUES ('$noPengirim', '$reply')";
      $hasil3 = mysql_query($query3);
      $query3 = "UPDATE inbox SET Processed = 'true' WHERE ID = '$id'";
      $hasil3 = mysql_query($query3);
    }
    {
     
        }
    
      if ($pecah[0] == "INFO"){
             $info= $pecah[1];
    	 $data="";
    	 	 $query2 = "SELECT * FROM informasi where info='$info'";
        	 $hasil2 = mysql_query($query2);
         if (mysql_num_rows($hasil2) == 0) $reply = "maaf foramat anda salah coba cek kembali (INFO<sepasi>info yang di inginkan)";
         else
         {
    	    $data3 = mysql_fetch_array($hasil2);
            $tanggal = $data3["tanggal"];
    		$keterangan = $data3["keterangan"];
    		$data = "$tanggal ($keterangan)";
            
    	 $reply = "Informasi ".$info." :".$data;
    	 }
      }
     
    
     $query3 = "INSERT INTO outbox(DestinationNumber, TextDecoded) VALUES ('$noPengirim', '$reply')";
      $hasil3 = mysql_query($query3);
      $query3 = "UPDATE inbox SET Processed = 'true' WHERE ID = '$id'";
      $hasil3 = mysql_query($query3);
    }
    {
     if ($pecah[0] == "INFORMASI"){//INFO
    	$info="";
         $hasil = mysql_query("SELECT distinct(info) FROM informasi");
    	 	if($hasil){while($d=mysql_fetch_array($hasil)){$info=$info." ".$d["info"];}}
    		else{$info="INFORMASI TIDAK ADA";}
    			 $reply = "Layanan INFO AKADEMIK adalah ".$info;
    				 $q = "INSERT INTO outbox(DestinationNumber, TextDecoded) VALUES ('$noPengirim', '$reply')";	
    				 $q = mysql_query($q);
    					$q2 = mysql_query("UPDATE inbox SET Processed = 'true' WHERE ID = '$id'");
    					$q2 = mysql_query($q2);
     	}
    }
    }
    ?>
    
    </body>
    </html>
    i

    maaf kk numpang naya…tolong di periksa script saya yg saya bikin buat sms auto replay…
    pertanyaanya kenapa passaya coba buat mengirim sms dengan format yg sudah saya buat..kenapa selalu yg sistem membalasnya 2x

    contoh saya meminta data info dengan format yang saya tentukan…
    sms pertama yg di balas isi yg saya maksd..
    dan sms yg ke 2 dia membalas tidak ada pesan yg ditampilkan…
    jadi 1 x kirim sms sistem meblasanya 2x.
    apakah ada script nya yg salah atau gmn kk..tolong pencerahanya…
    thx mohon pencerahanya…😀

    • mas nya kurang tepat di bagian penempatan pengiriman smsnya,,, coba hasil koreksi saya ini

      <html>
      <head>
      <!-- refresh script setiap 5 detik -->
      <meta http-equiv="refresh" content="10; url=<?php $_SERVER['PHP_SELF']; ?>">
      </head>
      
      <body>
      
      <?php
      mysql_connect("localhost", "root","");
      mysql_select_db("dbmahasiswa");
      
      $query = "SELECT * FROM inbox WHERE Processed = 'false'";// query untuk membaca SMS yang belum diproses
      $hasil = mysql_query($query);
      while ($data = mysql_fetch_array($hasil)){
      	$id = $data['ID'];
      	$noPengirim = $data['SenderNumber'];
      	$msg = strtoupper($data['TextDecoded']);
      	$pecah = explode(" ",$msg );
      
      	if($pecah[0]!="UAS"){// jika kata terdepan dari SMS adalah 'NILAI' maka cari nilai Kalkulus
      
          }
      
      	//jika format SMS: NILAI<spasi>MATAKULIAH<spasi>NIM
      	if ($pecah[0] == "UAS"){
              $kode = $pecah[1];
      		$nim = $pecah[2];
      	 	$query2 = "SELECT nilai FROM nilai WHERE nim = '$nim' and kode_matakuliah='$kode' and kategori='UAS'";
          	$hasil2 = mysql_query($query2);
      		if (mysql_num_rows($hasil2) == 0) $reply = "NIM/ KODE matakuliah tidak ditemukan periksa kembali NIM dan KODE matakuliah anda";
      		else{
      			$data2 = mysql_fetch_array($hasil2);
      			$nilai = $data2['nilai'];
      			$reply = "NILAI MAHASISWA DENGAN NIM ".$nim." PADA MATAKULIAH ".$kode." adalah ".$nilai;
      		}
      		$query3 = "INSERT INTO outbox(DestinationNumber, TextDecoded) VALUES ('$noPengirim', '$reply')";
      		$hasil3 = mysql_query($query3);
      		$query3 = "UPDATE inbox SET Processed = 'true' WHERE ID = '$id'";
      		$hasil3 = mysql_query($query3);
      	}
      
      	if($pecah[0] == "INFO"){
      		$info= $pecah[1];
      		$data="";
      	 	$query2 = "SELECT * FROM informasi where info='$info'";
          	$hasil2 = mysql_query($query2);
      		if(mysql_num_rows($hasil2) == 0) $reply = "maaf foramat anda salah coba cek kembali (INFO<sepasi>info yang di inginkan)";
      		else{
      			$data3 = mysql_fetch_array($hasil2);
      			$tanggal = $data3["tanggal"];
      			$keterangan = $data3["keterangan"];
      			$data = "$tanggal ($keterangan)";
      			$reply = "Informasi ".$info." :".$data;
      		}
      		$query3 = "INSERT INTO outbox(DestinationNumber, TextDecoded) VALUES ('$noPengirim', '$reply')";
      		$hasil3 = mysql_query($query3);
      		$query3 = "UPDATE inbox SET Processed = 'true' WHERE ID = '$id'";
      		$hasil3 = mysql_query($query3);
      	}
      
      	if($pecah[0] == "INFORMASI"){//INFO
      		$info="";
      		$hasil = mysql_query("SELECT distinct(info) FROM informasi");
      	 	if($hasil){
      			while($d=mysql_fetch_array($hasil)){
      				$info=$info." ".$d["info"];
      			}
      		}else{$info="INFORMASI TIDAK ADA";}
      		$reply = "Layanan INFO AKADEMIK adalah ".$info;
      		$q = "INSERT INTO outbox(DestinationNumber, TextDecoded) VALUES ('$noPengirim', '$reply')";
      		$q = mysql_query($q);
      		$q2 = mysql_query("UPDATE inbox SET Processed = 'true' WHERE ID = '$id'");
      		$q2 = mysql_query($q2);
       	}
      }
      ?>
      
      </body>
      </html>
      
  6. Mas maksud dari script -> $udh = “050003A7”.sprintf(“%02s”, $jmlSMS).sprintf(“%02s”, $j); apa ya mass??? saya sedikit bingung???

  7. kok saya gak bisa jalan yah disaat masuk k outbox trs di proses k sentitems..knpa gak maw ngrim dia…cos saya include ke php yg ngrim cma 1 nomer saja…
    script nya seperti ini

    KIRIM SMS

     

     

    nomorHP
    :
    <input name="DestinationNumber" type="text" size=70 maxlength=50 value="”>

    SMS
    :

     
     

    <input type="hidden" name="modeofform" value="”>
    <?php if(isset($UpdatedInDB))
    echo "”;

    // outbox.form.php
    ?>

    • dari kode yang kamu sertakan, itu penanganan if nya gag dilanjutin ya???
      kalo keputus kyk gitu, apa bisa handle if nya diproses?
      trus gimana caranya script dari saya dipanggil, mohon diperjelas …

      bisa gunakan bbcode

      [sourcecode="php"]source taruh sini[/sourcecode]

      biar bisa dilihat dengan gamapng source code mu

      thanks

      • <?
        $KIRIM = $_POST[KIRIM];
        
        if($KIRIM){
        
        	$DestinationNumber=addslashes(strip_tags($_POST['DestinationNumber']));	
        	$TextDecoded=addslashes(strip_tags($_POST['TextDecoded'])); 
        		$sql="INSERT INTO outbox (
        `UpdatedInDB` ,
        `InsertIntoDB` ,
        `SendingDateTime` ,
        `Text` ,
        `DestinationNumber` ,
        `Coding` ,
        `UDH` ,
        `Class` ,
        `TextDecoded` ,
        `ID` ,
        `MultiPart` ,
        `RelativeValidity` ,
        `SenderID` ,
        `SendingTimeOut` ,
        `DeliveryReport` ,
        `CreatorID`
        )
        VALUES (
        NOW() , NOW(), '0000-00-00 00:00:00', NULL , '$DestinationNumber', 'Default_No_Compression', NULL , '-1', '$TextDecoded', NULL , 'false', '-1', NULL , '0000-00-00 00:00:00', 'default', ''
        )
        	";
        
                mysql_query($sql); 
        
            
            echo "SMS MASUK KE OUTBOX";
        	exit;
        }
        ?>
        <BODY>
        <fieldset>
        
        <FORM name="catatanForm" method="post" enctype="multipart-form-data"
        onsubmit="return CheckForm(this)"
        action="">
        <TABLE border=0>
        
        <TR>
        <TD colspan="3" class="headgbr">KIRIM SMS </TD>
        </TR>
        <TR>
        <TD>&nbsp;</TD>
        <TD></TD>
        <TD>&nbsp;</TD>
        </TR>
        
        <TR>
          <TD>nomorHP</TD>
          <TD>:</TD>
          <TD> <input name="DestinationNumber" type="text" size=70 maxlength=50 value="<?php echo @$DestinationNumber; ?>"> </TD>
        </TR>
        <TR>
          <TD>DestinationNumber</TD>
          <TD>:</TD>
          <TD> <input name="DestinationNumber" type="text" size=70 maxlength=50 value="<?php echo @$DestinationNumber; ?>"> </TD>
        </TR>
        <TR>
            <TD>SMS</TD>
          <TD>:</TD>
          <TD><textarea name="TextDecoded" cols="40" rows="4"><?php echo @$TextDecoded; ?></textarea></TD>
        </TR>
        
        <TR>
          <TD height="26">&nbsp;</TD>
          <TD>&nbsp;</TD>
          <TD><input type=Submit name="KIRIM" value="KIRIM"></TD>
        </TR>
        </TABLE>
        <input type="hidden" name="modeofform" value="<?php echo $modeofform;?>">
        <?php if(isset($UpdatedInDB))
        echo "<input type='hidden' name='UpdatedInDB' value='$UpdatedInDB'>";
        
        // outbox.form.php
        ?>
        
        </FORM>
        </fieldset>
        
        </BODY>
        </HTML>
        

        nah sourcdenya kaya gini….mohon pencerahanya.

  8. duh maaf itu tadi salah paste ,,,, hmmmm,,,, udah saya coba tapi masi blm jalan,,, parameter $nomorHP, $pesanSMS mesti disamakan dengan yg ad di script kirim sms y k2? hmmmm,,, jadi fungsi script diatas memproses file yg telah ada di table outbox kan?
    maaf k2 banyak tanya,,, terima kasih sebelum nya

    • ndak harus sama kok,, yang penting pas pemanggilan fungsi ada 2 parameter yang ikut,,, misalnya gini :

      // kalo lebih dari satu nomor
      sendSMS("085730419326,085730419327","Ini Isi Pesan SMS-nya");
      
      // kalo satu nomor aja
      sendSMS("085730419326","Ini Isi Pesan SMS-nya");
      

      kalo menurutku seh bukan memproses table outbox, tapi mengirimkan sms ke table outbox, nanti gammu -nya memproses ke table sentitems

      • makasih kak,, dah berhasil🙂 ,,, hmmmm kak boleh tanya lagi gak,,, maaf ne kalo ngerepotin,, saya lagi cari2 referensi bwt TA,,, autoreply saya masih ad kurang nya,, gini kak,, ,, keyword yg saya gunakan yakni REG NAMA,, , nah kendala nya gini,, misalnya sms yg masuk REG AIDIL dia bisa reply dari database tapi kalo REG RIZAL MANDA dia gak bisa reply padahal nama tersebut ada didatabase,,, mungkin dipemecahan kata nya,,, ,udah saya otak-atik explode ny tapi tetep gak bisa kak,,, maklum saya newbie php🙂
        $sms_content=strtoupper($data[“TextDecoded”]); $array=explode(‘ ‘, $sms_content);
        terima kasih sebelumnya kak

        • iya udah bner tuh script kmu,,,
          tambahin checking habis explode itu,,, misal gini

          <?php
          $sms_content=strtoupper($data["TextDecoded"]);
          $array=explode(" ", $sms_content);
          if($array[0]=="REG"){
              if($array[1]=="AIDIL"){
                  sendSMS("000","Pesan");
              }
          }
          ?>
          

Mari Berdiskusi Bersama

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s