【kintone×Microsoft teams】kintoneのコメントをteamsに通知する

プログラミングのイメージ

今回はサイボウズのクラウドサービスkintoneでレコードにコメントがあった際にteamsへ通知を送る方法を紹介します。

最近インターン先でkintoneのカスタマイズを頻繁に行っています。
kintoneとGoogle formを連携したり、kintoneとノーコードツールBubbleを連携したり、kintoneで直接データを入力するのではなくデータベース的な役割として扱っています。

また、kintoneには様々な有料プラグインが存在しますが、簡単にGASを仲介することで実装できることが多いです。

今回は「普段連絡手段として使用しているteamsへ、kintoneのレコードにコメントが追加された際に、通知を行ってほしい」という提案があったので、GASをはさんで通知できるようにした方法を書きます。

kintoneとは?

あなたの「その仕事」にkintone(キントーン)| 業務アプリをノーコードでつくれるサイボウズのクラウドサービス
キントーンは、プログラミングの知識がなくても、ノーコードで業務のシステム化や効率化を実現するアプリがつくれるクラウドサービスです。散在するエクセルや、煩雑なメール、紙の書類の山、バラバラなシステムなど、業務を非効率にしている困りごとを解決できます。

kintoneとは,社内システムを簡単に作成でできるサイボウズのクラウドサービスです。
膨大なデータを管理することができるかつ、社内での共有、データの見える化まで簡単にできます。

メリットとしては、ドキュメントが豊富でかつ日本語のフォーラムの充実などが挙げられます。
初めてでもサンプルアプリを作るデモをみるとある程度理解できます。また、APIを使って様々なアプリと連携ができる点がすごくいいと感じています。

GASとは?

GASとはGoogle Apps Scriptの略で、Googleが提供するプログラミング言語で、簡易なプログラムを記述し実行することで、複雑な処理の自動化が行えます。

Googleが提供していることもあり、GmailやGoogleマップ、Googleドライブなどと親和性が高く、他にもSlack、Chatwork、Twitter、Line botなど、様々なサービスと連携できることが大きな特徴です。

なぜGAS?

kintoneではAPIを使って様々なアプリと連携ができますが、それはkintone上でレコードを追加したり、編集したりした際のイベントでしか発火しません。レコードにコメントを追加するイベントでは、Webhookを使用することができます。

レコードにコメントを追加した際にteamsに通知する方法として、公式に紹介されているのは自動化サービス(iPaaS)のZapierを仲介したものです。Zapierは誰でも簡単に設定ができるというメリットがありますが、タスク数の制限があったりコメントの通知だけのために料金を支払うのは…….

よく使用される無料のherokuも有料化が決定したので、GASが簡単に無料で実行できていいですね:)

またkintoneの有料のプラグインでも月額5万円や買い切り15万円のプラグインがみられます。teamsへの通知機能だけではありませんが、通知だけしたいのにその値段….となりました。

ということで、今回はGASを仲介させてteamsに通知を行います。GASのおすすめの参考書です。

Webhookとは?

私も勉強不足で、Webhookの中身を詳細に述べることはできませんが、簡単に述べると、あるアクションがあるとPOSTリクエストを行って、データを連携するイメージです。わかりやすい記事は以下です。

Webhookって何?を子どもでもわかるように描いてみた
はじめに こんにちは。最近娘に絵本を読むのがめんどくさいダン吉です。今日は、巷で話題のWebhookとは何かをわかりやすく伝えるために、画力に圧倒的に自信のない私が恥を覚悟で、子どもによく描いてあげる...

それではAPIとの違いは何でしょうか?
それはAPIはリクエストに対してデータを送信する点に対して、Webhookはリクエストなしにそのアプリでのイベントでデータを送信します。

GAS

長々となりましたが、実際のGASのスクリプトを紹介します。{teamsの送信webhookURL}はご自身の通知したいtemasのチャネルにwebhookを追加してURLを取得してください。

const TEAMS_URL = "{teamsの送信webhookURL}";

function doPost(e) {
  var parsedJson = JSON.parse(e.postData.getDataAsString());
  var method = 'POST'; 
  
  var appname = parsedJson["app"]["name"];
  var comment_text = parsedJson["comment"]["text"];
  var user = parsedJson["comment"]["creator"]["name"];
  var mention = parsedJson["comment"]["mentions"];
  var title = appname +'でコメントが追加されました';
  var message = comment_text + '<br><br>' + user + 'から送信されました';
  var payload = {
    'title'    : title,
    'text'       : message
  };
  var params = {
    'method' : method,
    'contentType': 'application/json',
    'payload' : JSON.stringify(payload)
  };
  var response = UrlFetchApp.fetch(TEAMS_URL, params);
}

kintoneでの設定

kintone上では、上で紹介したスクリプトを「Webアプリケーションとして公開」した後に取得できるWebhook URLにWebhookが投げられるように設定を行います。GASをWebアプリケーションとして公開する方法は以下の記事が参考になります。

GASをWebAppとして公開して初回実行(doPostとdoGet) | Atsushi Notes
はじめに Google Apps Script(以下、GAS)をWebアプリケーションとして実行してみたいと思います。 本記事ではその手順を備忘録として残します。初回実行の時にしか表示されない画面とかあるので。 GASのスクリプトは簡単なも

この記事における最後の「Current web app URL」がここでのWebhook URLです。

次に以下のkintone公式の記事を参考にkintoneでWebhookを設定します。ここで通知を送信する条件で、コメントの書き込みにチェックを入れることを忘れないようにしましょう。Webhook URLは上で取得したWebhook URLです。

https://jp.cybozu.help/k/ja/user/app_settings/set_webhook/webhook.html

今行っている事の簡単なイメージ図を下に示します。

kintoneとteamsの連携イメージ

kintoneのwebhook通知内容

通知内容については、公式で以下の紹介がされています。

kintoneの操作で送信されるWebhookの通知内容 | kintone ヘルプ
kintoneのヘルプです。 kintoneを利用するために必要な設定や操作方法などを説明します。

この内容を参考に内容を抜き出して、teamsにメッセージを送信する仕様です。今回は簡単にコメントの内容のみを送信するものですが、連想配列を用意して、メンション先に応じてteamsでもメンションを行えそうな気がします。

まとめ

特に難しい点はありません。teamsに通知だけしたいだけの方の参考になれば幸いです。
今回はkintoneとteamsの連携にGASを仲介しましたが、AWS Lambdaを使用しても同様のことは可能であるので挑戦したいと思います。(AWSを使いたいだけです。)

 

コメント

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