WhatsApp机器人被广泛用于客户支持、自动回复、通知以及内部工具。你无需依赖昂贵的第三方平台,而是可以使用现代的开源工具来构建并部署自己托管的WhatsApp机器人。

在本教程中,你将学习如何使用以下工具来构建和部署一个可投入实际使用的WhatsApp机器人:

  • FastAPI

  • Evolution API

  • Docker

  • EasyPanel

  • Google Cloud Platform (GCP)

完成本指南的学习后,你将拥有一个能够正常运行的WhatsApp机器人,它会被连接到你的个人WhatsApp账户,并部署在云虚拟机上。

目录

系统架构的工作原理

在开始安装任何软件之前,让我们先了解这个系统的运作机制。

该图展示了WhatsApp消息是如何从用户的WhatsApp应用程序发送出去,经过WhatsApp服务器,然后通过防火墙、Docker和EasyPanel传输到GCP虚拟机中,最终由Evolution API接收并触发FastAPI机器人来处理逻辑,再将回复通过WhatsApp发送给用户的。

你的WhatsApp机器人的工作原理

在继续进行设置之前,让我们先确保你明白幕后实际发生了什么。别担心——这里不需要任何技术背景知识。

想象一种邮政服务

可以把你的WhatsApp机器人想象成一种速度极快、完全自动化的邮政服务:

  • 有人给你发了一封邮件(一条WhatsApp消息)。

  • 一位“邮递员”(Evolution API)会接收这条消息,并将其送到你的“办公室”。

  • 你的“办公室经理”(FastAPI机器人)会阅读这条消息并回复。

  • 那位“邮递员”又会将回复送回去。

就是这么简单的,整个系统就是这样的运作流程。

7个步骤

  1. 有人给你的WhatsApp号码发送消息——就像给朋友发短信一样。

  2. Evolution API会检测到这条消息——它会持续监控你的WhatsApp号码,随时等待新消息的到来,就如同前台接待员时刻守在电话旁一样。

  3. Evolution API会将这条消息传递给你的机器人——它会把消息内容发送到你的应用程序中,并告诉你“嘿,你有一条新消息!”

  4. 你的机器人会阅读这条消息并决定如何回复——这就是你的代码发挥作用的地方。

  5. 你的机器人会将回复发送回Evolution API——“好的,请发送这个回复吧。”

  6. Evolution API会通过WhatsApp将回复送达给对方。

  7. 用户通常会在几秒钟内就在自己的手机上看到这条回复。

一句话总结

用户 → WhatsApp → Evolution API → 你的机器人 → Evolution API → WhatsApp → 用户

本指南中的每一步其实都在搭建这个流程中的某个环节。一旦所有环节都连接起来,整个系统就能自动运行了。

这种架构能让你实现自动回复功能,同时还能让你完全掌控自己的基础设施。

为什么选择这些工具?

让我们简要了解一下为什么会选择这些工具。

FastAPI

FastAPI是一个用于构建API的现代Python框架。它运行速度快、体积轻,非常适合处理来自Evolution API的Webhook请求。

Evolution API

Evolution API是一个基于Baileys构建的自助式WhatsApp自动化服务器。使用它可以直接连接你的个人WhatsApp账户,而无需获得官方的WhatsApp Business API授权。

Docker

Docker允许我们在容器中运行应用程序。这样可以让部署过程更加一致、便于迁移,并且能够直接用于生产环境。

EasyPanel

EasyPanel是一个用于管理Docker服务的图形化工具。我们不需要手动编写Docker Compose配置文件,而是可以通过EasyPanel的界面轻松地部署和管理我们的服务。

Google Cloud Platform (GCP)

GCP提供了用于托管我们基础设施的虚拟机。我们将使用Ubuntu 22.04服务器来运行Docker、EasyPanel、Evolution API以及我们的FastAPI机器人。

我之所以选择这些工具,是因为它们非常实用、体积轻巧,而且非常适合在实际生产环境中使用。

先决条件

在开始之前,请确保你满足以下要求:

  • 拥有Google Cloud、AWS或Azure账户。

  • 已开启计费功能。

  • 已经选择了一个项目。

  • 能够使用Cloud Shell。

  • 具备基本的Linux和Docker知识。

步骤1:在GCP上创建防火墙规则

我们需要允许流量进入虚拟机上的特定端口。因此,我们在GCP Cloud Shell中运行以下命令:

gcloud compute firewall-rules create easypanel-whatsapp-fw \
 --network default \
 --direction INGRESS \
 --priority 1000 \
 --action ALLOW \
 --rules tcp:22,tcp:80,tcp:443,tcp:3000,tcp:8080,tcp:9000,tcp:5000-5999 \
 --source-ranges 0.0.0.0/0 \
 --description "SSH、EasyPanel、Evolution API、Bot"

这条命令的作用是:

  • 创建一个名为easypanel-whatsapp-fw防火墙规则

  • 应用于default网络

  • 允许外部互联网流量进入(INGRESS方向)

  • 开放以下端口:

    • 22 → SSH(用于服务器访问)

    • 80 → HTTP

    • 443 → HTTPS

    • 3000, 8080, 9000 → 应用程序面板/API接口

    • 5000–5999 → 自定义应用程序端口范围

  • 允许任何IP地址访问该虚拟机(0.0.0.0/0

简单来说,这条规则使得外部用户能够通过互联网访问你的应用程序和服务。它允许外部流量进入你的虚拟机。

步骤2:创建一台虚拟机(Ubuntu 22.04系统)

现在我们要创建一台用于托管所有服务的服务器。在GCP Cloud Shell中运行以下命令,来配置一台安装了Ubuntu 22.04系统的虚拟机。

gcloud compute instances create whatsapp-vm \
  --zone=asia-south1-a \
  --machine-type=e2-medium \
  --image-family=ubuntu-2204-lts \
  --image-project=ubuntu-os-cloud \
  --boot-disk-size=30GB \
  --tags=easypanel

这条命令会在Google Cloud上创建一台新的虚拟机:

  • 名称: whatsapp-vm

  • 位置(所在区域): asia-south1-a(印度地区)

  • 机器配置: e2-medium(2个CPU核心,4GB内存)

  • 操作系统: Ubuntu 22.04 LTS

  • 磁盘容量: 30GB

  • 标签: easypanel(用于应用防火墙规则)

这样,你就在Google Cloud上获得了一台Linux服务器,可以用来运行EasyPanel、WhatsApp机器人程序或你的API服务。

注意:请等待大约一分钟,让虚拟机启动完成。

步骤3:通过SSH登录到虚拟机

使用SSH连接到你在Google Cloud上刚刚创建的虚拟机。

gcloud compute ssh whatsapp-vm --zone=asia-south1-a

这条命令会使用SSH协议,连接到位于asia-south1-a区域的whatsapp-vm虚拟机。

登录成功后,你就可以开始安装软件或运行各种命令了。此时你会看到终端提示符,说明你已经成功进入了Ubuntu服务器环境,可以开始后续操作了。

步骤4:安装Docker

要运行EasyPanel和Evolution API,必须安装Docker。

首先更新系统:

sudo apt update -y
sudo apt install -y curl

这个命令会完成两件事:

  1. sudo apt update -y→ 更新服务器上的软件包列表,使可用软件的信息保持最新。

  2. sudo apt install -y curl→ 安装curl工具,该工具可用于通过终端从互联网下载文件。

这样就可以为服务器做好准备,并安装一个用于下载及安装其他软件的工具。

接下来安装Docker:

curl -fsSL https://get.docker.com | sudo sh

这个命令使用curl下载Docker的官方安装脚本,然后通过|符号将脚本直接传递给sudo sh,从而以管理员权限运行该脚本。

这样就能在服务器上自动安装Docker了。

安装完成后,Docker就应该已经成功安装好了。

启用Docker:

sudo systemctl enable docker
sudo systemctl start docker

这个命令也会完成两件事:

  1. enable docker→ 使Docker在服务器每次重启时自动启动。

  2. start docker→ 立即启动Docker。

这样就能确保Docker始终处于开启状态,即使在服务器重启后也能继续运行。

允许Ubuntu用户使用Docker:

sudo usermod -aG docker ubuntu

这个命令会将ubuntu用户添加到Docker组中。

这一点非常重要:默认情况下,每次使用Docker命令时都需要先输入sudo。但执行这条命令后,Ubuntu用户就可以直接使用Docker而无需再输入sudo了。

注意:这条命令假设你的用户名是ubuntu,因为这是Google Cloud虚拟机的默认设置。如果你的用户名不同,请将ubuntu替换成你的实际用户名。

退出当前会话并重新连接:

exit
gcloud compute ssh whatsapp-vm --zone=asia-south1-a
  1. exit→ 使你退出当前的服务器会话。

  2. gcloud compute ssh whatsapp-vm --zone=asia-south1-a→ 使你重新连接到Google Cloud虚拟机。

为什么要这样做:在将ubuntu用户添加到Docker组后,必须先退出会话然后再重新连接,这样才能使权限变更生效。

测试Docker:

docker run hello-world

这个命令会下载一个名为hello-world的小型测试镜像,在Docker环境中运行它,如果Docker运行正常,就会显示成功信息。

这个命令用于检查Docker是否已经安装完成并且能够正常工作。如果你看到了“Hello from Docker!”这样的提示,那就说明Docker运行成功了。

步骤5:安装EasyPanel

EasyPanel提供了一个用于部署Docker服务的用户界面。在虚拟机中运行以下命令:

curl -sSL https://get.easypanel.io | sudo bash

这个命令会:

  • 下载官方的EasyPanel安装脚本

  • 以管理员权限(sudo)运行该脚本

  • 自动在您的服务器上安装并配置EasyPanel

该命令会在您的虚拟机上安装EasyPanel,这样您就可以通过网页界面来管理应用程序,而无需使用命令行。安装过程大约需要一分钟。

步骤6:打开EasyPanel控制面板

获取到自己的IP地址后,在浏览器中打开一个新的标签页,然后输入如下地址:

http://:3000

例如,如果您的IP地址是34.123.45.67,那么您应该输入:

http://34.123.45.67:3000

EasyPanel默认在端口3000上运行,因此我们在地址末尾添加了”:3000″。如果没有这个部分,您的浏览器将不知道应该在服务器上打开哪个服务。

创建一个管理员账户并登录,此时会出现EasyPanel的登录页面。

点击“创建管理员账户”按钮。

填写以下信息:

  • 用户名(请选择容易记住的名称)

  • 电子邮件地址

  • 密码(设置一个强度较高的密码!)

  • 提交表格。

现在您已经以管理员身份登录成功,可以通过EasyPanel控制面板来管理应用程序、API和机器人了。

您会看到如下所示的页面:

easypanel page

步骤7:部署Evolution API

  1. 创建一个新项目(例如:whatsapp-1

  2. 进入“服务”→“模板”选项卡

  3. 选择Evolution API

  4. 部署最新版本

等待所有服务状态变为绿色。此时您会看到如下所示的页面。

Deploying evolution-api

接下来,打开“环境变量”设置,找到以下变量:

AUTHENTICATION_API_KEY

复制AUTHENTICATION_API_KEY的值。

打开Evolution API的控制面板

在EasyPanel中找到您的Evolution API服务。您会看到一个可点击的域名链接,其格式通常如下:

https://evolution-api.easypanel.host

点击该链接,在浏览器中打开它。系统会返回一个JSON响应,确认该服务已经成功运行。

一旦你点击该链接,就会看到一个确认操作成功的JSON响应。要继续进行登录操作,请复制响应中显示的管理员链接。这个链接会打开管理控制面板,在那里你可以完成身份验证并开始使用Evolution API。下方的截图标出了管理员URL以及版本信息,以便你随时参考。

管理员URL

复制管理员链接,然后在新的标签页中打开它。接下来,再复制你在上一步中获得的AUTHENTICATION_API_KEY。其具体格式如下所示:

Evolution管理员链接

创建一个新的实例:

  • 选择频道:Baileys

  • 将电话号码留空

  • 为你的实例起一个名字

保存这个实例。

步骤8:连接WhatsApp

在你的实例管理控制面板中:

  1. 点击获取QR码

  2. 使用手机上的WhatsApp扫描该QR码

连接成功后,你的聊天记录和联系人信息将会自动同步。如果同步失败,请断开连接后再重新尝试。

步骤9:部署FastAPI机器人

现在我们开始部署这个机器人服务。

1. 进入EasyPanel

你正在打开刚刚安装的EasyPanel管理控制面板。在这里,你可以使用图形界面来管理应用程序、服务器和服务,而无需使用终端命令。

2>创建一个新的项目

“项目”就像是你的机器人服务的容器或文件夹,它用于整理与该应用相关的所有文件、设置和部署信息。

3>添加一个应用服务

“应用服务”指的是你的应用程序的运行实例。在这个例子中,它就是WhatsApp机器人。

4>选择Git部署方式

通过Git部署,你可以将代码仓库连接到EasyPanel。这样,EasyPanel会自动从GitHub下载你的代码,并在Docker环境中运行它。

5>粘贴你的代码仓库URL

https://github.com/rajumanoj333/wabot

这个GitHub仓库中存放着WhatsApp机器人的代码。EasyPanel会自动克隆这个仓库并准备好应用程序的部署环境。

6>在EasyPanel中配置域名

这一环节允许你为你的应用服务指定一个URL或域名。即使你没有自定义域名,也可以使用服务器的公共IP地址。你的WhatsApp机器人应用程序会在服务器上的9000端口运行。

7>将端口号设置为9000

通过将端口号设置为9000,EasyPanel就能知道应该将流量发送到哪里。

完成这一步骤后,URL格式如下:

https://your-project.easypanel.host

这是人们(以及其他服务)用来联系你的机器人的公共地址。

你正在告诉 EasyPanel:

“每当有人访问这个项目时,将他们转发到运行在 9000 端口的机器人服务上。”

如果没有这一步,机器人服务虽然会运行,但你无法通过浏览器或其他应用程序访问它

配置环境变量

设置以下变量:

EVOLUTION_API_URL=http://evolution-api:8080
EVOLUTION_API_KEY=YOUR_AUTHENTICATION_API_KEY
INSTANCE_NAME=your_instance_name

注意:这里有两个不同的名称——AUTHENTICATION_API_KEY(在 EasyPanel 中使用)和 EVOLUTION_API_KEY(在你的机器人代码中使用)。其实它们是同一个密钥。只需将 EasyPanel 中的值复制并粘贴到这两个地方即可。

步骤 10:连接 Webhook —— 告诉 Evolution API 将消息发送到哪里

目前,你有两个独立运行的服务:

  1. Evolution API:负责与 WhatsApp 连接并处理消息的服务

  2. 你的应用程序(fastapi 机器人):你在前几步中部署的聊天机器人

目前,这两个服务并不知道对方的存在。它们就像住在不同房间里的两个人,无法互相传递信息。而Webhook正好可以解决这个问题。

那么,Webhook 到底是什么呢?

Webhook 实际上就是一个 URL(网址),你将其提供给某个服务,这样当有事情发生时,该服务就可以自动通知另一个服务。

你要告诉 Evolution API:“每当有 WhatsApp 消息到达时,就将其转发到这个地址。”你的应用程序会驻留在这个地址上,等待接收消息、读取内容并发送回复。

可以把它想象成邮局的一个转寄地址。当邮件(也就是 WhatsApp 消息)到达时,它会自动被转发到你的应用程序那里。

让我们来设置它吧

1. 打开你的 Evolution API 控制面板。

根据之前的步骤,你应该已经打开了这个界面。在左侧边栏中,点击Events,然后再点击Webhook。在这里你可以配置 Evolution API 如何将数据发送给你的应用程序。

2>启用 webhook。

在页面顶部,你会看到“Enabled”这个词旁边有一个开关按钮。点击它,使其变为绿色。这样就表示你希望开始使用 webhook 了。

3>输入你的应用程序的 webhook URL。

URL字段中,输入你的应用程序地址,并在末尾加上/webhook,例如:

https://your-domain.easypanel.host/webhook

your-domain替换为你在部署应用程序时设置的实际域名。末尾的/webhook这部分非常重要:它是你的应用程序专门为接收这些消息而设置的页面。如果没有这个地址,Evolution API 就会发送消息到错误的地方。

4. 目前先不要启用“通过事件触发Webhook”和“Webhook Base64”选项。

这些都是高级设置,对于基本的聊天机器人来说并不需要。

5. 向下滚动到“事件”部分,然后启用以下两个事件:

  • MESSAGES_UPSERT:每当有人向你的WhatsApp号码发送消息时,这个事件就会被触发。如果不启用这个选项,你的应用程序就无法知道有新消息到达。

  • SEND_MESSAGE:当有消息被发送出去时,这个事件会被触发。它有助于确保回复能够正常发送出去。

其他所有事件(比如APPLICATION_STARTUP)都可以保持未启用的状态。它们处理的是群聊或联系人信息更新等功能,而我们当前的项目并不需要这些功能。

6. 点击“保存”。

对你刚刚所做的操作的简要总结

你已经在Evolution API和你的应用程序之间建立了直接的联系。现在,每当有人向你的WhatsApp号码发送消息时,Evolution API会立即将这条消息传递给你的应用程序。你的应用程序会自动读取消息、生成回复,并将其发回去。

正是这个步骤让你的聊天机器人真正“活”了起来。如果没有这个设置,别人发给你的消息根本不会被处理;而有了它,整个系统就能正常运转了。

第11步:最终测试

使用另一个WhatsApp号码发送一条消息(不要使用已经关联的号码)。

发送内容如下:

Hi

如果配置正确,你的聊天机器人应该会回复:

👋 Hello! Bot is working.

恭喜!你的WhatsApp聊天机器人现在已经可以正常使用了。

生产环境下的注意事项

在实际部署时,请考虑以下几点:

Comments are closed.