Slack

slack 平台允许您将来自Home Assistant的通知发送到Slack

设置

Slack应用

  1. 在您的Slack.com帐户下创建一个新应用
  2. 点击侧边栏中的OAuth & Permissions链接,在功能标题下。

找到 Features/OAuth and Permissions/Scopes/Bot Token Scopes

  1. 添加chat:writednd:read作用域
  • 要修改Slack机器人用户名和图标,请额外添加chat:write.customize OAuth作用域

  1. 向上滚动到OAuth Tokens & Redirect URLs并点击Install to Workspace

Features/OAuth and Permissions/OAuth Tokens for Your Workspace:

  1. 复制Bot用户OAuth令牌。在Home Assistant设置中将其用作’API密钥’

  1. 确保将机器人用户添加到您希望其发布的频道中。这可以通过几种方式完成:
  • 使用 /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中进行更改。

您可以将此脚本作为操作调用。

  1. 转到Home Assistant设置 > 自动化与场景 > 脚本 > 添加脚本
  2. 点击右上角的三个点,然后选择’以YAML编辑’。粘贴下面的内容。
  3. 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。每条消息最多可以包含50个块。

创建此脚本的副本,以便用于不同的消息和不同的频道(比如门在#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使用标准的表情符号集,您可以在这里找到。或者,可以使用可公开访问的URL。

配置

要将 Slack 服务 添加到您的 Home Assistant 实例中,请使用此 My 按钮:

手动配置步骤

如果上述 My 按钮不起作用,您也可以手动执行以下步骤:

将创建一个传感器实体:

  • 请勿打扰计时器:剩余的请勿打扰状态时间。

Slack操作数据

以下属性可以放置在操作的data键中,以扩展功能:

属性 可选 描述
username Slack机器人的用户名。
icon Slack机器人的图标。
file 要随消息一起包含的文件;见下文。
blocks Slack块的数组。注意:如果使用blocks,它们将在Slack应用中替代message显示。消息字段将用作通知文本,以及Slack无法显示块的任何地方。无论是否使用此字段,message都是必需的。
blocks_template blocks相同,但能够支持模板
thread_ts 将消息作为对指定父消息的回复发送。

请注意,使用file将忽略所有对blocksblocks_template的使用(因为Slack在伴随上传文件的消息中不支持这些框架)。

要在Slack消息中包含本地文件,请在file键下使用以下属性:

属性 可选 描述
path 已被列入白名单的本地文件路径。

要在Slack消息中包含远程文件,请在file键下使用以下属性:

属性 可选 描述
url 已被列入白名单的URL。
username 如果URL受到HTTP基本身份验证保护的可选用户名。
password 如果URL受到HTTP基本身份验证保护的可选密码。

获取成员ID

以下一些示例使用成员ID。这是Slack分配给所有用户(成员和访客)的唯一字符串,而不是用户设置的用户名。要获得成员ID:

  1. 选择一个Slack用户(名称和个人资料图片均适用)以调出他们的个人资料侧面板。
  2. 通过选择三个点打开上下文菜单。
  3. 选择 复制成员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、任何其他Slack库或Slack API直接检索。

message: "这是一些补充信息,无需直接在频道中显示。"
target: "#general"
data:
  thread_ts: "1684736481.064129"