Whapi.Cloud'un bu adım adım geliştirici kılavuzu — WhatsApp API gateway sağlayıcısı — GPT-4o ve Node.js ile production ortamına hazır bir WhatsApp AI chatbot oluşturmanın tüm sürecini kapsamaktadır. WhatsApp'ın ChatGPT ile yerel entegrasyonu yoktur: telefon numarasına yönlendirebileceğiniz herhangi bir açma/kapama düğmesi, resmi eklenti veya doğrudan OpenAI endpoint'i bulunmamaktadır. GPT-4o'yu WhatsApp'a bağlamak üç bileşen gerektirir: WhatsApp mesajlarını alıp sunucunuza ileten bir API gateway, bu mesajları işleyen bir webhook sunucusu ve konuşma geçmişini istekler arasında koruyan bir oturum katmanı. Tüm bu stack'i iki saatten kısa sürede oluşturabilir, test edebilir ve dağıtabilirsiniz.
Bu kılavuz, WhatsApp için AI asistanları geliştiren yazılımcılar ve teknik kurucular için yazılmıştır. Beş dakikalık bir demo eğitimi değildir — webhook kurulumu, oturum durumu yönetimi, hata kurtarma, maliyet tahmini ve gerçek bir sunucuda HTTPS dağıtımını kapsayan, production odaklı kapsamlı bir rehberdir. Her bölüm, daha basit kılavuzların atladığı bir hata senaryosunu ele almaktadır. WhatsApp Flows, VoIP veya resmi Meta BSP onboarding sürecini kapsamaz — bunlar ayrı konulardır.
Çoğu Eğitimin WhatsApp AI Chatbot'larında Gözden Kaçırdığı Şeyler
Çalışan bir demo, production botu değildir. "WhatsApp ChatGPT botu oluşturma" hakkındaki çoğu makale webhook kavramında takılı kalır — bir mesajı nasıl alacağınızı, OpenAI API'sini nasıl çağıracağınızı ve yanıt göndereceğinizi gösterir. Bu yalnızca bir kez, izole bir ortamda, tek bir test mesajıyla çalışır. Gerçek kullanıcılar geldiğinde hemen bozulur.
Hız sınırları, oturum yönetimi ve HTTPS ilk günden itibaren zorunludur. Genellikle ne bozulur?
-
Durumsuz GPT-4o çağrıları: Oturum yönetimi olmadan her mesaj yeni bir konuşmadır. Botun kullanıcının kim olduğuna veya on saniye önce ne söylendiğine dair hiçbir hafızası yoktur. Bağlam kuramaz ve bir AI asistanını yararlı kılan konuşma akışını oluşturamaz.
-
Hata işleme yok: OpenAI çağrısı başarısız olursa veya zaman aşımına uğrarsa bot hiçbir şey göndermez. Kullanıcı sessizlikle karşılaşır ve botun bozulduğunu varsayar — çünkü onun perspektifinden gerçekten öyledir. Sessiz hatalar, çevrimdışı botlardan ayırt edilemez.
-
Production'da ngrok: ngrok bir geliştirme aracıdır. Tüneller uyarı vermeden kopar, URL'ler her yeniden başlatmada değişir ve süreç yönetimi yoktur. Tünel çöktüğünde botunuz çevrimdışı kalır — sessizce, hiçbir uyarı olmadan.
-
WhatsApp'ın 24 saatlik penceresi: 24 saatlik kullanıcı hareketsizliğinin ardından WhatsApp serbest metin yanıtlarını engeller — yalnızca önceden onaylanmış şablon mesajlara izin verilir. Çoğu eğitim bunu hiç belirtmez. Geliştiriciler bunu production ortamında keşfeder.
-
Hardcode edilmiş API anahtarları: Kaynak kodundaki kimlik bilgileri eninde sonunda git geçmişine veya sunucu günlüklerine girer. Bu bir güvenlik açığıdır, "sonra düzeltirim" meselesi değil.
Tam Mesaj Pipeline'ı: WhatsApp → Whapi.Cloud → GPT-4o → WhatsApp
Tek bir satır kod yazmadan önce pipeline'ı anlayın — bu mimariyi belirler. Kullanıcınızın gönderdiği her mesaj dört adımdan geçer:
- WhatsApp → Whapi.Cloud: Kullanıcı bir WhatsApp mesajı gönderir. Whapi.Cloud bunu web oturumu socket bağlantısı aracılığıyla alır — WhatsApp Web'in kullandığı mekanizmanın aynısı — ve sunucunuza HTTP POST isteği olarak iletir.
- Whapi.Cloud → Webhook Sunucunuz: Node.js/Express sunucunuz webhook payload'ını alır. Gönderen kimliğini ve mesaj metnini çıkarır, ardından isteği AI handler'ınıza yönlendirir.
- Sunucunuz → OpenAI GPT-4o: Sunucunuz, kullanıcının mesajı artı tüm konuşma geçmişiyle birlikte OpenAI Chat Completions API'sini çağırır. GPT-4o bir yanıt döndürür.
- Sunucunuz → Whapi.Cloud → WhatsApp: Sunucunuz yanıtı Whapi.Cloud'un mesaj gönderme endpoint'ine gönderir. Whapi.Cloud bunu kullanıcının WhatsApp'ına iletir.
Her adım gecikme ekler. GPT-4o'nun kendisi standart yükte 1–3 saniye alır. WhatsApp iletimi neredeyse anlıktır. Kullanıcının algıladığı toplam yanıt süresi genellikle 2–5 saniyedir — bu beklentiyi lansmanın ardından özür olarak değil, ürün tasarımınızda belirleyin. Gelen payload formatının tamamı için gelen webhook format referansına bakın.
Ön Koşullar: Kod Yazmadan Önce Neye İhtiyacınız Var
Başlamadan önce dört şeyi yapılandırmanız gerekir:
-
Whapi.Cloud hesabı: panel.whapi.cloud/register adresinde kayıt olun. Ücretsiz plan geliştirme ve test için yeterlidir.
-
OpenAI API anahtarı: platform.openai.com'da bir tane oluşturun. GPT-4o erişimi kullanım bazlı faturalandırmayla standart API seviyesinde mevcuttur.
-
Node.js v18+: Modern herhangi bir LTS sürümü çalışır. Dört paket yükleyeceksiniz:
express,openai,axiosvedotenv. -
ngrok (yalnızca geliştirme): Geliştirme sırasında Whapi.Cloud'un webhook'ları iletebilmesi için yerel sunucunuzu internete açar. Production'a geçmeden önce gerçek bir HTTPS sunucu URL'siyle değiştirin.
Adım 1 -- Whapi.Cloud ile WhatsApp API Erişimi Alın (Meta BSP Gerekmez)
Whapi.Cloud, Meta BSP kaydı olmadan WhatsApp webhook erişimi sağlar. Panelde QR kodu tarayarak bir WhatsApp numarasını bağlarsınız — WhatsApp Web'in kullandığı mekanizmanın aynısı — ve bir dakikadan kısa sürede mesaj gönderip almaya hazır olursunuz. Resmi Meta yolu BSP kaydı, şablon ön onayı ve çok aşamalı onboarding gerektirir — günler ile haftalar süren bir süreç. Whapi.Cloud bunların hepsini atlar: kullanıcı botunuza mesaj atar, botunuz yanıt verir.
WhatsApp numaranızı bağlamak ve webhook'unuzu kaydetmek için:
- Whapi.Cloud panelinize giriş yapın.
- Yeni bir kanal oluşturun. Bir isim verin (örneğin, "AI Destek Botu").
- Botunuzun numarası olarak kullanmak istediğiniz WhatsApp hesabıyla QR kodu tarayın. Bağlantı anında kurulur.
- Kanal API token'ınızı kopyalayın —
.envdosyanızda buna ihtiyacınız olacak. - Kanal ayarlarınızdaki Webhooks bölümüne gidin. Sunucunuzun genel HTTPS URL'sini (veya geliştirme sırasında ngrok URL'sini) yapıştırın, örneğin:
https://yourdomain.com/webhook. Kaydedin.
Webhook URL'si kaydedildiğinde Whapi.Cloud, gelen tüm WhatsApp mesajlarını HTTP POST istekleri olarak sunucunuza iletir. Tam kurulum detayları için Whapi.Cloud başlangıç kılavuzuna bakın.
Adım 2 -- Express Webhook Sunucusunu Oluşturun
Ortam değişkenleriyle başlayın. API anahtarlarını asla hardcode etmeyin. Bir .env dosyası kullanın ve dotenv ile yükleyin — bu kimlik bilgilerini kaynak kodunun ve sürüm kontrolünün dışında tutar:
# .env
OPENAI_API_KEY=sk-your-openai-key-here
WHAPI_TOKEN=your-whapi-cloud-token-here
WHAPI_API_URL=https://gate.whapi.cloud
PORT=3000
Gerekli paketleri yükleyin:
npm init -y
npm install express openai axios dotenv
Şimdi server.js dosyasını oluşturun — Express'i başlatan ve webhook endpoint'ini tanımlayan giriş noktası:
// server.js -- Entry point: starts Express and defines the webhook endpoint
require('dotenv').config();
const express = require('express');
const { handleIncomingMessage } = require('./bot');
const app = express();
app.use(express.json());
// Whapi.Cloud delivers all incoming WhatsApp messages to this endpoint as HTTP POST
app.post('/webhook', async (req, res) => {
// Respond immediately -- Whapi.Cloud expects a fast 200 before processing
res.sendStatus(200);
const messages = req.body.messages;
if (!messages || messages.length === 0) return;
for (const message of messages) {
// Skip outbound messages echoed back by Whapi.Cloud -- prevents infinite reply loops
if (message.from_me) continue;
// This guide covers text messages only; other types (image, audio) require separate handling
if (message.type !== 'text') continue;
const senderId = message.from; // WhatsApp Chat ID of the sender
const userText = message.text.body; // The user's message text
await handleIncomingMessage(senderId, userText);
}
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => console.log(`Webhook server running on port ${PORT}`));
Burada önemli iki uygulama kararı vardır. Birincisi: mesajı işlemeden önce hemen 200 OK ile yanıt verin. Önce senkron olarak işlerseniz yavaş GPT-4o yanıtları Whapi.Cloud'un teslimatı yeniden denemesine neden olabilir — ve aynı mesajı iki kez işlemiş olursunuz. İkincisi: from_me filtresi isteğe bağlı değildir. Whapi.Cloud giden mesajları webhook'unuza geri yansıtır. Bu kontrol olmadan bot kendi mesajlarına sonsuz bir döngüde yanıt verir. Bu kılavuz metin mesajlarını ele alır; Whapi.Cloud ayrıca resim, ses, belge ve reaksiyon türlerini de destekler — her biri farklı bir type alanıyla aynı webhook endpoint'ine teslim edilir. Daha geniş bir Node.js uygulama referansı için Whapi.Cloud'un Node.js WhatsApp bot kılavuzuna bakın.
Adım 3 -- GPT-4o'yu Webhook Handler'ınıza Bağlayın
Bot modülü üç işi yönetir: bu kullanıcı için konuşma geçmişini yüklemek, o geçmişle GPT-4o'yu çağırmak ve yanıtı Whapi.Cloud API'si üzerinden geri göndermek. sendMessageText işlemi iki parametre gerektirir: to (alıcının WhatsApp Sohbet Kimliği) ve body (mesaj metni) — her ikisi de Whapi.Cloud API şemasına karşı doğrulanmıştır.
// bot.js -- GPT-4o integration and Whapi.Cloud message send-back
const OpenAI = require('openai');
const axios = require('axios');
const { getHistory, saveHistory } = require('./session');
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
// System prompt defines the bot's persona, scope, and response style
// This is the most important configuration decision -- write it for your specific use case
const SYSTEM_PROMPT = {
role: 'system',
content: `You are a helpful AI assistant.
Keep replies concise -- WhatsApp users prefer short, clear messages.
If you cannot answer something, say so directly.`
};
// Calls GPT-4o with the full conversation history; returns the model's reply text
async function askGPT(history) {
const response = await openai.chat.completions.create({
model: 'gpt-4o',
messages: [SYSTEM_PROMPT, ...history],
max_tokens: 500,
temperature: 0.7
});
return response.choices[0].message.content.trim();
}
// Sends a text reply to the user via Whapi.Cloud REST API
// Required params (verified via MCP): to (string), body (string)
async function sendWhatsAppMessage(to, body) {
await axios.post(
`${process.env.WHAPI_API_URL}/messages/text`,
{ to, body },
{ headers: { Authorization: `Bearer ${process.env.WHAPI_TOKEN}` } }
);
}
// Main handler: load history → call GPT-4o → save updated history → send reply
async function handleIncomingMessage(senderId, userText) {
try {
const history = await getHistory(senderId);
// Append the new user message to history
history.push({ role: 'user', content: userText });
// Truncate to last 20 messages -- controls token cost regardless of conversation length
const truncatedHistory = history.slice(-20);
// Call GPT-4o with the full conversation context
const reply = await askGPT(truncatedHistory);
// Append the assistant reply and persist the updated history
truncatedHistory.push({ role: 'assistant', content: reply });
await saveHistory(senderId, truncatedHistory);
// Deliver the reply to the user's WhatsApp
await sendWhatsAppMessage(senderId, reply);
} catch (error) {
console.error(`[${new Date().toISOString()}] Error for ${senderId}:`, error.message);
// Always send a fallback -- never leave the user with silence
await sendWhatsAppMessage(
senderId,
'I encountered an issue processing your request. Please try again in a moment.'
).catch(e => console.error('Failed to send fallback message:', e.message));
}
}
module.exports = { handleIncomingMessage };
System prompt, chatbot'unuzdaki en kritik yapılandırmadır. Belirsiz bir prompt konu dışı veya aşırı uzun yanıtlar üretir — özellikle WhatsApp'ta zararlıdır, çünkü kullanıcılar kısa yanıtlar bekler. Kendi kullanım durumunuz için yazın: asistanın kapsamını, iletişim tarzını ve yanıt veremediğinde ne söylemesi gerektiğini tanımlayın. Bunu bir yer tutucu olarak görmeyin.
Oturum Durumu Olmadan GPT-4o Her WhatsApp Mesajını Yeni Bir Konuşma Olarak İşler
GPT-4o durumsuz çalışır. Her API çağrısı bağımsızdır — önceki mesajları messages dizisine açıkça eklemedikçe modelin önceki çağrıları hatırlama özelliği yoktur. Oturum katmanı olmadan kullanıcının gönderdiği her WhatsApp mesajı yeni bir konuşmanın başlangıcı olarak işlenir. Bot bağlam kuramaz ve süreklilik bekleyen kullanıcılar için gerçekten kafa karıştırıcı bir deneyim yaratır.
Seviye 1 -- Bellek İçi Map (Yalnızca Geliştirme)
Yerel geliştirme ve hızlı testler için, gönderen kimliğiyle anahtarlanan JavaScript Map yapılandırma gerektirmeden çalışır:
// session-memory.js -- In-memory session store
// Inputs: senderId (string). Returns: history array (messages[]).
// WARNING: data is lost on every server restart. Use only in development.
const sessions = new Map();
function getHistory(senderId) {
if (!sessions.has(senderId)) {
sessions.set(senderId, []);
}
return Promise.resolve(sessions.get(senderId));
}
function saveHistory(senderId, history) {
sessions.set(senderId, history);
return Promise.resolve();
}
module.exports = { getHistory, saveHistory };
Kritik sınırlama: bu veriler süreç belleğinde yaşar. Sunucu yeniden başlatması tüm konuşmaları siler. Eş zamanlı kullanıcılarla birlikte, tahliye politikası olmadan sınırsız bellek büyümesi riski de oluşur. Bu test için kabul edilebilir. Production için kabul edilemez.
Seviye 2 -- TTL'li Redis (Production)
TTL'li Redis, eş zamanlı kullanıcılarla production WhatsApp botları için doğru oturum deposudur. Sunucu yeniden başlatmalarından sağ çıkar, birden fazla uygulama örneğini çakışma olmadan yönetir ve eskimiş oturumları otomatik olarak sona erdirir — WhatsApp'ın kendi 24 saatlik konuşma penceresiyle uyumlu:
// session-redis.js -- Redis-backed session store for production
// Inputs: senderId (string), history array. Outputs: history array.
// TTL of 24 hours mirrors the WhatsApp session window -- sessions expire together.
const redis = require('redis');
const client = redis.createClient({ url: process.env.REDIS_URL || 'redis://localhost:6379' });
client.connect().catch(console.error);
const SESSION_TTL_SECONDS = 86400; // 24 hours
async function getHistory(senderId) {
const data = await client.get(`session:${senderId}`);
return data ? JSON.parse(data) : [];
}
async function saveHistory(senderId, history) {
await client.setEx(
`session:${senderId}`,
SESSION_TTL_SECONDS,
JSON.stringify(history)
);
}
module.exports = { getHistory, saveHistory };
redis paketini (v4+) bağımlılıklarınıza ekleyin ve bir REDIS_URL ortam değişkeni ayarlayın. Bellek içi depodan Redis'e geçmek için bot.js'de tek bir satırı değiştirin: require('./session-memory'), require('./session-redis') olur. Arayüz aynıdır — her iki modül de aynı imzayla getHistory ve saveHistory dışa aktarır.
| Yaklaşım | Kalıcılık | Eş zamanlı kullanıcılar | Kurulum çabası | Önerilen durum |
|---|---|---|---|---|
| Bellek içi Map | Yeniden başlatmada kaybolur | Yalnızca tek örnek | Yok | Yerel geliştirme |
| TTL'li Redis | Yeniden başlatmaları atlatır | Çok örnekli güvenli | Orta | Production |
Hata İşleme: Her Sessiz GPT-4o Hatası Kullanıcınızı Yanıtsız Bırakır
Her production WhatsApp botunun hata işlemeye ihtiyacı vardır. Bu isteğe bağlı değildir ve "v2 iyileştirmesi" de değildir. GPT-4o çağrınız — OpenAI zaman aşımı, hız limiti veya ağ hatası nedeniyle — başarısız olursa ve hata handler'ınız yoksa kullanıcı hiçbir şey almaz. Botun bozulduğunu varsayacaktır. Çoğu durumda haklı olacaktır.
Yukarıdaki bot.js örneği fallback mesajıyla temel try/catch'i içerir. Günlüklerinizin eyleme geçirilebilir olması için hedefli hata sınıflandırmasıyla genişletin:
// Extended error classification inside handleIncomingMessage's catch block
} catch (error) {
const timestamp = new Date().toISOString();
if (error.status === 429) {
// OpenAI rate limit -- you have exceeded tokens-per-minute for this API key
// Consider queuing requests or implementing exponential backoff
console.warn(`[${timestamp}] OpenAI rate limit hit for ${senderId}. Status: 429`);
} else if (error.code === 'ECONNABORTED' || error.code === 'ETIMEDOUT') {
// OpenAI request took too long -- network issue or model overload
console.warn(`[${timestamp}] OpenAI request timed out for ${senderId}`);
} else {
// Unknown error -- log fully for investigation
console.error(`[${timestamp}] Unhandled error for ${senderId}:`, error.message);
}
// Send user-visible fallback regardless of error type
try {
await sendWhatsAppMessage(
senderId,
'I am having trouble right now. Please try again in a moment.'
);
} catch (sendError) {
// If even the fallback fails, the Whapi.Cloud connection itself is likely broken
console.error(`[${timestamp}] Fallback send failed for ${senderId}:`, sendError.message);
}
}
Hataları her zaman zaman damgaları ve gönderen kimlikleriyle günlüğe kaydedin. Zaman damgası olmayan girişler production'da neredeyse işe yaramaz — bunları kullanıcı raporları, OpenAI durum olayları veya Whapi.Cloud teslimat günlükleriyle ilişkilendiremezsiniz. Fallback gönderimi de başarısız olursa bu ayrı bir sinyaldir: Whapi.Cloud bağlantınız bozulmuştur, yalnızca OpenAI çağrınız değil. Bu iki hata türünü farklı uyarılar olarak değerlendirin.
OpenAI hız limitleri hakkında: HTTP 429, dakika başına token kotanızı aştığınız anlamına gelir. Anlık çözüm üstel geri çekilme ile yeniden denemedir. Yapısal çözüm — bu tekrarlanırsa — her webhook için eş zamanlı GPT-4o çağrısı yapmak yerine gelen mesajları kuyruğa alıp eş zamanlılık sınırıyla işlemektir.
WhatsApp'ın 24 Saatlik Penceresi: Botunuzun Tasarımını Değiştiren Bir Kural
24 saatlik kullanıcı hareketsizliğinin ardından WhatsApp serbest metin yanıtlarını engeller — yalnızca önceden onaylanmış şablon mesajlara izin verilir. Bu bir Whapi.Cloud sınırlaması değil, WhatsApp tarafında uygulanan bir sunucu kuralıdır. Hangi gateway kullanıldığından bağımsız olarak tüm botlar için geçerlidir.
Chatbot geliştiricilerinin çoğu bunu production'da keşfeder — kullanıcılar takip mesajlarına yanıt vermeyi bıraktığında ve günlükler açık bir açıklama olmaksızın teslimat hatalarını gösterdiğinde. Bu kısıtlamayı başından itibaren göz önünde bulundurarak tasarlayın:
-
Inbound-first tasarım: AI botunuz kullanıcı tarafından başlatılan mesajlara yanıt verir. Bu, bir destek veya asistan botu için doğru modeldir. 24 saatlik pencere her kullanıcı mesajıyla sıfırlanır — kullanıcılar etkileşimde kaldığı sürece serbestçe yanıt verebilirsiniz.
-
Oturum zaman damgalarını takip edin: Her kullanıcının son mesajının zaman damgasını kaydedin. Bot tarafından başlatılan herhangi bir giden mesajdan önce 24 saatlik pencerenin hâlâ açık olup olmadığını kontrol edin.
-
Görevleri tek oturumda tamamlayın: Destek veya işlemsel kullanım durumları için kullanıcının isteğini tek bir konuşma içinde çözün. Çözüm birden fazla gün boyunca birden fazla değiş tokuş gerektiriyorsa, kullanıcının tekrar iletişim başlatmasını gerektiren bir yeniden giriş akışı tasarlayın.
Redis TTL'ini 86400 saniye (24 saat) olarak ayarlamak — yukarıdaki oturum kodundaki gibi — bu kısıtlamayla doğal olarak uyum sağlar. WhatsApp penceresi kapandığında konuşma geçmişi de sıfırlanır. 24 saat sonra dönen kullanıcılar her iki tarafta da temiz bir başlangıç yapar. Bu kasıtlı bir tasarım kararıdır, bir kısıtlama değil.
WhatsApp AI Bot İşletmek Ne Kadar Tutar? Mesaj Başına GPT-4o Maliyeti
GPT-4o, standart token kullanımıyla ortalama bir WhatsApp mesaj değişimi başına yaklaşık 0,002–0,005 dolar maliyete sahiptir. Bu tahmin, 20–50 tokenlik tipik bir kullanıcı mesajı ve her API çağrısına dahil edilen 10–15 önceki tur içeren 100–200 tokenlik bir model yanıtı varsayar. Bu oranlarla 10.000 mesaj değişimi aylık yaklaşık 20–50 dolar OpenAI API ücretine karşılık gelir.
Token maliyetleri doğrudan geçmiş uzunluğuyla ölçeklenir. 20 mesajla sınırlamak — yukarıdaki kodda olduğu gibi — toplam konuşma uzunluğundan bağımsız olarak çağrı başına maliyetleri öngörülebilir kılar. Konuşma ne kadar uzun olursa olsun çağrı başına 20 tur bağlam için ödeme yaparsınız.
GPT-4o token başına GPT-3.5-turbo'dan daha pahalıdır, ancak açık uçlu konuşma görevlerinde kalite farkı önemlidir. GPT-3.5-turbo'nun yeterli olduğu yapılandırılmış, şablon benzeri yanıtlar için model değiştirmek tek satırlık bir değişimdir: askGPT fonksiyonunda 'gpt-4o''yu 'gpt-3.5-turbo' ile değiştirin. Model düşürmeden önce gerçek kullanımınızı ve kullanıcı memnuniyetini analiz edin — buradaki erken optimizasyon genellikle benchmark sayılarında değil, destek biletlerindeki kalite gerileme olarak ortaya çıkar.
Whapi.Cloud, mesaj başına ücret almayan abonelik bazlı fiyatlandırma kullanır. Mesaj hacminiz için toplam stack maliyetini hesaplamak üzere Whapi.Cloud'un güncel plan fiyatlarına bakın.
ngrok'tan Production'a: WhatsApp AI Botunuzu Gerçek Sunucuya Dağıtma
Production'da ngrok çalıştırmak bir dağıtım stratejisi değildir — botu gerçek kullanıcılarla paylaşmadan önce gerçek bir sunucuya geçin. 1 GB RAM'li herhangi bir Linux VPS, orta mesaj hacminde tek kanallı bir botu yönetir. Node.js kurulu, Redis çalışır durumda ve geçerli HTTPS sertifikasına sahip bir alan adına ihtiyacınız var. WhatsApp, HTTPS olmayan URL'lere webhook teslimatını engeller. Bunun geçici çözümü yoktur.
PM2 ile Süreç Yönetimi
PM2, production'da Node.js için standart süreç yöneticisidir. Çökme ve sistem yeniden başlatmasında sunucunuzu otomatik olarak yeniden başlatır:
# Install PM2 globally
npm install -g pm2
# Start the bot server under PM2 supervision
pm2 start server.js --name "whatsapp-ai-bot"
# Persist the PM2 process list across server reboots
pm2 save
# Generate and configure the system startup script
pm2 startup
pm2 startup çalıştırdıktan sonra, çıktısındaki komutu kopyalayıp çalıştırın — bu, PM2'yi sisteminizin başlatma süreciyle kaydederek botunuzun sunucu yeniden başlatmalarından sonra otomatik olarak yeniden başlamasını sağlar.
Nginx ve Let's Encrypt ile HTTPS
Node.js sunucunuzun önünde Nginx'i ters proxy olarak kullanın. Express uygulamanız dahili olarak http://localhost:3000'da kalır. Nginx SSL'i sonlandırır ve istekleri iletir. Certbot aracılığıyla Let's Encrypt'ten sertifikanızı alın:
# Install Nginx and Certbot (Ubuntu/Debian)
sudo apt update && sudo apt install nginx certbot python3-certbot-nginx -y
# Obtain and auto-configure an SSL certificate for your domain
sudo certbot --nginx -d yourdomain.com
# Certbot configures Nginx automatically and sets up certificate renewal
# Your webhook endpoint will be available at: https://yourdomain.com/webhook
Certbot çalıştıktan sonra Whapi.Cloud panelindeki webhook URL'sini https://yourdomain.com/webhook olarak güncelleyin. Teslimatı doğrulamak için paneldeki webhook test özelliğini kullanın. Sunucu günlükleriniz test payload'ının geldiğini gösteriyorsa production kurulumu çalışıyor demektir.
Production Hazırlık Kontrol Listesi
-
Geçerli sertifikayla HTTPS etkinleştirilmiş (Certbot aracılığıyla Let's Encrypt)
-
PM2 yapılandırılmış başlangıç kalıcılığıyla çalışıyor
-
Redis parola kimlik doğrulamasıyla çalışıyor, kamuya açık değil
-
Tüm gizli bilgiler
.envortam değişkenlerinde — kaynak kodunda veya git geçmişinde değil -
Kullanıcıya görünür fallback mesajları ve zaman damgalı sunucu tarafı günlüklemeyle hata işleme
-
Uzun konuşmalarda token maliyetlerini kontrol etmek için mesaj geçmişi kırpma
-
from_mefiltresi aktif — botun kendi giden mesajlarına yanıt vermesini önler -
Webhook URL'si Whapi.Cloud panelinde production HTTPS alanına güncellendi
-
Webhook testi onaylandı — test payload'ı sunucunuz tarafından alındı ve günlüğe kaydedildi
3.000'den fazla ekip her gün Whapi.Cloud'u production'da kullanıyor. Benzersiz proxy'ler ve bölgesel sağlayıcılar dahil altyapı korumaları bağlantı katmanını yönetir. Sorumluluk sizin uygulama katmanınızdadır: oturum durumu, hata işleme ve botunuzun gerçekte ne yaptığını tanımlayan system prompt. Bunları doğru yapın ve lansmanı hak eden bir botunuz olur. WhatsApp numaranızı ölçekte güvenli kullanma rehberi için Whapi.Cloud'un hesap engellemesini önleme kılavuzuna bakın.
Whapi.Cloud, WhatsApp numaranızı bir dakikadan kısa sürede sunucunuza bağlar — Meta BSP kaydı yok, şablon onay süreci yok, bekleme süresi yok. Bir QR kodu tarayın, webhook URL'nizi yapıştırın ve mesaj almaya başlayın. İhtiyacınız olan uygulama zaten bu kılavuzda.









