65.9K
CodeProject 正在变化。 阅读更多。
Home

使用流程管理状态通知 Slack 频道

2019 年 5 月 8 日

CPOL
viewsIcon

4376

本文介绍如何利用 Slack 的传入 Webhook 功能,在 Kintone 应用中的记录流程状态进展到“已完成”时,将消息发布到 Slack 频道。

引言

本文介绍如何利用 Slack 的传入 Webhook 功能,在 Kintone 应用中的记录流程状态进展到“已完成”时,将消息发布到 Slack 频道。

有关 Kintone 的更多详细信息,请点击此处

场景

尽管 Slack 市场上有许多机器人,但市场上的机器人通常只能针对一个特定场景运行,这可能不足以满足用户的需求。

Kintone 中的不同数据库实例可以根据用户的需求涵盖许多用户场景,例如 CRM、项目管理、面试笔记、任务列表、费用报告、PTO 请求表等。如果启用了 Kintone 应用的流程管理设置,则这些应用往往能带来更高的生产力,因为流程管理设置定义了数据库实例中每条记录的精简工作流程。

本文介绍了一种快速启动机器人方法,该机器人将从 Kintone 中的浏览器操作向 Slack 频道发送消息。应用于 Kintone 应用的 JavaScript 自定义将在记录的工作流程进展到特定状态时触发。该脚本向Slack的传入 Webhook 功能发送请求,以将消息发布到 Slack 频道。脚本的内容很简单,使得该脚本可以根据用户的需求进行调整,从而使机器人能够灵活地适应多种场景。

设置连接

在本文中,将通过以下场景将消息从 Kintone 发布到 Slack

  • 最终用户在 Kintone 中使用共享待办事项应用,他们使用流程管理功能来跟踪每个任务的状态
  • Kintone 应用中设置为“已完成”的任务将通知到 Slack 频道

请按照以下步骤设置 Kintone 和 Slack 之间的连接

1. 准备一个 Slack 频道

创建一个 Slack 频道,用于接收来自 Kintone 的通知。

Screenshot of a new Slack channel

2. 在 Slack 中设置传入 Webhook

在 Slack 中,打开传入 Webhook 集成页面

Screenshot of Slack's incoming webhook integration page.

选择您要发送消息的频道,然后点击[添加传入 Webhook 集成]按钮。这样就会设置好一个传入 Webhook。

Screenshot of the incoming webhook settings page

记下 Webhook URL 设置中显示的 URL,因为它将在下一步中使用。在“描述性标签”、“自定义名称”和“图标”字段中随意输入任何内容。

3. 准备一个 Kintone 应用

如果您还没有 Kintone 环境,可以通过加入 Kintone 开发者计划来申请免费的一年 Kintone 开发者许可证。有关更多详细信息,请查看以下Kintone 开发者计划文章

登录您的 Kintone 环境,然后导航到将应用自定义设置的 Kintone 应用,或者从市场创建新应用。导航到应用的设置,然后进入“流程管理”设置。如果尚未启用此设置,请勾选“启用流程管理”复选框。请确保在状态设置中包含一个名为“已完成”的状态。

gif of enabling Kintone's process management feature

保存设置,然后点击“更新应用”以将更改应用于 Kintone 应用。

4. 将 JavaScript 文件上传到 Kintone

将以下代码内容复制到一个本地 JavaScript 文件中。

post2slack.js

(function() {
    'use strict';
    kintone.events.on('app.record.detail.process.proceed', function(e) {
        if (e.nextStatus.value == 'Completed') {
            var thisUrl = 'https://<YourSubdomain>.kintone.com/k/' + kintone.app.getId() + '/show#record=' + kintone.app.record.getId();
            var webhookUrl = '<IncomingWebhookURL>';
            var payload = {
                'text': '\"<' + thisUrl + '|' + e.record.<FieldcodeOfTask>.value + '>\" has been completed!'
            };
            return new kintone.Promise(function(resolve, reject) {
                kintone.proxy(webhookUrl, 'POST', {}, payload, function(body, status, headers) {
                    console.log(status, body);            
                    resolve(e);
                });
            });
        }
    });
})();

请参考下表,了解需要替换的变量

需要替换的变量 替换说明
<YourSubdomain> 您的 Kintone 环境的子域。
<IncomingWebhookURL> 在 Slack 中设置新的传入 Webhook 时创建的 Webhook URL。
<FieldcodeOfTask> 您的 Kintone 应用中存在的任何字段的代码。该字段的值将包含在 Slack 消息中。

保存本地 JavaScript 文件,导航到应用的设置,然后进入“JavaScript 和 CSS 自定义”,并将文件上传到“上传 PC 版 JavaScript”设置中。保存设置,然后点击“更新应用”以将更改应用于应用。

Screenshot of the Kintone App's setting to upload JavaScript files

在此代码中,当用户在一个记录中推进任务时,会触发一个事件。如果状态推进到“已完成”,则使用kintone.proxy API向 Slack 的传入 Webhook URL 发送 POST 请求。

测试连接

如果 Kintone 应用中的记录列表为空,请向应用添加一条新记录。导航到应用中某条记录的详细信息页面,然后推进流程管理状态,直到其达到“已完成”。

gif of proceeding the process management status of a record in the Kintone App

这应该会触发事件,将数据发送到 Slack 频道。检查 Slack 频道,看是否已发布消息。

Screenshot of a Slack channel with a new message posted by a bot

如果您的 Slack 频道没有任何消息发布,请尝试阅读Kintone JS 调试技巧文章以检查错误。

摘要

在本例中,使用了一个 Kintone 原生事件来捕获状态在记录中被推进的时间点。一旦事件被触发,Kintone 的 JavaScript API 就被用来向 Slack 的传入 Webhook 发送 HTTP 请求,然后 Slack 将一条消息发布到 Slack 频道。

尽管在此场景中使用了共享待办事项应用的场景,但该代码可以调整以适应用户在 Kintone 上构建的多种应用。代码中包含的状态名称可以更改为在流程管理设置中设置的其他状态名称。也可以设置不同的事件,例如在新记录添加到 Kintone 应用时触发的事件,或者在 Kintone 应用中的记录被更新时触发的事件。

有关更多 Kintone 相关集成教程,请查看Kintone 开发者计划网站

© . All rights reserved.