钉钉应用
步骤
- 钉钉后台创建内部应用
- 添加应用的机器人能力
- 事件订阅方式选择Stream模式推送
- 开通通讯录、卡片、消息等权限。如果不清楚,可以尽可能多的开通。建议开启
企业已安装的应用列表查询权限
(用于匹配当前应用的icon等信息)。 - 应用发布后配置生效
- 确保应用信息修改后已经发布
支持的消息类型
- 文本消息
- 富文本消息
- 图片消息
- 音频消息(支持转文字识别)
- 视频消息
- 文件消息
- 文章消息(链接类型)
流式回复支持
钉钉支持使用AI卡片进行流式回复,需要配置streamTemplateId
参数。您可以参考钉钉文档创建流式回复的卡片模板。
创建流式模板后,需要在应用管理后台开放卡片相关权限(后台应用权限搜索"卡片"全选批量开通即可)。
使用卡片时,因为钉钉只支持markdown类型的卡片(text类型),所以需要关闭相关文字转语音技能对该source的使用,否则会出现卡片内容无法更新的情况。
使用代码配置
const app = new PPAgent({
sources: [
{
name: "dingbot",
options: {
// 必填配置
instanceName: "ding-robot", // 实例名称,全局唯一
clientId: "你的Client ID", // 客户端ID,在应用列表-应用管理-基础信息-凭证与基础信息页面查看
clientSecret: "你的Client Secret", // 客户端密钥,同上
corpId: "你的企业ID", // 企业ID,一般以ding开头,在钉钉开放平台首页可以看到
agentId: 123456789, // 应用的AgentId,在应用管理-基础信息页面可查看,名为"原企业内部应用AgentId"
robotCode: "dingxxxxxxxx", // 机器人代码,在应用管理-应用能力-机器人页面点击复制RobotCode获取
// 以下为可选配置
apiHost: "https://api.dingtalk.com", // API主机地址,默认为https://api.dingtalk.com
oldApiHost: "https://oapi.dingtalk.com", // 旧API主机地址,默认为https://oapi.dingtalk.com
debug: false, // 是否开启调试模式,默认使用环境变量中的值
// 消息展示相关配置
markdownMsgTitle: "AI助手回复", // Markdown消息标题,默认使用回复内容的前16个字
sendAudioFormat: "amr", // 发送音频格式,支持"wav"或"amr",默认为amr(尺寸小但效率略低于wav)
// 流式回复配置
streamTemplateId: "你的流式模板ID", // 流式回复模板ID,配置后开启流式回复
// 联系人管理相关配置
contactsCacheTime: 86400, // 联系人缓存时间(秒),默认24小时
contactDepartId: 1, // 联系人列表ID,默认为1(根路径)。如果只希望部分部门的用户可被前端选择,可设置上级部门ID
contactAutoloadOnStart: true, // 启动时自动加载联系人,默认为true。建议开启,避免第一次使用时等待时间过长
contactSleepMS: 30 // 联系人获取间隔(毫秒),默认30ms。如递归调用获取用户接口触发限流,可适当调大此值
}
}
],
// bots: [...],
// agents: [...]
});
使用Webhook机器人
WARNING
钉钉除了应用机器人外,还支持Webhook机器人,用于发送消息到群聊。与应用机器人不同,Webhook机器人支持@群成员功能,但不支持接收用户消息,所以webhook机器只能通过代码调用发送接口实现消息的发送,适合用于做消息通知。
配置方法
- 在钉钉群中添加自定义机器人,获取Webhook地址
- 在配置联系人时,将Webhook URL作为用户ID使用
// 在agent配置中,toInfo参数使用webhook URL
const toInfo = [{
userId: "https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx", // Webhook URL
userName: "群聊名称"
}];
// 支持@功能
message.atList = ["@all"]; // @所有人
// 或者@指定成员,支持使用手机号或userId
message.atList = ["13800138000", "user123"];
支持的消息类型
Webhook机器人支持以下类型的消息:
- 文本消息(会转为markdown格式发送)
- 音频消息(仅发送识别的文本内容)
- 图片消息(转为markdown内嵌图片发送)
- 文章消息(转为link类型消息发送)
注意事项
权限设置:需要开启机器人发消息相关权限、通讯录和部门管理相关权限、应用管理相关权限、互动卡片相关权限。
网络要求:钉钉支持直接引用外部图片显示,因此需要服务器具备公网访问能力。
@功能支持:钉钉应用机器人暂不支持@人,只有webhook机器人支持@功能。
音频格式:目前测试显示钉钉支持wav格式播放,但转文字可能会失败;amr格式文件尺寸更小。
联系人获取:如果您的企业员工较多,建议设置
contactAutoloadOnStart: true
,避免第一次使用时等待时间过长。读取范围可以通过contactDepartId
参数进行控制。如果不知道Id,可以先使用默认值,系统启动时(设置contactAutoloadOnStart为true)会输出获取到的各个部门Id。流式回复:使用流式回复需要配置
streamTemplateId
并开通相关权限。使用卡片时应避免同时使用文字转语音功能。
服务器运行请参考 install_code.md 文件。