上班摸鱼随手写了个小脚本,最简单快捷部署属于自己的 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 2023-03-03 16:14:16 +08:00 via iPhone
试了一下,机器人没有反应,好尴尬
|
3
Lentin 2023-03-03 16:21:35 +08:00
这一段是做什么的 看起来像是一个 webhook 接口 是不是需要改一下呢?
https://github.com/TBXark/ChatGPT-Telegram-Workers/blob/master/index.js#LL50C15-L50C39 |
6
jihu9001 2023-03-03 16:44:28 +08:00 via iPhone
CHAT_WHITE_LIST 这个列表元素是数字还是字符串?
|
7
tbxark OP @jihu9001 都可以,判断白名单的时候统一转成字符串了,
PS: 刚才更新了一下代码,你可以重新粘贴一下,建议变量都写在环境变量配置里面,这样更新代码的时候不影响原来配置比较方便。如果在环境变量里写 ID ,直接写用逗号分隔就可以了 |
8
Lentin 2023-03-03 17:01:32 +08:00
DATABASE 这个变量看起来好像还是有问题 发不了消息
"message": "DATABASE.delete is not a function", "message": "Cannot read properties of null (reading 'delete')", |
9
arfaWong 2023-03-03 17:07:34 +08:00 1
@Lentin 创建一个 KV Namespace ,然后在 worker settings 里面绑定。绑定的 Variable name 要和作者代码里的 Database 一样。刚刚也是搞了很久 笑 cry
|
10
tbxark OP |
11
Lentin 2023-03-03 17:28:17 +08:00
|
13
jihu9001 2023-03-03 17:40:39 +08:00 via iPhone
@Lentin 终于跑起来了,过程过于艰难,建议把 readme 写详细点,老哥这个项目还是非常稳的
|
14
Lentin 2023-03-03 17:42:53 +08:00
这里的空格 ,以及后面的引号,虽然不影响运行=3=
https://github.com/TBXark/ChatGPT-Telegram-Workers/blob/master/index.js#LL7C19-L7C21 |
16
Lentin 2023-03-03 17:56:47 +08:00
https://github.com/TBXark/ChatGPT-Telegram-Workers/blob/master/index.js#L108
108 行加入以下代码可以使 chatgpt 的与 TG 自带的 markdown 兼容 parse_mode: 'Markdown' |
20
jelinet 2023-03-03 18:25:36 +08:00
我操作了一遍,/new 没反应。。。
然后我在 CHAT_WHITE_LIST 里面把我自己删了,突然就收到了好多好多的『你没有权限操作。。。』 是 sendMessageToTelegram 卡住了还是 sendMessageToChatGPT 卡住了?跟访问的 ip 有关系吗?我平常上飞机的 ip 并不能上 chatGPT 。 |
21
Lentin 2023-03-03 18:27:19 +08:00 via iPhone
|
22
jelinet 2023-03-03 18:27:32 +08:00
连『新的对话开始』这句都没返回,感觉还没走到 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 2023-03-03 18:31:56 +08:00
搞定,是『 DATABASE 』名字设置错了。
|
26
Lavria 2023-03-03 18:37:28 +08:00
大佬我是第一次用 cloudflare ,照着流程走了一圈下来在第六步绑定阶段返回错误 {"ok":false,"error_code":400,"description":"Bad Request: invalid webhook URL specified"} 可能是哪里出了问题?
|
28
inertia 2023-03-03 18:41:24 +08:00
请问能动态地修改 “system" 项吗
|
31
shuxiaokai 2023-03-03 18:54:02 +08:00
关注了! star+follow
|
32
hanqian 2023-03-03 19:00:10 +08:00 via iPhone
同求修改 system 项,这才是最好玩的
|
35
GP1 2023-03-03 20:30:29 +08:00 1
有几个坑需要再仔细说明优化下:
1. CHAT_WHITE_LIST 机器人 ID 怎么获取 2. WORKERS_DOMAIN 去掉 https:// 3. KV Namespace Bindings Variable name=DATABASE 你的这些设置哪几个需要在 js 文件里面设置,哪些需要在 Cloudflare Workers 里面设置再讲清楚点。 |
37
Rrrrrr 2023-03-03 21:43:38 +08:00
跑起来了,那个 CHAT_WHITE_LIST 确实有点坑
|
39
Hsinyao 2023-03-03 21:54:19 +08:00
强,想学 js 了
|
42
pppxyz 2023-03-03 23:03:28 +08:00
请问如何清除对话重新开始?删除对话,关掉 bot,关掉 app 都不行。。。
|
44
tbxark OP |
45
whitegerry 2023-03-03 23:17:32 +08:00
CHAT_WHITE_LIST 只添加自己的 id 就可以聊天,之前 readme 说要机器人 id 找半天没找到
|
47
tbxark OP @whitegerry 部署完随便和机器人说一句话,机器人就回吧 ID 告诉你
|
48
pppxyz 2023-03-03 23:36:09 +08:00
我不知道该怎么回答
>Cannot read properties of undefined (reading '0')} 请问这是什么原因? |
49
glamoroGG 2023-03-03 23:45:33 +08:00
成功了
|
51
whitegerry 2023-03-03 23:50:35 +08:00
@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 2023-03-04 00:06:16 +08:00
@tbxark #52 搞定了,谢谢!就是出现和 48 楼一样问题是怎么回事?你有在 TG ( t.me/ChatGPTChineseCommunity )群里吗
|
55
whitegerry 2023-03-04 00:12:49 +08:00 via iPhone
@tbxark 之前只加了自己的 id 进去,发现可以聊就没多想了,机器人 id 加不加感觉无所谓吧?
|
56
tbxark OP |
57
cicked 2023-03-04 00:44:01 +08:00
请问第三步的第 3 点 粘贴代码 这个代码在哪里呀
|
58
cicked 2023-03-04 00:50:25 +08:00
请忽略上面的问题,我犯二了,已经成功部署, 谢谢 op
|
59
acupnocup 2023-03-04 00:57:42 +08:00
哇 好厉害,fork+star
|
60
xuesumin 2023-03-04 07:16:19 +08:00
谢谢,已 star
|
61
stcheng 2023-03-04 07:40:41 +08:00
感恩 deploy 很顺利丝滑
|
62
yangfan1999 2023-03-04 08:28:14 +08:00
部署文档很清晰,已配置上。
|
63
ShirolinEX 2023-03-04 09:34:19 +08:00
关注了,等有空摸鱼搞一波
|
64
SenLief 2023-03-04 09:45:17 +08:00
为什么我初始化的时候是拒绝连接啊
|
65
ysjiang4869 2023-03-04 09:48:32 +08:00 via Android
我也写了一个基于 tg bot 的,不过基于 aws lambda 做的
|
66
FaiChou 2023-03-04 10:57:58 +08:00
我记得 telegram 机器人返回是有字符限制的? 4000 个字符来着? 如果有超过 4000 字符, 记得拆分返回.
|
67
bjzhush 2023-03-04 11:08:03 +08:00
捣鼓了一个半小时才部署成功,没怎么搞过 cloudflare 的 worker ,感谢 OP 的分享!
|
68
bjzhush 2023-03-04 11:14:19 +08:00
请问 OP ,如何查看已有的对话列表呢?我在 chatGPT 网页版没看到,问 GPT 回答说不知道
|
71
caqiko 2023-03-04 11:24:58 +08:00
谢谢 OP 分享,整个部署过程非常流畅,20 分钟搞定一个 Bot
👍👍👍 |
72
bjzhush 2023-03-04 11:28:16 +08:00
@tbxark 去看了下 KV 数据库的内容,里面记录了我所有对话的内容,JSON 格式,可读性比较差,看不了对话列表,不过初级使用是够了
|
74
cdd2zju 2023-03-04 11:57:17 +08:00
15 分钟部署成功,感谢 OP ,可以随时随地问 chatgpt 问题,太爽了。
|
75
meishiwanwan520 2023-03-04 12:09:55 +08:00
搭建完毕,感谢 OP 的奉献
根据自己需求搭建了多个 bot 配合使用 现在有个使用痛点,不知有没有解决思路 1 、有没有办法可以针对某一个对话,快速全选复制或者转发、导出(目前是 bot 中多选,然后复制) 2 、有没有可能知道建立了多少次的对话,或者编号。 3 、在 2 的基础上,有没有可能像网页版,列出项目,对以前的对话进行追问 纯属自己的需求,希望 OP 能给条思路,感谢 |
76
JohnChang 2023-03-04 12:31:15 +08:00 1
谢谢,小白 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 2023-03-04 12:44:53 +08:00 via iPhone
啥时候出个 docker 版本的,只想开起来用,懒人党
|
78
JohnChang 2023-03-04 12:45:18 +08:00
哦哦,发现实际已经成功运行了,还以为得点个按扭进行个绑定操作。。
|
79
huaji 2023-03-04 14:41:05 +08:00
谢谢 O(∩_∩)O 谢谢,成功,已经在问她今晚吃什么了
|
80
imldy 2023-03-04 14:44:26 +08:00
感谢楼主,但是 ChatGPT 完善了的使用说明有坑
|
81
kld13 2023-03-04 15:04:37 +08:00
请问遇到这种情况该怎么办:
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 2023-03-04 15:19:18 +08:00
非常感谢,已经部署成功
|
84
ovtfkw 2023-03-04 15:39:26 +08:00
太麻烦了,有没有一键的
|
85
arthury007 2023-03-04 16:17:19 +08:00 via iPhone
每次 /new 之后之前对话错误的矫正都会被重置,这个有办法把纠正保持下去吗?
|
86
ultra 2023-03-04 16:25:12 +08:00
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 2023-03-04 17:03:48 +08:00 via iPhone
这个 ai 没有网页版的强,这是 api 的限制吗?还是说要交钱的才是正常版?比如我问苹果去年春季发布会是什么时候?它一下回答 2020 的时间,一下回答 2021 的时间,问他去年是什么时候,一下回答 2020 ,一下回答 2021 ,怎么矫正都回答不了 2022 苹果春季发布会的时间,网页版就没这个问题。
|
89
SenLief 2023-03-04 19:38:05 +08:00
@arthury007 是简化版的。
|
92
ansonsiva 2023-03-04 22:34:36 +08:00
作为菜鸟,折腾了半天,可能 cloudflare 的界面跟 op 的并不相同,所以很多地方跟说明都对不上,暂时可以使用了已经,感谢 op
|
94
yaoshi 2023-03-05 10:40:28 +08:00
"在 Cloudflare Workers 的设置里 将这个 Token 填入 TELEGRAM_TOKEN 变量中",小白不太了解,这个怎么搞啊
|
95
tbxark OP |
96
Lentin 2023-03-05 16:27:03 +08:00
|
97
toobad666 2023-03-07 11:02:33 +08:00 via Android
我半夜搭建了一个 确实不错 但是在群聊里面没反应 不知道哪里出问题了
CHAT_GROUP_WHITE_LIST 也设置了 |
98
Mason2021 2023-03-07 14:08:11 +08:00
成功设置好了,速度很快。
请问可否增加实时联网功能吗? |
99
modrich 2023-03-07 15:02:21 +08:00
感谢,已经成功搭建
|
100
jwautumn 2023-03-07 15:35:35 +08:00
已搞定 感谢
|