从零开始打造 WhatsApp AI 客服机器人:完整实战教程
Meta 最新开放第三方 AI 聊天机器人接入 WhatsApp,本文将手把手教你构建自己的 WhatsApp AI 客服系统。
2026 年 3 月,Meta 正式宣布在巴西和欧洲地区允许第三方 AI 公司通过 WhatsApp Business API 提供聊天机器人服务。这一政策变化为开发者和企业打开了新的大门——你可以将自己的 AI 客服机器人直接集成到全球最大的即时通讯平台中。
本文将带你从零开始,完整实现一个基于 WhatsApp Business API 和现代 AI 模型的智能客服机器人系统。
为什么选择 WhatsApp AI 客服机器人?
WhatsApp 拥有超过 20 亿月活跃用户,是全球最普及的通讯应用之一。对于企业来说,将客服系统集成到 WhatsApp 意味着:
- 触达率高:用户无需下载新应用,直接在熟悉的聊天界面中交互
- 打开率高:WhatsApp 消息的打开率高达 98%,远超邮件和短信
- 全球化支持:支持 100+ 国家,适合跨境电商和国际化业务
- 富媒体支持:支持文本、图片、视频、文档、位置等多种消息类型
- AI 集成友好:通过 Webhook 可轻松对接各类 AI 模型
前置准备
在开始之前,你需要准备以下材料:
1. WhatsApp Business API 访问权限
有两种方式获取:
方式一:通过 Meta 官方申请(推荐)
- 访问 Meta for Developers
- 创建 Business Manager 账户
- 申请 WhatsApp Business API 访问
- 验证企业信息(需要营业执照等文件)
方式二:通过 BSP(Business Solution Provider)
- 使用 Twilio、MessageBird、360dialog 等第三方服务商
- 审批流程更快,适合中小企业
- 会收取额外服务费
2. 开发环境
# 推荐技术栈 - Node.js 18+ 或 Python 3.9+ - 一个可公网访问的服务器(用于接收 Webhook) - 数据库(可选,用于存储对话历史)
3. AI 模型 API
可选择以下任一 AI 服务:
- Anthropic Claude:适合复杂对话和代码相关场景
- OpenAI GPT-4:通用能力强,生态完善
- Google Gemini:多模态支持好
- 本地部署模型:如 Llama 3,适合数据敏感场景
第一步:设置 WhatsApp Business API
1.1 创建 Meta 应用
登录 Meta for Developers 后:
- 点击”创建应用”
- 选择”其他” → “商务”
- 填写应用名称(如”My WhatsApp AI Bot”)
- 在应用仪表板中添加”WhatsApp”产品
1.2 配置 WhatsApp 号码
在 WhatsApp 产品设置中:
1. 进入"API 设置" 2. 点击"添加号码" 3. 选择"测试号码"(开发阶段)或"正式号码" 4. 验证号码(接收短信验证码)
测试号码可免费使用,但有消息限制。正式号码需要业务审核。
1.3 获取访问令牌
在”API 设置”页面,你会找到:
- 临时访问令牌(Temporary Access Token):有效期 24 小时,适合开发测试
- 永久访问令牌(System User Token):需要创建 System User 获取,适合生产环境
⚠️ 重要:将令牌保存在安全的位置,不要提交到代码仓库。
# 推荐方式:使用环境变量 export WHATSAPP_ACCESS_TOKEN="your_token_here" export WHATSAPP_PHONE_NUMBER_ID="your_phone_number_id" export WHATSAPP_BUSINESS_ACCOUNT_ID="your_business_account_id"
第二步:搭建 Webhook 服务器
Webhook 是 WhatsApp 向你发送消息的入口。当用户给你的号码发消息时,Meta 会 POST 请求到你的 Webhook URL。
2.1 使用 Node.js + Express 示例
// server.js
const express = require('express');
const crypto = require('crypto');
const axios = require('axios');
require('dotenv').config();
const app = express();
const PORT = process.env.PORT || 3000;
// 解析 JSON 请求体
app.use(express.json());
// WhatsApp 验证端点(首次设置时需要)
app.get('/webhook', (req, res) => {
const mode = req.query['hub.mode'];
const token = req.query['hub.verify_token'];
const challenge = req.query['hub.challenge'];
if (mode === 'subscribe' && token === process.env.WEBHOOK_VERIFY_TOKEN) {
console.log('Webhook 验证成功');
res.status(200).send(challenge);
} else {
res.status(403).send('验证失败');
}
});
// 接收消息的 Webhook 端点
app.post('/webhook', async (req, res) => {
const body = req.body;
// 验证消息来源
if (body.object === 'whatsapp_business_account') {
for (const entry of body.entry) {
for (const change of entry.changes) {
if (change.value.messages) {
for (const message of change.value.messages) {
await handleIncomingMessage(message);
}
}
}
}
res.status(200).send('EVENT_RECEIVED');
} else {
res.status(404).send('Not Found');
}
});
// 处理接收到的消息
async function handleIncomingMessage(message) {
const from = message.from; // 用户号码
const text = message.text?.body; // 消息内容
if (!text) return;
console.log(`收到来自 ${from} 的消息:${text}`);
// 调用 AI 模型生成回复
const aiReply = await generateAIReply(text);
// 发送回复给用户
await sendWhatsAppMessage(from, aiReply);
}
// 调用 AI 模型(以 Claude 为例)
async function generateAIReply(userMessage) {
try {
const response = await axios.post(
'https://api.anthropic.com/v1/messages',
{
model: 'claude-sonnet-4-20260128',
max_tokens: 1024,
system: '你是一个专业的客服助手,用友好、简洁的中文回答用户问题。',
messages: [{ role: 'user', content: userMessage }]
},
{
headers: {
'x-api-key': process.env.ANTHROPIC_API_KEY,
'anthropic-version': '2023-06-01',
'content-type': 'application/json'
}
}
);
return response.data.content[0].text;
} catch (error) {
console.error('AI API 调用失败:', error.message);
return '抱歉,我现在无法处理您的请求,请稍后再试。';
}
}
// 发送 WhatsApp 消息
async function sendWhatsAppMessage(to, text) {
const phoneId = process.env.WHATSAPP_PHONE_NUMBER_ID;
const token = process.env.WHATSAPP_ACCESS_TOKEN;
try {
await axios.post(
`https://graph.facebook.com/v21.0/${phoneId}/messages`,
{
messaging_product: 'whatsapp',
to: to,
type: 'text',
text: { body: text }
},
{
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
}
}
);
console.log(`消息已发送到 ${to}`);
} catch (error) {
console.error('发送消息失败:', error.response?.data || error.message);
}
}
app.listen(PORT, () => {
console.log(`Webhook 服务器运行在端口 ${PORT}`);
});
2.2 本地开发:使用 ngrok 暴露本地服务
# 安装 ngrok npm install -g ngrok # 启动你的服务器 node server.js # 在另一个终端运行 ngrok ngrok http 3000 # 复制生成的 URL(如 https://abc123.ngrok.io/webhook) # 在 Meta 开发者后台配置为此 Webhook URL
2.3 生产环境部署
推荐使用以下平台部署:
- Vercel:适合 Serverless 部署,免费额度充足
- Railway:简单易用,支持 Docker
- AWS Lambda + API Gateway:适合高并发场景
- 自有服务器:使用 Nginx 反向代理 + PM2 管理
第三步:设计 AI 客服对话流程
3.1 定义系统提示词(System Prompt)
系统提示词决定了 AI 的行为风格。以下是一个电商客服的示例:
你是一个专业的电商客服助手,名为"小智"。你的职责是: 1. 用友好、热情的语气回答用户问题 2. 对于产品咨询,提供准确的产品信息 3. 对于订单问题,引导用户提供订单号 4. 对于退换货问题,说明退换货政策 5. 遇到无法回答的问题,礼貌地转接人工客服 回答要求: - 使用简洁的中文,避免冗长 - 适当使用表情符号增加亲和力(但不过度) - 对于复杂问题,分点说明 - 始终保护用户隐私,不索要敏感信息
3.2 实现对话上下文管理
为了支持多轮对话,需要存储对话历史:
// 简单的内存存储(生产环境请用数据库)
const conversationHistory = new Map();
async function handleIncomingMessage(message) {
const from = message.from;
const text = message.text?.body;
// 获取或创建对话历史
if (!conversationHistory.has(from)) {
conversationHistory.set(from, []);
}
const history = conversationHistory.get(from);
// 添加用户消息到历史
history.push({ role: 'user', content: text });
// 保留最近 10 轮对话
if (history.length > 20) {
history.shift();
}
// 调用 AI(包含历史)
const aiReply = await generateAIReplyWithHistory(history);
// 添加 AI 回复到历史
history.push({ role: 'assistant', content: aiReply });
// 发送回复
await sendWhatsAppMessage(from, aiReply);
}
async function generateAIReplyWithHistory(history) {
const response = await axios.post(
'https://api.anthropic.com/v1/messages',
{
model: 'claude-sonnet-4-20260128',
max_tokens: 1024,
system: SYSTEM_PROMPT,
messages: history
},
{
headers: {
'x-api-key': process.env.ANTHROPIC_API_KEY,
'anthropic-version': '2023-06-01',
'content-type': 'application/json'
}
}
);
return response.data.content[0].text;
}
3.3 实现常见场景处理
场景一:产品咨询
// 在 AI 回复前,可以先查询产品数据库
async function getProductInfo(productName) {
// 查询你的产品数据库
const product = await db.products.findOne({ name: productName });
if (product) {
return `产品名称:${product.name}\n价格:¥${product.price}\n库存:${product.stock}件\n描述:${product.description}`;
}
return null;
}
场景二:订单查询
async function getOrderStatus(orderId) {
const order = await db.orders.findOne({ orderId });
if (order) {
return `订单 ${orderId} 当前状态:${order.status}\n预计送达:${order.estimatedDelivery}`;
}
return '未找到该订单,请检查订单号是否正确。';
}
场景三:转接人工客服
async function escalateToHuman(from) {
// 发送通知到客服团队
await sendSlackNotification(`新用户 ${from} 请求人工客服`);
// 告知用户
return '已为您转接人工客服,客服人员将在 5 分钟内与您联系。';
}
第四步:发送消息模板
WhatsApp 对主动发送给用户消息有限制,但允许发送”模板消息”。模板需要预先审核。
4.1 创建消息模板
在 Meta Business Manager 中:
- 进入”消息模板”
- 点击”创建模板”
- 选择模板类型(营销、实用、身份验证)
- 填写模板内容,使用变量占位符
示例模板(订单确认):
模板名称:order_confirmation
语言:中文(简体)
类别:实用
内容:
您好 {{1}},您的订单 {{2}} 已确认。
预计送达时间:{{3}}
订单详情:{{4}}
如有问题请回复本消息。
4.2 发送模板消息
async function sendTemplateMessage(to, templateName, language, components) {
const phoneId = process.env.WHATSAPP_PHONE_NUMBER_ID;
const token = process.env.WHATSAPP_ACCESS_TOKEN;
await axios.post(
`https://graph.facebook.com/v21.0/${phoneId}/messages`,
{
messaging_product: 'whatsapp',
to: to,
type: 'template',
template: {
name: templateName,
language: { code: language },
components: components
}
},
{
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
}
}
);
}
// 使用示例
await sendTemplateMessage(
'8613800138000',
'order_confirmation',
'zh_CN',
[
{
type: 'body',
parameters: [
{ type: 'text', text: '张先生' },
{ type: 'text', text: 'ORD20260308001' },
{ type: 'text', text: '2026 年 3 月 10 日' },
{ type: 'text', text: 'iPhone 16 Pro x 1' }
]
}
]
);
第五步:测试与优化
5.1 本地测试
# 使用 curl 模拟 WhatsApp Webhook
curl -X POST http://localhost:3000/webhook \
-H "Content-Type: application/json" \
-d '{
"object": "whatsapp_business_account",
"entry": [{
"changes": [{
"value": {
"messages": [{
"from": "8613800138000",
"text": { "body": "你好,我想咨询产品价格" },
"type": "text"
}]
}
}]
}]
}'
5.2 关键指标监控
建议监控以下指标:
| 指标 | 说明 | 目标值 |
|---|---|---|
| 响应时间 | AI 生成回复的平均时间 | < 3 秒 |
| 解决率 | 无需人工介入的对话比例 | > 70% |
| 用户满意度 | 对话结束后用户评分 | > 4.0/5.0 |
| 转人工率 | 需要转接人工的对话比例 | < 30% |
5.3 持续优化建议
- 收集用户反馈:在对话结束后邀请用户评分
- 分析失败案例:定期检查转人工的对话,优化 AI 回答
- 更新知识库:根据新产品、新政策及时更新系统提示词
- A/B 测试:测试不同的提示词和回复风格
费用说明
WhatsApp Business API 定价
Meta 按对话收费(2026 年最新价格):
| 对话类型 | 巴西价格 | 欧洲价格 | 说明 |
|---|---|---|---|
| 营销对话 | $0.0625/条 | €0.055/条 | 促销、广告等 |
| 实用对话 | $0.03/条 | €0.027/条 | 订单确认、物流通知等 |
| 身份验证 | $0.015/条 | €0.013/条 | 验证码、登录确认等 |
| 客服对话 | $0.0075/条 | €0.0065/条 | 用户主动发起的咨询 |
注意:24 小时会话窗口内,同一用户的多条消息只计一次对话费用。
AI 模型费用
以 Claude Sonnet 为例:
- 输入:$3/百万 tokens
- 输出:$15/百万 tokens
一般客服对话每次约消耗 500-1000 tokens,单次成本约 $0.01-0.02。
常见问题解答
Q1: 个人开发者可以申请 WhatsApp Business API 吗?
可以,但需要注册为商家并提供相关业务信息。个人用途建议使用测试号码进行开发学习。
Q2: 支持发送图片和文件吗?
支持。可以通过 API 发送图片、视频、音频、文档、位置、联系人等多种消息类型。
Q3: 如何处理非工作时间?
可以设置自动回复,告知用户工作时间,或配置 AI 在夜间切换到”离线模式”,仅收集问题而非实时回复。
Q4: 多语言支持如何实现?
在系统提示词中说明支持的语言,或在对话开始时检测用户语言,动态调整 AI 的回复语言。
Q5: 数据安全如何保障?
- 使用 HTTPS 加密所有通信
- 不存储用户敏感信息(如信用卡号)
- 定期删除对话历史
- 遵守 GDPR 等数据保护法规
总结
通过本文,你已经掌握了从零构建 WhatsApp AI 客服机器人的完整流程:
- ✅ 申请 WhatsApp Business API 访问权限
- ✅ 搭建 Webhook 服务器接收消息
- ✅ 集成 AI 模型生成智能回复
- ✅ 实现对话上下文管理
- ✅ 发送模板消息和富媒体内容
- ✅ 测试、监控和持续优化
WhatsApp 开放第三方 AI 聊天机器人是一个重大机遇。无论是电商客服、预约提醒、还是用户支持,AI 驱动的 WhatsApp 机器人都能显著提升效率和用户体验。
下一步行动:
- 注册 Meta for Developers 账户
- 申请测试号码开始实验
- 根据你的业务场景定制 AI 提示词
- 逐步扩展到正式号码和生产环境
祝你的 WhatsApp AI 客服机器人项目顺利上线!🚀