こんにちは、SEタケです。
kintoneに機能を追加するには、結局プラグインを契約するしかない、そう思っていませんか。実は、Azure Logic Apps(又はPower Automate)を利用する方法もあります。今回はその例として、メール自動送信を行う方法を紹介します。
メール自動送信自体は、kMailerなどのプラグインでも実現できますが、若干制約もありますし、月額使用料が高いなーと思っておられる方も多いのではないでしょうか。また、メール自動送信に限らず、kintoneはプラグインを追加することで様々なことができますが、目的に合ったプラグインが見つからない場合もありますよね。
そのような場合によく利用されるのが、JavaScriptによる実装かと思います。確かに、JavaScriptでもいろいろなことが可能です。ですが、プログラムを組む必要がありますし、JavaScriptはブラウザを開いているPC上で実行されるため、下記の問題点もあります。
- 処理が終わるまで待たされる。
- 複雑な処理は、使用しているPCのスペックが低いと時間がかかる。
- ブラウザが途中でフリーズしたりすると、処理が途中までしか実行されないなどの問題が発生する。
- ブラウザでソースの表示をすることで、利用者がプログラムを見れてしまう。(処理内容によっては、コピペで悪用される可能性がある)
実は、JavaScriptは操作性の改善などにはいいのですが、内部でデータを処理するにはあまり向いていないんです。ではどうすればいいのか。これらの問題を回避できる方法の1つとして、Azure Logic AppsやPower Automateを利用する方法があります。
Azure Logic Apps/Power Automateは、Microsoftが提供している、コードを書かずに処理を作成し実行できるサービスです。kintoneアプリのレコードを追加/更新したときや、毎日決まった時間に実行する処理などを作ることができます。
今回は、Azure Logic Appsを使用する想定で説明します。Azure Logic AppsとPower Automateは想定する利用者が異なりますが、操作方法などはほとんど同じですので、Power Automateを利用される方も参考にしてください。
(Azure Logic Appsは開発者向け、Power Automateは利用者向け、ということですが、個人的な感想としては、そんなに使用感は変わらないのでAzure Logic Appsでいいのではと思っています。将来的にAzureの多様な機能にアクセスしやすいですし、料金体系も柔軟です。)
大まかな流れとしては、Azure Logic Appsで処理を作成して、Webhookでその処理をコールする、という方法になります。kintoneからのデータの取得や更新は、kintoneのAPIを使用します。
結局のところ、別途どこかのサーバーで処理を用意して、kintoneのWebhookでその処理をコールすればいいということですが、サーバーの処理にAzure Logic Appsを使えばコードを書く必要がなく、処理の作成やメンテナンスが各段に楽になるというメリットがあります。
ということで、Azure Logic Appsを使ってメール自動送信を実装する方法を紹介していきます。これはAzure Logic Appsを活用する例の1つですので、慣れてくるとメール自動送信だけでなく様々なことができるようになります。楽しみですね。
Azure Logic Appsは、下記URLからアカウントを作成できます。
クラウド コンピューティング サービス | Microsoft Azure
Power Automateを使用される場合は、下記URLからアカウントを作成できます。
Power Automate | Microsoft Power Platform
手順1:sybozuの管理画面で、Azure Logic Appsとの連携を許可
kintoneとAzure Logic Appsを連携するには、kintone側で連携の許可設定をする必要があります。
まず、kintoneの画面の右上にある、歯車アイコンのメニューから「cybozu.com共通管理」を選択します。
cybozu.com共通管理画面に移動しますので、左側メニューの「外部連携」を選択します。
「Microsoft Power Automate」を有効にします。(※「Azure Logic Apps」ではありませんが、気にしないでください。)
「有効」にしたスイッチの左にある「連携利用ユーザーの設定」リンクをクリックして、Azure Logic Appsからの連携時に使用するユーザー(※Administrator以外)を選択し、「保存」をクリックします。Azure Logic Appsからのレコード更新者などは、ここで指定したユーザーになります。
これで、kintone側でAzure Logic Appsからの連携を許可できました。
手順2:kintoneのアプリ作成
メール自動送信のきっかけとなるkintoneアプリを作成します。
今回はサンプルとして、アプリ名は「メール自動送信サンプル」とし、下記フィールドを追加します。
- 宛先:文字列(1行)
- 件名:文字列(1行)
- 本文:文字列(複数行)
- 添付ファイル:添付ファイル形式のフィールド
- 状態:ラジオボタンで「まだ送信しない」「送信する」「送信済み」を選べるようにする
「状態」フィールドは、意図したときだけメール送信するために追加しました。「送信する」になっているレコードをメール送信し、メール送信後に「送信済み」に変更することで、送信したいときに1回だけ送信されるようにします。
また、今回は添付ファイルは扱いませんが、次回で添付ファイルについても説明します。
手順3:AzureでLogic Appsのリソースを作成
Azureの管理画面から「リソースの作成」でロジックアプリ(Logic Apps)を作成します。
ロジックアプリを選択→作成
↓
設定情報を入力します。
サブスクリプション、リソースグループを選びます。
そして・・ここ超重要です!タイプは「消費」を選択しましょう!Standardだと、使ってなくても設置しているだけで料金がかかってしまいます。Standardの料金は$0.192/時間(2022/1/26現在)ですので、試しに作ったロジックを1ヶ月忘れて放置すると$143ほど請求されてしまいます。なぜStandardが初期選択になっているのか疑問ですね。。料金についての詳細は下記を参照してください。
価格 – Logic Apps | Microsoft Azure
あとは、ロジックアプリ名に後で見てわかるような名前をつけて、地域はどこでもだいたい問題ありませんが、使用する場所に最も近い地域を選択します。ログ分析は不要とします。
「確認および作成」で、このリソースを作成します。
手順4:Logic Appsで処理を作成
Logic Appsの画面に移動して、空のロジックアプリを作成します。最初にトリガー(処理が実行されるきっかけ)として「kintone」の「アプリレコードが更新されたとき」を選択します。レコード追加時にも実行してほしいですが、その設定はあとで行います。
↓
接続先のkintoneのドメイン(https://***.cybozu.com/の「***.cybozu.com」の部分)を指定し、ロジックに割り当てるアカウントでログインして「許可」します。ロジックでkintoneアプリのレコードを更新すると、このアカウントで更新されます。
作成されたフローの「アプリID」に、手順1で作成したアプリのIDを指定します。アプリIDは、kintoneアプリの一覧画面のURLからわかります。URLの最後にある数字がアプリIDです。(kintoneアプリのURL例:https://***.cybozu.com/k/6/)
「新しいステップ」を作成します。
ここで、kintoneアプリに作成した「状態」フィールドが「送信する」のときだけ処理する条件を追加します。
※ここ超重要です!今回の例では、処理の最後で「状態」を「送信済み」に変更するステップを入れますが、これから説明する条件を設定していないと、kintoneアプリのレコードを誰かが更新→Azure Logic Apps の処理が実行される→「状態」が「送信済み」に変更される→(レコードが更新されるので)Azure Logic Apps の処理が実行される→(以下無限ループ)になってしまいます。気づかずに放っておくと勝手に何万回も実行されて、課金も膨れてしまいますので、注意しましょう。
(実は、私、やってしまいました。。1日気づかず3万回ほど実行されて、kintoneから注意のメールが届き、Azureは1000円ほどですが課金されました。。)
では条件の追加方法です。
まずは「制御」を検索、その中のアクションで「条件」を選びます。
条件として、kintoneの「状態」=「送信する」となるように指定します。
ここで1つ注意点があります。条件を指定するときに、下記の一覧から選びますが、実は同じフィールド名が2つずつ出てきます。必ず一覧の下の方を選びましょう。上の方を選ぶと、正しく判定されません。(これ、めっちゃ悩みました。。わかりにくすぎる!)
正しいほうを選んでいるかどうかは、コードビューでも確認できます。”expression”の中身が”triggerBody()?[‘record’]?[‘状態’]?[‘value’]”のように”?[‘value’]”が付いていればOKです。ついていない場合は、違う方のフィールド名を選びなおしてください。
次に、行いたい動作を作成します。先に作成した条件のときにメールを送信したいので、Trueのところに「アクションの追加」をします。
kintoneの「アプリのレコードを更新」を選びます。
レコードの更新設定です。①更新するアプリのアプリIDを指定、②更新するレコードは処理実行のきっかけになったレコードですので、レコード番号が一致するものを更新、③レコードの「状態」フィールドを「送信済み」に変更するように指定します。
メールの送信はまだ入れないでおきます。
手順5:一旦、動作確認
ここで、一度、ちゃんと実行されるかどうか確認してみましょう。
kintoneアプリのレコードを追加して、保存してから、更新画面で「状態」フィールドを「送信する」に変更して保存してみます。※この段階では、レコード更新時だけ実行される設定になっていますので、レコード追加時に「送信する」にしても実行されません。
保存した直後は「状態」フィールドは「送信する」のままですが、画面を何度か再読み込みして「送信済み」に変われば成功です。
実行結果は、Azureのロジックアプリの画面で、概要>実行の履歴 から確認できます。
レコード保存時の実行と、ロジックで「状態」フィールドが「送信済み」に変更された際の実行で、2回実行されているはずです。
もしエラーになっている場合は、どこでエラーになっているのか、実行結果の詳細画面で確認できます。実行結果の詳細画面は、実行の履歴の一覧の行をクリックすると開きます。
うまく実行できましたでしょうか。
手順6:kintoneのWebhookを設定
ここまでの設定で、kintoneアプリのレコード更新時に実行されるようになりました。これを、レコード追加時にも実行されるように設定します。
kintoneアプリの設定画面で、「Webhook」を選んでください。既に1件追加されていると思います。
ここに設定されているWebhook URLは、Azureのロジックアプリの下記と一致します。左メニューで「概要」を選び、右画面の真ん中くらいにあるタブで「トリガの履歴」を選ぶと、「コールバックURL」というのが表示されます。
また、Azureのロジックアプリの有効/無効を切り替えると、kintoneアプリのWebhook設定も追加されたり削除されたりします。
追加されているWebhook URLの行の右側にある、鉛筆アイコンをクリックして、編集画面を開き、「通知を送信する条件」で「レコードの追加」にチェックを入れて「保存」→「アプリの設定に戻る」→「アプリを更新」で完了です。「アプリを更新」は忘れがちなので、注意です。
最期に、kintoneアプリのレコード追加時にも実行されるか、確認しておきます。
続きは次の記事で
まだメール送信はできていませんが、処理の大枠は作成できました。ここからメール送信の処理を追加します。続きは次の記事をご覧ください。
ではまた。
コメント