Membuat AI Customer Service WhatsApp 24 Jam

Membuat AI Customer Service WhatsApp 24 Jam

Pendahuluan

Layanan pelanggan yang responsif 24/7 menjadi keharusan di era digital. Tutorial ini menjelaskan cara membangun AI Customer Service di WhatsApp dengan:

Arsitektur singkat:

User → WhatsApp Cloud API → Webhook (Flask) → AI Model (ChatGPT) → Response → WhatsApp → User

Prasyarat & Persiapan

Kebutuhan Detail Link
Akun Meta for Developers Daftar, buat aplikasi, aktifkan WhatsApp Cloud API https://developers.facebook.com/docs/whatsapp/cloud-api
Token Akses & Phone Number ID Diperoleh dari dashboard Meta —
Server Linux/VM (Ubuntu 22.04+) Untuk menjalankan Flask & ngrok —
Python ≥3.9 Virtualenv disarankan —
OpenAI API Key (ChatGPT Plus) Dapatkan di akun ChatGPT Plus ChatGPT Plus
Ngrok (untuk expose localhost) npm i -g ngrok atau download binary —
(Opsional) Notion AI untuk prompt engineering Membantu merumuskan prompt yang efektif Notion AI

Instalasi dasar

# Update sistem
sudo apt update && sudo apt upgrade -y

# Install Python & pip
sudo apt install -y python3 python3-venv python3-pip

# Buat virtualenv
python3 -m venv venv
source venv/bin/activate

# Install dependensi Python
pip install flask requests python-dotenv

Langkah Demi Langkah

Step 1 – Siapkan Project Struktur

mkdir whatsapp-ai-bot && cd whatsapp-ai-bot
touch app.py .env requirements.txt

.env (jangan commit ke repo!)

WHATSAPP_TOKEN=YOUR_WHATSAPP_CLOUD_API_TOKEN
PHONE_NUMBER_ID=YOUR_PHONE_NUMBER_ID
OPENAI_API_KEY=YOUR_CHATGPT_PLUS_API_KEY
VERIFY_TOKEN=some_random_string   # untuk webhook verification

Step 2 – Buat Flask Webhook

# app.py
import os
import json
import requests
from flask import Flask, request, abort
from dotenv import load_dotenv

load_dotenv()
app = Flask(__name__)

WHATSAPP_TOKEN = os.getenv("WHATSAPP_TOKEN")
PHONE_NUMBER_ID = os.getenv("PHONE_NUMBER_ID")
VERIFY_TOKEN = os.getenv("VERIFY_TOKEN")
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")

WHATSAPP_API_URL = f"https://graph.facebook.com/v16.0/{PHONE_NUMBER_ID}/messages"

def call_chatgpt(prompt: str) -> str:
    headers = {
        "Authorization": f"Bearer {OPENAI_API_KEY}",
        "Content-Type": "application/json"
    }
    data = {
        "model": "gpt-4o-mini",   # model yang tersedia di ChatGPT Plus
        "messages": [{"role": "user", "content": prompt}],
        "max_tokens": 300,
        "temperature": 0.7
    }
    resp = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, json=data)
    resp.raise_for_status()
    return resp.json()["choices"][0]["message"]["content"].strip()

def send_whatsapp_message(to: str, text: str):
    payload = {
        "messaging_product": "whatsapp",
        "to": to,
        "type": "text",
        "text": {"body": text}
    }
    headers = {"Authorization": f"Bearer {WHATSAPP_TOKEN}", "Content-Type": "application/json"}
    r = requests.post(WHATSAPP_API_URL, headers=headers, json=payload)
    r.raise_for_status()
    return r.json()

@app.route("/webhook", methods=["GET", "POST"])
def webhook():
    if request.method == "GET":
        # Verifikasi webhook
        mode = request.args.get("hub.mode")
        token = request.args.get("hub.verify_token")
        challenge = request.args.get("hub.challenge")
        if mode == "subscribe" and token == VERIFY_TOKEN:
            return challenge, 200
        else:
            abort(403)

    if request.method == "POST":
        data = request.get_json()
        # Pastikan pesan masuk
        try:
            entry = data["entry"][0]
            changes = entry["changes"][0]
            value = changes["value"]
            messages = value.get("messages")
            if not messages:
                return "no message", 200

            msg = messages[0]
            phone_number = msg["from"]
            text = msg["text"]["body"]

            # Call AI
            reply = call_chatgpt(text)

            # Kirim balasan
            send_whatsapp_message(phone_number, reply)
        except Exception as e:
            app.logger.error(f"Error processing webhook: {e}")
        return "ok", 200

if __name__ == "__main__":
    app.run(port=5000, debug=False)

Step 3 – Expose Webhook dengan Ngrok

ngrok http 5000

Catat URL HTTPS yang diberikan, misalnya https://abcd1234.ngrok.io.

Step 4 – Daftarkan Webhook di Meta Dashboard

  1. Buka WhatsApp Cloud API → Webhooks.
  2. Masukkan URL: https://abcd1234.ngrok.io/webhook.
  3. Pilih messages dan message_deliveries.
  4. Masukkan Verify Token yang sama dengan VERIFY_TOKEN di .env.
  5. Simpan.

Step 5 – Uji Bot

Kirim pesan WhatsApp ke nomor bisnis yang terhubung. Bot akan merespon dengan output dari ChatGPT Plus.

Step 6 – Deploy ke Production

Untuk produksi, gunakan layanan VPS atau platform seperti Render, Fly.io, atau DigitalOcean App Platform. Pastikan:

Contoh Dockerfile:

FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 443
CMD ["gunicorn", "-b", "0.0.0.0:443", "app:app"]

Tips Optimasi & Keamanan

Area Best Practice
Rate Limiting Tambahkan middleware Flask‑Limiter untuk melindungi API OpenAI dari spam.
Prompt Engineering Gunakan Notion AI untuk menyusun prompt standar (mis. “Berikan jawaban singkat, sopan, dan sertakan CTA”).
Caching Simpan respons AI untuk pertanyaan berulang selama 5 menit dengan Redis.
Logging Gunakan struktur JSON log (mis. python-json-logger) agar mudah di‑integrasi dengan ELK.
Secrets Management Pada cloud, gunakan Vault atau AWS Secrets Manager; hindari menaruh kunci di repo.
Scalability Deploy dengan Gunicorn + Uvicorn workers atau gunakan Kubernetes Horizontal Pod Autoscaler.
Compliance Pastikan data pribadi (nama, nomor) dienkripsi saat disimpan atau diproses.

Troubleshooting Error Umum

Error Penyebab Solusi
401 Unauthorized pada panggilan WhatsApp API Token atau Phone Number ID salah / kadaluarsa Regenerasi token di Meta Dashboard, periksa .env.
429 Too Many Requests dari OpenAI Rate limit terlampaui Implementasikan exponential backoff & queue (Celery).
Ngrok disconnects Tunnel timeout atau limit free tier Upgrade ke ngrok paid atau gunakan reverse proxy di VPS.
Webhook verification fails Verify token tidak cocok Pastikan VERIFY_TOKEN di .env sama persis dengan yang di Meta.
JSONDecodeError pada response OpenAI Response tidak JSON (mis. error HTML) Tambahkan resp.raise_for_status() dan log resp.text untuk debugging.

Kesimpulan

Dengan WhatsApp Cloud API, Flask, dan model bahasa ChatGPT Plus, Anda dapat meluncurkan layanan pelanggan AI 24/7 dalam hitungan jam. Integrasi tambahan seperti Claude Pro, Gemini Advanced, atau Perplexity Pro memungkinkan fleksibilitas model. Ikuti praktik keamanan, caching, dan monitoring untuk memastikan bot tetap responsif dan aman di lingkungan produksi.


Referensi tools:
- ChatGPT Plus untuk model bahasa utama.
- Notion AI membantu merumuskan prompt yang konsisten.
- Ngrok untuk pengujian lokal.
- Docker untuk containerization.

Selamat membangun!

🏷️ Topik Terkait: