接人 Sentry 机器人

不区分项目平台, 配置一致

1.打开飞书客户端

2.点击 + 按钮,选择创建群组

Sentry 接入飞书 - 图1

3.创建群组,填写群名称,点击创建

Sentry 接入飞书 - 图2

4.打开对话框,点击 按钮

Sentry 接入飞书 - 图3

5.选择添加机器人

Sentry 接入飞书 - 图4

6.搜索 Sentry,并添加

Sentry 接入飞书 - 图5

7.添加后在群里 @Sentry助手,发送后,并点击 创建配置

Sentry 接入飞书 - 图6

8.点击复制按钮,并点击保存 webhook

Sentry 接入飞书 - 图7

9.选择项目

Sentry 接入飞书 - 图8

10.选择刚刚创建的项目,点击进入

Sentry 接入飞书 - 图9

11.进入项目设置页面

Sentry 接入飞书 - 图10

12.进入 webhook 设置页面

Sentry 接入飞书 - 图11

13.把飞书提供 webhook 地址 的填上,点击 Save Changes,然后点击测试插件,飞书会发送一条信息

Sentry 接入飞书 - 图12

14.飞书会推送一条信息,配置完成!!!

Sentry 接入飞书 - 图13

配置自定义消息模板

:::tip
由于默认飞书的 Sentry机器人 信息不清晰,可以使用 飞书捷径 + 自定义机器人 两种机器人来实现自定义消息模板
:::

上面 1-5 步一样

1.添加机器人,自行修改机器人名称、描述,下一步

Sentry 接入飞书 - 图14

2.拿到 webhook地址,安全配置自行选择

Sentry 接入飞书 - 图15

3.搜索 飞书捷径,并添加

Sentry 接入飞书 - 图16

4.找到 飞书捷径 机器人,点开 打开应用

Sentry 接入飞书 - 图17

5.创建飞书捷径,点击 选择触发器,选择 webhook

Sentry 接入飞书 - 图18


Sentry 接入飞书 - 图19

6.webhook地址 记录下来,添加在上面第 13 步的配置中,参数中填写下面数据(不需要改修改直接粘贴上去),点击确认完成配置

Sentry 接入飞书 - 图20

  1. {
  2. "id": "2",
  3. "project": "项目名",
  4. "project_name": "项目名",
  5. "url": "sentry错误详情链接",
  6. "event": {
  7. "release": "版本号",
  8. "environment": "英文环境名",
  9. "extra": {
  10. "date": "日期",
  11. "environment": "中文环境名",
  12. "hash": "路由",
  13. "origin": "域名",
  14. "errTitle": "域名",
  15. "errType": "request|try",
  16. "request": {
  17. "message": "",
  18. "url": "",
  19. "method": "",
  20. "status": 1,
  21. "body": {},
  22. "bodyText": "",
  23. "data": {},
  24. "dataText": "",
  25. "headers": {}
  26. },
  27. "scid": "scid",
  28. "search": "域名参数"
  29. },
  30. "title": "错误信息",
  31. "id": "1"
  32. }
  33. }

7.点击下面按钮进行分支判断

8.设置两个条件,注意第二个选择项目的区别

第一个条件配置 第二个条件配置
Sentry 接入飞书 - 图21 Sentry 接入飞书 - 图22

9.点击选择操作,选择 webhook 应用

Sentry 接入飞书 - 图23

10.配置设置选项

飞书卡片参考链接 卡片模板配置 卡片开发说明

:::tip
请求方式: POST
URL: 为自定义机器人的 webhook 地址
数据类型: application/json
Data: 飞书消息卡片模板格式(具体说明点击 👆 链接)

Data 变量参数为上面 第6步 的数据格式
:::

Sentry 接入飞书 - 图24 :::danger 下面两个数据格式中 <event.xxx.xxx> 为选择的变量数据。
条件判断为 第8部 添加的值 :::


  • 接口错误效果图

    Sentry 接入飞书 - 图25

  • 脚本错误效果图

    Sentry 接入飞书 - 图26


  • 接口报错数据格式

    条件为: event.extra.errType(文本)等于 request

  1. {
  2. "msg_type": "interactive",
  3. "update_multi": true,
  4. "card": {
  5. "config": { "wide_screen_mode": true },
  6. "elements": [
  7. { "tag": "markdown", "content": "**时间:** <event.extra.date>" },
  8. { "tag": "markdown", "content": "**SCID:** <event.extra.scid>" },
  9. { "tag": "markdown", "content": "**环境:** <event.extra.environment>" },
  10. { "tag": "div", "fields": [{ "is_short": false, "text": { "tag": "lark_md", "content": "**路由:**\n <event.extra.hash>" } }] },
  11. { "tag": "div", "fields": [{ "is_short": false, "text": { "tag": "lark_md", "content": "**域名:**\n <event.extra.origin>" } }] },
  12. { "tag": "hr" },
  13. { "tag": "markdown", "content": "**接口地址:**\n <event.extra.request.url>" },
  14. {
  15. "tag": "div",
  16. "fields": [
  17. { "is_short": true, "text": { "tag": "lark_md", "content": "**请求类型:**\n <event.extra.request.method>" } },
  18. { "is_short": true, "text": { "tag": "lark_md", "content": "**状态码:**\n <event.extra.request.status>" } }
  19. ]
  20. },
  21. { "tag": "div", "fields": [{ "is_short": false, "text": { "tag": "lark_md", "content": "**请求体:**\n <event.extra.request.bodyText>" } }] },
  22. { "tag": "div", "fields": [{ "is_short": false, "text": { "tag": "lark_md", "content": "**响应数据:**\n <event.extra.request.dataText>" } }] },
  23. { "tag": "div", "fields": [{ "is_short": false, "text": { "tag": "lark_md", "content": "**错误信息:**\n <event.title>" } }] },
  24. { "tag": "action", "actions": [{ "tag": "button", "text": { "tag": "plain_text", "content": "查看详情" }, "url": "<event.url>", "type": "danger" }] },
  25. { "tag": "hr" },
  26. { "elements": [{ "content": "[来自Sentry](<event.url>)", "tag": "lark_md" }], "tag": "note" }
  27. ],
  28. "header": { "template": "red", "title": { "content": "<event.extra.errTitle>", "tag": "plain_text" } }
  29. }
  30. }
  • 脚本报错数据格式

    条件为: event.extra.errType(文本)不包含 request

  1. {
  2. "msg_type": "interactive",
  3. "update_multi": true,
  4. "card": {
  5. "config": { "wide_screen_mode": true },
  6. "elements": [
  7. { "tag": "markdown", "content": "**时间:** <event.extra.date>" },
  8. { "tag": "markdown", "content": "**SCID:** <event.extra.scid>" },
  9. { "tag": "markdown", "content": "**环境:** <event.extra.environment>" },
  10. { "tag": "div", "fields": [{ "is_short": false, "text": { "tag": "lark_md", "content": "**路由:**\n <event.extra.hash>" } }] },
  11. { "tag": "div", "fields": [{ "is_short": false, "text": { "tag": "lark_md", "content": "**域名:**\n <event.extra.origin>" } }] },
  12. { "tag": "div", "fields": [{ "is_short": false, "text": { "tag": "lark_md", "content": "**错误信息:**\n <event.title>" } }] },
  13. { "tag": "action", "actions": [{ "tag": "button", "text": { "tag": "plain_text", "content": "查看详情" }, "url": "<event.url>", "type": "danger" }] },
  14. { "tag": "hr" },
  15. { "elements": [{ "content": "[来自Sentry](<event.url>)", "tag": "lark_md" }], "tag": "note" }
  16. ],
  17. "header": { "template": "red", "title": { "content": "<event.extra.errTitle>", "tag": "plain_text" } }
  18. }
  19. }