AI PLAY玩法更新持续收录
← 回到更新流

2026-09-29 · 原文发布日

n8n:Telegram 占卜机器人,语音提问、语音回答

一个娱乐向 n8n 工作流:监听 Telegram 机器人的文字或语音消息,语音先用 OpenAI 转写成文字,随后调用多个子工作流汇总外部熵信号算出一个“是/否”裁决,再用 OpenAI TTS 生成语音回复发回 Telegram,同时附一份 HTML“证书”、把记录写入 Google Sheets,并通过 HTTP 请求让 Tapo 灯闪一下。模板免费,但需自备 Telegram、OpenAI、Sheets 凭证及若干子工作流。

原文要点

原模板是 Flow for Gold 2026 比赛主工作流:Telegram 触发后区分文字/语音,语音经 Telegram 下载并用 OpenAI 转写,校验问题后回一条确认消息,再调用四个子工作流(Spiritual Weight Analyser、Chaos Engine、Oracle Output Formatter、EU AI Act Compliance Logger)汇总多个外部熵信号算出决策指数,输出 TTS 语音、HTML 证书文档、Google Sheets 日志,并向 Tapo 灯控制器发 HTTP POST。模板免费但不含子工作流实现,需自备 Telegram、OpenAI、Sheets 凭证。

这次做成什么

在站内照做一条可跑通的精简版占卜机器人:Telegram 收文字提问→本站设计的熵评分 Code 节点→OpenAI 生成裁决文案→TTS 语音回发→Sheets 记一行。原模板的四个子工作流作者未公开实现,本练习用单一 Code 节点替代,明确为本站独立方案。

准备什么

  • n8n 实例(自托管或云端均可),能访问公网回调
  • BotFather 创建的 Telegram 机器人 token,并已和机器人开启对话
  • OpenAI API key,可用 Whisper 转写与 TTS 模型
  • Google Sheets OAuth2 凭证及一张含表头的记录表
  • 无需 Tapo 灯:HTTP 闪烁步骤在本练习中用 webhook.site 测试地址代替

具体怎么做

  1. 建 Telegram 触发与分支

    拖入 Telegram Trigger,credential 选你的 Bot token,Trigger On 选 message。后接 Switch 节点:判断 {{$json.message.voice}} 是否存在。存在走语音支路:Telegram 节点 Get File 下载语音,再接 OpenAI 节点(Audio→Transcribe)得到文本;不存在直接取 {{$json.message.text}}。两支路用 Merge 汇合成统一字段 question。

  2. 用本站熵评分节点替代子工作流

    原作者用两个子工作流收集外部熵信号,实现未公开。本练习放一个 Code 节点(材料中的 oracle-entropy-code),对问题字符串哈希后与当前毫秒数混合出 0-100 的 decisionIndex,>=50 为「是」。这是演示用的伪熵,不是原模板的算法。

  3. 生成裁决文案并转语音

    接 OpenAI Chat 节点,粘贴材料中的裁决文案提示词,输入 question 与 decisionIndex,得到 100 字内的中文裁决语。再接 OpenAI TTS 节点(Audio→Speech,voice 任选,模型以你账号可用的为准),输出二进制音频。

  4. 回发语音并记日志

    Telegram 节点 Send Audio,chatId 取 {{$('Telegram Trigger').item.json.message.chat.id}},音频接上一步二进制。并行接 Google Sheets 节点 Append Row,映射 question、verdict、decisionIndex、timestamp 四列到记录表。

  5. (可选)HTTP 闪烁占位

    原模板向 Tapo 控制器 POST。练习中拖 HTTP Request 节点,POST 到 https://webhook.site/你的临时地址,body 放 {"flash":true,"verdict":"..."},在 webhook.site 页面确认收到即代表链路通,不要对真实灯具调试。

可直接复制的材料

熵评分 Code 节点(本站独立编写,替代未公开的子工作流)

本站设计的演示伪熵算法,非原作者实现;原作者靠多个外部熵信号,算法未公开。

// n8n Code 节点:输入需含 question 字段
// 输出 decisionIndex(0-100) 与 verdict
const q = ($json.question || '').trim();
if (!q) throw new Error('question 为空');
let h = 0;
for (const c of q) h = (h * 31 + c.charCodeAt(0)) >>> 0;
const salt = Date.now() % 100000;
const decisionIndex = (h ^ salt) % 101;
return [{ json: { question: q, decisionIndex, verdict: decisionIndex >= 50 ? '是' : '否', ts: new Date().toISOString() } }];

裁决文案提示词(粘贴到 OpenAI Chat 节点)

双花括号字段按你实际节点名调整;仅娱乐用途。

你是一位戏剧化但克制的占卜师。用户提问:「{{$json.question}}」。系统给出的裁决指数是 {{$json.decisionIndex}}(0-100,>=50 倾向肯定)。请用中文写一段不超过 100 字的裁决回复:第一句直接给出「是」或「否」,第二句给一句神秘但不吓人的理由,禁止医疗、法律、财务建议,结尾注明「仅供娱乐」。

Google Sheets 记录表结构

第一行为表头,后两行是合成示例数据;Append Row 节点按这四列映射。

timestamp,question,verdict,decisionIndex
2026-10-01T09:00:00Z,我下个月应该换工作吗,是,73
2026-10-01T09:05:12Z,这周适合开始健身吗,否,22

输入与输出示例

本站虚构演示,未实际运行;文案与指数由本站示例逻辑生成。

输入

在 Telegram 给机器人发文字:「我应该在三季度结束前提交那份方案吗?」

对应输出

机器人先回「收到,正在为你占卜…」,约几秒后发来一条语音,文案类似「是。星象与熵流此刻站在你这一边,拖延反而损耗气场。仅供娱乐。」;Google Sheets 新增一行:2026-10-01T09:12:33Z, 我应该在三季度结束前提交那份方案吗, 是, 68。

做完检查这些

  • Telegram Trigger 测试时能收到文字与语音两类消息且 Switch 正确分流
  • Code 节点对同一问题多次执行产出 0-100 内不同指数且 verdict 与指数阈值一致
  • TTS 音频能以 Telegram 语音消息形式在手机端正常播放
  • Sheets 每次提问新增一行且四列无错位
  • webhook.site 收到 {"flash":true} 的 POST 请求

容易卡住的地方

  • 原模板依赖的四个子工作流(Spiritual Weight Analyser、Chaos Engine、Oracle Output Formatter、Compliance Logger)未随模板提供实现,必须替换为你自己的工作流 ID 或按本练习用 Code 节点替代,否则导入即报错
  • 语音支路要求 OpenAI 账号有 Whisper 与 TTS 权限,模型名以你账号可用列表为准,不要硬编码未核实模型
  • Bot 必须先被用户主动发起对话才能收到消息
  • Tapo 灯控制需自建可公网访问的端点(原文提到 Cloudflare Tunnel),家庭内网直接 POST 不可达

原文与作者资料 ↗

本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。

原文标题
Deliver entropy-based yes/no oracle answers via Telegram with OpenAI and Sheets
原作者
Jamie Twinney
原始发布日期
2026-09-29T07:04:41.540Z
来源
https://n8n.io/workflows/20126