diff --git a/src/__tests__/worker.test.ts b/src/__tests__/worker.test.ts index 2b86577..f663008 100644 --- a/src/__tests__/worker.test.ts +++ b/src/__tests__/worker.test.ts @@ -165,7 +165,7 @@ test('发送请求超时属于结果不确定并停止自动重试', async () => } }) -test('机器人 ActionCard 原样发送统一标题、分段正文和按钮跳转', async () => { +test('机器人 ActionCard 在正文顶部显示统一标题,并发送业务正文和按钮跳转', async () => { const originalFetch = global.fetch const oldAppKey = process.env.DINGTALK_APP_KEY const oldAppSecret = process.env.DINGTALK_APP_SECRET @@ -199,7 +199,7 @@ test('机器人 ActionCard 原样发送统一标题、分段正文和按钮跳 assert.equal(batchRequest.msgKey, 'sampleActionCard') assert.deepEqual(JSON.parse(batchRequest.msgParam), { title: input.title, - text: input.content, + text: `### ${input.title}\n\n${input.content}`, singleTitle: input.actionTitle, singleURL: input.actionUrl, }) diff --git a/src/dingtalk.ts b/src/dingtalk.ts index c1e6fa3..1adc8a1 100644 --- a/src/dingtalk.ts +++ b/src/dingtalk.ts @@ -161,6 +161,8 @@ export const sendRobotMessage = async (input: { actionUrl: string }) => { const { robotCode } = getDingTalkConfig() + const visibleTitle = input.title.slice(0, 120) + const visibleText = `### ${visibleTitle}\n\n${input.content}`.slice(0, 4800) return withFreshTokenRetry(async () => { const token = await getToken() const data = await requestJson('https://api.dingtalk.com/v1.0/robot/oToMessages/batchSend', { @@ -171,13 +173,13 @@ export const sendRobotMessage = async (input: { userIds: [input.recipientUserId], msgKey: input.actionUrl ? 'sampleActionCard' : 'sampleMarkdown', msgParam: JSON.stringify(input.actionUrl ? { - title: input.title.slice(0, 120), - text: input.content.slice(0, 4800), + title: visibleTitle, + text: visibleText, singleTitle: input.actionTitle.slice(0, 20), singleURL: input.actionUrl, } : { - title: input.title.slice(0, 120), - text: input.content.slice(0, 4800), + title: visibleTitle, + text: visibleText, }), }), }, { deliveryOutcomeCanBeUnknown: true })