飞书
飞书的应用消息源,要注意使用了长连接进行监听,不能启动多个参数相同的消息源,只有其中一个会接收到消息。
涉及到用户或者群组信息时,userId是对应的用户open_id或者群组的open_id,userName对应的用户userId或者群组自定义id(仅在需要单独调用消息发送接口时会用到)。
至少需要基本的机器人消息权限、获取用户基本信息、通讯录中获取部门列表及用户列表相关权限、卡片消息相关权限。
步骤
- 创建内部应用
- 添加应用的机器人能力
- 权限中添加相关权限(建议全选)
- 事件与回调中-事件配置-订阅方式选择长连接接受事件
- 如果开启了加密策略,则配置时要填入相关加密参数
- 修改完成之后发布版本生效
支持的消息类型
- 文本消息(TEXT)
- 图片消息(IMAGE)
- 音频消息(AUDIO)
- 视频消息(VIDEO)
- 文件消息(FILE)
- 富文本消息(RICH_TEXT)
- 位置信息(POSITION)
- 联系人卡片(CONTACT_CARD)
- 卡片消息(CARD)
- 引用消息(REF)
- 表情消息(EMOTION)
- 文章消息(ARTICLE)
- 音乐消息(MUSIC)
- 系统消息(SYSTEM)
使用代码配置
typescript
const ppagent = new PPAgent({
bots: [...],
sources: [
{
name: FeishuSource.params.name,
options: {
instanceName: "feishu-source", // 必填,实例名称,需要全局唯一
appId: "cli_xxx", // 必填,飞书开发者后台应用管理页面获取
appSecret: "xxxx", // 必填,飞书开发者后台应用管理页面获取
verificationToken: "xxxx", // 可选,飞书后台应用与回调中开启了加密策略才需要
encryptKey: "xxxx", // 可选,飞书后台应用与回调中开启了加密策略才需要
domain: "https://open.feishu.cn", // 可选,飞书开放平台的API域名,默认是 https://open.feishu.cn
contactsCacheTime: 86400, // 可选,联系人缓存时间,单位是秒,默认24小时
contactDepartId: "0", // 可选,联系人列表ID,以od-开头表示飞书自动生成的开放id,否则认为是自定义的id
ignoreNoneUserMessage: true, // 可选,是否忽略非用户发送的消息,默认true
replayTextMode: "stream", // 可选,文本消息的回复方式,默认使用text格式。可选值:text、rich_text、stream
cardId: "xxxxx", // 可选,当配置输出位stream时,需要提供卡片ID,否则将使用默认的卡片模板
richTextTitle: false, // 可选,当使用富文本形式回复时,是否启用标题,默认false
richTextTitleTemplate: "RE:{title}", // 可选,富文本标题模板,默认是RE:{title}
thinkingTips: "正在思考中...", // 可选,启用流式回复时,正在思考的提示语
wavChannel: 1, // 可选,收到的语音转为wav时的通道数
wavSampleRate: 16000 // 可选,收到的语音转为wav时的采样率
}
}
],
agents: [...]
});
// 服务器运行请参考 docs/starter/install_code.md 文件
流式回复支持
飞书支持流式卡片的方式回复,需要将replayTextMode
配置为stream
。在流式模式下,会先发送一个包含"正在思考中..."的卡片消息,然后随着回复内容的生成不断更新卡片内容,实现类似打字机效果的流式输出。
webhook机器人
WARNING
默认情况使用的是应用机器人。由于webhook机器人无法接受消息,所以只能通过代码调用发送消息的接口实现发送。
飞书支持webhook自定义机器人,可以通过webhook URL发送消息。webhook机器人不支持图片上传,因此只能发送文本信息、不带图的富文本信息和不带图的卡片消息。
使用webhook机器人时,需要在消息中的toInfo
字段中包含webhook URL。
注意事项
- 飞书消息源使用了长连接进行监听,请确保不要启动多个参数相同的消息源
- 在使用流式回复时,需要确保应用拥有更新消息的权限
- 使用webhook机器人时,功能会受到限制,无法上传图片和接收消息
- 使用富文本回复模式时,markdown的图片标签会被提取单独显示
- 使用流式回复模式时,markdown中的图片标签会被提取并上传到飞书,且嵌入在原来位置显示
服务器运行请参考 install_code.md 文件。