Changes: * 新增 dingtalkTitle 函数,优先使用内容的第一行作为标题,若内容为空则回退到默认标题 * 更新 Send 方法以使用新的标题生成逻辑 * 添加单元测试以验证标题生成的正确性
Motivation: 钉钉 Markdown 渲染时会将单个换行符折叠为空格,导致推送的通知内容被压缩成一行,严重影响消息可读性。 Changes: * 发送前将消息正文中的单个换行统一转换为段落分隔(\n\n),确保模板换行在钉钉中正确渲染 * 归一化 \r\n 与 \r 换行,并合并已有连续换行,避免产生多余空行 * 新增换行转换逻辑的单元测试
Motivation: 钉钉机器人的 webhook 前缀固定不变,要求用户填写完整 URL 冗余且容易出错。简化通道配置项,降低接入配置成本,同时保证存量配置不受影响。 Changes: * 钉钉通道配置改用 access_token,webhook 前缀由内部固定拼接 * 保留对旧 webhook_url 配置的兼容,access_token 存在时优先生效 * 新增 webhook 地址解析逻辑的单元测试,覆盖优先级与回退场景 * 同步更新 README、HTTP 请求示例及设计文档中的配置示例 * E2E 测试改用 E2E_DINGTALK_ACCESS_TOKEN 环境变量并按新格式创建通道