Sari peste boilerplate: clonează un bot care deja funcționează
- Trimiterea unui mesaj obișnuit;
- Trimiterea de media: imagine / fișier / video;
- Trimiterea unui contact (carte de vizită vCard);
- Trimiterea unui produs;
- Crearea unui grup WhatsApp;
- Trimiterea unei invitații în grup;
- Trimiterea unui mesaj în grupul WhatsApp;
- Primirea și procesarea mesajelor primite;
- Răspuns la o comandă necunoscută (pentru implementarea meniului, instrucțiunilor sau mesajului de bun venit).
git clone https://github.com/Whapi-Cloud/nodejs-whatsapp-chatbot
cd nodejs-whatsapp-chatbot
package.json:
npm install
Structura proiectului
- /files — media de exemplu pe care botul o poate trimite (imagine, PDF, video, vCard). Înlocuiește-le când vrei.
- config.js —
token,botUrl,portși ID-uri opționalegroup/product. - index.js — înregistrează webhook-ul, ascultă pe
/hook/messagesși mapează numerele 1–9 pe acțiuni.
Conectează numărul tău de WhatsApp
Scanează codul QR din cont
config.js ca token. Cererile către https://gate.whapi.cloud îl trimit ca Bearer.
Înainte să pornești botul
- Tokenul canalului lipit în
config.js. - Un al doilea telefon de test: botul ignoră mesajele numărului conectat.
- URL HTTPS publică. Local folosește ngrok; în producție, orice host cu HTTPS.
Dă-i botului o URL HTTPS publică
/hook/messages pe serverul tău -> botul verifică comanda și răspunde. Nu lipești URL-ul în dashboard; botul o înregistrează din config.js la pornire.config.js ca botUrl; la start repo-ul o înregistrează prin API-ul de setări al canalului.Tunel local cu ngrok
port implicit în config.js este 80 (nu folosi 443). Descarcă ngrok, apoi rulează ngrok http 80 — sau portul din config.js.https://. Setează botUrl la acel host plus /hook, de exemplu botUrl: "https://84c7-151-33-282-113.ngrok-free.app/hook".
/hook. Serverul ascultă POST pe /hook/messages; botUrl este prefixul salvat în setările canalului.node index.js, botul trimite PATCH /settings cu acea URL și evenimentul messages. Mesajele WhatsApp ajung apoi în procesul tău. Poți ignora câmpurile de webhook din dashboard, decât dacă vrei să vezi ce s-a înregistrat.Ce cere producția
botUrl, repornește botul ca să reînregistreze webhook-ul.Pornește botul
token și botUrl în config.js, apoi din rădăcina proiectului rulează node index.js. Ar trebui să vezi un log de listening. De pe un telefon diferit, trimite orice text către numărul conectat. Botul răspunde cu un meniu numerotat.Meniul de comenzi
- Mesaj text simplu
- Trimite imagine
- Trimite document
- Trimite video
- Trimite contact
- Trimite produs
- Creează grup
- Text simplu către grup
- Obține id-urile celor trei grupuri
Trimite doar numărul, de exemplu 1. Orice altceva returnează din nou lista.
product și group în config.js. Sari-le la primul test. Când ai nevoie, listează ID-uri cu GET /groups și GET /business/products.Depanare
Botul nu răspunde
from_me. Verifică tokenul, că botUrl se termină cu /hook, că ngrok (sau hostul) încă rulează și că procesul a afișat mesajul de listening.Botul trimite mesaje în buclă
if (message.from_me) continue. Fără el, botul răspunde la propriile mesaje și nu se oprește.Funcționează în unele chat-uri, în altele nu
Trimite mesaje WhatsApp din Node.js
fetch către https://gate.whapi.cloud cu tokenul Bearer.Trimiterea unui mesaj text
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);
Trimiterea unui document
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);
Lucrul cu grupurile WhatsApp
/groups.Listează-ți grupurile
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);
Numără participanții grupului
groups.forEach(group => {
console.log(`Group Name: ${group.name}`);
console.log(`Participants: ${group.participants.length}`);
});
Gestionează mesajele din grup
@g.us. Webhook-urile primite folosesc același sufix; botul clonat deja ramifică pe el când un comandă vizează un grup.
// Din botul clonat: mesajele din grupuri folosesc chat_id care se termină cu @g.us
const messages = req.body.messages;
messages.forEach(message => {
if (message.chat_id.endsWith('@g.us')) {
console.log(`Group message: ${message.text?.body}`);
}
});
config.group. Setează acel ID înainte să folosești numerele astea.Ține-l online
node index.js să ruleze pe o mașină cu URL HTTPS publică și setează botUrl la https://hostul-tau/hook. Botul e un proces Express de lungă durată, nu o funcție serverless de un singur apel — un VPS sau orice host Node cu HTTPS e suficient. Repornește după ce schimbi botUrl ca webhook-ul să se înregistreze din nou.Firebase
- Creați un proiect în Consola Firebase;
- Instalați Firebase CLI, urmând instrucțiunile;
- Inițializați Firebase în directorul proiectului dvs. folosind comanda firebase init;
- Desfășurați botul folosind comanda firebase deploy --only functions.
AWS (Amazon Web Services)
- Înregistrați-vă sau autentificați-vă în Consola de Management AWS;
- Creați o nouă funcție Lambda prin consola AWS, alegând API Gateway ca declanșator;
- Încărcați codul botului dvs. în funcția Lambda;
- Configurați API Gateway pentru a interacționa cu botul dvs. în lumea externă.
Heroku
- Creați un cont pe Heroku;
- Instalați Heroku CLI și autentificați-vă;
- Creați o nouă aplicație pe Heroku folosind consola sau comanda heroku create;
- Asociați repoziția dvs. Git cu Heroku și efectuați desfășurarea folosind comenzi git push heroku master;
- Configurați URL-ul webhook furnizat de Heroku.