Maison >interface Web >js tutoriel >WhatsApp AI Chatbot : construisons-en un avec l'API
Salut, je m'appelle Rohan, fondateur de Spur, une API WhatsApp et un logiciel d'automatisation de commentaires/DM Instagram.
Il y a quelques semaines, j'ai écrit un blog sur les endroits où vous devriez ou non créer une intégration WhatsApp. Il s'agissait d'un article de haut niveau sur le sujet. Aujourd'hui, nous allons apprendre comment démarrer avec l'API WhatsApp ?
Aujourd'hui, nous allons créer un robot simple qui s'exécute sur un serveur Node, récupère les webhooks de l'API WhatsApp Cloud, lit les messages et utilise le
OpenAI GPT 4o pour envoyer une réponse.
Vous voulez accéder directement au code ? Le lien est en bas.
C'est assez simple, et Meta a déjà un guide à ce sujet. À l'avenir, je vais supposer
Pour le jeton, vous pouvez utiliser le jeton temporaire, nous aborderons le déploiement en production dans un autre tutoriel un jour.
Si vous n'avez pas de configuration pnpm, c'est le moyen le plus simple
corepack enable corepack prepare pnpm@latest --activate
maintenant, nous commençons
mkdir whatsapp-ai-bot # intialize npm project pnpm init # make the server file touch index.js # env file touch .env
Installez les dépendances requises maintenant :
pnpm install express dotenv openai
Ne validez jamais les clés API. Pour conserver les informations sensibles telles que les clés API hors de la base de code, nous utiliserons des variables d'environnement. Créez un fichier .env dans le répertoire racine de votre projet et ajoutez la ligne suivante :
OPENAI_API_KEY=<your-openai-api-key>
Utilisez maintenant le fichier index.js créé et ajoutez le code suivant
import express from 'express'; import { config } from 'dotenv'; import OpenAI from 'openai'; // Load environment variables config(); // Create a web server const app = express(); const port = process.env.PORT || 3034; app.listen(port, () => { console.log(`Server running on port ${port}`); }); // Add middleware to parse JSON bodies app.use(express.json()); // Initialize OpenAI API const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY, }); app.get('/webhooks', (req, res) => { if ( req.query['hub.mode'] === 'subscribe' && req.query['hub.verify_token'] === '1234' ) { res.send(req.query['hub.challenge']); } else { res.sendStatus(400); } }); app.post('/webhooks', async (req, res) => { const body = req.body.entry[0].changes[0]; if (body.field !== 'messages') { // not from the messages webhook so dont process return res.sendStatus(200); } if (!body.value.messages) { return res.sendStatus(200); } const text = body.value.messages .map((message) => message.text.body) .join('\n\n'); console.log(text); const completion = await openai.chat.completions.create({ model: 'gpt-4o-mini', messages: [{ role: 'user', content: text }], }); // Extract the response from the OpenAI completion const aiResponse = completion.choices[0].message.content; // Extract the phone number from the incoming message const phoneNumber = body.value.messages[0].from; // Prepare the message payload const messagePayload = { messaging_product: 'whatsapp', to: phoneNumber, type: 'text', text: { body: aiResponse, }, }; // Send the response back to WhatsApp try { const response = await fetch( `https://graph.facebook.com/v20.0/${process.env.PHONE_NUMBER_ID}/messages`, { method: 'POST', headers: { Authorization: `Bearer ${process.env.SYSTEM_TOKEN}`, 'Content-Type': 'application/json', }, body: JSON.stringify(messagePayload), }, ); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } console.log('Message sent successfully'); } catch (error) { console.error('Failed to send message:', error); } res.sendStatus(200); });
et modifiez également le package.json en
{ "name": "whatsapp-ai-bot", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "start": "node server.js", "dev": "nodemon server.js" }, "keywords": [], "author": "", "license": "ISC", "type": "module", "packageManager": "pnpm@9.6.0", "dependencies": { "dotenv": "^16.4.5", "express": "^4.19.2", "openai": "^4.53.2" }, "devDependencies": { "nodemon": "^3.1.4" } }
Cet exemple n'est que la pointe de l'iceberg, il y a tellement de choses que vous pouvez faire pour améliorer cela
Donc c'est tout. Si vous êtes également intéressé par l'article que j'ai écrit sur l'intégration de WhatsApp, vous pouvez le consulter ici.
J'ai également partagé le code de l'exemple de travail sur l'organisation GitHub de Spur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!