Skip to main content

使用 webhook 将消息发布到松弛通道。

项目描述

ftw.slacker

<nav class="contents" id="table-of-contents">

目录

</nav>

介绍

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

有关 slack webhook 的更多信息,请参阅 Slack 关于传入 Webhook的文档

安装

将包作为依赖项添加到 setup.py:

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

或您的构建配置:

[instance]
eggs += <s>ftw.slacker</s>

并运行构建

bin/buildout

用法

设置 Slack 网络钩子

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

阅读有关传入 Webhook的 Slack 文档,并按照传入的 webhook 集成开始设置您自己的 webhock 。

将消息发布到 Slack

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

from ftw.slacker import notify_slack

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

完毕!

配置请求模块

以下属性被传递给请求模块:

这意味着,您可以使用此参数调用 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")

松弛有效载荷

只需向 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'

或通过扩建:

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

并调用不带 webhook_url 参数的 api 函数:

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。

黑名单

现在,您在要停用通知的同一台服务器上安装测试部署。

为此,您可以在此特定部署的buiodut.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

对于所有列入白名单的部署,请使用以下构建配置:

[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 中的所有用户登录记录到一个松弛通道。

它提供了一个名为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设置为停用来停用此特定通知分支(请参阅静态变量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 的支持。[姆巴赫托德]

  • 针对 Plone 5.1 进行测试。[姆巴赫托德]

  • 针对 Plone 5.2 和 Python 3.7 进行测试。[埃里克]

1.0.2 (2017-07-31)

  • 在测试中使用 unittest 而不是 unittest2 。[埃利奥施穆茨]

1.0.1 (2017-07-27)

  • 修复 README.rst 错误。[埃利奥施穆茨]

1.0.0 (2017-07-27)

  • 初始发行。

下载文件

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

源分布

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

已上传 source