首页 > web前端 > js教程 > WhatsApp AI 聊天机器人:让我们用 API 构建一个聊天机器人

WhatsApp AI 聊天机器人:让我们用 API 构建一个聊天机器人

PHPz
发布: 2024-07-30 08:26:03
原创
1005 人浏览过

大家好,我是 Rohan,Spur 的创始人,Spur 是一款 WhatsApp API 和 Instagram 评论/DM 自动化软件。

几周前,我写了一篇博客,讨论应该在哪里构建 WhatsApp 集成。这是一篇关于该主题的高级文章,今天我们将学习如何开始使用 WhatsApp API?

让我们制作一个 WhatsApp AI 聊天机器人

今天,我们将制作一个在 Node 服务器上运行的简单机器人,从 WhatsApp Cloud API 接收 Webhook,读取消息并使用
OpenAI GPT 4o 发送响应。

想直接跳到代码吗?链接在底部。

获取 WhatsApp 测试号码和令牌

这相当简单,Meta 已经有这方面的指南。展望未来,我将假设

  1. 您已经创建了一个元应用程序
  2. 添加了 WhatsApp 产品
  3. 已获得测试号码,可以用它发送消息

对于令牌,您可以使用临时令牌,我们将在另一篇教程中介绍如何部署到生产环境。

设置节点服务器

如果您没有 pnpm 设置,这是最简单的方法

corepack enable
corepack prepare pnpm@latest --activate
登录后复制

现在我们开始

mkdir whatsapp-ai-bot

# intialize npm project
pnpm init

# make the server file
touch index.js

# env file
touch .env
登录后复制

立即安装所需的依赖项:

pnpm install express dotenv openai
登录后复制

切勿提交 API 密钥。为了将 API 密钥等敏感信息保留在代码库之外,我们将使用环境变量。在项目的根目录中创建一个 .env 文件并添加以下行:

OPENAI_API_KEY=<your-openai-api-key>
登录后复制

现在使用创建的index.js文件并添加以下代码

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);
});
登录后复制

并将package.json修改为

{
  "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"
  }
}
登录后复制

了解代码的工作原理

Image description

  1. 我们首先创建一个“GET”端点,以便当您在 Facebook 应用程序中设置 Webhook 时,挑战就会通过。我还在 .env.example 值中包含了一个验证令牌的值,您可以使用它。
  2. 然后是 POST 端点,它发挥了真正的作用。它接收文本,将其传递到 ChatGPT 并将响应发送给用户。

下一步

这个例子只是冰山一角,你可以做很多事情来改进它

  1. 为了实现幂等性,WhatsApp webhooks 不是唯一的并且可以重复。
  2. 添加内存聊天记录
  3. 使用 Redis/关系数据库保留内存
  4. 利用按钮等丰富内容作为响应(这需要构建 OpenAI 函数)

结论

就是这样。如果您也对我写的有关 WhatsApp 集成的文章感兴趣,可以在这里查看。

我还在 Spur 的 GitHub 组织上分享了工作示例的代码。

以上是WhatsApp AI 聊天机器人:让我们用 API 构建一个聊天机器人的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板