kintoneの通知LINEに来てほしい!!!!
ええ。ありますよね。そうゆうニーズ。ええ。わかりますよ。
例えば、kintoneのカレンダーアプリに登録した予定。
「○○時から、××で、△△があります。」とか、LINEに来るといいですよね!
例えば、kintoneのTODOアプリに登録したTODO。
「○○というTODOが今日締め切りです。」とか、LINEに来たらいいですよね!
ということで、kintoneの通知機能(取り上げるのは、リマインダーの条件通知)を使っていい感じにLINEへ通知する方法を紹介します。
構成
今回の構成はこんな感じです。kintoneの通知機能でGmailに通知を飛ばして、Gmailの内容をええ感じにGoogle Apps Scriptで整形して、LINE notifyに投げます。
LINE notifyって何!どうやって使うん!Google Apps Scriptって何食べれるん!!ってのは、この記事参照してください。
「Google Calendarの予定を毎朝LINEに送る」
しかし、一つ問題があります。
課題
さて、課題ですが、なんと、kintoneの通知機能では送れる情報が驚くほど少ない笑。
ここで質問してらっしゃる方がいますが、固定の情報と、レコードのタイトル(デフォルトだと、レコードID)しか通知できません。
ちゃうねん!!レコードの中身の情報が知りたいねん!!!
そうですよね。わかります。そこをええ感じにしていきます。
レコードのタイトルをええ感じにする。
そう、答えは単純。レコードのタイトルに必要な情報を全部ぶち込んだらいいんですよねw
ちなみに、レコードのタイトルの変更方法はこちら↓
単純にLINEへ通知したい情報を文字列結合で1つのフィールドに集めて、通知の内容に含める。というのがええ感じにするための第1ステップです。
このときのポイントは、後々GAS(Google Apps Script)で加工するために、フィールドの間に区切り文字を入れること、です。僕はちなみにセミコロン(;)を入れました。
あとは、プルダウンとかの情報も入れたかったので、文字列結合プラグインを使いました。その方が、結合の自由度が上がるし、区切り文字の設定もしやすいですし!
ちなみに、僕は文字列結合プラグインの5個の結合では足りなかったので、拡張して6個結合できるようにして使いました。オープンになってると自分たちの要件に合わせてプラグインのカスタマイズができて便利ですよね~!
ということで、前処理終了!必要な情報をレコードタイトルに詰め込んで、メールにぶっ飛ばしたらあとは、GASの出番です。
GASのコード
こんな感じです。大体見たまんまですね。ポイントは、kintone側で通知の設定をするときに、「通知内容」に設定した内容をキーにメールを検索するという点です。
// LINE notifyのトークン var notifyToken = "line notifyのトークン"; // 通知設定時の「通知内容」に登録した内容をキーにしてメールを取得する var FindSubject_cal = '通知内容'; function kintoneNotify(){ //「通知内容」に指定した件名のスレッドを検索して取得 var myThreads_cal = GmailApp.search(FindSubject_cal, 0, 10); //スレッドからメールを取得し二次元配列に格納 var myMessages_cal = GmailApp.getMessagesForThreads(myThreads_cal); // 通知処理 for(var i in myMessages_cal){ for(var j in myMessages_cal[i]){ //スターがないメッセージのみ処理(=notifyに通知済かどうかをGmailのスター機能で管理) if(!myMessages_cal[i][j].isStarred()){ // 本文取得 var strMessage = myMessages_cal[i][j].getPlainBody().slice(0,200); // 区切り文字(↓の場合は;)で整形する。 // ↓の例では区切り文字を改行に変換している。 // ちなみに、/;/g は正規表現で、;を全部置換するという意味 var formedstr = strMessage.replace("-", "\n").replace(/;/g, "\n"); //LINEにメッセージを送信 sendLine(formedstr); //処理済みのメッセージをスターをつける myMessages_cal[i][j].star(); } } } } function sendLine(strMessage){ var options = { "method" : "post", "payload" : "message=" + strMessage, "headers" : {"Authorization" : "Bearer "+ notifyToken} }; UrlFetchApp.fetch("https://notify-api.line.me/api/notify",options); }
ソースはこれで完了です。あとは、任意のタイミングのトリガーの設定をしたら完成です。たぶん、1時間に1回回すくらいで十分すぎるのではないでしょうか。
以上で、kintone標準の通知機能を使って、いい感じに整形してLINEに通知する、の完了です!
メールにゴリゴリ検索したり、送ったかどうかの制御をスターでしたりと、そんなにかっこよくはないんですけど、kintone側は開発なしで、GAS側もそんなに重たいことせずにってゆう手軽さでいくとこんな感じかなーと思います。
参考になれば!
kintoneのご相談お受けしております!