Cara mengirim pesan whatsapp dengan PHP (API)

Mengirimkan pesan whatsapp dengan kode PHP untuk bisa digunakan secara otomatis sekarang bisa dilakukan dengan mudah.

Sebelumnya untuk mengirimkan invoice, notifikasi, konfirmasi dan lain-lain biasanya dilakukan melalui email.

Sekarang, mengirimkan pesan whatsapp bisa dilakukan dengan menggunakan API.

Fonnte menyediakan API yang sangat mudah digunakan untuk mengirimkan pesan whatsapp melalui API.

Dalam tutorial ini, akan ditunjukkan bagaimana cara mengirimkan pesan whatsapp dengan PHP melalui API fonnte.

Tutorial ini memerlukan pemahaman dasar tentang bahasa pemrograman PHP. Kalau kamu belum memiliki pengalaman menuliskan kode atau tidak tahu harus melakukan apa, sebaiknya pertimbangkan untuk menggunakan jasa developer.

Prasyarat

Sebelum menggunakan API ini, kamu harus mendaftar kalau belum punya akun, kemudian login dan tambah device.

Copy token (API key) yang ada di menu device untuk digunakan sebagai authorization saat mengirimkan API.

Lalu, konekkan device sebelum mulai mengirimkan pesan.

Gunakan libcurl terbaru dengan versi PHP diatas 7.1 sebagaimana diperlukan dalam sebagai requirement oleh PHP.

Referensi API lengkap ada di halaman dokumentasi fonnte dan postman.

Satu nomor

Untuk menggunakan API fonnte, cukup copy kode dibawah ini.

Buat 1 file, misalkan send.php di localhost maupun di server (localhost dengan xampp sebagai contoh).

Lalu paste kode dibawah ini

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://api.fonnte.com/send',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array(
'target' => '08123456789',
'message' => 'test message', 
'countryCode' => '62', //optional
),
  CURLOPT_HTTPHEADER => array(
    'Authorization: TOKEN' //change TOKEN to your actual token
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Jangan lupa untuk mengupdate token, target dan message dari kode diatas, kemudian jalankan file send.php di browser.

Dan selamat! kamu barusaja mengirimkan pesan pertama menggunakan API.

Banyak nomor/broadcast

Kalau ada keperluan untuk mengirimkan pesan ke beberapa nomor dalam satu waktu, JANGAN PAKAI LOOP!

Lalu, bagaimana caranya kirim pesan broadcast ke banyak nomor tanpa pakai loop?

Jangan khawatir, fonnte sudah sediakan caranya.

Cuma perlu tambah koma untuk masing2 nomor.

Contoh : 081xxxxx,082xxxxx.

Bisa lihat ke kode dibawah ini

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://api.fonnte.com/send',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array(
'target' => '08123456789,08987654321',
'message' => 'test message',
'delay' => '2', 
'countryCode' => '62', //optional
),
  CURLOPT_HTTPHEADER => array(
    'Authorization: TOKEN' //change TOKEN to your actual token
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Jadi hanya memisahkan setiap nomor dengan koma tanpa perlu loop.

Menambahkan ‘delay’ juga sangat disarankan. angka yanng diinput dalam satuan detik.

Contoh diatas akan mengirimkan pesan ke 628123456789 saat itu juga lalu menunggu 2 detik baru mengirim ke nomor 628123456789.

Pesan schedule

Pengiriman pesan whatsapp juga bisa dilakukan dengan jadwal tertentu.

Caranya dengan menambahkan parameter ‘schedule’ dengan value unix timestamp sampai ke detik, tidak sampai milidetik

Pass the parameter ‘schedule’ with value of unix timestamp down to second, not to milisecond.

Contoh : 1667433600 untuk 3 November 2022 12:00:00 AM (GMT +0)

Untuk waktu indonesia, jadwal diatas akan dijalankan pada :

  • WIB (GMT +7) : 3 November 2022 7:00:00 AM
  • WITA (GMT +8) : 3 November 2022 8:00:00 AM
  • WIT (GMT +9) : 3 November 2022 9:00:00 AM

Silakan copy code dibawah ini

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://api.fonnte.com/send',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array(
'target' => '08123456789',
'message' => 'test message', 
'schedule' => '1667433600', 
'countryCode' => '62', //optional
),
  CURLOPT_HTTPHEADER => array(
    'Authorization: TOKEN' //change TOKEN to your actual token
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Pesannya akan terkirim pada jadwal yang ditentukan.

Pesan dinamis

Setelah sukses mengirimkan pesan whatsapp, lalu ada pertanyaan lain.

“Gimana caranya pesannya ini bisa personal?”

Tentu saja bisa dilakukan!

Opsi pertama adalah dengan tidak menggunakan fitur dari API fonnte (not recommended).

  • Mencari data di database
  • Simpan sebagai variabel
  • Membuat loop
  • Kirim lewat API secara individu

Kamu sedang membuat n request ke fonnte.

Meskipun fonnte bisa menangani, tapi ada solusi yang lebih baik!

Opsi kedua adalah dengan menggunakan fitur dari API fonnte (highly recommended).

  • Mencari data di database
  • Simpan sebagai variabel
  • Membuat loop
  • Mengirimkan melalui API sekaligus

Untuk mengirim pesan dinamis, kamu bisa menggunakan variabel di fonnte.

Variabel bisa dibuat dengan pemisah pipe (|).

Variabel bisa ditambahkan di ‘target’, and kemudian bisa digunakan di ‘message’

Berikut kodenya

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://api.fonnte.com/send',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array(
'target' => '08123456789|Fonnte|Admin,08987654321|Lily|Client',
'message' => 'test message to {name} as {var1}', 
'delay' => '2', 
'countryCode' => '62', //optional
),
  CURLOPT_HTTPHEADER => array(
    'Authorization: TOKEN' //change TOKEN to your actual token
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Kode diatas akan mengirimkan pesan ke 2 nomor dengan delay 2 detik untuk setiap nomor

  • 628123456789 : test message to Fonnte as Admin
  • 628987654321 : test message to Lily as Client

Variabel pertama akan menggunakan {name} dan sisanya akan menggunakan {var1},{var2},… dengan jumlah variabel tidak terbatas.

Dengan demikian, kamu bisa mengirimkan pesan whatsapp yang dinamis di setiap pesannya.

Kamu bisa pelajari lebih lanjut tentang variable.

Pesan media

Untuk mengirimkan file/attachment, fonnte menyediakan 2 opsi, yaitu melalui url maupun melalui binary.

Parameter url digunakan untuk mengirim file menggunakan url dan parameter file digunakan untuk mengirim file menggunakan binary.

Via URL

Bisakah mengirimkan pesan dengan gambar? atau video? file seperti pdf, excel, docs? dan audio?

Tentu saja!

Code ini memerlukan paket dengan all feature untuk bisa mengirimkan pesan media.

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://api.fonnte.com/send',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array(
'target' => '08123456789',
'message' => 'test message', 
'url' => 'https://md.fonnte.com/images/logo-dashboard.png', 
'filename' => 'my-file.pdf', //optional, only works on file and audio
'countryCode' => '62', //optional
),
  CURLOPT_HTTPHEADER => array(
    'Authorization: TOKEN' //change TOKEN to your actual token
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Kamu hanya perlu menambahkan parameter ‘url ‘ dan ‘filename ‘ (optional).

Local file

Mengirimkan file dari komputer lokal juga memungkinkan menggunakan parameter file.

Path menuju filenya harus benar. jika salah akan ada error : operation aborted by callback.

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://api.fonnte.com/send',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array(
'target' => '08123456789',
'message' => 'test message', 
'file' => new CURLFile("localfile.png"), 
'filename' => 'my-file.pdf', //optional, only works on file and audio
'countryCode' => '62', //optional
),
  CURLOPT_HTTPHEADER => array(
    'Authorization: TOKEN' //change TOKEN to your actual token
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Dengan kode ini, kamu bisa mengirimkan file dari komputer lokal tanpa harus upload terlebih dahulu.

Form uploads

Langsung dari upload file juga bisa.

Biasanya dibutuhkan untuk custom form yang usernya upload filenya sendiri.

API ini sangat berguna karena kamu tidak perlu save dulu filenya ke lokal/upload ke hosting.

<?php
//logic
$file = $_FILES["file"]["tmp_name"]; //change "file" with your actual file input name tag
$name = $_FILES["file"]["name"];
$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://api.fonnte.com/send',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array(
'target' => '08123456789',
'message' => 'test message', 
'file' => new CURLFile($file, '', $name), 
'filename' => 'my-file.pdf', //optional, only works on file and audio
'countryCode' => '62', //optional
),
  CURLOPT_HTTPHEADER => array(
    'Authorization: TOKEN' //change TOKEN to your actual token
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Kamu bisa menggunakan salah satu dari 3 API diatas yang disesuaikan dengan kebutuhan kamu.

3 tipe pesan berikutnya akan menambahkan interaktivitas pada pesan whatsapp (deprecated).

Pesan button (Deprecated)

Apa itu pesan button?

Pesan button adalah pesan biasa yang ditambahkan pilihan yang dapat dipilih oleh lawan bicara.

Pesan ini lebih interaktif dibandingkan pesan biasa yang mana kita mengharapkan user untuk membalas dengan keyword tertentu.

Untuk mengirimkan pesan ini. kamu perlu membuat multidimensional array kemudian melakukan encode menjadi sebuah json.

Note : Button max 3

Berikut kodenya

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://api.fonnte.com/send',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array(
'target' => '08123456789',
'url' => 'https://md.fonnte.com/images/logo-dashboard.png', 
'buttonJSON' => '{"message":"fonnte button message","footer":"fonnte footer message","buttons":[{"id":"mybutton1","message":"hello fonnte"},{"id":"mybutton2","message":"fonnte pricing"},{"id":"mybutton3","message":"tutorial fonnte"}]}', 
'countryCode' => '62', //optional
),
  CURLOPT_HTTPHEADER => array(
    'Authorization: TOKEN' //change TOKEN to your actual token
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Parameter url ini optional jika ingin mengirimkan gambar/video.

Selain itu tidak bisa.

Pesan template (Deprecated)

Pesan template jauh lebih interaktif dibandingkan dengan pesan button biasa.

Sayangnya, API kami belum mendukung pengiriman ke IOS/Iphone.

Jadi penggunaan API ini hanya support ke wa web dan android.

Pesan template ini support untuk link dan telepon.

Button terakhir hanya button biasa

Note : max 3 buttons

Jadi, bagaimana mengirimkannya?

Berikut kodenya

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://api.fonnte.com/send',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array(
'target' => '08123456789',
'templateJSON' => '{"message":"fonnte template message","footer":"fonnte footer message","buttons":[{"message":"fonnte","url":"https://fonnte.com"},{"message":"call me","tel":"6282227097005"},{"id":"mybutton1","message":"hello fonnte"}]}', 
'countryCode' => '62', //optional
),
  CURLOPT_HTTPHEADER => array(
    'Authorization: TOKEN' //change TOKEN to your actual token
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Pesan template tidak mendukung pengiriman dengan media.

Jadi pesan ini hanya bisa berisi text.

Pesan list (Deprecated)

Pesan list adalah variasi dari pesan button yang bisa menambahkan banyak pilihan, tidak hanya 3.

Ketika fonnte’s package di klik, akan muncul popup seperti dibawah ini

Dengan demikian, kamu bisa menambahkan banyak pilihan ke lawan bicara kamu.

Dan bahkan pesan list ini dapat dikelompokkan kedalam group dan bisa ditambahkan deskripsi di setiap pilihannya untuk memudahkan lawan bicara dalam memilih.

Berikut kodenya

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://api.fonnte.com/send',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array(
'target' => '08123456789',
'listJSON' => '{"message":"fonnte list message","footer":"fonnte footer message","buttonTitle":"fonnte's packages","title":"fonnte title","buttons":[{"title":"text only","list":[{"message":"regular","footer":"10k messsages/month","id":"list-1"},{"message":"regular pro","footer":"25k messsages/month","id":"list-2"},{"message":"master","footer":"unlimited messsages/month","id":"list-3"}]},{"title":"all feature","list":[{"message":"super","footer":"10k messsages/month","id":"list-4"},{"message":"advanced","footer":"25k messsages/month","id":"list-5"},{"message":"ultra","footer":"unlimited messsages/month","id":"list-6"}]}]}', 
'countryCode' => '62', //optional
),
  CURLOPT_HTTPHEADER => array(
    'Authorization: TOKEN' //change TOKEN to your actual token
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Kamu tinggal mengirimkannya dan menunggu balasannya

Lokasi

Kamu bisa mengirimkan lokasi menggunakan latitude dan longitude lokasinya.

Format dari value nya harus : latitude,longitude

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://api.fonnte.com/send',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array(
'target' => '08123456789',
'location' => '-7.983908, 112.621391',

),
  CURLOPT_HTTPHEADER => array(
    'Authorization: TOKEN' //change TOKEN to your actual token
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Kamu bisa mengganti lokasinya sesuai dengan lokasi yang mau kamu kirimkan.

Akhir kata

Fonnte menyediakan banyak konfigurasi untuk membuat API ini sefleksibel mungkin namun tetap mudah digunakan.

Kalau kamu bukan programer atau bingung harus melakukan apa, saran saya coba hire programer atau cukup gunakan fitur yang disediakan fonnte di dashboard fonnte untuk mengirim pesan whatsapp.

Kami sudah membuatnya selengkap mungkin di dashboard fonnte.

Pada akhirnya, pesan-pesan diatas tidak hanya ditujukan untuk dikirim saja, namun perlu balasan juga.

Pembahasan mengenai membuat whatsapp bot akan dibahas pada halaman cara membuat whatsapp bot.

31 thoughts on “Cara mengirim pesan whatsapp dengan PHP (API)”

  1. mau tanya min.. pas udah berhasil ngirim pesan pakai api fonnte ini tapi kok gak muncul notifikasi ya kalau ada pesan masuk. padahal pesan yang di kirim berhasil masuk ke chat cuma gak ada notifikasinya.

    Reply

Leave a Reply to fonnte Cancel reply