跳转到主要内容

使用webhooks将消息发布到Slack频道。

项目描述

ftw.slacker

简介

ftw.slacker是一个Plone插件,它提供了一个易于使用的API,通过Slack的webhooks API将消息发布到Slack频道。

有关Slack webhook的更多信息,请参阅Slack关于入站webhooks的文档。

安装

将包作为依赖项添加到您的setup.py中

setup(
      # ...
      install_requires=[
        'ftw.slacker',
      ])

或您的buildout配置文件中

[instance]
eggs += ftw.slacker

并运行buildout

bin/buildout

使用

设置Slack webhook

首先,您需要设置一个Slack webhook。

阅读Slack关于入站webhooks的文档,并按照入站webhook集成的说明开始设置您自己的webhook。

向Slack发送消息

只需导入notify_slack API函数并调用它。

from ftw.slacker import notify_slack

notify_slack('https://hooks.slack.com/services/xxx',
             text="my first post")

完成!

配置requests模块

以下属性被传递给requests模块

这意味着,您可以使用这些参数调用API函数来配置请求

from ftw.slacker import notify_slack

notify_slack(webhook_url='https://hooks.slack.com/services/xxx',
             timemout=10,
             verify=False,
             text="my first post")

Slack有效载荷

只需向API函数添加额外的关键字参数。所有参数都将作为有效载荷传递到Slack webhook。

from ftw.slacker import notify_slack

notify_slack('https://hooks.slack.com/services/xxx',
             text="my first post",
             attachments=[
                 {
                     "title": "Slack API Documentation",
                     "title_link": "https://api.slack.com/",
                     "text": "Optional text that appears within the attachment"
                 }
             ])

通过环境变量设置Webhook URL

通常情况下,您不需要将 webhook-url 存储在您的应用程序代码中。

ftw.slacker 支持通过环境变量进行配置

设置您的环境变量

export STANDARD_SLACK_WEBHOOK='https://hooks.slack.com/services/xxx'

或通过 buildout

[instance]
environment-vars +=
    STANDARD_SLACK_WEBHOOK https://hooks.slack.com/services/xxx

然后调用 api 函数而不需要 webhook_url 参数

from ftw.slacker import notify_slack

notify_slack(text="my first post")

覆盖环境变量

如果您设置了 STANDARD_SLACK_WEBHOOK 环境变量,您仍然可以使用不同的 Slack webhook。

export STANDARD_SLACK_WEBHOOK='https://hooks.slack.com/services/default-channel-id'
from ftw.slacker import notify_slack

# Post message to service default-channel-id
notify_slack(text="my first post")

# Post message to service specific-channel-id
notify_slack('https://hooks.slack.com/services/specific-channel-id',
             text="my first post")

禁用Slack通知

让我们假设,您有一个服务器,有多个部署,并且所有部署都应该推送相同的 Slack webhook。

您可以通过 buildout 为每个部署配置标准 Slack webhook 环境变量,或者您只需在服务器环境中定义一次默认 webhook url

export STANDARD_SLACK_WEBHOOK='https://hooks.slack.com/services/xxx'

每个应用程序都会将消息发布到这个 Slack webhook。

黑名单

现在,您在同一服务器上安装了一个测试部署,您想在其中禁用通知。

为此,您可以在该特定部署的 builodut.cfg 中设置另一个环境变量到值: deactivate。(请参阅静态变量 NOTIFICATION_DEACTIVATION_VALUE

[instance]
environment-vars +=
    DEACTIVATE_SLACK_NOTIFICATION deactivate

此部署执行的所有通知都将被跳过。

白名单

您甚至可以对您的部署进行白名单。

export STANDARD_SLACK_WEBHOOK='https://hooks.slack.com/services/xxx'
export DEACTIVATE_SLACK_NOTIFICATION deactivate

并且对于所有白名单部署,使用以下 buildout 配置

[instance]
environment-vars +=
    DEACTIVATE_SLACK_NOTIFICATION

这将重置 DEACTIVATE_SLACK_NOTIFICATION 变量到 ''

通过webhook_url禁用

您也可以仅禁用特定的通知。

假设,您已设置了 STANDARD_SLACK_WEBHOOK。我们了解到,您可以在没有 webhook_url 的情况下调用 notify_slack 以将通知推送到标准 webhook url,或者您可以调用它并带有更具体的 webhook url notify_slack(webhook_url="xxx") 以覆盖标准 Slack webhook。

使用 NOTIFICATION_DEACTIVATION_VALUE 作为 webhook_url 仅会禁用当前通知,而不会冒泡到标准 Slack webhook。

此功能对于处理来自多个外部模块的 slacker-integration 通知非常有用。

有关高级使用的更多信息,请参阅下一章。

高级使用

也许您有不同的外部模块使用 ftw.slacker 实现,并且所有这些模块都提供不同的默认 Slack webhook url。

让我们假设,我们有一个模块调用 ftw.logger,该模块将 plonesite 中的所有用户登录记录到 Slack 频道。

它提供了一个名为 FTW_LOGGER_SLACK_WEBHOOK 的附加环境变量,用于将记录活动发布到单独的频道。因此,此模块的实现可能如下所示

from ftw.slacker import notify_slack
import os

def notify_user_login(user):
    notify_slack(os.environ.get('FTW_LOGGER_SLACK_WEBHOOK'),
                 text='User {} logged in'.format(user.username))

如果您没有设置 FTW_LOGGER_SLACK_WEBHOOK 变量,ftw.slacker 将将用户登录发布到默认频道。如果您设置了 FTW_LOGGER_SLACK_WEBHOOKftw.slacker 将使用此更具体的频道进行通知。

通过 DEACTIVATE_SLACK_NOTIFICATION 环境变量禁用整个通知系统是不希望的,因为您仍然想发布其他通知,例如来自使用标准 Slack webhook url 的应用程序。

为此,您只需通过将环境变量 FTW_LOGGER_SLACK_WEBHOOK 设置为 deactivate(请参阅静态变量 NOTIFICATION_DEACTIVATION_VALUE)来禁用此特定通知分支。

[instance]
environment-vars +=
    STANDARD_SLACK_WEBHOOK https://hooks.slack.com/services/xxx
    FTW_LOGGER_SLACK_WEBHOOK deactivate

多线程

所有 Slack-API 请求都在其自己的线程中处理。所有消息都在单独的线程中发送,以便它是非阻塞的,并且在发生错误时不会崩溃应用程序。

notify_slack 函数返回线程对象以进行进一步线程处理(例如,在测试中)或无。

变更日志

1.1.0 (2019-11-27)

  • 移除对 Plone 5.0 的支持。[mbaechtold]

  • 针对 Plone 5.1 进行测试。[mbaechtold]

  • 针对 Plone 5.2 和 Python 3.7 进行测试。[ericof]

1.0.2 (2017-07-31)

  • 在测试中使用 unittest 而不是 unittest2。[elioschmutz]

1.0.1 (2017-07-27)

  • 修复 README.rst 中的错误。[elioschmutz]

1.0.0 (2017-07-27)

  • 初始版本。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码发行版

ftw.slacker-1.1.0.tar.gz (9.9 kB 查看哈希值)

上传时间 源代码

支持者