Rumah > hujung hadapan web > tutorial js > WhatsApp AI Chatbot: Mari kita bina satu dengan API

WhatsApp AI Chatbot: Mari kita bina satu dengan API

PHPz
Lepaskan: 2024-07-30 08:26:03
asal
1006 orang telah melayarinya

Hai, saya Rohan, pengasas Spur, API WhatsApp & Komen Instagram/Perisian Automasi DM.

Beberapa minggu yang lalu, saya menulis blog di mana anda harus membina integrasi WhatsApp atau tidak. Itu adalah artikel peringkat tinggi mengenai topik itu, hari ini kita akan belajar tentang cara anda bermula dengan API WhatsApp?

Jom buat WhatsApp AI Chatbot

Hari ini, kami akan membuat bot ringkas yang berjalan pada pelayan Node, mengambil webhooks daripada WhatsApp Cloud API, membaca mesej & menggunakan
OpenAI GPT 4o untuk menghantar respons.

Mahu melompat terus ke kod? Pautan ada di bahagian bawah.

Dapatkan Nombor & Token Ujian WhatsApp

Ini agak mudah, dan Meta sudah mempunyai panduan tentang perkara ini. Melangkah ke hadapan, saya akan menganggap

  1. Anda telah mencipta Apl Meta
  2. Menambahkan produk WhatsApp
  3. Mendapat nombor ujian dan boleh menghantar mesej daripadanya

Untuk token, anda boleh menggunakan token sementara, kami akan meliputi penggunaan kepada pengeluaran dalam tutorial lain suatu hari nanti.

Menyediakan Pelayan Nod

jika anda tidak mempunyai persediaan pnpm, ini adalah cara paling mudah

corepack enable
corepack prepare pnpm@latest --activate
Salin selepas log masuk

sekarang kita mulakan

mkdir whatsapp-ai-bot

# intialize npm project
pnpm init

# make the server file
touch index.js

# env file
touch .env
Salin selepas log masuk

Pasang kebergantungan yang diperlukan sekarang:

pnpm install express dotenv openai
Salin selepas log masuk

Jangan sekali-kali melakukan kunci API. Untuk menyimpan maklumat sensitif seperti kunci API daripada pangkalan kod, kami akan menggunakan pembolehubah persekitaran. Cipta fail .env dalam direktori akar projek anda dan tambah baris berikut:

OPENAI_API_KEY=<your-openai-api-key>
Salin selepas log masuk

Sekarang gunakan fail index.js yang dibuat dan tambah kod berikut

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);
});
Salin selepas log masuk

dan juga mengubah suai package.json kepada

{
  "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"
  }
}
Salin selepas log masuk

Memahami cara kod berfungsi

Image description

  1. Kami mula-mula membuat titik akhir "GET" supaya apabila anda menetapkan webhook dalam apl Facebook, cabaran itu akan berlalu. Saya juga telah memasukkan nilai untuk token pengesahan dalam nilai .env.example yang boleh anda gunakan.
  2. Kemudian datang titik akhir POST, yang melakukan keajaiban sebenar. Ia mengambil teks, menghantarnya ke ChatGPT dan menghantar respons itu kepada pengguna.

Langkah Seterusnya

Contoh ini hanyalah puncak gunung ais, terdapat begitu banyak perkara yang boleh anda lakukan untuk memperbaikinya

  1. Untuk melaksanakan idempotency, webhook WhatsApp bukan unik dan boleh berulang.
  2. Tambah sejarah sembang dalam ingatan
  3. Kekalkan ingatan itu dengan pangkalan data Redis/hubungan
  4. Gunakan kandungan kaya seperti butang dsb. sebagai respons (ini memerlukan fungsi OpenAI untuk dibina)

Kesimpulan

Jadi itu sahaja. Jika anda juga berminat dengan artikel yang saya tulis tentang integrasi WhatsApp, anda boleh menyemaknya di sini.

Saya juga telah berkongsi kod contoh kerja pada organisasi GitHub Spur.

Atas ialah kandungan terperinci WhatsApp AI Chatbot: Mari kita bina satu dengan API. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan