LoginSignup
1

More than 1 year has passed since last update.

kintoneからLINEWORKSへメッセージ通知(LINEWORKS API2.0)

Last updated at Posted at 2022-10-28

kintoneでのイベント発生時に、LINEWORKSのメッセージを送りたい。
今回は詳細画面にボタンを表示し、ボタンを押すことでメッセージ送信します。
コピペできるコードが記載されているサイトを見つけられなかった為、投稿いたします。

注意事項(必読)

今回の内容をそのまま利用するとJavascriptのソースで秘密鍵等が閲覧が可能なため、
セキュリティ大きな問題が発生します。
今回は実行テスト用です。運用時にはプラグイン化等で非可視化の対応をお願いします。
また、実行テストする際はJavascriptのアップ前にアクセス制限をかけておいてください。
kintoneのセキュアコーディング ガイドラインについては こちら をご確認ください。

必要なもの

  • LINEWORKS
  • kintoneスタンダードコース
  • jsrsasign-all-min.js

使用するサイト

概要

スライド1.PNG

実装

1.LINEWORKS DevelopersでAPI2.0の設定を行う。

スライド2.PNG

2.LINEWORKS DevelopersでBotの設定を行う。

スライド3.PNG

3.kintoneのカスタマイズjavascriptの作成

記載されているPrivate Keyはサンプルです。API2.0でダウンロードしたPrivate Keyと差し替えてください。
以下の内容はAPI2.0、Bot、メンバー情報から取得して置き換えてください。
{Client ID}
{Service Account}
{Client Secret}
{Bot ID}
{ID}

LINEWORKS_SEND.js
(() => {
    'use strict';
    kintone.events.on('app.record.detail.show', (event) => {

        //初期値
        const Client_ID = "{Client ID}";
        const Service_Account = "{Service Account}";
        const Client_Secret = "{Client Secret}";
        const Bot_ID = "{Bot ID}";
        const Send_ID = encodeURI("{ID}");
        const Bot_URL = "https://www.worksapis.com/v1.0/bots/" + Bot_ID +
                        "/users/" + Send_ID + "/messages"

        const JWT_Private_Key =
        	"-----BEGIN PRIVATE KEY-----" +
        	"MIIEvgIBADANBgkqhkiG9sJJDpUZ+9un6swgXllUXhgCcO6CTz9sJJDpUZ+9un6s" +
        	"9un6swgXllUXhgCcO6CJDpUZ+9un6swgXllDpUZ+9un6swgXllDpUZ+9un6swgXl" +
        	"KWuAiqY0lV9xlWh5VWjI72CYhSGxWcRw3IzexKWuAiqY0lV9xlWh5VWjI72CYhSG" +
        	"KtPHXtrvJ7YvygSBZ3lMm5OF0c/CkGv2R5w+iqB/byd4ieLfUB+GMEDnULxNmr2h" +
        	"J7YvygSBZ3lERwxpBLJ7YaAotIk4AwLVg1QFTrdS9wLy6Rmi3WANSgN61bSyq9yq" +
        	"Vg1QFTrdS9wLy6RmiWK8JP2eOAWOzcyXRWK8JP2eOAWOzcyXRWANSgN61bSyq9ES" +
        	"ivY2U0U3AgMBAAECggEAKWuAiqY0lV9xlWh5VWjI72CYhSGxWcRw3Izexak18UZ5" +
        	"4gKCF3zN+muRRwxpBLJ7YaAotIk4AwLVg1QFTrdS9wLy6Rmi3WANSJec1bSyJecS" +
        	"Y9LKnsx8ANSgN61bSyq9ESANSgN61bSlnwo7Uc7N+Kib9XzhUVANSgN61bSyq9ES" +
        	"IiDlKMyNpIblNS4Go2a8Wic3HlDcAuRi/D88y7p3xUr2m5PBbyJeceUqaB4hCVMS" +
        	"4nrUHs4U7ScHSX72F6jBV0V9iGvxP9ulnwo7Uc7N+Kib9XzhUVSAmF3R3brd/I0w" +
        	"dHSH+Ez6/b+ts/NKnTKuRT09jtqOqWANSgHXtrv3YP3oN63YitDXEntAmF3R3brU" +
        	"lIAmhQMp/b+t8e+Bwu48PLDqAOKtPHX4KogEmfb8lfX90LaDCn8HpLTr6Ki3H65Z" +
        	"4xeAtFa2irjDkHwgG4pqxFv4i+zDqAOKtPHXtrv3YP3oviZNk5e4tySx9IKvD5VI" +
        	"Eh7eGhE+HbTY1XRsTWH4BjFlqQKBgQCwKhFiPrz9iGYxitHFu6g6Af22X1O2dGrZ" +
        	"aUk8ncmAQk7E1XRsTWH4BjuYCGpAUtY6swg1XRsTWC7kF9bRzcyXR4hu9r31pjw1" +
        	"xI9TvRxSTpQEbgJJDWK8JP1XRsTWH4Bj2eOAWO7MJ6swg1XRsTWZYwjT05KukJaa" +
        	"PL7sb0Jf3wKBgQDaA2opv3b77RVLFUcGXAsFb5XP1PSSzK284+26swg1XRsTWuDa" +
        	"T2StrfrXafo0b9naHKgty8LPp2Vlk6N1XRsTWH4Bj1fg8J+Um9kmlTdjHlv+DUX1" +
        	"NKT9VfrXafotZXtZXg1XRsTWVrsg1XRsTWVrs1U0tkPDuC+6usEmpitdVrs8CTuC" +
        	"NYQzUfQB9TJYog6swg1XRsTWVrs8X/O1y1QnyFrbJF2cM1bcpg1XRsTWH4BjaDdl" +
        	"8iMNsX3LaTCtZXGkSQg+6KGF/eQ0eGwCIwsrGSd7ITQOIC1XRsTWH4BjjhPu4oDd" +
        	"xbP37g6NMS3QxcmHRKlwlwUbXFw61XRsTWH4Bj92hwKBgFmvRtalbwEBk0yld9+v" +
        	"ahCNeSYeAm2I9k0efwiIYpuHbMcu6w1XRsWHBjXlUhCc6CzsJpUZ94WAtkXfwXI7" +
        	"Zj3+jFvuqEsr4xjW/M9Ne7x3e0efwiIYRsTWH4BjpuHbe0efwiIYpuefwiIYpuHb" +
        	"LORtmnBAlm/P1FGW/M9Ne7x3" +
        	"-----END PRIVATE KEY-----"

        // kintoneの画面上部の要素を取得し、送信ボタン要素を作成
        const Send_Button = kintone.app.record.getHeaderMenuSpaceElement();
        const Start_Button = document.createElement('button');
        Start_Button.innerText = 'LINEWORKS送信';

        // JWTのヘッダ
        var JWT_Header_JSON = {alg: 'RS256', typ: 'JWT'};

        // JWTのペイロード
        // UNIX時間で指定※ライブラリ使用
        var JWT_Payload_JSON = {};
        var JWT_Start_Time = KJUR.jws.IntDate.get('now');
        var JWT_End_Time = KJUR.jws.IntDate.get('now + 1hour');

        JWT_Payload_JSON.iss = Client_ID;
        JWT_Payload_JSON.sub = Service_Account;
        JWT_Payload_JSON.iat = JWT_Start_Time;
        JWT_Payload_JSON.exp = JWT_End_Time;

        // JSON形式にしてJWT生成※ライブラリ使用
        var JWT_Assertion_Key = KJUR.jws.JWS.sign("RS256", JWT_Header_JSON, JWT_Payload_JSON, JWT_Private_Key);

        //ボタンのクリックイベント
        Start_Button.onclick = () => {

            // アクセストークンの取得
        	const Token_Header = {
        		"Content-Type": "application/x-www-form-urlencoded"
        	};

            // URIエンコードが必要。
            // application/x-www-form-urlencodedなのでJSON形式ではないことに注意
            // ちなみに、Botの送信はapplication/json
            const Token_Body = encodeURI(
                "assertion=" + JWT_Assertion_Key + "&" +
                "grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer" + "&" +
                "client_id=" + Client_ID + "&" +
                "client_secret=" + Client_Secret + "&" +
                "scope=bot"
            );

            kintone.proxy("https://auth.worksmobile.com/oauth2/v2.0/token", "POST", Token_Header, Token_Body)
        	.then((result) => {
                // レスポンスのアクセストークンをヘッダーに登録
                const Bot_Header = {
        			"Content-Type": "application/json; charset=UTF-8",
        			"Authorization": "Bearer " + JSON.parse(result[0]).access_token,
        			"X-HTTP-Method-Override": "GET",
        		};

                //送りたい内容はtextに記入
                var Bot_Body = {
        			"content": {
        				"type": "text",
        				"text": "Hello"
        			}
        		};
                var JSON_Data = JSON.stringify(Bot_Body);

                // Botの送信
        		kintone.proxy(Bot_URL, "POST", Bot_Header, JSON_Data)
        		.then((result) => {
        			console.log(result);
        		}, (error) => {
        			console.log(error);
        		});
        	}, (error) => {
        		console.log(error);
        	});
        };

        //ボタンを初期化して生成
        Send_Button.innerText = '';
        Send_Button.appendChild(Start_Button);
    });
})();

4.kintoneのカスタマイズアップロード

アップロードして終了です。
KintoneからLINEWORKSで通知を送る方法2.png

5.最後に

varとconstが混じっていたりイベント関連の処理など、実用化するためには修正が必要になりますが、
これでとりあえず、送れるようになっているかと思います。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1