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で動作を確認しています。