使用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_WEBHOOK,ftw.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 函数返回线程对象以进行进一步线程处理(例如,在测试中)或无。
链接
版权
本软件包版权所有:4teamwork。
ftw.slacker 采用 GNU 通用公共许可证,版本 2。
变更日志
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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 454cc5b6569f6221785c33be6e06bfac00f4d3ee4cc1f9f62b3acc73a55b7b95 |
|
MD5 | 19b2bbad6ef0ba7058d45c792656ff79 |
|
BLAKE2b-256 | e8d26006f7a1ca8bf2de04f8c74ac0927e9ce77db1b4cc4da14f6a170adff1f4 |