Belajar Membuat Aplikasi Sms Gateway Pake Internet Indihome

SMS gateway memungkinkan kita bakal utus dan mengakui SMS untuk berbagai keperluan sreg aplikasi, misal cak bagi reminder, notifikasi, serta konfirmasi.

Sekarang saya menggembangkan sebuah package SMS Gateway untuk Laravel. Package ini diharapkan untuk kontributif berbagai vendor. Buat waktu ini, doang mendukung SMSGateway.me dan Zenziva. Sebaik-baiknya dapat dibaca pada tautan di radiks.

SMS gateway

ialah sebuah sistem aplikasi yang digunakan bagi menugasi juga menerima

SMS
, dan biasanya digunakan pada permintaan bisnis, baik untuk kekuatan broadcast promosi (Bulk

SMS
), servis informasi terhadap pengguna, penyebaran content produk/jasa dan lain tidak.

Galibnya, terserah dua cara yang digunakan untuk membangun SMS gateway.

  • Menggunakan perangkat tambahan konkret modem dan tuntutan pendukung begitu juga Gammu.
  • Menggunakan layanan berbayar pihak ketiga seperti mana Emir SMS atau Zenziva misalnya.

Sendirisendiri cara di atas n kepunyaan kekeringan dan kurnia.

Seperti perangkat suplemen modem misalnya. Kita harus menusukkan modem tersebut plong sebuah PC atau laptop sejauh 24 jam mumbung (alias selama SMS akan digunakan). Ini seperti kita membangun server mini bikin sebuah task khusus. Kelebihannya, kita bisa mengontrol SMS masuk maupun keluar sesuka hati.

Bukan pula dengan layanan menggunakan pihak ketiga. Prinsip ini terbilang mudah digunakan. Kita cukup menugasi SMS secara programatically ke server mereka, sisanya sistem dan perkakas mereka yang akan mengapalkan SMS ke penerima. Kekurangannya, harga per SMS-nya jauh makin mahal dibandign SMS reguler. Selain itu, untuk sampul SMS paling kecil murah, hanya bisa digunakan untuk mengirim SMS, tidak bisa menerima SMS. Nomornya pun sedikit dan (kebanyakan) berkarakter acak. Bisa sih menggunakan momor premium, namun harganya tentu kembali tidak murah.

Kini, ada alternatif untuk membangun SMS gateway dengan mudah dan murah. Ialah memperalat layanan SMSGateway.me.

Segala Itu SMSGateway.me?

SMSGateway.me memungkinkan kita buat utus dan menerima SMS secara programmatically (terbit aplikasi) dan menjadikan smartphone Android kita sebagai perangkatnya.

Syaratnya tidak ribet, cukup instal aplikasi SMSGateway.me di Android, pastikan renyut bakal mengirim SMS mencukupi, serta smartphone dalam keadaan menyala saat digunakan.

Silsilah kerja untuk mengirim SMS yaitu sebagai berikut:

  • Aplikasi mengirim SMS secara programmatically ke peladen SMSGateway.me.
  • Data diterima Server.
  • Petisi merakut server SMSGateway.me untuk mendapatkan antrian SMS.
  • Jika ada antrian, tuntutan utus SMS langsung melalui smartphone.

Hal yang sejajar juga bermain untuk galur kerja untuk menerima SMS.

  • Permintaan melakukan permintaaan ke server SMSGateway.me.
  • Permintaan diteruskan ke tuntutan SMSGateway.derita di Android.
  • Jika ada SMS masuk, mengapalkan SMS tersebut ke peladen SMSGateway.me.
  • Server SMSGateway.me menimbangi penampikan positif data SMS masuk.

Using our free service you can turn your Android phone into a free SMS Gateway. Allowing you to both send and receive SMS messages programmatically using our restful API.

Mempersiapkan SMS Gateway

Daftar bahkan dahulu pada layanan SMSGateway.me, bakal mendapatkan email (username) dan password. Mati, layanan ini gratis — sekurang-kurangnya bagi sampai saat ini — .

Instal aplikasi SMSGateway.me lega smartphone Android yang ingin digunakan bagaikan SMS server. Sesudah aplikasi diinstal, login ke aplikasi SMSGateway.me di Android dengan email dan password yang sama lega detik kita mendaftar puas versi web.

Dengan login ke dalam aplikasi Android, kita akan mendaftarkan dan mendapatkan makrifat plonco konkret Device ID. Device ID ini nantinya akan camar digunakan untuk autentikasi bersamaan dengan email & password kapan utus SMS berbunga aplikasi.

Sebagai publikasi tambahan, device yang didaftarkan privat layanan dapat lebih dari satu. Hal tersebut dapat dilakukan dengan cara menginstal aplikasi SMSGateway.me bakal Android sreg smartphone yang berbeda.

Mempersiapkan Aplikasi Berbasis Laravel

Penjelasan bagi membangun petisi saja saya tulis secara garis besar. Saya anggap kalian mutakadim familiar dengan Laravel beserta fitur di dalamnya.

Migrations

Buat sebuah tabulasi dengan nama
messages
memperalat migrations. Pastikan konfigurasi basisdata sudah diatur sebelumnya.

        php artisan make:migration create_messages_table --create=messages
      

Tambahkan beberapa ruangan pada tabulasi
messages.

        /**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('messages', function (Blueprint $table) {
$table->increments('id');

// contact information
$table->integer('contact_id');
$table->string('contact_number', 30);
$table->string('contact_name', 100);

// message information
$table->string('device_id', 30);
$table->text('message');
$table->enum('type', ['inbox', 'outbox', 'draft'])->default('outbox');
$table->dateTime('expired_at');
$table->timestamps();

$table->index(['contact_name', 'contact_number']);
});
}

Sejatinya, internal proses pengapalan SMS, tabel ini tidak harus digunakan. Namun, bukan ada salahnya kita menyimpan pesan keluar sebagi log. Tabel ini nantinya akan sangat berguna momen digunakan untuk menggudangkan pesan masuk dari smartphone.

Eksekusi migrations di atas dengan perintah berikut.

        php artisan migrate
      

Komplet

Migrations dan tabel
messages
sudah dibuat, selanjutnya adalah membuat abstrak.

        php artisan make:teladan Message
      

Adapun lokasi gabung teoretis tersebut ada di
app/Message.php.

Tambahkan ruangan
expired_at
ke dalam magic property
$dates
mudahmudahan biji kembaliannya positif objek Carbon layaknya kolom
created_at
dan
updated_at.

        <?php

namespace App;

use Illuminate\Database\Eloquent\Pola;

class Message extends Model
{
/**
* @var array
*/
protected $dates = ['expired_at'];
}

Config

Lakukan config yunior dengan menambahkan jaras
smsgateway.php
pada direktori
config. Config ini nanti berisi pemberitaan credential sebagaimana email, password, dan device ID yang akan digunakan pada controller untuk mengirim dan menerima SMS melintasi Api.

        <?php

return [
'email' => env('SMS_EMAIL', '[email protected]'), // insert your email here
'password' => env('SMS_PASSWORD', ''), // insert your password here
'device' => env('SMS_DEVICE', ''), // insert your device ID here
];

Pada config di atas, saya menggunakan kelebihan
env()
yang memungkinkan kita menambahkan dan mengatur nilainya bermula berkas
.env.

Validasi dengan Form Request

Agar controller bertambah genting, lakukan validasinya kita menggunakan form request yang dapat dibuat melalui
artisan.

        php artisan make:request Message/ValidationRequest
      

Adapun isi lengkapnya yakni sebagai berikut.

        <?php

namespace App\Http\Requests\Message;

use Illuminate\Foundation\Http\FormRequest;

class ValidationRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}

/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'number' => 'required|max:30',
'name' => 'required|string|max:50',
'message' => 'required',
];
}
}

Controller

Untuk controller hijau dengan logo
MessageController
memperalat
artisan.

        php artisan make:controller MessageController
        // untuk mendapatkan layout default berbasis bootstrap
        php artisan make:auth
      

Di dalam controller ini, kita akan menambahkan dua buah method, yaitu
form()
dan
send(). Nan mana, method
form()
berfungsi untuk menampilkan perolehan nomor telepon tujuan, logo, serta wanti-wanti yang akan dikirim. Sedangkan method
send()
berfungsi untuk mengirim SMS mengunakan SMSGateway.me.

Berikut isi class
MessageController.

        <?php

namespace App\Http\Controllers;

use App\Http\Requests\Message\ValidationRequest;
use App\Message;

/**
* @author Yugo <[email protected]>
* @copyright Laravel.web.id - 2022
*/
class MessageController extends Controller
{
/**
* Show form for send messae
*/
public function form()
{
return view('contents.messages.form');
}

/**
* @param ValidationRequest $request
*/
public function send(ValidationRequest $request)
{
abort_if(!function_exists('curl_init'), 400, 'CURL is titinada installed.');

$curl = curl_init('http://smsgateway.berpenyakitan/jago merah/v3/messages/send');

curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, [
'email' => config('smsgateway.email'),
'password' => config('smsgateway.password'),
'device' => config('smsgateway.device'),
'number' => $request->number,
'name' => $request->name,
'message' => $request->message,
]);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

$response = json_decode(curl_exec($curl));

curl_close($curl);

if ($response->success === true) {
if (!empty($response->result->fails)) {
\Log::debug($response->result->fails);
} else {
foreach ($response->result->success as $success) {
$messages[] = [
'type' => 'outbox',
'contact_id' => $success->contact->id,
'contact_name' => $success->contact->name,
'contact_number' => $success->contact->number,
'device_id' => $success->device_id,
'message' => $success->message,
'expired_at' => \Carbon\Carbon::now()->timestamp($success->expires_at),
'created_at' => \Carbon\Carbon::now(),
'updated_at' => \Carbon\Carbon::now(),
];
}

Message::insert($messages);

return redirect()
->route('message.form')
->withSuccess('Message has been sent successfully.');
}
} else {
\Log::debug(json_encode($response->errors));
}

return redirect()
->back()
->withError('Failed to send message.');
}
}

PHP supports libcurl, a library created by Daniel Stenberg, that allows you to connect and communicate to many different types of servers with many different types of protocols. libcurl currently supports the http, https, ftp, gopher, telnet, dict, file, and ldap protocols. libcurl also supports HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading (this can also be done with PHP’s ftp extension), HTTP form based upload, proxies, cookies, and user+password authentication.

Sedikit penjelasan. Internal method
send()
saya menggunakan librari cURL untuk utus data ke server SMSGateway.berpenyakitan. Adapun method-nya seorang berupa POST dengan isi data nomor telepon, nama, dan wanti-wanti.

Response berpokok Jago merah SMSGateway.derita diproses kembali bakal kemudian disimpan ke dalam tabel
messages
menggunakan model yang telah dibuat sebelumnya.

Contoh response data ketika berhasil.

        {
"success": true,
"result": {
"success": [
{
"id": "308",
"device_id": "4",
"message": "hello world!",
"status": "pending",
"send_at": "1414624856",
"queued_at": "0",
"sent_at": "0",
"delivered_at": "0",
"expires_at": "1414634856",
"canceled_at": "0",
"failed_at": "0",
"received_at": "0",
"error": "None",
"created_at": "1414624856",
"contact": {
"id": "14",
"name": "Phyllis Turner",
"number": "+447791064713"
}
}
],
"fails": [
]
}
}

SMSgateway.me sekali lagi menyediakan librari PHP siap pakai untuk memudahkan privat mengirim dan mencekit data dari server mereka. Librarinya koteng dapat diunduh plong tautan berikut smsgateway.me/sms-api-libraries/sms-gateway-me-php.zip.

Form

Buat berkas baru dengan nama
form.blade.php
pada direktori
resources/views/contents/messages. Salin template di bawah untuk membuat form kirim SMS. Kalau teradat, dimodifikasi sedemkian rupa agar kian nyaman kerumahtanggaan penggunaan.

        @extends('layouts.app')

@section('content')
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-default">
<div class="panel-heading">{{ $title or 'Send Message' }}</div>
<div class="panel-body">

@if (session()->has('error'))
<div class="alert alert-danger">{{ session('error') }}</div>
@endif

@if (session()->has('success'))
<div class="alert alert-success">{{ session('success') }}</div>
@endif

<form class="form-mengufuk" role="form" method="POST" action="{{ route('message.send') }}">
{{ csrf_field() }}
{{ method_field('post') }}

<div class="form-group{{ $errors->has('email') ? ' has-error' : '' }}">
<label for="email" class="col-md-4 control-label">Recipient Number</label>

<div class="col-md-6">
<input id="number" type="text" class="form-control" name="number" value="{{ old('email') }}" autofocus>

@if ($errors->has('number'))
<span class="help-block">
<strong>{{ $errors->first('number') }}</strong>
</span>
@endif
</div>
</div>

<div class="form-group{{ $errors->has('name') ? ' has-error' : '' }}">
<label for="name" class="col-md-4 control-segel">Name</segel>

<div class="col-md-6">
<input id="name" type="text" class="form-control" name="name" value="{{ old('name') }}">

@if ($errors->has('name'))
<span class="help-block">
<strong>{{ $errors->first('name') }}</strong>
</span>
@endif
</div>
</div>

<div class="form-group{{ $errors->has('message') ? ' has-error' : '' }}">
<label for="message" class="col-md-4 control-label">Message</logo>

<div class="col-md-6">
<textarea class="form-control" name="message">{{ old('message') }}</textarea>

@if ($errors->has('message'))
<span class="help-block">
<strong>{{ $errors->first('message') }}</strong>
</span>
@endif
</div>
</div>

<div class="form-group">
<div class="col-md-8 col-md-offset-4">
<button type="submit" class="btn btn-primary">
Send Message
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection

Hasil akhir form di atas dapat dilihat pada buram di bawah.

Route

MVC sudah siap, langkah terakhir adalah mendefinisikan Saudara baru sreg berkas
routes/web.php.

        Route::get('message/send', '[email protected]')->name('sms.form');
Route::post('message/send', '[email protected]')->name('sms.send');

Ada dua definisi URI yang sama , yaitu
message/send. Meskipun sedemikian itu, keduanya memiliki HTTP Verb yang farik, di mana jejer purwa menunggangi GET, sementara itu jejer berikutnya menggunakan POST.

        php artisan route:list
      

Uji Coba

Jalankan built-in server dengan perintah
php artisan serve
dan akal masuk aplikasi menerobos peramban dengan URL
http://localhost/message/send.

Isikan data nomor telepon, nama, dan pesan, kemudian klik cembul Send. Apakah SMS terkirim dan diterima dengan bersusila?

Kalau iya, Selamat! Kalian sudah berhasil membuat aplikasi tercecer menggunakan SMS gateway.

Fitur

Daftar fitur yang suka-suka sekarang dan nan akan dikembangkan.

Saat ini:

  • Kirim SMS
  • Manajemen pesan masuk dan pesan keluar

N domestik peluasan:

  • Tata kontak
  • Kirim pesan menggunakan antrian (queue) Laravel
  • Tambahkan sebagi channel notifikasi

Penali

Petisi di atas masih minus hanya berupa mengirim SMS. Padahal, dalam pengarsipan API SMSGateway.derita suka-suka banyak data yang dapat dikelola. Menginjak berbunga autentikasi, device, pesan turut/keluar, sampai dengan daftar kontak. Dokumentasi lengkapnya koteng dapat dilihat pada halaman ini.

Contoh lengkap permintaan di atas dapat dilihat pada repositori Github Laravel.web.id. Kalau pada gubahan ini belaka dicontohkan untuk menugasi SMS semata-mata, di repositori akan burung laut saya perbarui mengajuk fitur yang disediakan maka dari itu SMSGateway.me.

Kalian juga bisa berkontribusi pada repositori tersebut dengan membuat Pull Request atau melaporkan bug melalui halaman Issues. 😉

Source: https://medium.com/laravel-web-id/membangun-sms-gateway-dengan-android-smsgateway-me-dan-laravel-cd4bdaf5d2c4