我可以自定义通过 Slack 的 AWS Chatbot 集成接收的消息吗?

Roc*_*cer 12 chatbot amazon-web-services slack

目前,我们已经为 Slack 设置了 AWS Chatbot 集成,以接收有关 CodePipeline 的通知 - CodeBuilds 的结果以及 CodePipeline 所有阶段的状态。我注意到开箱即用的集成消息并不像我想要的那样具有描述性。

例如:如果由于单元测试失败而导致构建失败,聊天机器人将输出POST_BUILD: COMMAND_EXECUTION_ERROR: Error while executing command: <command>. Reason: exit status 1这很好,但我宁愿将该消息更改为更具描述性的内容 - 告诉我测试已失败。

我认为 Chatbot 订阅了 SNS 主题,一旦这些主题被发送出去,它就会在 Slack 上发布一条消息。有没有办法自定义它发送的消息的内容?

Tom*_*Tom 9

官方答案是否定的,但我发现有一个解决方法。您可以使用 Cloudwatch EventBridge 消息并根据您的喜好进行调整。

简单地说

发布以下消息

{
"version": "0",
"id": "13cde686-328b-6117-af20-0e5566167482",
"detail-type": "Your custom message",
"source": "aws.ecr",
"account": "123456789012",
"time": "2019-11-16T01:54:34Z",
"region": "azAZ0-9!-_/|?!.,",
"resources": [],
"detail": {}
}
Run Code Online (Sandbox Code Playgroud)

你会看到类似的东西

AWS 聊天机器人自定义事件

并且您可以根据一些限制自由编辑区域、详细类型和帐户


sam*_*ler 6

更新:进一步阅读文档后,我发现我们无法修改 aws 聊天机器人中的事件消息。

我收到“不支持收到的事件”错误

尽管以下方法是正确的,但 AWS Chatbot 不支持通知的发起服务。

将 AWS Chatbot 与其他 AWS 服务结合使用

您可以进行Event Rule如下所示的自定义,我选择FAILED状态,您可以自定义您想要的任何事件,然后订阅一个 lambda 到它,您可以在其中构建有意义的消息,然后将其发送到已AWS Chatbot订阅的 SNS 主题:

{
  "source": [
    "aws.codepipeline"
  ],
  "detail-type": [
    "CodePipeline Action Execution State Change"
  ],
  "detail": {
    "state": [
      "FAILED"
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

我为 PagerDuty 呼叫做了类似的事情,以便待命人员收到正确的消息,并在警报中附加了一些更多信息。

  • @nonbeing 是的,我认为这很愚蠢。我最终走了一条完全不同的路线 - 我只是与启用 Webhook 的 Slackbot 交谈(具有在特定频道中发帖的权限)。我在 AWS Lambda 中创建了一个有效负载,然后简单地对机器人的 Webhook 进行 POST 调用。奇迹般有效 (2认同)