上班摸鱼随手写了个小脚本,最简单快捷部署属于自己的 ChatGPT Telegram 机器人的方法,单文件,直接复制粘贴一把梭,无需任何依赖,无需配置本地开发环境,不用域名,免服务器。
https://github.com/TBXark/ChatGPT-Telegram-Workers
偷懒的话可以直接复制代码然后修改相应的 KEY ,想要动态变化可以设置成环境变量
// 你也可以注释这两行代码,然后在 Workers 配置界面填写环境变量
const API_KEY = "PLEASE_REPLACE_WITH_YOUR_OPENAI_API_KEY";
const TELEGRAM_TOKEN = "PLEASE_REPLACE_WITH_YOUR_TELEGRAM_BOT_TOKEN";
// 聊天白名单,你也可以在环境变量中定义数组然后在这里解析 JSON
const CHAT_WHITE_LIST = [];
/new
指令开始,之后每次都会将聊天上下文发送到 ChatGPT// 你在这代码直接添加信息,或者Workers配置界面填写环境变量, 环境变量的优先级比较高
// OpenAI API Key
let API_KEY = "PLEASE_REPLACE_WITH_YOUR_OPENAI_API_KEY";
// Telegram Bot Token
let TELEGRAM_TOKEN = "PLEASE_REPLACE_WITH_YOUR_TELEGRAM_BOT_TOKEN";
// Workers Domain
let YOUR_WORKERS_DOMAIN="your_workers_name.your_workers_subdomain.workers.dev"
// Chat White List
let CHAT_WHITE_LIST = [];
更新了一下配置步骤
API_KEY
,TELEGRAM_TOKEN
,WORKERS_DOMAIN
,CHAT_WHITE_LIST
DATABASE
/new
指令开始,之后每次都会将聊天上下文发送到ChatGPT又用ChatGPT完善了一下使用说明
/start
命令/newbo
t 命令,并给你的机器人起一个名字TELEGRAM_TOKEN
变量中/setcommands
, 找到自己的机器人, 发送new - 开始新对话
API_KEY
变量中API_KEY
,TELEGRAM_TOKEN
,WORKERS_DOMAIN
,CHAT_WHITE_LIST
API_KEY
:设置成 OpenAI API KeyTELEGRAM_TOKEN
:设置成 Telegram Bot TokenWORKERS_DOMAIN
:设置成你的Workers域名,例如your_workers_name.your_workers_subdomain.workers.dev
CHAT_WHITE_LIST
:设置成你想要使用机器人的聊天ID,例如123456789,987654321
,可以在Telegram中使用/new
指令获取DATABASE
DATABASE
DATABASE
并选择刚刚创建的KV数据https://your_workers_name.your_workers_subdomain.workers.dev/init
绑定telegram/new
指令开始,之后每次都会将聊天上下文发送到ChatGPT上班随手写的脚本,没想到这么多人关注,回到家重构了一下代码,添加了留言里提到的一些需求,修复了很多BUG。基本消除了telegram死亡回调的问题
每个用户的自定义配置,只能通过Telegram发送消息来修改,消息格式为SETENV KEY=VALUE
|KEY|说明|例子|
|--|--|--|
|SYSTEM_INIT_MESSAGE|系统初始化参数,设定后就算开启新会话还能保持,不用每次都调试|SETENV SYSTEM_INIT_MESSAGE=现在开始是喵娘,每句话已喵结尾|
|OPENAI_API_EXTRA_PARAMS|OpenAI API额外参数,设定后每次调用API都会带上,可以用来调整温度等参数|SETENV OPENAI_API_EXTRA_PARAMS={"temperature": 0.5}, 每次修改必须为完整JSON|
1
jihu9001 96 天前 via iPhone
试了一下,机器人没有反应,好尴尬
|
![]() |
3
Lentin 96 天前
这一段是做什么的 看起来像是一个 webhook 接口 是不是需要改一下呢?
https://github.com/TBXark/ChatGPT-Telegram-Workers/blob/master/index.js#LL50C15-L50C39 |
6
jihu9001 96 天前 via iPhone
CHAT_WHITE_LIST 这个列表元素是数字还是字符串?
|
![]() |
7
tbxark OP @jihu9001 都可以,判断白名单的时候统一转成字符串了,
PS: 刚才更新了一下代码,你可以重新粘贴一下,建议变量都写在环境变量配置里面,这样更新代码的时候不影响原来配置比较方便。如果在环境变量里写 ID ,直接写用逗号分隔就可以了 |
![]() |
8
Lentin 96 天前
DATABASE 这个变量看起来好像还是有问题 发不了消息
"message": "DATABASE.delete is not a function", "message": "Cannot read properties of null (reading 'delete')", |
![]() |
9
arfaWong 96 天前 ![]() @Lentin 创建一个 KV Namespace ,然后在 worker settings 里面绑定。绑定的 Variable name 要和作者代码里的 Database 一样。刚刚也是搞了很久 笑 cry
|
![]() |
10
tbxark OP |
![]() |
11
Lentin 96 天前
|
![]() |
14
Lentin 96 天前
这里的空格 ,以及后面的引号,虽然不影响运行=3=
https://github.com/TBXark/ChatGPT-Telegram-Workers/blob/master/index.js#LL7C19-L7C21 |
![]() |
16
Lentin 96 天前
https://github.com/TBXark/ChatGPT-Telegram-Workers/blob/master/index.js#L108
108 行加入以下代码可以使 chatgpt 的与 TG 自带的 markdown 兼容 parse_mode: 'Markdown' |
![]() |
20
jelinet 96 天前
我操作了一遍,/new 没反应。。。
然后我在 CHAT_WHITE_LIST 里面把我自己删了,突然就收到了好多好多的『你没有权限操作。。。』 是 sendMessageToTelegram 卡住了还是 sendMessageToChatGPT 卡住了?跟访问的 ip 有关系吗?我平常上飞机的 ip 并不能上 chatGPT 。 |
![]() |
21
Lentin 96 天前 via iPhone
|
![]() |
22
jelinet 96 天前
连『新的对话开始』这句都没返回,感觉还没走到 sendMessageToChatGPT
|
![]() |
24
tbxark OP @jelinet 你试一下在 cloudflare 上面直接调试
POST: https://your_workers_name.your_workers_subdomain.workers.dev/tetegram/:token/webhook Body ```js { "message": { "text": "/new", "chat": { "id": 你的 ID } } } ``` |
![]() |
25
jelinet 96 天前
搞定,是『 DATABASE 』名字设置错了。
|
26
Lavria 96 天前
大佬我是第一次用 cloudflare ,照着流程走了一圈下来在第六步绑定阶段返回错误 {"ok":false,"error_code":400,"description":"Bad Request: invalid webhook URL specified"} 可能是哪里出了问题?
|
28
inertia 96 天前
请问能动态地修改 “system" 项吗
|
![]() |
31
shuxiaokai 96 天前
关注了! star+follow
|
![]() |
32
hanqian 96 天前 via iPhone
同求修改 system 项,这才是最好玩的
|
35
GP1 96 天前 ![]() 有几个坑需要再仔细说明优化下:
1. CHAT_WHITE_LIST 机器人 ID 怎么获取 2. WORKERS_DOMAIN 去掉 https:// 3. KV Namespace Bindings Variable name=DATABASE 你的这些设置哪几个需要在 js 文件里面设置,哪些需要在 Cloudflare Workers 里面设置再讲清楚点。 |
37
Rrrrrr 96 天前
跑起来了,那个 CHAT_WHITE_LIST 确实有点坑
|
![]() |
39
Hsinyao 96 天前
强,想学 js 了
|
42
pppxyz 96 天前
请问如何清除对话重新开始?删除对话,关掉 bot,关掉 app 都不行。。。
|
![]() |
45
whitegerry 96 天前
CHAT_WHITE_LIST 只添加自己的 id 就可以聊天,之前 readme 说要机器人 id 找半天没找到
|
![]() |
47
tbxark OP @whitegerry 部署完随便和机器人说一句话,机器人就回吧 ID 告诉你
|
48
pppxyz 96 天前
我不知道该怎么回答
>Cannot read properties of undefined (reading '0')} 请问这是什么原因? |
49
glamoroGG 96 天前
成功了
|
![]() |
51
whitegerry 96 天前
@tbxark 发一个 post 过去,返回结果里面有俩 id, 一个是自己的,另一个就是机器人的吧?那个 id 跟 token 里面那个数字串是一样的
|
![]() |
52
tbxark OP @zanxj 鉴于很多人不想设置白名单,或者不知道怎么获取 ID ,所以设置 I_AM_A_GENEROUS_PERSON 这个选项就能允许所有人访问, 值为 true 时生效, 或者你想设置的话,你就看看我新写的文档
|
![]() |
53
tbxark OP @whitegerry 不是那个, 不在白名单,你直接和机器人聊天,他就会回复“你没有权限使用这个命令, 请请联系管理员添加你的 ID(___你的 ID__)到白名单”, 或者你更新一下代码可以设置 I_AM_A_GENEROUS_PERSON 为 true 这个选项就能允许所有人访问。
|
![]() |
54
zanxj 96 天前
@tbxark #52 搞定了,谢谢!就是出现和 48 楼一样问题是怎么回事?你有在 TG ( t.me/ChatGPTChineseCommunity )群里吗
|
![]() |
55
whitegerry 96 天前 via iPhone
@tbxark 之前只加了自己的 id 进去,发现可以聊就没多想了,机器人 id 加不加感觉无所谓吧?
|
![]() |
57
cicked 96 天前
请问第三步的第 3 点 粘贴代码 这个代码在哪里呀
|
![]() |
58
cicked 96 天前
请忽略上面的问题,我犯二了,已经成功部署, 谢谢 op
|
59
acupnocup 96 天前
哇 好厉害,fork+star
|
![]() |
60
xuesumin 96 天前
谢谢,已 star
|
![]() |
61
stcheng 96 天前
感恩 deploy 很顺利丝滑
|
62
yangfan1999 96 天前
部署文档很清晰,已配置上。
|
![]() |
63
ShirolinEX 96 天前
关注了,等有空摸鱼搞一波
|
![]() |
64
SenLief 96 天前
为什么我初始化的时候是拒绝连接啊
|
65
ysjiang4869 96 天前 via Android
我也写了一个基于 tg bot 的,不过基于 aws lambda 做的
|
![]() |
66
FaiChou 96 天前
我记得 telegram 机器人返回是有字符限制的? 4000 个字符来着? 如果有超过 4000 字符, 记得拆分返回.
|
![]() |
67
bjzhush 96 天前
捣鼓了一个半小时才部署成功,没怎么搞过 cloudflare 的 worker ,感谢 OP 的分享!
|
![]() |
68
bjzhush 96 天前
请问 OP ,如何查看已有的对话列表呢?我在 chatGPT 网页版没看到,问 GPT 回答说不知道
|
![]() |
71
caqiko 96 天前
谢谢 OP 分享,整个部署过程非常流畅,20 分钟搞定一个 Bot
👍👍👍 |
![]() |
74
cdd2zju 96 天前
15 分钟部署成功,感谢 OP ,可以随时随地问 chatgpt 问题,太爽了。
|
75
meishiwanwan520 96 天前
搭建完毕,感谢 OP 的奉献
根据自己需求搭建了多个 bot 配合使用 现在有个使用痛点,不知有没有解决思路 1 、有没有办法可以针对某一个对话,快速全选复制或者转发、导出(目前是 bot 中多选,然后复制) 2 、有没有可能知道建立了多少次的对话,或者编号。 3 、在 2 的基础上,有没有可能像网页版,列出项目,对以前的对话进行追问 纯属自己的需求,希望 OP 能给条思路,感谢 |
![]() |
76
JohnChang 96 天前 ![]() 谢谢,小白 step by step ,遇到的阻碍如下
1.6 在 Telegram 中找到 BotFather, 发送 /setcommands, 找到自己的机器人, 发送 new - 开始新对话 不论是「 new 」还是「 new - 」还是「/new 」,均没有反应 实际知行:未执行 3.2 Create a Worker 没有「 Create a Worker 」,应该是「 Create a Service 」? 实际执行:点「 Create a Service 」创建了服务 3.3 将代码复制到编辑器中,保存 此处没有编辑器 实际执行:创建服务后,点击「 Quick edit 」用「 index.js 」的代码替换了原默认代码。 4.5 CHAT_WHITE_LIST:设置成你想要使用机器人的聊天 ID ,例如 123456789,987654321 ,可以在 Telegram 中使用 /new 指令获取 在哪里使用? Botfather 和自己的机器人均无反应 实际执行:未执行 5.5 在 KV Namespace Bindings 中点击 Edit variables 没有「 Edit variables 」,有「 add Bindings 」 实际执行:点「 add Bindings 」执行了 Bindings 最终执行后,打开页面显示结果为 [{"ok":true,"result":true,"description":"Webhook was set"}] |
77
xenme 96 天前 via iPhone
啥时候出个 docker 版本的,只想开起来用,懒人党
|
![]() |
78
JohnChang 96 天前
哦哦,发现实际已经成功运行了,还以为得点个按扭进行个绑定操作。。
|
79
huaji 96 天前
谢谢 O(∩_∩)O 谢谢,成功,已经在问她今晚吃什么了
|
80
imldy 96 天前
感谢楼主,但是 ChatGPT 完善了的使用说明有坑
|
81
kld13 96 天前
请问遇到这种情况该怎么办:
OpenAI API 错误 > This model's maximum context length is 4096 tokens. However, your messages resulted in 4262 tokens. Please reduce the length of the messages.} |
![]() |
83
Yanel 96 天前
非常感谢,已经部署成功
|
84
ovtfkw 95 天前
太麻烦了,有没有一键的
|
85
arthury007 95 天前 via iPhone
每次 /new 之后之前对话错误的矫正都会被重置,这个有办法把纠正保持下去吗?
|
86
ultra 95 天前
OpenAI API 错误
> This model's maximum context length is 4096 tokens. However, your messages resulted in 4440 tokens. Please reduce the length of the messages.} |
88
arthury007 95 天前 via iPhone
这个 ai 没有网页版的强,这是 api 的限制吗?还是说要交钱的才是正常版?比如我问苹果去年春季发布会是什么时候?它一下回答 2020 的时间,一下回答 2021 的时间,问他去年是什么时候,一下回答 2020 ,一下回答 2021 ,怎么矫正都回答不了 2022 苹果春季发布会的时间,网页版就没这个问题。
|
![]() |
89
SenLief 95 天前
@arthury007 是简化版的。
|
![]() |
92
ansonsiva 95 天前
作为菜鸟,折腾了半天,可能 cloudflare 的界面跟 op 的并不相同,所以很多地方跟说明都对不上,暂时可以使用了已经,感谢 op
|
94
yaoshi 95 天前
"在 Cloudflare Workers 的设置里 将这个 Token 填入 TELEGRAM_TOKEN 变量中",小白不太了解,这个怎么搞啊
|
![]() |
95
tbxark OP |
![]() |
96
Lentin 94 天前
|
97
toobad666 93 天前 via Android
我半夜搭建了一个 确实不错 但是在群聊里面没反应 不知道哪里出问题了
CHAT_GROUP_WHITE_LIST 也设置了 |
98
Mason2021 93 天前
成功设置好了,速度很快。
请问可否增加实时联网功能吗? |
99
modrich 93 天前
感谢,已经成功搭建
|
![]() |
100
jwautumn 92 天前
已搞定 感谢
|