Boilerplate’i atlayın: çalışan bir botu klonlayın
- Normal mesaj gönderme;
- Medya gönderme: resim / dosya / video;
- Kontak gönderme (vCard ziyaret kartı);
- Ürün gönderme;
- WhatsApp grubu oluşturma;
- Gruba davet gönderme;
- WhatsApp grubuna mesaj gönderme;
- Gelen mesajları alıp işleme;
- Bilinmeyen bir komut için yanıt verme (menüler, talimatlar veya karşılama mesajları için).
git clone https://github.com/Whapi-Cloud/nodejs-whatsapp-chatbot
cd nodejs-whatsapp-chatbot
package.json içindeki paketleri kurun:
npm install
Proje yapısı
- /files — botun gönderebileceği örnek medya (görsel, PDF, video, vCard). İsteyince değiştirin.
- config.js —
token,botUrl,portve isteğe bağlıgroup/productID’leri. - index.js — webhook’u kaydeder,
/hook/messagesdinler, 1–9 sayılarını eylemlere map’ler.
WhatsApp numaranızı bağlayın
Hesabınızdaki QR kodu tarayın
config.js içine token olarak yapıştırın. https://gate.whapi.cloud istekleri Bearer gider.
Botu başlatmadan önce
- Kanal token’ı
config.jsiçine yapıştırıldı. - Test için ikinci bir telefon: bot bağlı numaradan gelen mesajları yok sayar.
- Genel HTTPS URL. Yerelde ngrok; üretimde HTTPS’li herhangi bir host.
Bota genel bir HTTPS URL verin
/hook/messages adresine JSON POST eder -> bot komutu okur ve yanıtlar. URL’yi panele yapıştırmazsınız; bot açılışta config.js’ten kaydeder.config.js içinde botUrl olarak yazın; repo ayağa kalkınca kanal ayarları API’siyle kaydeder.ngrok ile yerel tünel
config.js içindeki varsayılan port 80’dir (443 kullanmayın). ngrok’u indirin ve ngrok http 80 çalıştırın — ya da config.js’te verdiğiniz portu.https:// yönlendirme URL’sini kopyalayın. botUrl’i o host artı /hook yapın, örneğin botUrl: "https://84c7-151-33-282-113.ngrok-free.app/hook".
/hook sonekini koruyun. Sunucu POST’ları /hook/messages üzerinde dinler; botUrl kanal ayarlarına yazılan önektir.node index.js çalışınca bot bu URL ve messages olayıyla PATCH /settings gönderir. WhatsApp mesajları sürecinize gelir. Kayıt edileni görmek istemiyorsanız paneldeki webhook alanlarını yok sayabilirsiniz.Üretimde ne gerekir
botUrl değişirse webhook’u yeniden kaydetmek için botu yeniden başlatın.Botu başlatın
config.js içinde token ve botUrl’i doğrulayın, proje kökünden node index.js çalıştırın. Listening log’unu görmelisiniz. Başka bir telefondan bağlı numaraya herhangi bir metin gönderin. Bot numaralı menüyle cevaplar.Komut menüsü
- Basit metin mesajı
- Görsel gönder
- Belge gönder
- Video gönder
- Kişi gönder
- Ürün gönder
- Grup oluştur
- Gruba basit metin
- Üç grubunuzun id’lerini al
Sadece sayıyı gönderin, örneğin 1. Başka her şey bu listeyi tekrar döner.
config.js içindeki product ve group alanlarını kullanır. İlk testte atlayın. Gerektiğinde ID’leri GET /groups ve GET /business/products ile listeleyin.Sorun giderme
Bot cevap vermiyor
from_me’yi atlar. Token’ı, botUrl’in /hook ile bittiğini, ngrok (veya host) hâlâ ayaktaysa ve sürecin listening mesajını yazdırdığını kontrol edin.Bot mesaj döngüsüne giriyor
if (message.from_me) continue kalsın. Olmazsa bot kendi mesajlarına cevap verir ve durmaz.Bazı sohbetlerde çalışıyor, bazılarında değil
Node.js’ten WhatsApp mesajı gönderin
https://gate.whapi.cloud adresine fetch.Metin mesajı gönder
const response = await fetch('https://gate.whapi.cloud/messages/text', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json'
},
body: JSON.stringify({
to: '[email protected]',
body: 'Hello from the cloned bot'
})
});
const data = await response.json();
console.log(data);
Belge gönder
const response = await fetch('https://gate.whapi.cloud/messages/document', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json'
},
body: JSON.stringify({
to: '[email protected]',
media: 'https://example.com/file.pdf',
caption: 'Document from the bot'
})
});
const data = await response.json();
console.log(data);
WhatsApp gruplarıyla çalışmak
/groups endpoint’ini yeniden kullanır.Gruplarınızı listeleyin
const response = await fetch('https://gate.whapi.cloud/groups', {
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN'
}
});
const { groups } = await response.json();
console.log(groups);
Grup üyelerini sayın
groups.forEach(group => {
console.log(`Group Name: ${group.name}`);
console.log(`Participants: ${group.participants.length}`);
});
Grup mesajlarını işleyin
@g.us ile biter. Gelen webhook’lar aynı soneki kullanır; klonlanan bot bir komut grubu hedeflediğinde zaten burada dallanır.
// Klonlanan bottan: grup mesajları @g.us ile biten chat_id kullanır
const messages = req.body.messages;
messages.forEach(message => {
if (message.chat_id.endsWith('@g.us')) {
console.log(`Group message: ${message.text?.body}`);
}
});
config.group adresine yazar. Bu numaraları kullanmadan önce o ID’yi tanımlayın.Çevrimiçi tutun
node index.js sürecini genel HTTPS URL’si olan bir makinede çalışır bırakın ve botUrl’i https://sizin-host/hook yapın. Bu bot tek atımlık serverless fonksiyon değil, uzun ömürlü bir Express sürecidir — VPS veya HTTPS’li herhangi bir Node host yeter. botUrl değişirse webhook’u yeniden kaydetmek için yeniden başlatın.Firebase
- Firebase Console'da bir proje oluşturun;
- talimatları takip ederek Firebase CLI yükleyin;
- Proje dizininizde firebase init komutu ile Firebase'i başlatın;
- Botunuzu firebase deploy --only functions komutu kullanarak dağıtın.
AWS (Amazon Web Services)
- AWS Yönetim Konsolu'na kaydolun veya giriş yapın;
- AWS konsolu üzerinden API Gateway tetikleyici olarak seçilerek yeni bir Lambda fonksiyonu oluşturun;
- Botunuzun kodunu Lambda fonksiyonuna yükleyin;
- Botunuzun dış dünya ile etkileşimde bulunması için API Gateway'i yapılandırın.
Heroku
- Heroku'da bir hesap oluşturun;
- Heroku CLI yükleyin ve sisteme giriş yapın;
- Konsol üzerinden veya heroku create komutunu kullanarak Heroku'da yeni bir uygulama oluşturun;
- Git reposunu Heroku ile ilişkilendirin ve git push heroku master komutları ile dağıtım yapın;
- Heroku tarafından sağlanan web kancası URL'sini ayarlayın.