Construire un chatbot IA alimenté par ChatGPT pour votre entreprise

2 novembre 2023

Lancez en quelques minutes un chatbot IA entièrement fonctionnel et personnalisable pour votre entreprise sur WhatsApp. Prend désormais en charge GPT-4o (multimodal) ainsi qu'un chargement de données externes et des appels API distants améliorés (RAG)

Transformez votre numéro WhatsApp en un puissant chatbot IA propulsé par ChatGPT en quelques minutes grâce à ce tutoriel, en utilisant Node.js, ChatGPT (modèle GPT-4o) et l'API Wassenger.

En suivant ce tutoriel, vous pourrez disposer en quelques minutes d'un chatbot IA complet de type ChatGPT fonctionnant sur votre ordinateur ou serveur cloud, qui se comporte comme un assistant virtuel de support client pour un objectif commercial spécifique.

Vous pouvez facilement personnaliser et instruire le bot IA pour ajuster son comportement, son rôle, son objectif et ses limites de connaissances. De plus, le bot IA conservera le contexte de conversation basé sur l'historique de messages précédent avec l'utilisateur sur WhatsApp, permettant des réponses plus précises et adaptées au contexte.

Le chatbot comprend et répond dans de nombreuses langues et a été entraîné pour se comporter comme un assistant virtuel de support client à des fins professionnelles.

En outre, vous pouvez facilement augmenter en temps réel les connaissances spécifiques à votre domaine en utilisant des fonctions qui permettent au bot IA de communiquer de manière arbitraire avec vos fonctions de code ou des API distantes pour récupérer et fournir des informations personnalisées à l'IA. Trouvez un exemple ici.

Le code de ce tutoriel est disponible sur GitHub💻

Vous pouvez aussi exécuter le programme du bot directement depuis votre navigateur sans installer de logiciel ni de code en cliquant icie 🎉

🤩 🤖 Wassenger est une solution complète d'API WhatsApp. Inscrivez-vous pour un essai gratuit de 7 jours et commencez en quelques minutes** !**

Conversation de démonstration sur WhatsApp alimentée par le chatbot ChatGPT utilisant ce tutoriel

Contenu

🤑 💰 Gagnez 30% de commission en parrainant des utilisateurs sur Wassenger. Obtenez votre lien de parrainage maintenant. Conditions applicables.

Comment ça marche

1. Démarre un service web qui se connecte automatiquement à l'API Wassenger et à votre numéro WhatsApp

2. Crée un tunnel à l'aide de Ngrok pour pouvoir recevoir des événements Webhook sur votre ordinateur (ou vous pouvez utiliser une URL Webhook dédiée si vous exécutez le programme du bot sur votre serveur cloud).

3. Enregistre automatiquement le point de terminaison webhook pour recevoir les messages entrants.

4. Traite et répond aux messages reçus en utilisant un modèle IA ChatGPT entraîné avec des instructions personnalisées.

5. Vous pouvez commencer à interagir avec le bot IA en envoyant des messages au numéro WhatsApp connecté à Wassenger.

Fonctionnalités

Ce tutoriel fournit une implémentation complète d'un chatbot IA propulsé par ChatGPT en Node.js qui :

  • Fournit un chatbot complet sur votre numéro WhatsApp connecté à Wassenger
  • Répond automatiquement à tous les messages entrants provenant d'utilisateurs arbitraires
  • Comprend tout texte en langage naturel et répond en plus de 90 langues humaines différentes
  • Permet à tout utilisateur de demander à parler à un humain, auquel cas la discussion sera attribuée à un agent et sortira du flux du bot
  • Le comportement du bot IA peut être facilement ajusté dans le fichier de configuration (ouvrez config.js)

Comportement du bot

Le bot IA répondra toujours aux messages entrants selon les critères suivants :

  • La conversation appartient à un utilisateur (les discussions de groupe sont toujours ignorées)
  • La conversation n'est assignée à aucun agent dans Wassenger
  • La conversation ne possède aucun des libellés blacklistés (voir config.js)
  • Le numéro de l'utilisateur de la conversation n'est pas blacklisté (voir config.js)
  • La conversation ou le contact n'est pas archivé ou bloqué
  • Si une conversation est désassignée d'un agent, le bot en reprendra la gestion et répondra automatiquement aux nouveaux messages entrants

Prérequis

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)
|- store.js -> the bot source code in a single file
|- 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 sources du projet ici et dézippez-les.

Voici à quoi ressemble le chat web coopératif optimisé par l'équipe Wassenger. Inscrivez-vous gratuitement

🤑 💰 Gagnez 30% de commission en parrainant des utilisateurs sur Wassenger. Obtenez votre lien de parrainage maintenant. Conditions applicables.

Configuration

Ouvrez votre terminal préféré et changez le répertoire vers le dossier du projet où `package.json` se trouve :

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.

Définir votre clé API Wassenger

Saisissez votre clé API Wassenger

Vous pouvez vous inscrire gratuitement ici puis obtenir la clé API ici:

// Required. Specify the Wassenger API key to be used // You can obtain it here: https://app.wassenger.com/apikeys apiKey: env.API_KEY || 'ENTER API KEY HERE',

Définir votre clé API OpenAI

Saisissez votre clé API OpenAI

Inscrivez-vous gratuitement sur OpenAI puis obtenez la clé API ici:

// Required. Specify the OpenAI API key to be used // You can sign up for free here: https://platform.openai.com/signup // Obtain your API key here: https://platform.openai.com/account/api-keys openaiKey: env.OPENAI_API_KEY || 'ENTER OPENAI API KEY HERE',

Définir votre token Ngrok (optionnel)

Si vous avez besoin d'exécuter le programme sur votre ordinateur local, le programme doit créer un tunnel à l'aide de 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` à la 90e ligne :

// Ngrok tunnel authentication token. // Required if webhook URL is not provided. // sign up for free and get one: https://ngrok.com/signup // Learn how to obtain the auth token: https://ngrok.com/docs/agent/#authtokens ngrokToken: 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. À la place, définissez l'URL de votre serveur dans `config.js` > champ `webhookUrl`.

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 d'autres instructions.

De plus, vous pouvez facilement ajuster 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 de code préféré et définissez les instructions du bot, le message d'accueil et le message par défaut selon vos préférences :

// Default message when the user sends an unknown message. const unknownCommandMessage = `I'm sorry, I can only understand text. Can you please describe your query? If you would like to chat with a human, just reply with *human*.`

// Default welcome message. Change it as you need. const welcomeMessage = `Hey there 👋 Welcome to this ChatGPT-powered AI chatbot demo using *Wassenger API*! I can also speak many languages 😁`

// AI bot instructions to adjust its behaviour. Change it as you need. // Use concise and clear instructions. const botInstructions = `You are a smart virtual customer support assistant that works for Wassenger. You can identify yourself as Molly, the Wassenger chatbot assistant. You will be chatting with random customers who may contact you with general queries about the product. Wassenger is a cloud solution that offers WhatsApp API and multi-user live communication services designed for businesses and developers. Wassenger also enables customers to automate WhatsApp communication and build chatbots. You are an expert in customer support. Be polite, be gentle, be helpful and emphatic. Politely reject any queries that are not related to customer support or Wassenger itself. Strictly stick to your role as a customer support virtual assistant for Wassenger. If you can't help with something, ask the user to type *human* in order to talk with customer support.`

// Default help message. Change it as you need. const defaultMessage = `Don't be shy 😁 try asking anything to the AI chatbot, using natural language! Example queries: 1️⃣ Explain me what is Wassenger 2️⃣ Can I use Wassenger to send automatic messages? 3️⃣ Can I schedule messages using Wassenger? 4️⃣ Is there a free trial available? Type *human* to talk with a person. The chat will be assigned to an available member of the team. Give it a try! 😁`

Ouvrez le fichier de configuration complet avec toutes les options disponibles

Appeler des données externes et des API (RAG)

Avec les appels de fonctions, vous pouvez facilement fournir au modèle IA des informations contextuelles, en temps réel et spécifiques à l'utilisateur afin de générer des réponses plus pertinentes et précises en utilisant des techniques de Retrieval-Augmented Generation (RAG).

En coulisses, cela utilise la fonctionnalité OpenAI Tool Function Calling.

Lorsque le modèle IA a besoin de certaines informations, 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 à un client avec lequel l'agent IA discute, telles que l'adresse e-mail, le nom d'utilisateur, l'adresse de livraison, etc., puis fournir ces informations sous forme de texte ou de JSON au modèle IA pour générer une réponse précise et adaptée à l'utilisateur.

L'utilisation de fonctions outils est puissante et vous permet de créer des cas d'utilisation complexes et spécifiques à un domaine pour un agent IA.

Voici un exemple d'implémentation RAG avec plusieurs fonctions outils :

// 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 } },

// Sample function to verify the current date and time { name: 'verifyMeetingAvaiability', description: 'Verify if a given date and time is available for a meeting before booking it', parameters: { type: 'object', properties: { date: { type: 'string', format: 'date-time', description: 'Date of the meeting' } }, required: ['date'] }, run: async ({ parameters, response, data, device, messages }) => { console.log('=> verifyMeetingAvaiability call parameters:', parameters) // Example: you can make an API call to verify the date and time availability and return the confirmation or rejection message const date = new Date(parameters.date) if (date.getUTCDay() > 5) { return 'Not available on weekends' } if (date.getHours() < 9 || date.getHours() > 17) { return 'Not available outside business hours: 9 am to 5 pm' } return 'Available' } },

// Sample function to determine the current date and time { name: 'bookSalesMeeting', description: 'Book a sales or demo meeting with the customer on a specific date and time', parameters: { type: 'object', properties: { date: { type: 'string', format: 'date-time', description: 'Date of the meeting' } }, required: ['date'] }, run: async ({ parameters, response, data, device, messages }) => { console.log('=> bookSalesMeeting call parameters:', parameters) // Make an API call to book the meeting and return the confirmation or rejection message return 'Meeting booked successfully. You will receive a confirmation email shortly.' } },

// Sample function to determine the current date and time { name: 'currentDateAndTime', description: 'What is the current date and time', run: async ({ parameters, response, data, device, messages }) => { return new Date().toLocaleString() } } ]

Exécuter le bot

Vous pouvez exécuter le programme du bot dès maintenant dans votre navigateur en utilisant StackBlitz :

WhatsApp ChatGPT-powered Edit descriptio.npr.new

Utilisation

Exécutez le programme du bot :

node main

Exécutez le bot sur un port personnalisé :

PORT=80 node main

Exécutez le bot pour un device Wassenger spécifique :

DEVICE=WHATSAPP_DEVICE_ID node main

Exécutez le 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:8080\` doit pointer vers le programme du bot lui-même exécuté sur votre serveur et doit être accessible sur le réseau en HTTPS pour une connexion sécurisée.

Questions

Puis-je entraîner l'IA pour qu'elle se comporte de manière personnalisée ?

Oui ! Vous pouvez fournir des instructions personnalisées à l'IA pour déterminer le comportement du bot, son identité et plus encore.

Pour définir vos instructions personnalisées, saisissez le texte dans `config.js` > `botInstructions`.

Puis-je demander à 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 à des sujets non liés au sujet pertinent.

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, be gentle, be helpful and emphatic.
Politely reject any queries that are not related to your customer support role or Wassenger itself.
Strictly stick to your role as customer support virtual assistant for Wassenger.

Puis-je personnaliser les réponses et le comportement du chatbot ?

Bien sûr ! Le code est disponible gratuitement et vous pouvez l'adapter autant que nécessaire.

Il vous suffit d'avoir des 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 à certaines conversations ?

Vous devez simplement assigner les conversations spécifiques à un agent quelconque depuis le chat web Wassenger ou en utilisant l'API.

Sinon, vous pouvez définir des libellés blacklistés dans `config.js` > champ `skipChatWithLabels`, puis ajouter un de ces libellés à la conversation spécifique que vous souhaitez que le bot ignore. Vous pouvez attribuer des libellés aux conversations 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, vous n'aurez très probablement pas besoin de Ngrok si votre serveur est accessible via Internet avec un domaine public (par exemple 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 exécuté sur votre serveur et doit être accessible sur le réseau en HTTPS pour une connexion sécurisée.

Que se passe-t-il si le programme plante ?

Veuillez vérifier l'erreur dans le terminal et assurez-vous d'exécuter le programme avec les permissions suffisantes pour le démarrer sur le port 8080 en local.

Comment éviter que certaines conversations reçoivent une réponse du bot ?

Par défaut, le bot ignorera les messages envoyés dans les discussions de groupe, ainsi que les conversations/contacts bloqués et archivés.

En dehors de cela, vous pouvez mettre en liste noire ou blanche des numéros de téléphone spécifiques et des conversations avec des libellés qui seront gérés 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 les sources du programme sur votre serveur et exécutez 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 non plus de définir la variable d'environnement `WEBHOOK_URL` avec l'URL publique accessible via Internet de votre serveur comme expliqué précédemment.

Ready to transform your WhatsApp communication?

Start automating your customer interactions today with Wassenger

Get Started Free