Aplikasi SMS Gateway dengan Android dan NG Framework

Bagikan jika Anda sukai postingan ini!

SMS Gateway
SMS Gateway

Sudah tahu dong pengertian SMS Gateway? Jadi saya tidak perlu membahasnya lagi. Nah, seiring berkembangnya teknologi di masa sekarang ini, dengan bermunculan ponsel cerdas seperti ponsel dengan sistem operasi Android, membuat SMS Gateway tidak lagi sulit. Jika dulu Anda harus mempunyai modem khusus agar dapat menerima dan mengirim SMS, saat ini Anda bisa menggunakan ponsel Android Anda sebagai media penerimaan dan pengiriman SMS tersebut. Walaupun sebenarnya SMS Gateway tidak lagi efektif pada masa sekarang. Karena umumnya para pelaku usaha tidak lagi menggunakan SMS untuk mengirim informasi kepada para pelanggan, namun cukup menggunakan fitur notifikasi yang tersedia pada ponsel Android.

Tetapi, bagi pelaku usaha yang tidak mempunyai aplikasi Android yang cukup keren untuk mengirimkan notifikasi ke pelanggan, penggunaan SMS Gateway ini masih bisa dijadikan pilihan sementara.

Berikut ini saya akan membuat sebuah aplikasi Android sebagai perantara SMS Gateway untuk mengirim SMS, serta memanfaatkan NG Framework sebagai web service untuk mendapatkan konten SMS yang akan dikirimkan. Kita akan mulai dari pembuatan web service dengan NG Framework lebih dulu. Sebelum memulai, ada baiknya Anda membaca lebih dulu artikel sebelumnya: Membuat Web Service dengan NG Framework.

Mari siapkan folder baru di server lokal Anda, beri nama dengan sms-gateway. Kemudian siapkan kode sumber NG Framework modifikasinya.

Ubah skrip .htaccess

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /sms-gateway
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
</IfModule>

Ubah berkas config.ini di alamat \apps\Config hanya pada bagian SUB_DIR saja.

SUB_DIR = "sms-gateway";

Buat sebuah database baru pada server Anda, dengan nama smsgateway. Kemudian tambahkan sebuah tabel pada database Anda dengan nama outbox dengan SQL di bawah ini.

CREATE TABLE `outbox` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `receiver` varchar(20) NOT NULL,
  `message` varchar(255) NOT NULL,
  `status` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Ubah berkas database.ini di alamat \apps\Config.

[section]
dbtype = 'mysql';
port = 3306;
host = 'localhost';
dbname = 'smsgateway';
username = 'root';
password = '';
charset = 'utf8';

Sesuaikan username dan password pada database.ini dengan username dan password database Anda.

Buka alamat \apps\Model buat sebuah berkas PHP baru dengan nama Outbox.php, lengkapi kode sumbernya menjadi seperti di bawah ini.

<?php
class Outbox{
    protected $config;
    protected $session;
    protected $database;
    protected $query;
    protected $table;
    
    public function __construct() {
        $this->session = new \NG\Session;
        $this->config = \NG\Registry::get('config');
        $this->database = \NG\Registry::get('database');
        $this->query = new \NG\Query();
        $this->table = 'outbox';
    }
    
    public function insert($data){
        $database = $this->database;
        $query = $this->query;
        $table = $this->table;
        $sql = $query->insert($table, $data);
        $result = $database->query($sql);
        return $result;
    }
    
    public function update($id, $data){
        $database = $this->database;
        $query = $this->query;
        $table = $this->table;
        $sql = $query->update($table, $data)->where("id = ?", $id);
        $result = $database->query($sql);
        return $result;
    }
    
    public function delete($id){
        $database = $this->database;
        $query = $this->query;
        $table = $this->table;
        $sql = $query->delete()->from($table)->where("id = ?", $id);
        $result = $database->query($sql);
        return $result;
    }
    
    public function fetch($status = 0){
        $database = $this->database;
        $query = $this->query;
        $table = $this->table;
        if ($status == 0 || $status == 1){
            $sql = $query->select()->from($table)->where("status = ?", $status);
        } else {
            $sql = $query->select()->from($table);
        }
        $result = $database->fetchAll($sql);
        
        return $result;
    }
    
    public function get($id){
        $database = $this->database;
        $query = $this->query;
        $table = $this->table;
        $sql = $query->select()->from($table)->where("id = ?", $id);
        $result = $database->fetchRow($sql);
        
        return $result;
    }
    
    public function ping(){
        $database = $this->database;
        $result = $database->ping();
        return $result;
    }
}
?>

Buka berkas ApiController.php di \apps\Controller ubah kode sumbernya menjadi seperti di bawah ini.

<?php
class ApiController extends NG\Controller {
    protected $config;
    protected $cache;
    protected $session;
    protected $cookie;
    
    public function init() {
        $this->config = $this->view->config = \NG\Registry::get('config');
        $this->session = $this->view->session = new \NG\Session();
        $this->cookie = $this->view->cookie = new \NG\Cookie();
        $this->cache = $this->view->cache = new \NG\Cache();
        
        $this->view->setLayout(false);
        $this->view->setNoRender(true);
    }
    
    public function IndexAction() {
        $result = null;
        $requests = \NG\Route::getRequests();
        
        $session = $this->session;
        $cookie = $this->cookie;
        $cache = $this->cache;
        
        $param1 = '';
        $param2 = '';
        $param3 = '';
        $param4 = '';
        
        if ($requests){
            if (isset($requests['param1'])){
                $param1 = $requests['param1'];
                $param1 = urldecode($param1);
            }
            if (isset($requests['param2'])){
                $param2 = $requests['param2'];
                $param2 = urldecode($param2);
            }
            if (isset($requests['param3'])){
                $param3 = $requests['param3'];
                $param3 = urldecode($param3);
            }
            if (isset($requests['param4'])){
                $param4 = $requests['param4'];
                $param4 = urldecode($param4);
            }
            
            $outbox = new Outbox();
            
            if ($param1){
                if ($param1 == 'sms'){
                    switch($param2){
                        case 'read':
                            $status = $param3;
                            $result = $outbox->fetch($status);
                        break;
                        case 'update':
                            $id = $param3;
                            $data = array('status' => 1);
                            $result = $outbox->update($id, $data);
                        break;
                        case 'insert':
                            $receiver = $param3;
                            $message = $param4;
                            $data = array(
                                'receiver' => $receiver,
                                'message' => $message,
                                'status' => 0
                            );
                            $result = $outbox->insert($data);
                        break;
                    }
                } else if ($param1 == 'ping'){
                    $ping = $outbox->ping();
                    if ($ping) $result = 1;
                }
            }
        }
        
        if ($result){
            $print_text = json_encode($result);
            header('Content-type: application/json');
            exit($print_text);
        }
    }
}
?>

Sekarang isikan data pada tabel outbox di database. Anda bisa mengisinya manual, atau melalui web service dengan pemanggilan ApiController di atas. Sebagai contoh, jalankan tautan di bawah ini pada peramban.

http://localhost/sms-gateway/api/sms/insert/08123456789/Terima kasih telah menghubungi kami

Maka pada tabel outbox akan bertambah sebuah baris baru dengan nilai receiver: 08123456789, dan message: Terima kasih telah menghubungi kami.

Tambahkan satu atau dua lagi baris data ke dalam tabel outbox dengan cara seperti di atas. Sekarang coba jalankan tautan ini pada peramban.

http://localhost/sms-gateway/api/sms/read

Maka akan ditampilkan daftar baris data pada tabel outbox yang memiliki nilai status = 0.

Tampilan hasil pemanggilan web service
Tampilan hasil pemanggilan web service

Pembuatan web service SMS Gateway cukup sampai di sini, selanjutnya kita akan membuat aplikasi Android yang akan memanfaatkan web service yang sudah kita buat ini. Akan saya bahas pada artikel berikutnya.