Slack
slack
平台允许您将来自Home Assistant的通知发送到Slack
设置
Slack应用
- 在您的Slack.com帐户下创建一个新应用
。 - 点击侧边栏中的
OAuth & Permissions
链接,在功能标题下。
找到 Features/OAuth and Permissions/Scopes/Bot Token Scopes
- 添加
chat:write
和dnd:read
作用域
- 要修改Slack机器人用户名和图标,请额外添加
chat:write.customize
OAuth作用域
- 向上滚动到
OAuth Tokens & Redirect URLs
并点击Install to Workspace
。
在 Features/OAuth and Permissions/OAuth Tokens for Your Workspace
:
- 复制Bot用户OAuth令牌。在Home Assistant设置中将其用作’API密钥’
- 确保将机器人用户添加到您希望其发布的频道中。这可以通过几种方式完成:
- 使用
/invite @bot
从频道中邀请 - 在消息中标记机器人用户,然后通过Slackbot提示将其添加到频道。
- 频道设置 ->
Integrations
->Add apps
示例应用清单
您可以轻松创建一个具有所需权限的机器人应用清单。
display_information:
name: Home Notifications
features:
bot_user:
display_name: Home Notifications
always_online: false
oauth_config:
scopes:
bot:
- incoming-webhook
- chat:write
- dnd:read
- chat:write.customize
settings:
org_deploy_enabled: false
socket_mode_enabled: false
token_rotation_enabled: false
集成设置
安装集成时,请使用以下设置:
API密钥: xoxb-abc-def
- Bot用户OAuth令牌(来自上面的步骤5)
默认频道: #channel
- 如果调用时未提供频道,则机器人将在该频道发布消息
图标/用户名:
- 可选 - 如果您希望机器人用户拥有自定义的名称/图标,而不是Slack中已经设置的名称/图标
用法
发送消息
发送消息的最简单方法之一是创建一个脚本。您可以粘贴YAML并在GUI中进行更改。
您可以将此脚本作为操作调用。
- 转到Home Assistant设置 > 自动化与场景 > 脚本 > 添加脚本
- 点击右上角的三个点,然后选择’以YAML编辑’。粘贴下面的内容。
- 将
YOUR_SLACK_TEAM
更改为团队名称(*.slack.com)
alias: "Notify: Slack Notification Template"
sequence:
- action: notify.YOUR_SLACK_TEAM
data:
message: "Fallback Text"
target: "#test-channel" # 单个频道目标
title: "Reminder"
data:
blocks:
- type: section
text:
type: mrkdwn
text: >-
这是一个mrkdwn部分块 *这是粗体文本*,以及~这个被删除的文本~,和<https://google.com|这是一个链接>
更新块数组以包含有效的Slack块。创建它的最简单方法是使用Slack Block Kit Builder
创建此脚本的副本,以便用于不同的消息和不同的频道(比如门在#security中被打开,灯在#lights中留着等等)。
您还可以一次发送消息到多个目标(频道和/或用户):
alias: "Notify: Multiple Targets Message"
sequence:
- action: notify.YOUR_SLACK_TEAM
data:
message: "警报:检测到动作!"
target:
- "#security" # 按名称的频道
- "C01234ABCD" # 按ID的频道
- "U5678EFGH" # 直接消息给用户按ID
title: "安全警报"
data:
blocks:
- type: section
text:
type: mrkdwn
text: "在后院摄像头中检测到动作"
目标类型
target
字段可以接受单个值或值的列表。每个目标可以是:
- 以
#
为前缀的频道名称(例如,#general
) - 没有
#
前缀的频道名称(例如,general
) - 频道ID(例如,
C01234ABCD
) - 直接消息的用户ID(例如,
U5678EFGH
)
发送文件时,请确保您已按照设置部分中所述设置了适当的权限。
图标
Slack使用标准的表情符号集,您可以在这里
配置
要将 Slack 服务 添加到您的 Home Assistant 实例中,请使用此 My 按钮:
手动配置步骤
如果上述 My 按钮不起作用,您也可以手动执行以下步骤:
-
浏览到您的 Home Assistant 实例。
-
转到
设置 > 设备与服务。 -
在右下角,选择
Add Integration 按钮。 -
从列表中选择 Slack。
-
按照屏幕上的说明完成设置。
将创建一个传感器实体:
- 请勿打扰计时器:剩余的请勿打扰状态时间。
Slack操作数据
以下属性可以放置在操作的data
键中,以扩展功能:
属性 | 可选 | 描述 |
---|---|---|
username |
是 | Slack机器人的用户名。 |
icon |
是 | Slack机器人的图标。 |
file |
是 | 要随消息一起包含的文件;见下文。 |
blocks |
是 |
Slack块blocks ,它们将在Slack应用中替代message 显示。消息字段将用作通知文本,以及Slack无法显示块的任何地方。无论是否使用此字段,message 都是必需的。 |
blocks_template |
是 | 与blocks 相同,但能够支持模板。 |
thread_ts |
是 | 将消息作为对指定父消息的回复发送。 |
请注意,使用file
将忽略所有对blocks
和blocks_template
的使用(因为Slack在伴随上传文件的消息中不支持这些框架)。
要在Slack消息中包含本地文件,请在file
键下使用以下属性:
属性 | 可选 | 描述 |
---|---|---|
path |
否 | 已被列入白名单的本地文件路径。 |
要在Slack消息中包含远程文件,请在file
键下使用以下属性:
属性 | 可选 | 描述 |
---|---|---|
url |
否 | 已被列入白名单的URL。 |
username |
是 | 如果URL受到HTTP基本身份验证保护的可选用户名。 |
password |
是 | 如果URL受到HTTP基本身份验证保护的可选密码。 |
获取成员ID
以下一些示例使用成员ID。这是Slack分配给所有用户(成员和访客)的唯一字符串,而不是用户设置的用户名。要获得成员ID:
- 选择一个Slack用户(名称和个人资料图片均适用)以调出他们的个人资料侧面板。
- 通过选择三个点打开上下文菜单。
- 选择 复制成员ID。
示例
从本地路径发送文件:
message: 将作为文件评论添加的消息。
title: 文件的标题。
data:
file:
path: /path/to/file.ext
从远程路径发送文件:
message: 将作为文件评论添加的消息。
title: 文件的标题。
data:
file:
url: "http://site.com/image.jpg"
从受HTTP基本身份验证保护的远程路径发送文件:
message: 将作为文件评论添加的消息。
title: 文件的标题。
data:
file:
url: "http://site.com/image.jpg"
username: user
password: pass
使用块框架:
message: 用于通知的后备消息,或在块不显示任何内容的情况下。
title: 文件的标题。
data:
blocks:
- type: section
text:
type: mrkdwn
text: 'Danny Torrence为您的财产留下了以下评论:'
- type: section
block_id: section567
text:
type: mrkdwn
text: "<https://example.com|Overlook Hotel> \n :star: \n 门上有太多的斧头孔,237号房的客人太吵,整个地方感觉停留在1920年代。"
accessory:
type: image
image_url: https://is5-ssl.mzstatic.com/image/thumb/Purple3/v4/d3/72/5c/d3725c8f-c642-5d69-1904-aa36e4297885/source/256x256bb.jpg
alt_text: 附件酒店图片
- type: section
block_id: section789
fields:
- type: mrkdwn
text: |-
*平均评分*
1.0
通过将目标设置为用户的成员ID,直接向用户发送消息。
message: "你好!"
target: "U12345"
title: "嗨"
data:
blocks: []
向频道发送消息,并提到(@username,突出显示用户名称为黄色)用户。
message: "<@MEMBER_ID> 你的预约即将开始"
target: "#general"
title: "提醒"
data:
blocks: []
作为对现有消息的回复发送消息。thread_ts
可以通过利用Bolt
message: "这是一些补充信息,无需直接在频道中显示。"
target: "#general"
data:
thread_ts: "1684736481.064129"