@amaster.ai/pi频道

本地信件通道的 Pi 扩展名 .
此软件包遵循与开源软件相同的扩展形状 @e9n/pi-channels 软件包: 它登记一个 notify 工具、频道事件、路由别名,以及可选的聊天桥,将收到的频道消息转换成 pi 提示.
这不取决于 @e9n/pi-channels 在运行时间。 该软件包作为独立扩展源软件包发布 @mariozechner/* 等同命名空间和Slack/电话依赖。 此软件包在锁定此 repo 时保留相同的频道合同 @earendil-works/* API地表和本土的Feishu/DingTalk/WeCom适配器.
配置
拿着 pi-channels 节 ~/.pi/agent/settings.json,则配置代理目录中的 settings.json,或项目/祖先 .pi/settings.json。只有在项目信任被接受后才能阅读项目-当地文件. ${ENV_VAR} 插入只在用户和代理设置中支持,而不是在项目本地文件中支持. 实例中记录的直接证书环境变量仍然超过已装入的适配器值.
频道
feishu- 由官员支持的本地Feishu/Lark应用程序信息@larksuiteoapi/node-sdk。支持即将发布的 Markdown 富文本后退 , 默认情况下的 WebSocket 事件, HTTP 事件回调作为后退 , 以及正在发送的文本、 帖子和图像信息 。 这两个事件模式都从独立的图像信息和丰富的文本帖子下载图像到临时文件并传递到皮桥作为图像输入. 如果图像下载失败,文本和已成功下载的图像仍以注释方式发送,请发送者再发送缺失的图像. 下载失败和不支持的訊息類型在不需要DEBUG的情况下会生成已消毒的错误诊断;必须允许Feishu app下载訊息资源.wecom- 由官方支持的本地WeCom智能机器人信息@wecom/aibot-node-sdk。支持 WebSocket 长连接事件并活跃 Markdown 以 Bot ID / 秘密证书来推.dingtalk- 由官方支持的本地DingTalk应用机器人信息dingtalk-streamSDK(英语:SDK). 支持 Stream 模式收到的bot 消息, 回复 消息通过sessionWebhook,并且活动组文本将推动通过 丁言开口API.webhook- 通用的HTTP请求.
示例
这个 ${...} 下面的占位符假设此部分存储在用户或代理设置中. 对于被信任的项目设置,使用相应的直接证书环境变量或字面上的非秘密值.
{
"pi-channels": {
"adapters": {
"feishu": {
"type": "feishu",
"appId": "${FEISHU_APP_ID}",
"appSecret": "${FEISHU_APP_SECRET}",
"eventMode": "websocket",
"respondToMentionsOnly": true
},
"wecom": {
"type": "wecom",
"botId": "${WECOM_BOT_ID}",
"secret": "${WECOM_BOT_SECRET}",
"eventMode": "websocket",
"respondToMentionsOnly": true,
"timeoutMs": 15000
},
"dingtalk": {
"type": "dingtalk",
"clientId": "${DINGTALK_CLIENT_ID}",
"clientSecret": "${DINGTALK_CLIENT_SECRET}",
"eventMode": "stream",
"respondToMentionsOnly": true
}
},
"routes": {
"ops": {
"adapter": "feishu",
"recipient": "oc_xxx"
}
},
"bridge": {
"enabled": true
}
}
}
桥梁扩展
该桥在可用时使用已安装的Pi套件CLI. 如果缺少 CLI( 例如, 使用独立的 Scoop 安装), 它会解决 pi.exe 从 PATH 在窗口上或 pi 在其它平台上。 设定 bridge.piBin 或者说 PI_CHANNELS_PI_BIN 到绝对路径或可执行名称 PATH 要覆盖; 拒绝工作空间内的二进制.
桥对每个来自儿童 Pi 进程的信件进行回答
--offline --no-extensions,所以安装的扩展从不隐含地加载(
包含频道扩展本身,使孩子无法打开第二个
串流连接). 列出儿童会话可能装入的扩展源
bridge.extensions; 每个条目作为可重复的 -e <source>,使用
相同的路径 / npm / git 源 pi --extension 接受:
{
"pi-channels": {
"bridge": {
"enabled": true,
"extensions": ["npm:@example/pi-memory", "./local-extension.ts"]
}
}
}
空白、复制和类似旗帜的条目被忽略。 因为孩子跑
离线, npm: 编号 : git: 条目是从用户镜像安装处装入的
——先安装软件包(pi install npm:@example/pi-memory, (中文(简体) ),
或条目被跳过。 打开密钥, 使儿童会话没有扩展 .
桥桥命令
与 bridge.commands 启用(默认),聊天可以控制自己与这些信件的对话:
/status- 桥梁活动计数器./abort——停止当前运行的此聊天提示./new—— 启动一个干净的对话: 中止运行的提示, 丢弃已队列的信件( 其临时附件已被清理), 删除持续会话文件.pi/channel-sessions/<adapter>-<hash>.jsonl,因此下一条信息不会恢复旧历史.
共享相同持续对话的信件也共享一个队列 。 包括主要聊天内容及其线索: /abort 财务报告和审定财务报表 /new 应用到共享的对话中,而回复仍然流向原始聊天或线索.
/new 等待被中止的子进程在删除文件前退出,因为皮在保存整个会话文件时会重写. 新提示等待所有重叠的重排完成 。 桥倒向本地 Pi - 代理 API 的镜像 bridge.persistSessions 未被删除 /new。 。 。 .
飞翔模式
WebSocket是默认和推荐模式,因为它不需要公开回调 URL :
{
"type": "feishu",
"appId": "${FEISHU_APP_ID}",
"appSecret": "${FEISHU_APP_SECRET}",
"eventMode": "websocket",
"respondToMentionsOnly": true,
"allowedChatIds": ["oc_xxx"]
}
当部署已经暴露出 Feishu 事件 URL 时使用 HTTP 回调模式 。 SDK处理挑战响应,符号验证,以及加密事件有效载荷. encryptKey 在HTTP模式中需要,因为它用于验证普通事件签名; verificationToken 光靠自己是不够的:
{
"type": "feishu",
"appId": "${FEISHU_APP_ID}",
"appSecret": "${FEISHU_APP_SECRET}",
"eventMode": "http",
"verificationToken": "${FEISHU_VERIFICATION_TOKEN}",
"encryptKey": "${FEISHU_ENCRYPT_KEY}",
"botOpenId": "ou_xxx",
"incoming": {
"port": 8787,
"path": "/feishu/events"
}
}
外出 Markdown 使用丰富文本 post 信件为 md 默认元素( e)"renderMode": "markdown"直接发送和答复。 标记下表对本地渲染没有变化;每个有栅栏的代码块以单独的段落发送,因此后行道被保留. 普通信息仍为逐字记录 text。这跟随 Hermes Feishu 适配器的后/md方法。如果Feishu拒绝一个带有非零业务代码(包括明确的HTTP 4xx拒绝)的帖子,适配器日志 feishu-render-fallback ,并重试一次,作为可读的纯文本;只有这样,表格才会被扩展成以列标题为标签的记录。 被拒绝的文本发送被报告为错误;模棱两可的传输或HTTP 5xx故障没有被重审,因为交付可能已经成功. 每次发送尝试前都会检查取消; SDK 不显示飞行中请求取消选项 。 设定 "renderMode": "text" 保留所有信件的逐字记录.
设定 "eventMode": "off" 仅用于外出用途.
叮当聊天模式
创建 DingTalk 内部应用程序,加入bot能力,选择Stream模式并发布. 将客户端ID和客户端秘密复制到适配器配置 :
{
"type": "dingtalk",
"clientId": "${DINGTALK_CLIENT_ID}",
"clientSecret": "${DINGTALK_CLIENT_SECRET}",
"robotCode": "${DINGTALK_ROBOT_CODE}",
"eventMode": "stream",
"respondToMentionsOnly": true,
"allowedConversationIds": ["cid_xxx"]
}
收到的答复使用每个消息 sessionWebhook 当可用时。 活动路由发送使用 DingTalk 的分组消息 OpenAPI 与路由接收者作为对话/打开连接 爱德. robotCode 默认为 clientId 当省略时.
设定 "eventMode": "off" 当机器人只发出消息时.
WeCom 模式
在 WeCom 管理控制台中创建智能机器人,选择API模式,并选择长连接选项. 将Bot ID 和 secret 复制到适配器配置 :
{
"type": "wecom",
"botId": "${WECOM_BOT_ID}",
"secret": "${WECOM_BOT_SECRET}",
"eventMode": "websocket",
"allowedChatIds": ["wr_xxx"]
}
设定 "eventMode": "off" 当机器人只发出消息时.
工具
notify(action: "send", adapter: "ops", text: "hello")
notify(action: "list")
notify(action: "test", adapter: "ops")
对于费修,收件人默认为 chat_id。在接收器上覆盖接收id类型的前缀 :
chat_id:oc_xxx
open_id:ou_xxx
user_id:abc123
email:[email protected]
对于 WeCom 智能bots,接收者是Bot API 所使用的对话ID. 在一组中, 向机器人发送一个消息并使用路径抓取来填充组 chatid; 对于一对一的推力,使用目标用户的用法:
wr_xxx
zhangsan
智能机器人适配器使用WebSocket Bot API,因此长接模式不需要公共回调URL.
对于 DingTalk app bots, 发送一个消息给bot, 并使用路径抓取来填充分组对话 id:
cid_xxx
活动
channel:sendchannel:receivechannel:registerchannel:removechannel:list
图标
/channel list
/channel reload
/channel bridge on
/channel bridge off
/channel bridge status