【kintone】kintoneからslackのチャンネルに通知する方法

この記事は約7分で読めます。

kintoneの通知機能は基本的にアプリ通知か、メール通知です。業務でビジネスチャットの「slack」を使用している方は
組み合わせることでもっと便利に使えるので、おすすめです。

この記事での対象者
  • 業務でkintoneを使っている、もしくは検討している
  • slackを使っている
  • javascript、kintoneについて基本的な知識がある

 

※slackのwebhook・tokenの取得が必要です。取得方法はこちらの記事がわかりやすいので
 参考にして取得してみてください。

kintoneから通知するサンプルコード

const WEBHOOK_URL = 'https://hooks.slack.com/services/○○○○';

(function ($) {
    'use strict';

    var payload = {
        text:"test"
    };

    kintone.events.on(['app.record.create.submit.success', 'app.record.edit.submit.success'], function (event) {   
    
        kintone.proxy(WEBHOOK_URL, 'POST', {}, payload, function (body, status, headers) {
            console.log(status, body);
    }, function (error) {
            console.log(error);
        });
    });
})(jQuery);

こちらで、取得したwebhookを使ってkintoneのレコードを更新した際に、指定したチャンネルに”test”と通知されます。

kintoneからslackにメンションするには

kintoneのユーザー選択フィールドに登録されているメールアドレスを取得し、slackから参照します。

サンプルコード

const token = 'my_token';
const requestURL = 'https://slack.com/api/users.list?token=' + token;

(function ($) {
    'use strict';
    
    kintone.events.on(['app.record.create.submit.success', 'app.record.edit.submit.success'], function (event) {

        return new kintone.Promise(function (resolve, reject) {

            var rec = event.record;
            userList = rec['ユーザー選択'].value

            user_mail_list = []
            for (var i = 0; i < userlist.length; i++) {
                user_mail_list.push(userList[i].code);
            }

            kintone.proxy(requestURL, 'GET', {}, {}, function (body, status, headers) {

                console.log(status, JSON.parse(body), headers);
                var body = JSON.parse(body);
                var members = body.members;//SlackMemberList
                console.log(members);

                //slackメンション用の文を予め定義
                var mentionText = "";

                for (var i = 0; i < userList.length; i++) {

                    var targetMail = userList[i];
                    var Mention = targetMentionId(members,targetMail);

                    mentionText += "<@" + Mention + ">"; 

                    function targetMentionId(members,targetMail) {

                        const targetList = members.filter((member) => {
                            return (member.profile.email === targetMail);
                        });
                        var MentionId = targetList[0].id;//@メンションするためのID
                        return MentionId;
                    }
                }
                
                //slackに流す本文
                var payload = {
                    text:
                        mentionText + "\n\n" +
                        "レコードが更新されました。確認お願いします。"
                };

                //外部APIを用いてslackに送信
                kintone.proxy(WEBHOOK_URL, 'POST', {}, payload, function (body, status, headers) {
                    console.log(status, body);
                }, function (error) {
                    console.log(error);
                });
            }, function (error) {
                console.log(error);
            });
        });
    });
})(jQuery);

こちらの内容で、kintoneのユーザー選択フィールドに入力されているユーザーのメールアドレスと
slackに登録されているメールアドレスが同一であればメンションされます。

slackのユーザー情報を取得する方法

slackのAPIにはユーザーを取得するAPIがあるため、こちらから取得します。

const token = 'my_token';
const requestURL = 'https://slack.com/api/users.list?token=' + token;

slackから取得したtokenからリクエストを送ります。

kintone.proxy(requestURL, 'GET', {}, {}, function (body, status, headers) {

    console.log(status, JSON.parse(body), headers);
    var body = JSON.parse(body);
    var members = body.members;//SlackMemberList
    console.log(members);

}, function (error) {
    console.log(error);
});   

まとめ

slack以外でもチャットワークなどのビジネスチャット、タスク管理サービスのtrelloなどAPIを提供していて
連携できるサービスは沢山あるので、アイデア次第でなんでも出来ますね。

コメント

タイトルとURLをコピーしました