Slack has a limit of 3000 chars on a section type. We should truncate long messages to fit because a truncated message is much better than no message and it will signal that the limit exists to the dev.
Rough example:
const buildSlackMsg = (event: unknown): IncomingWebhookSendArguments => {
let warning = JSON.stringify(event, undefined, 2);
// The maximum length of a `section.text` field in Slack API is 3000
// characters (https://api.slack.com/reference/block-kit/blocks#section) Slack
// Webhooks will HTTP 400 if the message we give it is too long.
const TRUNCATED_TEXT_REPLACEMENT = '\n\n[MESSAGE TRUNCATED FOR SLACK]';
const WRAPPER_TEXT_LENGTH = 12; // 6 quoted backticks
const MAX_WARNING_LENGTH =
3000 - WRAPPER_TEXT_LENGTH - TRUNCATED_TEXT_REPLACEMENT.length;
if (warning.length > MAX_WARNING_LENGTH) {
warning = warning.substring(0, MAX_WARNING_LENGTH);
warning = warning.concat(TRUNCATED_TEXT_REPLACEMENT);
}
const alarmMessage = `\`\`\`${warning}\`\`\``;
return {
channel: process.env.SLACK_CHANNEL,
blocks: [
{
type: 'header',
text: {
type: 'plain_text',
text: ':warning: An event requires investigation',
emoji: true
}
},
{
type: 'section',
text: {
type: 'mrkdwn',
text: alarmMessage
}
}
]
};
};
Slack has a limit of 3000 chars on a
sectiontype. We should truncate long messages to fit because a truncated message is much better than no message and it will signal that the limit exists to the dev.Rough example: