Panduan WhatsApp Gateway Webhook: Integrasi Mudah untuk Developer
Tentu, ini adalah Dokumentasi Developer lengkap untuk sistem WhatsApp Gateway Webhook yang baru saja Anda bangun.
Dokumentasi ini dirancang agar Anda (atau tim developer Anda) bisa dengan mudah mengintegrasikan logika backend apapun (Node.js, PHP, Python, dll) dengan bot Golang ini.
📚 WhatsApp Gateway Webhook Documentation
Version: 3.0 (Support Group, Media, React, & Reply)
Base Technology: Golang (Gateway) + HTTP Webhook (Logic)
🚀 Konsep Dasar
Sistem ini bekerja dengan metode "Hybrid Gateway":
- Golang Bot bertugas menjaga koneksi ke WhatsApp, menangani enkripsi, dan mendownload media.
- Setiap pesan masuk akan diteruskan (POST) ke Webhook URL server backend Anda.
- Backend Anda memproses logika dan mengembalikan respon JSON.
- Golang Bot membaca respon JSON tersebut dan mengirim balasan ke pengguna WhatsApp.
1. Konfigurasi Gateway (Golang)
Pastikan file .env di sisi Golang sudah diatur mengarah ke endpoint backend Anda.
Code snippet
# .env (Golang) WEBHOOK_URL=http://localhost:8000/webhook-handler ENABLE_GROUPS=true # Set true untuk memproses pesan grup
2. Webhook Request (Dari Golang ke Backend)
Gateway akan mengirim request POST dengan Content-Type: application/json ke endpoint Anda.
Struktur Payload Umum
JSON
{
"sender": "628123456789",
"push_name": "Andri ClassyID",
"message_type": "text",
"message": "Halo, info jasa dong",
"is_group": false,
"group_jid": "",
"timestamp": 1715432100
}
Struktur Payload Berdasarkan Tipe Pesan
Tipe (message_type)Field TambahanKeterangantextmessageIsi pesan teks dari user.imagemedia_path, mime_type, messagePath file gambar di VPS & Caption gambar.videomedia_path, mime_type, messagePath file video di VPS & Caption video.audiomedia_path, mime_typePath file voice note/audio (.ogg).documentmedia_path, file_name, mime_typePath file dokumen & Nama asli file.locationlatitude, longitudeKoordinat lokasi.contactcontact_name, contact_vcardNama & data VCard kontak.3. Webhook Response (Dari Backend ke Golang)
Backend Anda WAJIB merespon dengan status code 200 OK dan format JSON berikut untuk memerintahkan bot melakukan sesuatu.
Format JSON Response
JSON
{
"reply": "Teks balasan Anda di sini...",
"react": "👍"
}
Skenario Respon
A. Membalas Pesan (Reply/Quote)
Bot akan mengirim pesan teks yang mengutip (quote) pesan pengirim.
JSON
{
"reply": "Halo! Ada yang bisa kami bantu?"
}
B. Memberikan Reaksi Emoji (React)
Bot hanya akan memberikan reaksi emoji pada pesan pengirim tanpa mengirim chat baru.
JSON
{
"react": "❤️"
}
C. Membalas Sekaligus Reaksi
Bot akan melakukan keduanya.
JSON
{
"reply": "Siap, pesanan diproses!",
"react": "✅"
}
D. Tidak Melakukan Apa-apa (Read Only)
Jika backend tidak ingin membalas (misal: pesan tidak dikenali atau log saja), kirim JSON kosong atau objek kosong.
JSON
{}
4. Contoh Implementasi Code
Node.js (Express)
JavaScript
app.post('/webhook-handler', (req, res) => {
const { message, sender } = req.body;
if (message.toLowerCase() === 'promo') {
return res.json({
reply: "🎉 Promo spesial Classy ID: Diskon 20% untuk pembuatan aplikasi bulan ini!",
react: "🔥"
});
}
// Default: Tidak balas apa-apa
res.json({});
});
PHP (Native)
PHP
<?php
// Ambil data JSON
$json = file_get_contents('php://input');
$data = json_decode($json, true);
$response = [];
if ($data['message_type'] == 'text' && strtolower($data['message']) == 'info') {
$response['reply'] = "Halo kak {$data['push_name']}, silakan cek website kami.";
$response['react'] = "👋";
}
// Kirim Header JSON
header('Content-Type: application/json');
echo json_encode($response);
Python (Flask)
Python
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/webhook-handler', methods=['POST'])
def webhook():
data = request.json
response = {}
if 'jasa' in data.get('message', '').lower():
response = {
"reply": "Kami melayani pembuatan aplikasi Android & iOS.",
"react": "📱"
}
return jsonify(response)
5. Troubleshooting & Notes
- Media Path: File media (
media_path) disimpan di folderuploads/di server VPS tempat bot Golang berjalan. Backend harus memiliki akses baca ke folder tersebut jika ingin memproses filenya (misal: OCR atau analisa gambar), atau Anda bisa setup static file server di Golang/Nginx agar bisa diakses via URL HTTP. - Timeout: Golang Bot menunggu respon webhook maksimal 10 detik. Pastikan backend Anda memproses logika dengan cepat.
- Security: Saat ini belum ada autentikasi webhook. Disarankan menambahkan pengecekan header secret atau validasi IP lokal (
localhost) jika bot dan backend berada di server yang sama.