# 在 Slack 中自定义GitHub通知

了解如何在 Slack 中自定义GitHub通知。

可以自定义通知，方法是订阅与 Slack 频道相关的活动，并取消订阅对项目帮助不大的活动。

### 通知默认启用

默认情况下启用以下通知，但你可以使用 `/github unsubscribe owner/repo [event]` 命令禁用其中任何通知。

| 事件            | Description                  |
| ------------- | ---------------------------- |
| `issues`      | 打开、关闭或重新打开的问题。               |
| `pulls`       | 新的或合并的拉取请求，以及标记为可供审核的草稿拉取请求。 |
| `commits`     | 默认分支上的新提交。                   |
| `releases`    | 已发布的版本。                      |
| `deployments` | 部署状态更新。                      |

### 通知默认情况下已禁用

默认情况下禁用以下通知，但可以使用 `/github subscribe owner/repo [event]` 命令启用其中任何通知。

| 事件                    | Description      |
| --------------------- | ---------------- |
| `reviews`             | 拉取请求评审。          |
| `workflows`           | Actions 工作流运行。   |
| `branches`            | 创建或删除分支。         |
| `comments`            | 对问题和拉取请求的新评论。    |
| `commits`             | 所有提交到任何分支。       |
| `discussions`         | 创建或有回应的讨论。       |
| `+label:"your label"` | 基于标签的问题、拉取请求和评论。 |

您可以同时订阅或取消订阅多个设置项。 例如：

* 若要为拉取请求评审和批注启用活动，请使用 `/github subscribe owner/repo reviews comments`。
* 若要关闭问题和拉取请求的活动，请使用 `/github unsubscribe owner/repo issues pulls`。

## 筛选通知

可以使用分支和标签筛选器进一步自定义通知。 分支筛选器允许基于分支名称筛选提交通知，而标签筛选器允许根据应用于它们的标签筛选问题和拉取请求通知。

### 提交通知的分支筛选器

通过分支筛选器，可以根据分支名称筛选提交通知。 默认情况下，订阅 `commits` 事件时，你将收到默认分支的通知。 但是，可以选择针对特定分支或分支模式或所有分支进行筛选。

| 示例配置                                             | Description                  |
| ------------------------------------------------ | ---------------------------- |
| `/github subscribe owner/repo commits`           | 接收默认分支的提交通知。                 |
| `/github subscribe owner/repo commits:main`      | 仅接收 `main` 分支的提交通知。          |
| `/github subscribe owner/repo commits:feature/*` | 接收所有以 `feature/` 开头的分支的提交通知。 |
| `/github subscribe owner/repo commits:*`         | 接收所有分支的提交通知。                 |

> \[!NOTE] 你可能以前曾使用 `commits:all` 筛选器来接收所有分支的提交通知。 此筛选器为 关闭。 若要接收所有分支的提交通知，请改用 `commits:*` 筛选器。 如果之前已设置 `commits:all` 筛选器，它将继续工作，直到更新配置以使用 `commits:*` 筛选器。

### 问题通知和拉取请求通知的标签筛选器

标签筛选器允许根据应用于问题和拉取请求的标签筛选通知。 设置标签筛选器时，仅发送包含指定标签的事件通知。 有关标签的详细信息，请参阅 [管理标签](/zh/issues/using-labels-and-milestones-to-track-work/managing-labels) 和 [筛选和搜索议题以及拉取请求](/zh/issues/tracking-your-work-with-issues/using-issues/filtering-and-searching-issues-and-pull-requests)。

目前，每个存储库只能有一个所需的标签筛选器。 下表显示了哪些事件类型受标签筛选器的影响。

| 事件类型    | 按标签筛选                                                                                                                                                                                                                                                                                                                                                                                                                        |
| ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 拉取请求    | <svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-check" aria-label="Included" role="img"><path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path></svg>                                                                                                      |
| 问题      | <svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-check" aria-label="Included" role="img"><path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path></svg>                                                                                                      |
| 注释      | <svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-check" aria-label="Included" role="img"><path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path></svg>                                                                                                      |
| Reviews | <svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-check" aria-label="Included" role="img"><path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path></svg>                                                                                                      |
| 提交/推送   | <svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-x" aria-label="x icon" role="img"><path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path></svg> |
| 分支      | <svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-x" aria-label="x icon" role="img"><path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path></svg> |

#### 创建标签筛选器

若要创建标签筛选器，请使用以下命令格式：

```text copy
/github subscribe [owner/repo] +label:"your label"
```

这会使用值 `your label`创建必需标签筛选器。 除非具有该标签，否则支持筛选器的传入事件将被丢弃。

#### 更新标签筛选器

可以通过指定新的标签值来更新现有标签筛选器：

```text copy
/github subscribe [owner/repo] +label:"new label"
```

这将会把“你的标签”筛选器替换为“新的标签”筛选器。

#### 删除标签筛选器

可以使用取消订阅命令和 `+label` 选项删除现有标签筛选器：

```text copy
/github unsubscribe [owner/repo] +label:"new label"
```

这将删除“新标签”筛选器，通道将接收订阅事件的所有通知，而无需任何标签筛选。

#### 查看活动标签筛选器

若要查看通道的当前活动标签筛选器，请使用以下命令：

```text copy
/github subscribe list features
```

#### 有效筛选器

Slack 中的 GitHub 应用支持标签筛选器最常见的特殊字符，包括 Slack 和 GitHub 提供的所有表情符号。 很少遇到包含不支持的特殊字符的标签。 例如，未编码为 `:foo:`任何多字节字符，或者使用该字符的 `,` 标签可能无法按预期工作。

## 操作工作流通知

可以使用“工作流”功能，使用格式 `/github subscribe owner/repo workflows`，从你的频道或个人应用订阅 GitHub Actions 工作流运行通知。

订阅“工作流”时，可以使用以下功能：

* 触发新的工作流运行时，将收到通知。

* 可以在线程中以回复的形式跟踪批准通知，也可以直接从频道/个人应用批准通知。

* 工作流完成后，你将在线程中收到一个更新作为回复，以便你了解有关工作流运行的上下文和历史记录。

* 如果某些作失败，可以选择就地重新运行工作流，还可以根据需要启用调试日志。

> \[!NOTE] 2025-03-10（GHES 版本 3.17）之后，将不再收到有关单个工作流作业进度的通知。 有关详细信息，请参阅 [GitHub changelog](https://github.blog/changelog/2025-02-03-deprecation-of-real-time-github-actions-workflow-job-events-in-slack-and-microsoft-teams-apps/) 。

### 工作流通知筛选器

可以使用以下选项筛选工作流通知：

| 过滤器      | Description                                                |
| -------- | ---------------------------------------------------------- |
| `name`   | 按工作流的名称进行筛选。                                               |
| `actor`  | 按触发工作流的用户进行筛选。                                             |
| `branch` | 按运行工作流的分支进行筛选。 在包含`pull_request`事件的情况下，分支将是创建拉取请求所针对的目标分支。 |
| `event`  | 按触发工作流的事件（例如推送、pull\_request）进行筛选。                         |

可以使用以下格式配置工作流通知筛选器：

```text copy
/github subscribe owner/repo workflows:{name:"your workflow name" event:"workflow event" branch:"branch name" actor:"username"}
```

还可以为每个筛选器传递多个值，用逗号分隔。 例如：

```text copy
/github subscribe owner/repo workflows:{name:"your workflow name","another workflow name" event:"workflow event","another workflow event" branch:"branch name","another branch name" actor:"username","another-username"}
```

默认情况下，当你在不通过任何筛选器的情况下配置工作流通知时，它被配置为通过针对默认分支的拉取请求触发的工作流。 可以传递一个或多个条目。

可以使用以下命令取消订阅工作流通知：`/github unsubscribe owner/repo workflows`。

> \[!NOTE] 若要在 Slack 中接收 GitHub Actions 通知，GitHub 应用需要额外权限。 首次尝试订阅工作流时，系统会提示你授予这些权限。

## 部署通知

还可以配置单独的部署通知。 这些部署可以从 GitHub Actions 或者通过部署 API 从外部来源进行。 请参阅“[适用于部署的 REST API 终结点](/zh/rest/deployments/deployments?apiVersion=2022-11-28)”。

可以使用以下命令订阅/取消订阅部署通知。 `/github subscribe/unsubscribe owner/repo deployments`

> \[!NOTE] 如果你正在使用 GitHub Actions，并希望跟踪你在环境中的部署，建议使用 `workflows` 功能，因为它提供了更全面的视图，并且能够直接从 Slack 批准你的部署。