这是一个基于 Next.js 开发的微信公众号对接 ChatGPT 程序,可以通过微信公众号直接向 ChatGPT 提问并获取答案。
克隆本仓库到本地,并进入项目目录。
git clone https://github.com/CyrusZhou-CN/MP_WeiXin_ChatGPT.git cd MP_WeiXin_ChatGPT
https://github.com/CyrusZhou-CN/MP_WeiXin_ChatGPT.git
在项目根目录创建一个 .env 文件。
在 .env 文件中添加以下配置参数,并替换为实际的参数值。
APP_ID=your_app_id APP_SECRET=your_app_secret TOKEN=your_token ENCODING_AES_KEY=(开启 安全模式 时需要) SUBSCRIBE_REPLY=欢迎关注,可直接向ChatGPT提问 CONTENT_TOO_LONG=答案太长,超时了,请重新提问 OPENAI_API_KEY=your_openai_api_key OPENAI_MODEL=gpt-3.5-turbo OPENAI_TIMEOUT=60000 IS_AUTHENTICATED=false SECRET_COOKIE_PASSWORD=(可以用命令生成openssl rand -hex 16) MYSQL_HOST=localhost MYSQL_PORT=6306 MYSQL_USER=weixin MYSQL_PASSWORD=weixin MYSQL_DATABASE=weixin VERCEL=false
将以上配置参数中的 your_app_id、your_app_secret、your_token、your_encoding_aes_key 和 your_openai_api_key 分别替换为通过 公众号开发者平台 获取的实际参数值和 OpenAI API Key。
注意:在微信公众号管理后台中,URL 的地址是以您的服务器地址为开头的完整地址,如 http://yourdomain.com/api/wechat
docker compose up -d
在项目根目录执行以下命令,安装依赖包。
npm install
验证数据库
npm test
执行以下命令,启动开发服务器。
npm run dev
在微信公众号管理后台中配置服务器地址,并将 Token 填写为配置文件中的 TOKEN 参数值。
提交配置并启用服务。
访问微信公众号,开始测试程序。
数据库中创建了两个数据表,分别为 system_log 和 reply_cache。
- `id`:主键,自增长的唯一标识符。 - `level`:日志级别,支持的值包括 'error', 'warn', 'info', 'debug'。 - `message`:日志内容。 - `createdAt`:记录创建时间。 - `updatedAt`:记录更新时间。
- `id`:主键,自增长的唯一标识符。 - `msgId`:消息的唯一标识符,在微信公众号中作为消息的身份标识符。 - `responseId`:关联的回答的随机识符。 - `input`:用户的提问内容。 - `reply`:ChatGPT 的回答内容 - `ask` int(11) NOT NULL 微信公众号请求次数。 - `createdAt`:记录创建时间。 - `updatedAt`:记录更新时间。 - `expireAt`:缓存过期时间,用于控制缓存的有效期。
在应用程序中,我们使用 sequelize 模块来操作缓存,并将缓存保存到了 reply_cache 数据表中。
数据库文件位于db\mysql_init.sql
在项目根目录执行以下命令,打包应用程序。
npm run build
将生成的 .next 目录和 package.json .env next.config.js next-utils.config.js next-i18next.config.js 文件上传到服务器。
在服务器上执行以下命令,安装依赖包。
npm install
在服务器上执行以下命令,启动应用程序。
npm start
在微信公众号管理后台中配置服务器地址,并将 Token 填写为配置文件中的 TOKEN 参数值。
提交配置并启用服务。
访问微信公众号,开始使用程序。
有问题可以在微信公众平台接口调试工具中进行调试
如果你的服务器不支持外部接入微信公众号,你可以使用 PHP 请求代理程序,将接收到的请求经过处理后转发到支持接口的 Next.js 应用程序中。
使用方法如下:
复制 ./php/proxy.php 文件的内容,新建一个 proxy.php 文件,并将内容粘贴进去。
将 'https://*.vercel.app/api/wechat' 替换为你在上述步骤中部署的 Next.js 应用程序的 URL 地址。
将 proxy.php 文件上传到支持 PHP 服务的服务器中,并记住文件所在的 URL 地址。
在微信公众号管理后台中将服务配置为该 PHP 文件的 URL 地址。
如果你使用的是 Vercel,需要注意 Vercel 的函数默认超时时间是 10 秒,而 ChatGPT 处理大量文本时可能会需要更长的时间,因此容易出错。因此,建议在自己的服务器上部署应用程序。
由于Vercel 不支持sqlite,Vercel提供了基于云的PostgreSQL数据库服务替代方案。
登录后台点击Storage创建Postgres数据库
设置Environment Variables
Vercel Postgres 的链接配置可以在数据库的.env.local选项卡进行查看
本项目的对应设置
DB_TYPE=postgres DB_HOST=POSTGRES_HOST DB_PORT=5432 DB_USER=POSTGRES_USER DB_PASS=POSTGRES_PASSWORD DB_NAME=POSTGRES_DATABASE
后台地址:http://localhost:3000/admin
用户名/密码:admin/admin
认证公众号内容主动发送未测试
安全模式加密回复未解决,目前只支持 兼容模式 、 明文模式
107 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!