Teamsからkintoneに勤怠登録しよう


はじめに

今回は Teams から kintone に勤怠登録をしてみようと思います。
具体的には、Teams から送ったメッセージを分解して、 kintone の任意のフィールドに登録するという処理を Microsoft Power Automate を使って実現していきます。

準備するもの

準備するものは以下の通りです。

  • kintone のアプリ
  • Microsoft Teams
  • Microsoft Power Automate

kintone の設定

まず、kintone にアプリを作ります。
今回は勤怠登録をイメージしてアプリを作成しました。
用意したフィールドは以下の通りです。

フィールド名 フィールドコード フィールドの種類
日時 日時 日時フィールド
氏名   氏名 文字列(1行)フィールド
勤務場所 勤務場所 文字列(1行)フィールド

通信には、API トークンを使用します。
API トークンの詳しい設定方法は、kintone ヘルプのAPI トークンを生成するを参照してください。
API トークンのアクセス権は「レコード追加」にチェックを入れてください。

Microsoft Power Automate の設定

Microsoft Power Automate を設定していきます。全体の流れは以下の通りです。

Microsoft Teams からメッセージを送信する

まず、Microsoft Teams からメッセージを受け取ったときの設定をします。
今回はテスト用に、「連携動作確認用」チームに「レコード登録」チャネルを作成しました。

以下のような形でメッセージを送信することを想定して、実装していきます。

コマンド名 {フィールド名}:{String}

実際に送信するメッセージは以下の通りです。

HTML をテキストに変換する

Microsoft Power Automate では、Microsoft Teams からのメッセージを HTML 形式で受け取ります。
そのままでは、文字列として処理できないため、「Html to Text」で文字列に変換します。
設定方法は以下のように、Content に「メッセージ 本文 コンテンツ」を追加するだけです。

変数を初期化する(command)

文字列に変換した後は、文字列を「コマンド(command)」と「HTTP リクエスト送信用のボディ(requestBody)」に分解していきます。
はじめにコマンド部分を切り出してみましょう。「変数を初期化する」で文字列を分解していきます。

「値」の部分は以下のように設定します。

画像だとわかりづらいですが、split の第二引数には半角スペースを渡しています。

split(body('Html_to_text'),'{ }')

受け取った文字列の半角スペースより前の部分を切り出すという式です。
切り出した文字列は配列に格納されます。
上記の式だと、配列の1番目にコマンド、2番目にそれ以降の文字列が格納されます。

変数を初期化する(requestBody)

続いて、内容の部分を切り出していきましょう。
「変数を初期化する」の部分は先ほどと同じように設定します。

先ほど、配列の 2 番目に格納したテキストは以下のような形になっています。

"勤務場所:自宅"

フィールド名と値が「:(カンマ)」で区切られている状態なので、こちらも先ほどと同様に
「:(カンマ)」の前後で文字列を切り離して、それぞれ配列に格納します。

条件分岐(コマンドの判定)

次は、コマンドの判定です。
送信されたメッセージのコマンドが「勤務開始」であれば kintone にレコード登録を行う、というように分岐させたいと思います。
「はいの場合」は HTTP リクエストを送信、「いいえの場合」は Microsoft Teams のメッセージにエラーメッセージを返信する、という条件で設定していきましょう。

条件は以下のように設定します。

条件分岐の式は、変数の初期化(command)で作成した配列の1番目のコマンドを比較するように設定します。

はいの場合

「はいの場合」には、HTTP リクエストを送信します。
詳しい kintone API の POST メソッドの仕様については、こちらの記事を参考にしてください。

リクエストの「本文」にはリクエストボディを記載します。

{
  "app": {"アプリID"},
  "record": {
    "日時": {
      "value": {"メッセージ CreateDateTime"}
    },
    "氏名": {
      "value": {"メッセージ from ユーザー displayName"}
    },
   variables('requestBody')[0]: {
      "value": {variables('requestBody')[]}
    }
  }
}

「日時」、および「氏名」フィールドには、「動的なコンテンツを追加」から「メッセージ CreateDateTime」と「メッセージ from ユーザー displayName」をそれぞれ設定します。
「勤務場所」には、「動的なコンテンツを追加」から「式」を追加し、先ほど変作成した配列の値を代入します。

いいえの場合

コマンドが「勤務開始」以外だった際には、Microsoft Teams のメッセージに返信する形でエラーメッセージを送信します。
「メッセージへの返信の投稿(V2)」を使用して、「動的なコンテンツ」から「メッセージ ID」を指定します。
そして、「返信」には、返信したいメッセージの内容を追加します。

動作確認

実際に動作確認をしてみます。
Power Automate の右上にある、「テスト」から「トリガーアクションを実行する」を選択します。

実際に下記のメッセージを送信してみると、kintone に内容が登録されています。

勤務開始 勤務場所:自宅


エラーの確認も行います。
先ほどのコマンドの前に「/」を入れてみます。

/勤務開始 勤務場所:自宅

すると、メッセージにエラーメッセージが返信されました。

最後に

今回は、「Microsoft Teams から kintone に勤怠登録する」というしシナリオを想定して、Microsoft Power Automate を使った連携方法を検証してみました。
実際に運用するには、足りない点も多くあると思いますが、簡単な内容であれば Microsoft Teams から手軽にレコード登録を実装できると思います。