kintone から Slack に通知を送る方法

著者名:門屋亮(クローバ株式会社)

目次

はじめに

こんにちは。クローバの門屋です。
クローバではコミュニケーションツールとして、主に Slack を使っています。
他のチャットツールと比べてユーザーインターフェースが秀逸で、ちょっとした操作にも細かい配慮がされていて心地良く使うことができます。
Slack (External link)

今回は、Slack と kintone の連携について考えてみます。

kintone から Slack に通知を送る

通知なら kintone の機能を使えばいいと思われるかもしれません。 しかし、Slack を通知サービスとしてみたとき、大きな特徴があります。

  • チームのメンバーが一斉に同じ通知を受け取ることができる。
  • 通知のオン、オフを、ユーザー自身がチャンネルごとに選択できる。
  • プッシュ通知を受け取れるデスクトップ・モバイルアプリがある。

これらの特徴を活かして、たとえばシステムで障害があったとき E メールではなく Slack に通知するなど、不特定の相手へ一斉に通知するが、通知の重要度はユーザーに委ねたいようなケースで重宝します。
ここではこのような用途を想定しています。

  • 案件管理のステータスが完了になったら、案件名と kintone レコードの URL を Slack の特定のチャンネルに投稿する。
  • メッセージを通知するしないはユーザーが自由に選択できる。

kintone 単体では、通知メールの内容をカスタマイズできないため、ニーズがありそうです。

Slack の設定

チャンネルの作成

kintone の通知を受け取るチャンネルを作成します。

Incoming Webhook の作成

Slack の API でメッセージを送信する方法は大きく 2 つあります。

  • Web API を使う方法
  • Incoming Webhook を使う方法

Web API を使う場合は、任意のユーザーで API トークンを取得する必要があります。
今回は Incoming Webhook を使うことにします。

  1. Incoming Webhook Integration のページを開きます。
    Incomming Webhook (External link)

  2. メッセージを送信したいチャンネルを選択して、「Add Incoming WebHooks Integration」ボタンを押します。
    Incoming Webhook が作成されます。

  3. 作成後のページに、Incoming Webhook の URL が表示されます。
    こちらはあとで利用します。
    ボットの名前や、アイコンのカスタマイズを行うこともできます。

これで Slack 側の準備は完了です。

kintone の設定

続いて kintone 側で通知部分を実装します。
本記事では簡易的に JS カスタマイズで通知部分を実装しますが、プラグインとしての実装も可能です。
プラグインを開発する場合は、次の記事も合わせて確認してください。

アプリの作成

アプリを追加します。 例ではアプリストアで 案件管理 (External link) を使用しています。

またアプリの設定で、プロセス管理を有効にしてプロセスを追加してください。
プロセス管理 (External link)

カスタマイズファイルの適用

次の内容で「post2slack.js」というファイルを作成し、追加したアプリに適用します。
次の箇所は、ご自身の環境に合わせて書き換えてください。

  • subdomain: kintone のサブドメイン
  • webhookUrl:Webhook の URL
  • fieldCode:Slack のメッセージに投稿するフィールドのフィールドコード
    例では案件管理アプリの会社名フィールドを指定しています。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
(() => {
  'use strict';
  const subdomain = '<サブドメイン>.cybozu.com';
  const webhookUrl = 'https://hooks.slack.com/services/<WebHookのURLパラメータ>';
  const fieldCode = 'フィールドコード';
  kintone.events.on('app.record.detail.process.proceed', (e) => {
    if (e.nextStatus.value === '完了') {
      const thisUrl = `https://${subdomain}/k/${kintone.app.getId()}/show#record=${kintone.app.record.getId()}`;
      const payload = {
        text: `案件< ${thisUrl} |「 ${e.record[fieldCode].value} 」>が完了しました!`
      };
      return new kintone.Promise((resolve, reject) => {
        kintone.proxy(webhookUrl, 'POST', {}, payload, (body, status, headers) => {
          console.log(status, body);
          resolve(e);
        });
      });
    }
    return e;
  });
})();
コードの解説

まずはじめに app.record.detail.process.proceed イベントをフックして、プロセス管理でステータスが変わったときに処理します。 ステータスが完了になったら、kintone.proxy() で Slack の Incoming Webhook の URL に POST リクエストを送信します。

Slack の Incoming Webhook の詳しい使い方は以下のドキュメントに書かれてあります。
Sending messages using Incoming Webhooks (External link)

動作確認

  1. カスタマイズを適用したアプリにレコードを作成し、完了までプロセス進めます。

  2. Incomming Webhook の設定で指定したチャンネルにメッセージが投稿されていることを確認します。

終わりに

いかがだったでしょうか。
Incoming Webhook を使うことで、手軽に Slack へメッセージを送信できることがお分かりいただけたかと思います。
通知を Slack に集約することで、複数のサービスの通知を柔軟に管理できるのは大きな魅力です。
また、Outgoing Webhook と kintone の REST API を組み合わせることで、Slack でボットのメッセージに返信したら、kintone のレコードのプロセスを進めるといった双方向の連携も可能になります。

今回紹介したように、Slack はさまざまなクラウドサービスと連携することで、単なるチャットツールの枠を超えたコミュニケーション基盤として活用できます。
kintone との連携もさらに便利な使い方があるかもしれません。ぜひお試しください。

information

この Tips は、2016 年 1 月版 kintone と Slack で動作を確認しています。