Exécutez un chatbot WhatsApp spécifique à votre entreprise capable de comprendre les messages texte, images et vocaux, et de répondre aux utilisateurs par texte et messages vocaux. Propulsé par GPT-4o, Node.js, et l’API Wassenger.
En suivant ce tutoriel, vous pouvez disposer d’un chatbot IA fonctionnel, activé pour la voix et semblable à ChatGPT fonctionnant en quelques minutes sur votre ordinateur ou serveur cloud. Le chatbot est conçu pour fonctionner comme un assistant virtuel de support client adapté à des usages professionnels spécifiques, communiquant avec les utilisateurs via des messages texte et vocaux sur WhatsApp.
Le chatbot peut comprendre les textes, images et messages vocaux dans de nombreuses langues et répondre par texte et messages vocaux, entraîné en tant qu'assistant virtuel de support client avec des instructions et connaissances prédéfinies.
Vous pouvez facilement personnaliser, étendre et instruire le bot IA pour ajuster son comportement, son rôle, son objectif et ses limites de connaissances selon votre cas d’usage. Le bot IA est conscient de la conversation en se basant sur l’historique de messages WhatsApp avec l’utilisateur, permettant des réponses plus contextuelles et précises.
De plus, vous pouvez facilement enrichir les connaissances spécifiques à votre domaine en temps réel en utilisant des fonctions outils, permettant au bot IA de récupérer des informations externes depuis des API distantes, des bases de données ou des fichiers, et d’alimenter l’IA avec des informations précises, spécifiques à l’utilisateur ou au contexte.
👉 👉 Le code de ce tutoriel est disponible sur GitHub 💻
👉 👉 Tutoriel vidéo disponible sur Youtube
Contenu
- Fonctionnalités
- Comment ça marche
- Comportement du bot
- Prérequis
- Structure du projet
- Installation
- Configuration
- Personnalisation
- Appeler des données et API externes (RAG)
- Lancer le bot
- Utilisation
- Questions
- Programme d’affiliation
🤩 🤖 Wassenger est une solution complète de Team Chat WhatsApp et d’API. Inscrivez-vous pour un essai gratuit de 7 jours et commencez en quelques minutes !
Fonctionnalités
Ce tutoriel fournit une implémentation complète d’un chatbot IA activé pour la voix, propulsé par ChatGPT en Node.js, qui :
- Fournit un chatbot complet activé pour la voix sur votre numéro WhatsApp connecté à Wassenger.
- Traite automatiquement tous les messages entrants des utilisateurs (texte, image et voix) et y répond par texte et voix.
- Comprend la parole dans plus de 90 langues humaines différentes et répond en conséquence sur la base d’instructions pré-entraînées spécifiques.
- Permet aux utilisateurs de demander à parler à un humain, auquel cas le chat sera assigné à un agent d’équipe et sortira du flux du bot.
- Le comportement du chatbot peut être facilement ajusté dans le fichier de configuration (voir
config.js).
Comment ça marche
- Démarre un service web qui se connecte automatiquement à l’API Wassenger et à votre numéro WhatsApp.
- Crée un tunnel via Ngrok pour recevoir les événements Webhook sur votre ordinateur (ou vous pouvez utiliser une URL Webhook dédiée si vous exécutez le bot sur le cloud).
- Enregistre automatiquement le point de terminaison webhook pour recevoir les messages entrants.
- Traite les messages texte, image et vocal entrants depuis WhatsApp et répond par messages vocaux en utilisant un modèle multimodal GPT-4o pré-entraîné avec des instructions métier spécifiques.
- Assigne automatiquement les chats aux agents d’équipe disponibles lorsque l’utilisateur le demande ou si le chatbot ne peut pas aider.
Comportement du bot
Le bot IA répondra aux messages entrants selon les critères suivants :
- Le chat n’est pas assigné à un agent dans Wassenger.
- Le chat n’a aucune des étiquettes blacklistées (voir
config.js). - Le numéro de l’utilisateur du chat n’a pas été mis sur liste noire (voir
config.js). - Le chat ou le contact n’est pas archivé ou bloqué.
- Le chat n’est pas un groupe ni une chaîne.
- Si un chat est désassigné d’un agent, le bot le reprendra et répondra automatiquement aux nouveaux messages entrants.
Prérequis
- Node.js >= v16 — Téléchargez-le ici
- Numéro WhatsApp personnel ou professionnel
- Clé API OpenAI — Inscrivez-vous gratuitement
- Clé API Wassenger — Inscrivez-vous gratuitement
- Connectez votre numéro WhatsApp à Wassenger (essai gratuit)
- Compte Ngrok (optionnel) — Inscrivez-vous gratuitement
Structure du projet
Parcourez les fichiers source sur GitHub
|– bot.js -> The bot source code in a single file
|– config.js -> Configuration file to customize credentials and bot behavior
|– actions.js -> Functions to perform actions through the Wassenger API
|– server.js -> Initializes the web server to process webhook events
|– main.js -> Initializes the bot server and creates the webhook tunnel(when applicable)
|– speech.js -> Handles voice message transcription and synthesis
|– package.json -> Node.js package manifest required to install dependencies
|– node_modules -> Where the project dependencies will be installed, managed by npm
Installation
Si vous avez Git installé, exécutez la commande suivante depuis le Terminal :
git clone https://github.com/wassengerhq/whatsapp-chatgpt-bot.git
Si vous n’avez pas git, téléchargez les fichiers source du projet ici et décompressez-les.
Configuration
Ouvrez votre terminal préféré et changez le répertoire vers le dossier du projet où se trouve package.json :
cd whatsapp-chatgpt-bot/
Depuis ce dossier, installez les dépendances en exécutant :
npm install
Avec votre éditeur de code préféré, ouvrez le fichier config.js et suivez les étapes ci-dessous :
Configurez votre clé API Wassenger
Saisissez votre clé API Wassenger.
Vous pouvez vous inscrire gratuitement ici pour obtenir votre clé API Wassenger :
// Required.Specify the Wassenger API key to be used
const apiKey = process.env.API_KEY || 'ENTER API KEY HERE',
Configurez votre clé API OpenAI
Saisissez votre clé API OpenAI.
Inscrivez-vous sur OpenAI gratuitement puis obtenez la clé API ici :
// Required.Specify the OpenAI API key to be used
const openaiKey = process.env.OPENAI_API_KEY || 'ENTER OPENAI API KEY HERE',
Configurez votre token Ngrok (optionnel)
Si vous devez exécuter le programme sur votre ordinateur local, le programme doit créer un tunnel via Ngrok pour traiter les événements webhook des messages WhatsApp entrants.
Inscrivez-vous sur Ngrok pour un compte gratuit puis obtenez votre jeton d’authentification comme expliqué ici.
Définissez le token dans config.js :
// Ngrok tunnel authentication token.
// Required if webhook URL is not provided.
const ngrokToken = process.env.NGROK_TOKEN || 'ENTER NGROK TOKEN HERE',
Si vous exécutez le programme sur un serveur cloud accessible publiquement depuis Internet, vous n’avez pas besoin d’utiliser Ngrok. Dans ce cas, définissez plutôt l’URL de votre serveur dans le champ webhookUrl de config.js.
Activez la fonctionnalité d’entrée et sortie audio
Dans config.js, allez à la déclaration features à la ligne 67 et mettez audioInput et audioOutput sur true comme indiqué ci-dessous :
// Chatbot features.Edit as needed.
const features = {
// Enable or disable knowledge data loading for AI model training(pdfs, docs, csv, etc)
knowledge: true,
// Enable or disable text input processing
audioInput: true,
// Enable or disable audio voice responses.
// By default the bot will only reply with an audio messages if the user sends an audio message first.
audioOutput: true,
// Reply only using audio voice messages instead of text.
// Requires "features.audioOutput" to be true.
audioOnly: false,
// Audio voice to use for the bot responses.Requires "features.audioOutput" to be true.
// Options: 'alloy', 'echo', 'fable', 'onyx', 'nova', 'shimmer'
// More info: https://platform.openai.com/docs/guides/text-to-speech
voice: 'echo',
// Audio voice speed from 0.25 to 2.Requires "features.audioOutput" to be true.
voiceSpeed: 1,
// Enable or disable image input processing
// Note: image processing can significnantly increase the AI token processing costs compared to text
imageInput: true
};
Activez le mode de réponse uniquement audio
Si vous souhaitez que le chatbot réponde exclusivement en utilisant des messages audio, mettez audioOnly sur true :
// Chatbot features.Edit as needed.
const features = {
// Enable or disable knowledge data loading for AI model training(pdfs, docs, csv, etc)
knowledge: true,
// Enable or disable text input processing
audioInput: true,
// Enable or disable audio voice responses.
// By default the bot will only reply with an audio messages if the user sends an audio message first.
audioOutput: true,
// Reply only using audio voice messages instead of text.
// Requires "features.audioOutput" to be true.
audioOnly: true,
// Audio voice to use for the bot responses.Requires "features.audioOutput" to be true.
// Options: 'alloy', 'echo', 'fable', 'onyx', 'nova', 'shimmer'
// More info: https://platform.openai.com/docs/guides/text-to-speech
voice: 'echo',
// Audio voice speed from 0.25 to 2.Requires "features.audioOutput" to be true.
voiceSpeed: 1,
// Enable or disable image input processing
// Note: image processing can significnantly increase the AI token processing costs compared to text
imageInput: true
};
Personnalisation
Vous pouvez personnaliser le comportement du chatbot en définissant un ensemble d’instructions en langage naturel que l’IA suivra.
Lisez les commentaires dans le code pour plus d’instructions.
Vous pouvez aussi ajuster facilement le code pour répondre à des exigences plus spécifiques. Les possibilités sont presque infinies !
Pour procéder à la personnalisation, ouvrez config.js avec votre éditeur préféré et définissez les instructions du bot, le message de bienvenue et les messages par défaut selon vos préférences.
Appeler des données et API externes (RAG)
Avec les appels de fonction, vous pouvez facilement fournir au modèle IA des informations contextuelles, en temps réel et spécifiques à l’utilisateur pour générer des réponses meilleures et plus précises en utilisant des techniques de Retrieval-Augmented Generation (RAG). Dans les coulisses, cela utilise la fonctionnalité OpenAI Tool Function Calling.
Quand le modèle IA requiert certaines informations pour générer une réponse, il indiquera d’exécuter une ou plusieurs fonctions pour récupérer des informations supplémentaires. Par exemple, dans une fonction, vous pouvez interroger une API CRM externe ou une base de données pour récupérer des informations spécifiques au client avec qui l’agent IA discute, comme l’adresse e-mail, le nom d’utilisateur, l’adresse de livraison, etc., puis fournir ces informations sous forme de texte ou JSON au modèle IA pour une génération de réponse contextuelle et précise.
L’utilisation des fonctions outils est très flexible et vous permet de construire des cas d’usage complexes et spécifiques à un domaine pour un agent IA.
Consultez le fichier [functions.js](https://github.com/wassengerhq/whatsapp-chatgpt-bot/blob/master/functions.js) pour plusieurs exemples d’utilisation et de définition de fonctions outils pour le chargement de données IA distantes (RAG) :
// Tool functions to be consumed by the AI when needed.
// Edit as needed to cover your business use cases.
// Using it you can instruct the AI to inform you to execute arbitrary functions
// in your code based in order to augment information for a specific user query.
// For example, you can call an external CRM in order to retrieve, save or validate
// specific information about the customer, such as email, phone number, user ID, etc.
// Learn more here: https://platform.openai.com/docs/guides/function-calling
const functions = [
// Sample function to retrieve plan prices of the product
// Edit as needed to cover your business use cases
{
name: 'getPlanPrices',
description:
'Get available plans and prices information available in Wassenger',
parameters: { type: 'object', properties: {} },
// Function implementation that will be executed when the AI requires to call this function
// The function must return a string with the information to be sent back to the AI for the response generation
// You can also return a JSON or a prompt message instructing the AI how to respond to a user
// Functions may be synchronous or asynchronous.
//
// The bot will inject the following parameters:
// - parameters: function parameters provided by the AI when the function has parameters defined
// - response: AI generated response object, useful to evaluate the AI response and take actions
// - data: webhook event context, useful to access the last user message, chat and contact information
// - device: WhatsApp number device information provided the by the Wassenger API
// - messages: an list of previous messages in the same user chat
run: async ({ parameters, response, data, device, messages }) => {
// console.log('=> data:', response)
// console.log('=> response:', response)
const reply = [
'*Send & Receive messages + API + Webhooks + Team Chat + Campaigns + CRM + Analytics*',
'',
'- Platform Professional: 30, 000 messages + unlimited inbound messages + 10 campaigns / month',
'- Platform Business: 60, 000 messages + unlimited inbound messages + 20 campaigns / month',
'- Platform Enterprise: unlimited messages + 30 campaigns',
'',
'Each plan is limited to one WhatsApp number.You can purchase multiple plans if you have multiple numbers.',
'',
'*Find more information about the different plan prices and features here:*',
'https://wassenger.com/#pricing'
].join('\n');
return reply;
}
},
// Sample function to load user information from a CRM
{
name: 'loadUserInformation',
description: 'Find user name and email from the CRM',
parameters: {
type: 'object',
properties: {}
},
run: async ({ parameters, response, data, device, messages }) => {
// You may call an remote API and run a database query
const reply =
'I am sorry, I am not able to access the CRM at the moment.Please try again later.';
return reply;
}
}
];
Lancer le bot
Exécutez le programme du bot :
node main
Exécutez le programme du bot sur un port personnalisé :
PORT=80 node main
Exécutez le programme du bot pour un appareil Wassenger spécifique :
DEVICE=WHATSAPP_DEVICE_ID node main
Exécutez le programme du bot en mode production :
NODE_ENV=production node main
Exécutez le bot avec un serveur webhook existant sans le tunnel Ngrok :
WEBHOOK_URL=https://bot.company.com:8080/webhook node main
Remarque :
https://bot.company.com:8080doit pointer vers le programme du bot lui‑même s’exécutant sur votre serveur et doit être joignable sur le réseau via HTTPS pour une connexion sécurisée.
Questions
Puis-je entraîner l’IA pour qu’elle se comporte de façon personnalisée ?
Oui ! Vous pouvez fournir des instructions personnalisées à l’IA pour déterminer le comportement, l’identité et d’autres aspects du bot.
Pour définir vos instructions personnalisées, saisissez le texte dans config.js > botInstructions.
Puis-je indiquer à l’IA de ne pas répondre à des sujets non pertinents ?
Oui ! En définissant un ensemble d’instructions claires et explicites, vous pouvez apprendre à l’IA à rester dans son rôle et à refuser poliment de répondre aux sujets non liés.
Par exemple, vous pouvez ajouter ce qui suit dans vos instructions :
You are a smart virtual customer support assistant who works for Wassenger.
Be polite, gentle, helpful, and empathetic.
Politely reject any queries that are not related to your customer support role or Wassenger itself.
Strictly stick to your role as a customer support virtual assistant for Wassenger.Copiar código
Puis-je personnaliser la réponse et le comportement du chatbot ?
Bien sûr ! Le code est disponible gratuitement, et vous pouvez l’adapter autant que nécessaire.
Vous avez juste besoin de connaissances en JavaScript/Node.js, et vous pouvez toujours demander à ChatGPT de vous aider à écrire le code dont vous avez besoin.
Comment empêcher le bot de répondre à certains chats ?
Il vous suffit d’assigner les chats spécifiques à n’importe quel agent via le chat web Wassenger ou en utilisant l’API.
Alternativement, vous pouvez définir des étiquettes blacklistées dans config.js > skipChatWithLabels, puis ajouter l’une de ces étiquettes au chat spécifique que vous voulez que le bot ignore. Vous pouvez attribuer des étiquettes aux chats via le chat web Wassenger ou en utilisant l’API.
Dois‑je utiliser Ngrok ?
Non, ce n’est pas obligatoire. Ngrok est uniquement utilisé pour le développement/test lorsque vous exécutez le programme depuis votre ordinateur local. Si vous exécutez le programme sur un serveur cloud, la plupart du temps vous n’aurez pas besoin de Ngrok si votre serveur est joignable via Internet en utilisant un nom de domaine public (ex. bot.company.com) ou une IP publique.
Dans ce cas, vous devez fournir l’URL complète de votre serveur se terminant par /webhook comme ceci lors de l’exécution du programme du bot :
WEBHOOK_URL=https://bot.company.com:8080/webhook node main
Remarque : https://bot.company.com:8080 doit pointer vers le programme du bot lui‑même s’exécutant sur votre serveur et doit être joignable sur le réseau via HTTPS pour une connexion sécurisée.
Que se passe‑t‑il si le programme échoue ?
Veuillez vérifier l’erreur dans le terminal et assurez‑vous que vous exécutez le programme avec les permissions suffisantes pour l’exécuter sur le port 8080 du localhost.
Comment éviter que certains chats soient répondus par le bot ?
Par défaut, le bot ignorera les messages envoyés dans les discussions de groupe, ainsi que les chats/contacts bloqués et archivés.
En dehors de cela, vous pouvez mettre en liste noire ou en liste blanche des numéros de téléphone et des chats avec des étiquettes pour qu’ils soient traités (ou non) par le bot.
Consultez les options numbersBlacklist, numbersWhitelist et skipChatWithLabels dans config.js pour plus d’informations.
Puis‑je exécuter ce bot sur mon serveur ?
Absolument ! Déployez ou transférez le code source du programme sur votre serveur et lancez la commande de démarrage depuis celui‑ci.
Les prérequis sont les mêmes, peu importe où vous exécutez le bot.
N’oubliez pas également de définir la variable d’environnement WEBHOOK_URL avec l’URL publique accessible depuis Internet de votre serveur comme expliqué précédemment.
Programme d’affiliation
🤑 💰 Gagnez 30 % de commission en parrainant des utilisateurs sur Wassenger. Obtenez votre lien de parrainage maintenant. Conditions applicables.






