/wechat-chatGPT

实现微信公众号被动返回接口的ChatGPT

Primary LanguageGoGNU General Public License v3.0GPL-3.0

WeChat-chatGPT

具有微信公众号被动回复用户消息功能的 ChatGPTBot 实现

食用指南

  1. 编译项目,注意在编译时将 $(Token) 替换为你的微信公众号 Token
  2. 通过 关于如何在服务器上获取 cf_clearance 获取 config.json
  3. 在 config.json 文件中填入chat.openai.com 里 Cookie 中的 __Secure-next-auth.session-token
  4. 部署到服务器中 默认监听本机 127.0.0.1:7458, 请自行通过 Nginx 或 Caddy 等反向代理工具进行转发
  5. 在微信公众平台中设置服务器地址为你的反向代理地址或域名地址,与微信公众号绑定的路由为 /weChatGPT

编译命令

GOOS=linux GOARCH=amd64 GOARM= GOMIPS= \
CGO_ENABLED=0 \                                                   
go build -trimpath -o ./dist/weChatGPT \                          
-ldflags "-X 'main.wxToken=$(Token)' -w -s -buildid="

注意事项

  1. config.json 文件请放置与可执行文件同一目录下
  2. cf_clearance 可用于绕过 Cloudflare 的防火墙,但请保证获取 cf_clearance 时的 UA 与 IP 与项目实际运行时一致
  3. 由于 chatGPT 接口时常变动, 部署前请先在 config.json 中填入本机访问 chat.openai.com 时的 session-token、UA 与 cf_clearance,运行后通过 curl 127.0.0.1:7458/healthCheck 进行可用性检查

效果图

关于如何在服务器上获取 cf_clearance

  1. 在服务器上安装vvanglro/cf-clearance

    pip install --upgrade cf-clearance

    该项目需要playwright的支持,最新版Ubuntu镜像貌似是自带的(较老的Ubuntu版本需要自行安装),但还需要装一些依赖内容:

    playwright install
    sudo apt-get install libatk1.0-0 libatk-bridge2.0-0 libcups2 libatspi2.0-0 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1 libxkbcommon0 libpango-1.0-0 libcairo2 libasound2
  2. 安装xvfb

    sudo apt-get install xvfb
  3. 然后在服务器上创建一个get_cf.py脚本,内容如下:

    from playwright.sync_api import sync_playwright
    from cf_clearance import sync_cf_retry, sync_stealth
    import json
    
    config = {
     "session-token": "",
     "cf_clearance": "",
     "user-agent": "",
     "debug": False,
     "log-level": "info"
    }
    
    if __name__ == '__main__':
        with sync_playwright() as p:
            browser = p.chromium.launch(headless=False)
            page = browser.new_page()
            sync_stealth(page)
            page.goto('https://chat.openai.com/chat')
            res = sync_cf_retry(page)
            if res:
                cppkies = page.context.cookies()
                for cookie in cppkies:
                    if cookie.get('name') == 'cf_clearance':
                        config["cf_clearance"]=cookie.get('value')
                        break
                ua = page.evaluate('() => {return navigator.userAgent}')
                config["user-agent"]=ua
            else:
                print("fail")
            print(json.dumps(config))
            browser.close()
  4. get_cf.py 所在目录下执行

    xvfb-run python3 get_cf.py > config.json
  5. get_cf.py 所在目录下的 config.json 文件复制至项目所在目录下

其他

这其实是一篇没什么用的README

由于微信公众号的 5s限制 ,虽然本项目已经通过技术将这个限制提升至了 15s, 但绝大多数情况下通过逆向得到的ChatGPT接口的相应速率都超过了这个时间限制。

故本 Bot 几乎无法正常工作,可能以后等 ChatGPT 的正式接口出来,会重构本项目的代码。