Application Integrationでワークフローをノーコードでサクッと作成

 


先日、人事部を訪ねると人事部員が3人並んで AppSheet(Google製ノーコードアプリ開発ツール)でアプリ開発をしてる光景に出会しました。手前味噌ではありますが、控え目に言ってすごくないですか?自走DXする現場。そんなノーコード推しの私が今回紹介するはGoogle CloudのApplication Integration。2023年7月にリリースされたiPaaSと呼ばれるクラウドサービス上でのデータ連携プラットフォームです。

Application Integrationとは

Application Integration は Google Cloud の Integration Platform as a Service(iPaaS)ソリューションです。多様な業務を支えるために必要な数多くのアプリケーション(Google Cloud サービスややサードパーティ製 SaaS)とデータを連携させ、管理する中核的なインテグレーション ツールを幅広く備えています。

 AWSで言うと AppSync が近いサービスになると思います。Application Integrationsは、メッセージング、API管理、データ統合、ワークフロー自動化などの機能を提供している一方、AppSyncは、GraphQL APIの作成、管理、およびデプロイに特化した機能を提供しています。という違いがあるとBardは言っています。サービス紹介を見ると各種SaaSとのコネクタがたくさん載っているので Zapier?とも思いましたが、「Application Integrationsは、クラウドベースのアプリケーション統合を実現したい企業に適したサービスです。Zapierは、簡単なアプリケーション統合を実現したい企業に適したサービスです」とこれまたBardが言っています。

Application Integrationを始める

様々なサードパーティのビジネスアプリケーションとのコネクタが用意されており、Application Integrationから簡単に接続することができるようになっています。

公式チュートリアルでも「Salesforce の商談から BigQuery への注文を自動化する」といったものが提供されており、各種アプリとGoogle Cloudのサービスの連携が強調されています。
一方、タスクにはスプレッドシートへの書き込みやメール送信、承認プロセスといったデイリーの部内業務でのGoogle Workspaceの機能拡張的な使い方もできそうなものも多く用意されています。
MBSでは各種社内申請をペーパーレス化しており、かつては決裁印が必要だったような申請には、Googleフォームからの申請にGoogle Apps Scriptでメールによる承認フローの仕組みを取り入れています。今回はこの承認プロセスをノーコードでサクッと置き換えられるか試してみます。

簡単のために、このようなストーリーにします。
「パソコンを購入希望する部署はフォームより、希望するOS、台数、部署名を申請。機材管理部は申請内容を確認して承認あるいは却下する。承認されると資材部に購入依頼メールが送信される。」
では早速作っていきましょう。

Googleフォームの作成

  • 購入を希望するPCのOS
  • 台数
  • 部署名
を入力するだけの簡単なフォームを作成しておきます。

インテグレーションの作成

Google Cloudのコンソールを日本語表記にしているとApplication Integrationは「アプリケーションの統合」と表示されるのでちょっとわかりにくいです。まだ大阪リージョンでは利用できないようです。今回はus-central1を選択しています。


「+CREATE INTEGRATION」よりインテグレーションを作成します。

名称と説明を入力、リージョンを選択して「CREATE」を押すとインテグレーションデザイナーが開きます。

基本的にはこのデザイナーでトリガーを設定し、そこからつながるフローで実行するタスクを設定することでインテングレーションが完成します。

トリガーの設定

デザイナーのTRIGGERSより「API」をドラッグ&ドロップ。これでインテグレーションを起動するAPIエンドポイントが作成されました。デフォルトでは「api_trigger/applicationForm_API_1」のようなIDが付与されます。



APIはこのように任意のアプリケーションから呼び出すことが可能です。
 curl -X POST \
    -H "authorization: Bearer $(gcloud auth print-access-token)"
    -H "Content-Type: application/json" \
    -d '{"trigger_id":"api_trigger/test_API_1"}' \
    "https://us-east1-integrations.googleapis.com/v1/projects/demo-project/locations/-/integrations/-:execute" 

変数の設定

APIで受け取るパラメーターを入力変数として設定します。
左側の変数ペイン「+CREATE」で変数を新規作成します。今回はフォームから
{ "os": "Mac", "machineNum":3, "dept": "DX" } のようなJSON形式で入力情報を受け取るものとします。

データタイプでJSONを選択して、Infer from a sample JSON payload に先ほどのようなサンプルデータを入力するとデータ構造を推測してくれます。入力データとして使用するので Use as an input to Integration にチェックを入れておきます。
作成した変数はメールの本文などでも $formInput.os$ のように書くことで文字列として利用できます。

購入希望台数は整数で表示したいので、Integer に変換したとき用の変数も用意しておきます。
machineNumInteger (Data Type : Integer)

変数の型変換

TASKS から「Data Mapping」をドラッグ&ドロップして API Trigger と接続します。
Data Mapping をクリックし、DATA MAPPIMNG EDITOR を開きます。
Input に formatInput.machineNum をドラッグ&ドロップ、「+」より ROUND() 関数をアタッチします。 Output には machineNumInteger をドラッグ&ドロップします。


タスクの設定(承認プロセス)

TASKS から「Approval」をドラッグ&ドロップして Data Mapping と接続します。



Recipients に承認者のメールアドレスを入れます。
Custom notification mesage は以下のような文言にしました。

$formInput.dept$がPC購入申請を提出しました。
$formInput.os$を $machineNumInteger$台 購入希望しています。


タスクの設定(メール送信)

TASKS から「Send Email」をドラッグ&ドロップして Approval と接続します。
接続の矢印をクリックして、Condition を以下のように設定し、承認されたときのみ Send Emailに移行するようにします。

$`Task_2_isApproved`$ = True


Send Email は以下のように設定します。
Subject : 
PC購入申請を受理しました。
Body :   
$formInput.dept$のPC購入申請を承認しました。
$formInput.os$を $machineNumInteger$台 購入します。

テスト

これで Application Integration の設定は完了です。
画面右上の ▶︎TEST をクリックします。入力をもとめられるので、JSONのスキーマ作成時に利用したサンプルデータをダイアログで入力します。


正しく設定されていると、承認者にメールが送信されます。
届いたメールに書かれたリンクをクリックすると、承認画面が開きます。


承認タスクで設定した通り、申請内容が表示されます。(実際にはメールにも同じ文言が書かれています。)「Approve」をクリックすると承認完了です。

承認が完了すると、Send Mail で設定した購入担当者のメールアドレスにメールが送信されます。

これで一通りの承認ルートは設定が完了しました。
最後にGoogleフォームからの申請でトリガーしてみましょう。

Googleフォームからのトリガー設定

最初に作ったフォームにスクリプトを書いて、フォーム申請をトリガーに起動するようにします。
function triggerAPI(e) {
  FormApp.getActiveForm();
  var formResponse = e.response;
  var itemResponses = formResponse.getItemResponses();
  var token = PropertiesService.getScriptProperties().getProperty('TOKEN');
  var os = itemResponses[0].getResponse()
  var machineNum = +itemResponses[1].getResponse()
  var dept = itemResponses[2].getResponse()
  var payload = {
    'trigger_id': 'api_trigger/applicationForm_API_1',
    'inputParameters': {
      'formInput': {
        'jsonValue': `{
          'os': ${os},
          'machineNum': ${machineNum},
          'dept': ${dept}
        }`
      }
    }
  }
  var header = {
    'Authorization': 'Bearer ' + token,
    'Content-Type': 'application/json'
  }
  var options = {
    'method': 'post',
    'payload': JSON.stringify(payload),
    'headers': header
  }
  var requestUrl = 'https://integrations.googleapis.com/v1/projects/プロジェクト名/locations/us-central1/integrations/applicationForm:execute'
  var response = UrlFetchApp.fetch(requestUrl, options);

}
フォームから申請すると承認フローが走るようになりましたね。
でも使い方としてはやっぱりちょっと違うかな。

Next Post Previous Post