上班摸鱼随手写了个小脚本,最简单快捷部署属于自己的 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 ![]() @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 |
![]() | 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 XnEnokq9vkvVq4 2023-03-03 19:00:10 +08:00 via iPhone 同求修改 system 项,这才是最好玩的 |
![]() | 34 XnEnokq9vkvVq4 2023-03-03 20:03:24 +08:00 @tbxark 没错各种角色扮演都很方便 |
35 GP1 2023-03-03 20:30:29 +08:00 ![]() 有几个坑需要再仔细说明优化下: 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 ethusdt 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 ![]() 谢谢,小白 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 已搞定 感谢 |