dsh-line-bot
Bridges DeepSeek Harness to LINE: runs its own signed webhook server, sets up a Cloudflare Tunnel (quick URL or an API-token tunnel), keeps the LINE webhook endpoint pointed at the current tunnel, and gives each LINE user a separate session with a chosen persona, plus optional scheduled check-ins. R
Install
dsh plugin --profile web add dsh-line-bot
Sandbox test results
| Stage | Result |
|---|---|
| 1 install | ✓ |
| 2 list | ✓ |
| 3 mount | ✓ |
| 4 boot | — |
Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).
README
dsh-line-bot
<p align="center"><img src="icon.svg" width="96" height="96" alt="dsh-line-bot"></p>
语言 / Languages: [繁體中文](README.md) · [简体中文](README.zh-CN.md) · [English](README.en.md) · [日本語](README.ja.md) · [한국어](README.ko.md)
把 LINE 官方账号(Messaging API)接进 DeepSeek Harness 的插件。回复由 DSH 的 Agent 在同一个进程内产生,等于在 LINE 上跟你的 DSH 助理聊天;人设有两种来源:有安装大肥鱼(dsh-persona-dafeiyu)时可以直接选它的人设;也可以只用插件内置的自定义人设(不需要任何个性插件)。
内置:
- Webhook 服务器:在本机
127.0.0.1开一个 HTTP server,处理 LINE 的X-Line-Signature验签、事件去重、每位用户各自的队列。 - Cloudflare Tunnel:一键开 quick tunnel(
*.trycloudflare.com,免 Cloudflare 账号),或贴入 Cloudflare API Token 创建具名隧道+DNS,取得固定网址;取得网址后自动把 webhook 端点写回 LINE 并跑一次webhook/test。 - LINE 凭证:填 Channel ID+Channel Secret 就能自动签发 access token(
/v2/oauth/accessToken,约 30 天,快到期会自动续签);也可以直接贴入既有的 Channel Access Token。 - 没有大肥鱼插件时:自动改用插件内置的繁体中文版本(大肥鱼/阿茶/听澜),存在同一个
personas.json,可以像自定义人设一样点开编辑;装回大肥鱼插件后会自动切回插件的人设。 - 主动传讯:插件内置排程器(不用 launchd),每位使用者各自倒数(最短~最长间隔随机);可调最短/最长间隔、每日/每月上限、两则间距、安静时段、对方安静多久才可打扰、连续未回复上限(达上限暂停,对方回话后归零)、指定对象与提示词;Agent 觉得不适合时可以回
SKIP跳过。 - 分段回复:可把回复依空行(段落)或每个换行拆成多个 LINE 消息框,最多 5 条,不再全部挤在同一条;面板可切换分段方式或关闭。
- 合并连续消息:模型还在处理上一条时,用户又补了下一句,会先排队,等这一轮结束后把补充内容合并成一次一起回应,不会每句各回一次。
- 完整设置面板:所有设置都在「设置 → LINE Bot」里,存到
<DSH_HOME>/line-bot/config.json(权限 600)。
关于「用 LINE Business ID 登录、由面板代建 bot」:LINE 自 2024-09 起只允许在 LINE Official Account Manager 手动创建 Messaging API channel,没有公开 API;LINE Login 也只是身份验证,不能取得官方账号的管理权。所以面板不代建 bot,但会给你正确的入口链接,并把「拿到 Channel ID / Secret 之后」的所有步骤自动化(签 token、设 webhook、测试)。
安装
要求:DeepSeek Harness ≥ 0.2.0-rc.1、Node.js ≥ 22。人设插件(大肥鱼 dsh-persona-dafeiyu)是可选的——不装也能用插件内置的自定义人设。
方式一:面板安装(推荐)
DSH → 设置 → 插件 → 安装 bundle,输入 dsh-line-bot 后安装,刷新页面。设置左侧就会多一个 LINE Bot。
方式二:npx 一键安装
先完全退出 DSH(桌面版关闭窗口后,确认菜单栏/进程没有残留),再执行:
npx dsh-line-bot install
它会自动判断要装进哪个 profile(默认 desktop,可用 --profile <名称> 指定),用 DSH 内置的 pnpm 安装套件、把 bundle 加进 profile,最后提醒你重开 DSH。
npx dsh-line-bot status # 看目前装在哪個 profile、有没有启用 npx dsh-line-bot uninstall # 移除(设置与凭证会保留)
方式三:手动
dsh plugin --profile desktop add dsh-line-bot
再把 dsh-line-bot 加进 ~/.dsh/profiles/desktop/package.json 的 dsh.profile.bundles 数组(可参考 npx dsh-line-bot install 的做法),或改用面板安装。
还没发布到 npm 时,也可以直接从 GitHub 安装:
```bash
npx github:Hanson0901/dsh-line-bot install --spec github:Hanson0901/dsh-line-bot
```
或从源码:git clone https://github.com/Hanson0901/dsh-line-bot.git,在 DSH 面板「安装 bundle」选那个文件夹,或dsh plugin --profile desktop add /path/to/dsh-line-bot。
搭配插件(可选)
LINE Bot 可以独立运行;装上下面这些插件会多出对应功能:
插件 · 用途 · 建议
dsh-persona-dafeiyu · 人设清单、贴吧同步 · 建议
dsh-meme · 让角色回图片/贴图 · 建议
dsh-tieba-dive · 贴吧学习同步的来源 · 可选
安装时 CLI 会检测缺哪些,并询问要不要一起安装:
npx dsh-line-bot install --with-companions npx dsh-line-bot install --no-companions
少了它们的影响:没有大肥鱼 → 人设只剩插件自定义的;没有 dsh-meme → 只能回文字;没有刷贴吧 → 贴吧同步自动停用。
第一次上线(5 步)
1. 创建/取得凭证:到 LINE Official Account Manager 创建官方账号 → LINE Developers Console 创建(或选用)Messaging API channel → 在「Messaging API」分页把 Use webhook 打开 → 复制 Channel ID 与 Channel secret。
2. 填入面板:「LINE Bot → LINE 凭证」贴入 Channel ID、Channel Secret,按「保存更改」→「验证并读取 bot 信息」。成功会看到 bot 名称与 Basic ID。
3. 启动 webhook 服务器:面板「状态总览」按「启动全部」,或只按「启动」让 webhook server 与 tunnel 都起来(默认会自动启动)。
4. 开隧道:Quick tunnel 直接按「启动隧道」;要固定网址就在「Cloudflare Tunnel」贴 API Token →「验证 API Token」→「创建/更新隧道与 DNS」(API Token 权限:Account → Cloudflare Tunnel → Edit、Zone → DNS → Edit、Zone → Zone → Read)。quick tunnel 每次重启网址都会变(插件会自动把新网址写回 LINE webhook);具名隧道的网址则固定。
5. 自动设置 webhook:隧道就绪后会自动 PUT 到 LINE;若没成功,按「把隧道网址套到 webhook」再「测试 webhook」。之后在 LINE 加 bot 好友、传消息;第一条消息会进入「待审核」,到面板「使用者」按「核准」后才会开始回复(白名单默认为空)。
面板各区
面板最上方是固定(sticky)保存栏:滚到任何位置都看得到「保存更改/刷新」;保存栏下方是二级快速菜单,按一下就会跳到对应区块(滚动时也会自动高亮当前区块)。
区块 · 内容
状态总览 · webhook server/隧道/LINE/人设/主动传讯的绿灯状态、公开网址、一键上线与启停
LINE 凭证 · Channel ID、Channel Secret、Access Token、自动签发、loading 动画、分段回复、bot 信息、webhook 套用/测试、白名单
Cloudflare Tunnel · quick/API Token 模式、Token、hostname、隧道名称、Account/Zone ID、下载 cloudflared、启停、自动设置 webhook、自行提供的公开网址
模型与接口来源 · 选择 LINE 回复的 provider/模型与推理强度;非 deepseek-account 时自动停用 DeepSeek 余额
回复人设 · 选择人设(大肥鱼或插件自定义)、新增/编辑/删除自定义人设、把目前人设复制成自定义、强制套用、允许用户自己换人设、切换大肥鱼 session 模式、测试 Agent 回复
贴吧学习同步 · 把刷贴吧学到的语气写回人设(内置人设用覆盖层)、预览差异、立即同步
玩梗 · 文字梗库:内置种子、贴吧金句、wanjiqi 弹幕梗;三个来源可分别开关、每轮注入几条、新增/删除梗
个人记忆 · 每位用户分开的长期记忆、到期自动删除、每日请角色整理、手动删除
表情包 · 使用 dsh-meme 图库回图片/贴图、开关、每次最多几张、图库样本
语音回复 · CosyVoice3 语音合成、开关、参考音频上传、语气指令、试听
贴图与图片理解 · 收到 LINE 贴图或一般图片时抓图给模型看;模型不吃图时用 modlens 或另一个视觉模型描述(可关闭)
DeepSeek 余额 · 当前余额、每轮注入、低于门槛时由角色主动提醒、提醒门槛与冷却(仅 deepseek-account)
主动传讯 · 开关、每位使用者的倒数、最短/最长间隔、连续未回复上限、每日/每月上限、两则间距、安静时段、idle、指定对象、提示词、立即试传、统计(下次可能时间与暂停人数)
用户 · 每位 LINE 用户对应的 DSH session、专属工作文件夹、目前人设(可直接改)、消息数、上次互动、清空记忆/重设 session
群组 · 每个群组的 session、工作文件夹、人设、消息数;没被点名时的回复概率;被 @/引用一定回;清空群组记忆
高级设置 · 端口、Agent provider/model/effort/cwd/超时、一人一个工作文件夹(含根目录)、欢迎/错误/空回复、日志、开发用 host 重新载入
配置文件
<DSH_HOME>/line-bot/config.json:所有设置,含 LINE secret/Cloudflare token(权限 600,不会回传明文给面板)。<DSH_HOME>/line-bot/state.json:LINE 用户 ↔ DSH session 对应、消息数、主动传讯计数、webhook 状态。<DSH_HOME>/line-bot/logs/YYYY-MM-DD.log:每日日志(面板也会显示最近 400 行)。
DSH_HOME 默认是 ~/.dsh。
运作方式
1. LINE 把消息 POST 到 Cloudflare 隧道 → 插件 webhook server(验签后立刻回 200)。
2. 依 userId 找到(或创建)对应的 DSH session 与工作文件夹,决定这个 session 的人设:选大肥鱼时通过它的 HTTP bridge 指定 session 人设;选插件自定义人设时,先请大肥鱼在该 session 让开(none),再由插件把自定义人设注入 system prompt。
3. 用 agents.create/agents.resume 在同一个 DSH 进程内创建/接续 Agent,followup 一则用户消息,等到 turn 结束、子代理收敛、session flush。
4. 从 session 事件取出最后一段 assistant 文字,用 LINE reply 回复;reply token 过期就自动改 push。
5. 主动传讯排程器每分钟检查一次:逐位使用者到期、且沉默够久才请 Agent 主动说一句,再 push 出去;连续未回复达上限会暂停,对方回话后重新倒数。
模型与接口来源
「模型与接口来源」卡决定 LINE 回复要用哪个 provider/模型:
- 来源清单来自这个 DSH profile 已注册的 pro
…(truncated)
Rendered from the README published on npm. Formatted only, not edited.
Versions
Published on npm::41,最后更新 2026-11-05