Mengirim Pesan API

Kode dasar untuk mengirim pesan melalui API

<?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,08123456789|Lili|User',
'message' => 'test message to {name} as {var1}',
'url' => 'https://md.fonnte.com/images/wa-logo.png',
'filename' => 'filename',
'schedule' => 0,
'typing' => false,
'delay' => '2',
'countryCode' => '62',
'file' => new CURLFile("localfile.jpg"),
'location' => '-7.983908, 112.621391',
'followup' => 0,
),
  CURLOPT_HTTPHEADER => array(
    'Authorization: TOKEN'
  ),
));

$response = curl_exec($curl);
if (curl_errno($curl)) {
  $error_msg = curl_error($curl);
}
curl_close($curl);

if (isset($error_msg)) {
 echo $error_msg;
}
echo $response;

Anda bisa melihatnya melalui postman dan melihat contohnya di bagaimana mengirim pesan whatsapp dengan API PHP

Parameter yang tersedia :

  • target (wajib) (string) - nomor yang dituju, terpisah dengan koma, support variable. baca selengkapnya
  • message (optional) (string) - pesan text, support variable. baca selengkapnya
  • url (optional) (string) - support gambar, file, audio, video, optional. baca selengkapnya
  • filename (optional) (string) - custom filename, optional. baca selengkapnya
  • schedule (optional) (int) - unix timestamp untuk mengirim pesan sesuai jadwal. baca selengkapnya
  • delay (optional) (string) - min 0, add - to random delay contohnya: 1-10 akan menghasilkan penundaan acak antara 1 hingga 10 detik, optional. baca selengkapnya
  • countryCode (string) - ganti nol pertama dengan kode negara, default 62, setel 0 untuk menonaktifkan penggantian, opsional. baca selengkapnya
  • location (optional) (string) - format : latitude,longitude. baca selengkapnya
  • typing (optional) (bool) : indikator pengetikan, default : salah. baca selengkapnya
  • choices (optional) (string) : pilihan polling, minimal 2, maksimal 12, dipisahkan dengan koma. baca selengkapnya
  • select (optional) (string) : batas pemilihan polling, tunggal atau ganda. baca selengkapnya
  • pollname (optional) (string) : nama polling. baca selengkapnya
  • file (optional) (binary) : unggah file langsung dari local/form. baca selengkapnya
  • connectOnly (optional) (bool) : gunakan API hanya pada perangkat yang terhubung. meminta API ini akan menghasilkan status : false ketika perangkat terputus.. baca selengkapnya
  • followup (optional) (int) : tambahkan detik sebelum mengirim pesan. baca selengkapnya
  • data (optional) (string) : gabungkan semua permintaan menjadi satu permintaan. baca selengkapnya
  • sequence (optional) (bool) : permintaan harus berlaku secara berurutan. default : salah. baca selengkapnya
  • preview (optional) (bool) : tautan dalam pesan harus memiliki pratinjau. default : benar. baca selengkapnya

CATATAN:

TOKEN harus diisi dengan token Anda sendiri. lihat disini bagaimana mendapatkan token.

TOKEN bisa berlipat ganda, terpisah dengan koma, contohnya: xxxxxx,yyyyyy.

Kelipatan TOKEN akan bekerja sebagai rotator, setiap target akan dikirim oleh perangkat acak berdasarkan token yang terdaftar.

Kelipatan TOKEN hanya dapat digunakan dengan akun yang sama.

Anda tidak dapat mencantumkan beberapa TOKEN jika perangkat tersebut bukan milik akun yang sama.

Otorisasi tidak memerlukan Pembawa. Anda dapat meneruskan token secara langsung.

Pengiriman beberapa nomor dapat dilakukan dengan menambahkan koma. contohnya: 6282xxxxxx,6285xxxxxxxx,6283xxxxxxxxx.

Mengirim variabel didukung dengan API.

Filename hanya berfungsi pada jenis file dan audio.

Pertimbangkan file limitation aturan saat mengirim lampiran.

Penjelasan Parameter

target (string)

target merupakan parameter penerima pesan whatsapp.

target memiliki 3 nilai :

  1. nomor whatsapp
  2. grup id
  3. rotator id

nilainya dapat terdiri dari satu atau kombinasi semua jenis.

nilainya harus berupa string!

Anda tidak dapat menetapkan nilai sebagai int/angka.

tidak ada batasan berapa nilai target.

nilainya dipisahkan koma.

contoh yang berfungsi : 'target' => '081xxxx' or 'target' => '081xxxx,082xxxx,083xxxx,123xxxx@g.us'

contoh yang tidak berfungsi : 'target' => 081xxxx

pesan (string)

Pesan merupakan parameter untuk mengisi pesan yang akan dikirimkan kepada penerima.

pesan ini juga menerima emoji.

nilai pesan tidak boleh melebihi 60.000 karakter.

harap berhati-hati bahwa setiap emoji/pengkodean karakter tertentu (Cina/Jepang/korea/arabian/dll) mungkin berisi beberapa karakter.

karakter apa pun yang tidak didukung di UTF-8 mungkin tidak terkirim dengan benar atau bahkan menyebabkan kesalahan.

pesan juga berfungsi sebagai keterangan untuk file/gambar jika anda mendefinisikan url/file.

url (string)

catatan: parameter ini hanya tersedia pada paket super/advanced/ultra.

url adalah parameter untuk mengirim lampiran ke penerima.

url harus berupa url publik.

Anda tidak dapat menggunakan url localhost/ip pribadi.

url harus berupa file sebenarnya, bukan halaman web yang berisi file tersebut.

contoh yang berfungsi : https://fonnte.com/image.png

contoh yang tidak berfungsi : https://fonnte.com/somepagewithimage or some url like s3 files.

urlnya juga harus mengikuti file limitation.

filename (string)

filename adalah parameter untuk menentukan nama file yang diterima oleh penerima.

filename ini hanya bekerja pada non gambar atau video.

gambar dan video tidak mengandung filename.

contohnya : 'filename' => 'myfile.pdf'

schedule/jadwal (int)

jadwal adalah parameter untuk mengirim pesan nanti pada waktu yang dijadwalkan.

nilai parameter ini adalah unix timestamp.

jika anda memiliki waktu string seperti 12 Agustus 2024 atau 15-07-2024T15:22 atau yang lain, Anda harus mengonversinya menjadi unix timestamp.

harap berhati-hati, Anda mungkin lupa tentang zona waktu. jangan pedulikan zona waktu dalam konversi.

contoh di php : strtotime('2025-01-09T20:46:00+0700') will convert to 1736430360.

anda dapat memeriksa hasil unix timestamp pada epochconverter.com.

Screenshot 86

kamu dapat melihat pada gambar diatas, waktunya tepat seperti yang tercantum dalam konversi.

delay (string)

delay adalah parameter untuk menambah penundaan pengiriman pesan.

nilai penundaannya harus string!

alasannya karena nilai penundaan mungkin tetap atau di antara dua nilai.

penundaan juga hanya bekerja pada beberapa target sasaran.

tidak akan bekerja pada satu target saja.

target pertama akan selalu segera terkirim, tidak peduli seberapa lama penundaan yang ditetapkan.

contoh yang berfungsi : 'delay' => '5' or 'delay' => '5-100'

contoh yang tidak berfungsi : 'delay' => 5

jika anda menetapkan nilai 5, berarti akan tertunda selama 5 detik sebelum melanjutkan target berikutnya.

jika anda menetapkan nilai 5-10, berarti akan tertunda antara 5 hingga 100 detik sebelum melanjutkan target berikutnya.

mungkin saja seperti 5/8/30/66/96 detik. sistem akan secara otomatis mengatur penundaan ini.

jika anda menambahkan penundaan sebagai int/angka, anda akan mendapatkan status : false (salah/palsu).

countryCode (string)

countryCode adalah parameter untuk menentukan negara penerima.

nilai kode negara harus string!

secara default adalah 62.

Anda tidak perlu secara eksplisit menentukan nilai kode negara.

Kode negara ini menggantikan 0 pertama (jika ada) dari nomor target atau menambahkan Kode negara jika tidak ada.

namun jika anda ingin mengirimkannya ke luar indonesia, anda wajib mengatur kode negara ini.

contoh yang berfungsi : 'countryCode' => '60', 'target' => '60111111111'

contoh yang tidak berfungsi : 'countryCode' => 60, 'target' => '60111111111'

jika kode negara tidak disetel, targetnya adalah 6260111111111, yang merupakan nomor tidak valid.

jika anda ingin melewati salah satu filter ini, anda dapat mengaturnya : 'countryCode' => '0', 'target' => '60111111111'.

ini akan menonaktifkan filter fonnte dan anda harus menetapkan target dengan Kode negara.

contoh berfungsi : 'countryCode' => '0', 'target' => '628123456789,60111111111'

contoh tidak berfungsi : 'countryCode' => '0', 'target' => '08123456789,60111111111'

dengan melewati filter fonnte, anda dapat dengan mudah menetapkan nilai target dengan beberapa nomor negara.

location (string)

location adalah parameter untuk mengirimkan lokasi kepada penerima.

formatnya adalah lintang, bujur.

contohnya : 'location' => '-7.983908, 112.621391'

typing (bool)

typing adalah parameter untuk menambahkan indikator pengetikan di whatsapp saat mengirim pesan.

ini bermanfaat bila anda ingin membuat pesan terlihat seperti diketik.

contohnya : 'typing' => true

choices (string)

choices adalah parameter untuk menambahkan pilihan pada pesan polling.

nilainya harus terdiri dari minimal 2 dan maksimal 12 item.

nilainya dipisahkan dengan koma.

contohnya : 'choices' => 'satu,dua,tiga'

select (string)

select adalah parameter untuk mengatur pengaturan polling agar hanya memperbolehkan satu suara atau banyak suara

nilainya harus 'tunggal' atau 'ganda'.

nilai defaultnya adalah tunggal.

contohnya : 'select' => 'single'

pollname (string)

pollname adalah nama polling untuk mengidentifikasi polling tersebut

contohnya : 'pollname' => 'pollku'

file (binary)

catatan : parameter ini hanya tersedia di super/advanced/ultra.

file adalah parameter yang memungkinkan anda mengirim file langsung dari localhost/unggahan formulir anda.

parameter ini sangat berguna jika anda menjalankannya dengan ip pribadi/localhost.

ini kebalikan dari parameter url, anda tidak perlu mengunggah file ke publik.

contohnya : 'file' => 'new CURLFile("localfile.png")'

lokasi file harus benar relatif terhadap file anda, jika tidak, anda akan mendapatkan kesalahan atau error: operasi dibatalkan oleh panggilan balik.

connectOnly (bool)

connectOnly adalah parameter untuk mengontrol perilaku pengiriman.

standar atau bawaannya adalah benar.

artinya ketika perangkat terputus, permintaan akan ditolak dan pengembalian status: false.

jika anda menyetelnya ke false, bahkan pada perangkat yang terputus, permintaan tersebut disimpan dan akan diproses saat perangkat terhubung.

contohnya : 'connectOnly' => false

Data (string)

data adalah parameter untuk menggabungkan semua permintaan menjadi satu permintaan.

ini seperti pembungkus untuk semua parameter yang tersedia saat mengirim API.

dengan menggunakan parameter reguler, anda sudah dapat mengirim ke beberapa target, menambahkan penundaan, dll.

tetapi ada beberapa batasan seperti:

  • menggunakan variabel diperlukan untuk pesan yang dinamis
  • tidak dapat mengirim banyak lampiran
  • tidak dapat memanfaatkan penundaan, lebih sulit mempertahankan penundaan sendiri
  • dll

menggunakan data parameter, semua masalah di atas akan terpecahkan.

satu-satunya kelemahan adalah anda tidak dapat menggunakan parameter file.

saat anda menggunakan parameter ini, setiap tipe data parameter harus sesuai dengan kebutuhan.

jika tidak, permintaan akan kembali pada status : false.

contohnya : 'data' => '[{"target": "08123456789", "message": "1"},{"target": "08123456789", "message": "2","delay":"2"},{"target": "08123456789", "message": "3","delay":"1"]'

anda membutuhkan json_encode sebelum mengirim ke fonnte.

jangan terpaku pada satu target, anda dapat menggunakan semua fitur parameter.

anda juga dapat menetapkan target menjadi beberapa target.

contoh yang akan dijalankan : segera kirim pesan 1 -> tunggu 2 detik -> kirim pesan 2 -> tunggu 1 detik ->kirim pesan 3.

Selain itu, parameter data juga menghilangkan kebutuhan akan variabel : 081|fonnte karena Anda dapat memasukkan masing-masing variabel secara manual ke dalam parameter pesan.

sequence (bool)

sequence adalah parameter untuk mengontrol perilaku pengiriman pesan.

secara default, itu salah.

perilaku fonnte tidak menghormati urutan permintaan.

contohnya : 'target' => '081xxxx,082xxxx','delay'=>'0'

ini mungkin mengakibatkan 082 dikirim terlebih dahulu, bukan 081.

ini mungkin bukan masalah besar, tapi itu akan menjadi masalah jika urutannya penting.

contoh kasus : anda perlu mengirim beberapa pesan ke penerima, tetapi urutannya harus benar. anda perlu membagi pesan ke beberapa obrolan untuk memperpendek panjangnya dan tulisan yang lebih manusiawi.

  • gambar
  • foto
  • video
  • hello anissa! bagaimana kabarmu?
  • kami dengan senang hati memberitahu xxxxx
  • apakah kamu mau datang kesini?
  • kami membagikan beberapa xxxx
  • jika anda datang, harap beri tahu kami di https....

pesan-pesan ini harus diatur dalam urutan yang benar.

sebelumnya tidak mungkin menggunakan fonnte.

dengan urutan, sekarang bisa!

contohnya : 'sequence' => true

urutan berfungsi baik pada cara biasa menggunakan parameter data.

catatan : urutan mencegah tindakan di masa depan (penundaan, jadwal, tindak lanjut) dan pesan akan dikirim tanpa penundaan.

preview (bool)

secara default, fonnte mengurai tautan apa pun dalam pesan dan membukanya untuk mendapatkan data pratinjau.

contohnya : test dari postman https://fonnte.com akan menghasilkan pesan seperti yang ditunjukkan pada gambar di bawah ini.

Screenshot 167

namun terkadang tidak diinginkan dan terkadang link tersebut merupakan link konfirmasi yang hanya boleh dibuka oleh penerima pesan.

anda sekarang dapat menonaktifkannya dan hanya mengirim pesan tanpa menguraikannya hanya dengan menggunakan preview => false.

Response

contoh respons yang berhasil dijalankan

{
    "detail": "success! message in queue",
    "id": [
        "15362"
    ],
    "process": "processing",
    "status": true,
    "target": [
        "6282227097005"
    ]
}

Ada 3 detail tentang keberhasilan menjalankan API

  1. Sukses! pesan dalam antrian : akan segera diproses
  2. Sukses! pesan akan dikirim pada waktu yang dijadwalkan : akan diproses pada waktu yang dijadwalkan
  3. Sukses! pesan tertunda karena masalah server, akan dikirim nanti : ada yang salah dengan server, tetapi pesan Anda akan dikirim segera setelah server berjalan kembali.

Detil ke 3, hal ini bisa terjadi jika server restart, server not responding, server down, jaringan bermasalah dan lain sebagainya.

Itu bukan kesalahanmu, tapi kesalahan kami.

Sekali lagi, pesan Anda disimpan dan akan dikirim segera setelah server dijalankan kembali.

Respons yang gagal dijalankan selalu mengembalikan status: false

Token tidak valid : jika token tidak valid

{
    "Status": false,
    "reason": "token invalid"
}

- Perangkat harus milik sebuah akun : Anda tidak dapat mencantumkan token di akun yang berbeda

{
    "Status": false,
    "reason": "devices must belong to an account"
}

- Input tidak valid : jika ada nilai yang tidak valid

{
    "reason": "input invalid",
    "status": false
}

- Url tidak valid : jika url yang diberikan tidak valid

{
    "reason": "url invalid",
    "status": false
}

- Url tidak dapat dijangkau : jika url tidak merespons

{
    "reason": "url unreachable",
    "status": false
}

- Format file tidak didukung : gunakan format yang didukung

{
    "reason": "file format not supported",
    "status": false
}

-Ukuran file harus di bawah 4MB : file tidak boleh melebihi 4MB

{
    "reason": "file size must under 4MB",
    "status": false
}

- Target tidak valid : target bukan angka valid

{
    "reason": "target invalid",
    "status": false
}

- JSON format invalid : format JSON tidak valid, periksa format json Andat

{
    "reason": "JSON format invalid",
    "status": false
}

- Kuota tidak mencukupi : jumlah pesan yang diminta > sisa kuota. Pesan) tidak akan disimpan

{
    "reason": "insufficient quota",
    "status": false
}

Related knowledge

See more
Made with in Indonesia