エムオーテックス株式会社が運営するテックブログです。

LANSCOPE API と Power Automate を連携して、デバイス利用許可申請ワークフローを自動化してみた(フロー作成編)

はじめに

こんにちは、LANSCOPE オンプレミス版 開発チームの中江です。​​
今回は、LANSCOPE API と Power Automate を活用して、
LANSCOPE の管理コンソールを操作することなく、自動的にデバイスの制御を一時解除するワークフローの作成方法をご紹介します。

デバイス利用許可申請ワークフローの概要

デバイス利用許可申請ワークフローの概要や準備については、こちらの記事をご覧ください。
tech.motex.co.jp

準備の補足

前回の記事の準備が完了しても、マネージャー環境のIP制限によって、アクセスできない可能性があります。
その場合、Power Automate側の「送信元IP」を確認して、アクセスを許可する必要があります。
Power Automate側の「送信元IP」を確認する方法は、こちらの記事が分かりやすかったです。

qiita.com

Power Automate のフロー構成

前回の記事でご紹介したデバイス利用許可申請ワークフローの全体構成図はこちらになります。

デバイス利用許可申請ワークフローの構成図

Power Automate のフロー構成はこちらになります。

Power Automate の構成図

各アクションについて、順に説明していきたいと思います。
APIの仕様については、お客様専用サイト(LANSCOPE PORTAL)のAPIリファレンスをご参考ください。
※保守ユーザーのみ、ご利用いただけます。 tryweb2.motex.co.jp

1. Forms の受信処理

Formsのアンケート結果を受信するフローを作成します。
トリガーは新規フロー作成時に「新しい応答が送信されたとき」を選択すると、Power Automate 側で自動的に作成されます。

Formsの受信処理

まず、「新しい応答が送信されたとき」のフォームIDに、事前準備で作成した Forms を選択します。

新しい応答が送信されたとき
次に、「+新しいステップ」または「アクションを追加」から「Microsoft Forms」を選択し、「応答の詳細を取得する」を選択します。
応答の詳細を取得する
フォーム IDは事前準備で作成した Forms を選択します。
応答 IDはトリガーで取得した Forms の応答IDを選択します。
応答の詳細を取得する


2. 変数を初期化する処理

「3. API実行、承認依頼、承認結果通知処理」で使用する変数を定義します。

変数を初期化する処理

2-1. 変数初期化:アンケート回答を設定

トリガーで受信した Forms の回答を変数に設定します。

変数初期化:アンケート回答を設定

「+新しいステップ」または「アクションを追加」から「変数」を選択し、「変数を初期化する」を選択します。

変数の初期化
次に、下記の設定値を入力します。

項目 設定値
名前 forms_answer_results
種類 オブジェクト
下記参照

値には、下記の値を入力します。

{
  "applicant_name": "申請者名",
  "applicant_email_address": "申請者のメールアドレス",
  "applicant_computer_name": "申請者のコンピュータ名",
  "device_usage_date": "デバイスの使用日",
  "approver": "承認者(メールアドレス)",
  "application_reason": "申請理由"}
}

最後に、動的なコンテンツから Forms の回答を選択します。
(申請者のメールアドレスは「Responders' Email」を選択します。)

Forms の回答の選択

2-2. 変数初期化:API Token

API 実行時に指定する API Token を定義します。

変数初期化:API Token

「+新しいステップ」または「アクションを追加」から「変数」を選択し、「変数を初期化する」を選択します。
次に、下記の設定値を入力します。

項目 設定値
名前 api_token
種類 文字列
下記参照

最後に、LANSCOPE の管理コンソールから API Token を出力し、値に入力します。
※API Token を発行する手順は、お客様専用サイト(LANSCOPE PORTAL)の資料をご参考ください。

注意! 下記のアクセス権限を持つアカウントの API Token を発行してください。
・デバイスポリシー
・PC端末が所属しているグループ
アクセス権限がない状態でAPIを実行した場合、「403 Forbidden」が返ってきます。

2-3. 変数初期化:統合マネージャーサーバーのホスト名(DNS名)

API 実行時に指定するホスト名(DNS名)を定義します。

変数初期化:統合マネージャーサーバーのホスト名(DNS名)

「+新しいステップ」または「アクションを追加」から「変数」を選択し、「変数を初期化する」を選択します。
次に、下記の設定値を入力します。

項目 設定値
名前 host_name
種類 文字列
統合マネージャーサーバーのホスト名(DNS名)を値に入力します。


2-4. 変数初期化:業務開始時刻/終了時刻

業務開始時刻/終了時刻を定義します。
(「3-5. デバイス一時許可の開始日時と終了日時を設定する」で一時許可の開始時刻/終了時刻を設定するために使用します。)

変数初期化:業務開始時刻/終了時刻

「+新しいステップ」または「アクションを追加」から「変数」を選択し、「変数を初期化する」を選択します。
これを2回繰り返します。

次に、下記の設定値を入力します。

項目 設定値
名前 business_start_time, business_end_time
種類 文字列
業務開始時刻/終了時刻を「HH:mm:ss」(24H表記)の形式で入力します。


2-5. 変数初期化:クライアントID、デバイスポリシーID、デバイスポリシー名

API で取得した情報を格納する変数を定義します。

変数初期化:クライアントID、デバイスポリシーID、デバイスポリシー名

「+新しいステップ」または「アクションを追加」から「変数」を選択し、「変数を初期化する」を選択します。
これを3回繰り返します。

次に、下記の設定値を入力します。

項目 設定値
名前 client_id, device_policy_id, device_policy_name
種類 文字列
empty
(API でデータを取得出来たことを判別するために、値の初期値はemptyを入力します。)


2-6. 変数初期化:デバイス一時許可 開始日時/終了日時

Forms の回答の「デバイス使用日」と業務開始時刻/終了時刻をまとめた値を格納する変数を定義します。

変数初期化:デバイス一時許可 開始日時/終了日時

「+新しいステップ」または「アクションを追加」から「変数」を選択し、「変数を初期化する」を選択します。
これを2回繰り返します。

次に、下記の設定値を入力します。

項目 設定値
名前 temporary_allow_start_datetime, temporary_allow_end_datetime
種類 文字列
empty
(初期値はemptyを入力していますが、判別処理で使用していないため、空欄でも問題ないです。)


2-7. 変数初期化:端末別の使用制限の初期設定確認フラグ(任意)

端末別使用制限の初期設定が「全て許可」ではないことを確認するためのフラグを定義します。

変数初期化:端末別の使用制限の初期設定確認フラグ

「+新しいステップ」または「アクションを追加」から「変数」を選択し、「変数を初期化する」を選択します。
次に、下記の設定値を入力します。

項目 設定値
名前 approve_everything_default_flg
種類 ブール値
false


3. API実行、承認依頼、承認結果通知処理

API実行、承認依頼、承認結果通知処理を実装します。

API実行、承認依頼、承認結果通知処理

複数のアクションをまとめて見やすくしたり、例外処理を組むために、 「3. API実行、承認依頼、承認結果通知処理」や「4. エラー時の処理」は、「スコープ」を使用します。

「+新しいステップ」または「アクションを追加」から「コントロール」>「スコープ」を選択し、その中に3-1 ~ 3-8のアクションを追加します。

スコープ

3-1. JSON の解析:forms answer results

変数で定義した Forms の回答をフロー上で使えるようにするため、JSONを解析するアクションを追加します。

JSON の解析:forms answer results

「+新しいステップ」または「アクションを追加」から「データ操作」を選択し、「JSON の解析」を選択します。

JSONの解析
次に、下記の設定値を入力します。

項目 設定値
コンテンツ 動的コンテンツから「変数」のforms_answer_resultsを選択します。
スキーマ 下記参照

下記をクリックするとスキーマを確認することが出来ます。

スキーマを確認する

{
    "type": "object",
    "properties": {
        "applicant_name": {
            "type": "string"
        },
        "applicant_email_address": {
            "type": "string"
        },
        "applicant_computer_name": {
            "type": "string"
        },
        "device_usage_date": {
            "type": "string"
        },
        "approver": {
            "type": "string"
        },
        "application_reason": {
            "type": "string"
        }
    }
}


3-2. 回答のコンピュータ名と一致するクライアントIDを取得する

Forms から申請されたPC端末のコンピュータ名と一致するクライアントIDを取得するアクションを追加します。

回答のコンピュータ名と一致するクライアントIDを取得する

「+新しいステップ」または「アクションを追加」から「コントロール」>「スコープ」を選択し、その中に3-2-1 ~ 3-2-4のアクションを追加します。

下記をクリックすると、アクションの詳細を確認することが出来ます。

3-2-1. HTTP:クライアント一覧の取得
「クライアント一覧の取得 API」を実行して、全てのクライアントの情報を取得するアクションを追加します。
HTTP:クライアント一覧の取得

「+新しいステップ」または「アクションを追加」から「HTTP」を選択し、「HTTP」を選択します。

HTTP

次に、下記の設定値を入力します。

項目 設定値
方法 GET
URI https://[host_name]/catapisrv/api/v1/clients?mr_type=1
ヘッダー キー:Authorization
値:Bearer [api_token]
  • [host_name]
    動的コンテンツの「変数」からhost_nameを選択します。
  • [api_token]
    動的コンテンツの「変数」からapi_tokenを選択します。


3-2-2. JSON の解析:clients
APIで取得したクライアント情報をフロー上で使用するため、JSONを解析するアクションを追加します。
JSON の解析:clients

「+新しいステップ」または「アクションを追加」から「データ操作」を選択し、「JSON の解析」を選択します。
次に、下記の設定値を入力します。

項目 設定値
コンテンツ 「3-2-1. HTTP:クライアント一覧の取得」の「本文」を選択します。
スキーマ 下記参照

下記をクリックするとスキーマを確認することが出来ます。

スキーマを確認する

{
    "type": "object",
    "properties": {
        "clients": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "client_id": {
                        "type": "string"
                    },
                    "submgr_no": {
                        "type": "integer"
                    },
                    "client_no": {
                        "type": "integer"
                    },
                    "client_type": {
                        "type": "integer"
                    },
                    "client_name": {
                        "type": "string"
                    },
                    "belong_group_no": {
                        "type": "integer"
                    },
                    "full_belong_group_name": {
                        "type": "string"
                    },
                    "display_level": {
                        "type": "integer"
                    },
                    "computer_name": {
                        "type": "string"
                    },
                    "ip_address": {
                        "type": "string"
                    },
                    "mac_address": {
                        "type": "string"
                    },
                    "mr_version": {
                        "type": "string"
                    },
                    "power": {
                        "type": "string"
                    },
                    "last_activated_date": {
                        "type": "string"
                    },
                    "license_state": {
                        "type": "integer"
                    }
                }
            }
        }
    }
}


3-2-3. Apply to each:コンピューター名が一致するクライアントIDの取得
「APIで取得したコンピュータ名」と 「Forms から申請されたPC端末のコンピュータ名」が一致することを確認し、
クライアントIDを変数に格納するアクションを追加します。
Apply to each:コンピューター名が一致するクライアントIDの取得

「Apply to each」、「条件」、「変数の設定」アクションを追加し、設定値を入力します。

  • 「Apply to each」
    「+新しいステップ」または「アクションを追加」から「コントロール」を選択し、「Apply to each」を選択します。
    Apply to each
    次に、下記の設定値を入力します。
項目 設定値
以前の手順から出力を選択 動的コンテンツから 「JSON の解析:clients」のclientsを選択します。


  • 「条件」
    「+新しいステップ」または「アクションを追加」から「コントロール」を選択し、「条件」を選択します。
    条件
    次に、下記の設定値を入力します。
項目 設定値
動的コンテンツから「JSON の解析:clients」のcomputer_nameを選択します。
動的コンテンツから「JSON の解析:forms answer results」のapplicant_computer_nameを選択します。
次の値に等しい


  • 「変数の設定」
    「+新しいステップ」または「アクションを追加」から「変数」を選択し、「変数の設定」を選択します。
    変数の設定
    次に、下記の設定値を入力します。
項目 設定値
名前 client_id
動的コンテンツから「JSON の解析:clients」のclient_idを選択します。


3-2-4. 条件:コンピュータ名が一致するクライアントIDが存在しない場合(任意)
「3-2-3. Apply to each:コンピューター名が一致するクライアントIDの取得」の結果、
コンピュータ名が一致するクライアントIDが存在しない場合、申請者にTeamsで通知するアクションを追加します。
(申請者がコンピュータ名の入力を間違えた時を想定しています。)
条件:コンピュータ名が一致するクライアントIDが存在しない場合
「条件」、「チャットまたはチャネルでメッセージを投稿する」、「終了」アクションを追加し、設定値を入力します。

  • 「条件」
    「+新しいステップ」または「アクションを追加」から「コントロール」を選択し、「条件」を選択します。
    次に、下記の設定値を入力します。
項目 設定値
動的コンテンツから「変数」のclient_idを選択します。
empty
次の値に等しい


  • 「チャットまたはチャネルでメッセージを投稿する」
    「+新しいステップ」または「アクションを追加」から「Microsoft Teams」を選択し、「チャットまたはチャネルでメッセージを投稿する」を選択します。
    チャットまたはチャネルでメッセージを投稿する
    次に、下記の設定値を入力します。
    メッセージは自由に設定してください。
項目 設定値
投稿者 フローボット
登録先 フローボットとチャットをする
Recipient 動的コンテンツから「JSON の解析:forms answer results」のapplicant_email_addressを選択します。
メッセージ(任意) 【デバイス使用許可申請】
デバイスの使用許可申請に失敗しました。

Formsに入力した「コンピュータ名」が間違っていないかご確認ください。
回答:[applicant_computer_name]

間違っていない場合、情シスまでご連絡ください。

[applicant_computer_name]:動的コンテンツの「JSON_の解析:forms_answer_results」からapplicant_computer_nameを選択します。

  • 「終了」
    「+新しいステップ」または「アクションを追加」から「コントロール」を選択し、「終了」を選択します。
    終了
    次に、下記の設定値を入力します。
項目 設定値
状態 失敗
コード(任意) E01
メッセージ(任意) コンピュータ名が一致するクライアントIDが存在していない。



3-3. クライアントに適用されているデバイスポリシー情報を取得する

LANSCOPE 側でクライアントに適用されているデバイスポリシー情報(デバイスポリシーIDとデバイスポリシー名)を取得するアクションを追加します。

クライアントに適用されているデバイスポリシー情報を取得する
「+新しいステップ」または「アクションを追加」から「コントロール」>「スコープ」を選択し、その中に3-3-1 ~ 3-3-4のアクションを追加します。

下記をクリックすると、アクションの詳細を確認することが出来ます。

3-3-1. HTTP:デバイスポリシーの取得
「デバイスポリシー一覧の取得 API」を実行して、デバイスポリシー情報を取得するアクションを追加します。
HTTP:デバイスポリシーの取得
「+新しいステップ」または「アクションを追加」から「HTTP」を選択し、「HTTP」を選択します。
次に、下記の設定値を入力します。

項目 設定値
方法 GET
URI https://[host_name]/catapisrv/api/v1/policies/devices?client_id=[client_id]
ヘッダー キー:Authorization
値:Bearer [api_token]
  • [host_name]
    動的コンテンツの「変数」からhost_nameを選択します。
  • [client_id]
    動的コンテンツの「変数」からclient_idを選択します。
  • [api_token]
    動的コンテンツの「変数」からapi_tokenを選択します。


3-3-2. JSON の解析 :device policies
APIで取得したデバイスポリシー情報をフロー上で使用するため、JSONを解析するアクションを追加します。
JSON の解析 :device policies
「+新しいステップ」または「アクションを追加」から「データ操作」を選択し、「JSON の解析」を選択します。
次に、下記の設定値を入力します。

項目 設定値
コンテンツ 「3-3-1. HTTP:デバイスポリシーの取得」の「本文」を選択します。
スキーマ 下記参照

下記をクリックするとスキーマを確認することが出来ます。

スキーマを確認する

{
    "type": "object",
    "properties": {
        "device_policies": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "device_policy_id": {
                        "type": "integer"
                    },
                    "device_policy_name": {
                        "type": "string"
                    },
                    "offline_restrict_flag": {
                        "type": "integer"
                    },
                    "allow_device_flag": {
                        "type": "integer"
                    },
                    "allow_managed_device_flag": {
                        "type": "integer"
                    }
                }
            }
        }
    }
}


3-3-3. Apply to each:デバイスポリシーID、デバイスポリシー名の取得
APIで取得したデバイスポリシーID、デバイスポリシー名を変数に格納するアクションを追加します。
Apply to each:デバイスポリシーID、デバイスポリシー名の取得
「Apply to each」、「変数の設定」アクションを追加し、設定値を入力します。

  • 「Apply to each」
    「+新しいステップ」または「アクションを追加」から「コントロール」を選択し、「Apply to each」を選択します。
    次に、下記の設定値を入力します。
項目 設定値
以前の手順から出力を選択 動的コンテンツから「JSON の解析:device policies」のdevice_policiesを選択します。


  • 「変数の設定」
    「+新しいステップ」または「アクションを追加」から「変数」を選択し、「変数の設定」を選択します。
    次に、下記の設定値を入力します。
項目 設定値
名前 device_policy_id, device_policy_name
動的コンテンツから「JSON の解析:device policies」のdevice_policy_iddevice_policy_nameを選択します。


3-3-4. 条件:デバイスポリシーが適用されていない場合(任意)
「3-3-3. Apply to each:デバイスポリシーID、デバイスポリシー名の取得」の結果、
そのクライアントに対してデバイスポリシーを適用していない場合、管理者にTeamsで通知するアクションを追加します。
条件:デバイスポリシーが適用されていない場合
「条件」、「チャットまたはチャネルでメッセージを投稿する」、「終了」アクションを追加し、設定値を入力します。

  • 「条件」
    「+新しいステップ」または「アクションを追加」から「コントロール」を選択し、「条件」を選択します。
    次に、下記の設定値を入力します。
項目 設定値
動的コンテンツから「変数」のdevice_policy_iddevice_policy_nameを選択します。
empty
次の値に等しい


  • 「チャットまたはチャネルでメッセージを投稿する」
    「+新しいステップ」または「アクションを追加」から「Microsoft Teams」を選択し、「チャットまたはチャネルでメッセージを投稿する」を選択します。
    次に、下記の設定値を入力します。
    メッセージは自由に設定してください。
項目 設定値
投稿者 フローボット
登録先 フローボットとチャットをする
Recipient 動的コンテンツから「JSON の解析:forms answer results」のapproverを選択します。
(承認者 = LANSCOPE 管理者を想定しています。)
メッセージ(任意) 【デバイス使用許可申請】
デバイスの使用許可申請に失敗しました。
申請したクライアントがデバイスポリシーに所属していない可能性があります。

詳細はPower Automateの実行履歴をご確認ください。
[Power Automateのリンク等]


  • 「終了」
    「+新しいステップ」または「アクションを追加」から「コントロール」を選択し、「終了」を選択します。
    次に、下記の設定値を入力します。
項目 設定値
状態 失敗
コード(任意) E02
メッセージ(任意) 申請したクライアントがデバイスポリシーに所属していない。



3-4. 端末別の使用制限設定の初期設定を確認する(任意)

API で端末別の使用制限設定情報を取得し、LANSCOPE 側で既に全てのデバイスが許可されていないことを確認するアクションを追加します。
( LANSCOPE 側で既に全てのデバイスが許可されている場合、「端末別使用制限設定の変更API」実行時にエラーが発生するため、事前に設定を確認しています。)

端末別の使用制限設定の初期設定を確認する
「+新しいステップ」または「アクションを追加」から「コントロール」>「スコープ」を選択し、その中に3-4-1 ~ 3-4-4のアクションを追加します。

下記をクリックすると、アクションの詳細を確認することが出来ます。

3-4-1. HTTP:端末別の使用制限設定一覧取得
「端末別の使用制限設定一覧取得 API」を実行して、端末別の使用制限設定を取得するアクションを追加します。
HTTP:端末別の使用制限設定一覧取得
「+新しいステップ」または「アクションを追加」から「HTTP」を選択し、「HTTP」を選択します。
次に、下記の設定値を入力します。

項目 設定値
方法 GET
URI https://[host_name]/catapisrv/api/v1/policies/devices/[device_policy_id]/client-settings?client_id=[client_id]
ヘッダー キー:Authorization
値:Bearer [api_token]
  • [host_name]
    動的コンテンツの「変数」からhost_nameを選択します。
  • [device_policy_id]
    動的コンテンツの「変数」からdevice_policy_idを選択します。
  • [client_id]
    動的コンテンツの「変数」からclient_idを選択します。
  • [api_token]
    動的コンテンツの「変数」からapi_tokenを選択します。

3-4-2. JSON の解析:devices client-settings
APIで取得した端末別の使用制限設定情報をフロー上で使用するため、JSONを解析するアクションを追加します。
JSON の解析:devices client-settings
「+新しいステップ」または「アクションを追加」から「データ操作」を選択し、「JSON の解析」を選択します。
次に、下記の設定値を入力します。

項目 設定値
コンテンツ 「3-4-1. HTTP:端末別の使用制限設定一覧取得」の「本文」を選択します。
スキーマ 下記参照

下記をクリックするとスキーマを確認することが出来ます。

スキーマを確認する

{
    "type": "object",
    "properties": {
        "client_settings": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "device_policy_id": {
                        "type": "integer"
                    },
                    "device_policy_name": {
                        "type": "string"
                    },
                    "client_id": {
                        "type": "string"
                    },
                    "client_type": {
                        "type": "integer"
                    },
                    "submgr_no": {
                        "type": "integer"
                    },
                    "client_no": {
                        "type": "integer"
                    },
                    "client_name": {
                        "type": "string"
                    },
                    "belong_group_id": {
                        "type": "string"
                    },
                    "belong_group_no": {
                        "type": "integer"
                    },
                    "full_belong_group_name": {
                        "type": "string"
                    },
                    "mrVersion": {
                        "type": "string"
                    },
                    "cd": {
                        "type": "object",
                        "properties": {
                            "setting_type": {
                                "type": "integer"
                            }
                        }
                    },
                    "fd": {
                        "type": "object",
                        "properties": {
                            "setting_type": {
                                "type": "integer"
                            }
                        }
                    },
                    "usb": {
                        "type": "object",
                        "properties": {
                            "setting_type": {
                                "type": "integer"
                            }
                        }
                    },
                    "other": {
                        "type": "object",
                        "properties": {
                            "setting_type": {
                                "type": "integer"
                            }
                        }
                    },
                    "temporary_allow": {
                        "type": "object",
                        "properties": {
                            "allow_type": {
                                "type": [
                                    "integer",
                                    "null"
                                ]
                            },
                            "start_datetime": {
                                "type": [
                                    "string",
                                    "null"
                                ]
                            },
                            "end_datetime": {
                                "type": [
                                    "string",
                                    "null"
                                ]
                            }
                        }
                    },
                    "policy_delivery_status": {
                        "type": "integer"
                    }
                }
            }
        }
    }
}


3-4-3. Apply to each:端末別の使用制限設定の確認
APIで取得した端末別の使用制限設定で、CD、DVD、USB、その他のデバイスが全て「許可」に設定されていることを確認し、
LANSCOPE 側で全てのデバイスが「許可」に設定されている場合、申請者にTeamsで通知するアクションを追加します。

Apply to each:端末別の使用制限設定の確認
「Apply to each」、「条件」、「変数の設定」アクションを追加し、設定値を入力します。

  • 「Apply to each」
    「+新しいステップ」または「アクションを追加」から「コントロール」を選択し、「Apply to each」を選択します。
    次に、下記の設定値を入力します。
項目 設定値
以前の手順から出力を選択 動的コンテンツから「JSON の解析:devices client-settings」のclient_settingsを選択します。


  • 「条件」
    「+新しいステップ」または「アクションを追加」から「コントロール」を選択し、「条件」を選択します。
    次に、下記の設定値を入力します。
項目 設定値
動的コンテンツから「JSON の解析:devices client-setting」のsetting_type(cd, fd, usb, other)を選択します。
1
次の値に等しい

※制限設定setting_typeは API で下記の値を取得するため、「許可」設定である1を指定します。

1:許可
2:読取専用
3:禁止[外付け](Macでは禁止[内蔵])
4:禁止[内蔵/外付け]


  • 「変数の設定」
    「+新しいステップ」または「アクションを追加」から「変数」を選択し、「変数の設定」を選択します。
    次に、下記の設定値を入力します。
項目 設定値
名前 approve_everything_default_flg
true


3-4-4. 条件:既に全てのデバイスが許可されている場合
「3-4-3. Apply to each:端末別の使用制限設定の確認」の結果、
LANSCOPE 側でデバイスの制御設定が「全て許可」に設定されている場合、申請者にTeamsで通知するアクションを追加しています。
条件:既に全てのデバイスが許可されている場合
「条件」、「チャットまたはチャネルでメッセージを投稿する」、「終了」アクションを追加し、設定値を入力します。

  • 「条件」
    「+新しいステップ」または「アクションを追加」から「コントロール」を選択し、「条件」を選択します。
    次に、下記の設定値を入力します。
項目 設定値
動的コンテンツから「変数」のapprove_everything_default_flgを選択します。
true
次の値に等しい


  • 「チャットまたはチャネルでメッセージを投稿する」
    「+新しいステップ」または「アクションを追加」から「Microsoft Teams」を選択し、「チャットまたはチャネルでメッセージを投稿する」を選択します。
    次に、下記の設定値を入力します。
    メッセージは自由に設定してください。
項目 設定値
投稿者 フローボット
登録先 フローボットとチャットをする
Recipient 動的コンテンツから「JSON の解析:forms answer results」のapplicant_email_addressを選択します。
メッセージ(任意) 【デバイス使用許可申請】
既にデバイスの使用を許可されています。
引き続き、ご利用ください。


  • 「終了」
    「+新しいステップ」または「アクションを追加」から「コントロール」を選択し、「終了」を選択します。
    次に、下記の設定値を入力します。
項目 設定値
状態 成功



3-5. デバイス一時許可の開始日時と終了日時を設定する

Forms の回答と定義した業務時間を使って、デバイス一時許可の開始日時と終了日時を設定するアクションを追加します。

デバイス一時許可の開始日時と終了日時を設定する
「+新しいステップ」または「アクションを追加」から「コントロール」>「スコープ」を選択し、その中に3-5-1 ~ 3-5-2のアクションを追加します。

下記をクリックすると、アクションの詳細を確認することが出来ます。

3-5-1. 変数設定:デバイス一時許可の開始日時/終了日時を設定する
デバイス一時許可の開始日時と終了日時を設定するアクションを追加します。
変数設定:デバイス一時許可の開始日時/終了日時を設定する
「+新しいステップ」または「アクションを追加」から「変数」を選択し、「変数の設定」を選択します。
これを2回繰り返します。

次に、下記の設定値を入力します。

  • 開始日時
項目 設定値
名前 temporary_allow_start_datetime
式からconcat([device_usage_date], ' ', [business_start_time]を入力します。※
  • [device_usage_date]
    動的コンテンツの「JSON_の解析:forms_answer_results」からdevice_usage_dateを選択します。
  • [business_start_time]
    動的コンテンツの「変数」からbusiness_start_timeを選択します。

※変数の値には'yyyy-MM-dd'+ 半角スペース +'HH:mm:ss'='yyyy-MM-dd HH:mm:ss'の式を設定します。
 これには、2 つ以上の文字列を結合し、結合された文字列を返すconcat 関数を使用します。


  • 終了日時
項目 設定値
名前 temporary_allow_end_datetime
式からconcat([device_usage_date], ' ', [business_end_time]を入力します。
  • [device_usage_date]
    動的コンテンツの「JSON_の解析:forms_answer_results」からdevice_usage_dateを選択します。
  • [business_end_time]
    動的コンテンツの「変数」からbusiness_end_timeを選択します。

3-5-2. タイム ゾーンの変換:デバイス一時許可の開始日時/終了日時
「端末別使用制限設定の変更API」で一時許可日時を指定するために、タイムゾーンを日本標準時から協定世界時(UTC)に変更するアクションを追加します。
タイム ゾーンの変換:デバイス一時許可の開始日時/終了日時

「+新しいステップ」または「アクションを追加」から「日時」を選択し、「タイムゾーンの変換」を選択します。
これを2回繰り返します。

タイムゾーンの変換
次に、下記の設定値を入力します。

項目 設定値
基準時間 動的コンテンツから「変数」のtemporary_allow_start_datetimetemporary_allow_end_datetimeを選択します。
書式設定文字列 yyyy-MM-ddTHH:mm:ssZ
(書式設定文字列は「カスタムの値」を選択してから、上記の値を入力します。)
変換元のタイムゾーン (UTC+09:00) 大阪、札幌、東京
変換先のタイムゾーン (UTC) 協定世界時



3-6. 開始して承認を待機

承認依頼を送信して、承認の結果を受信するまで待機するアクションを追加します。

開始して承認を待機

「+新しいステップ」または「アクションを追加」から「承認」を選択し、「開始して承認を待機」をします。

開始して承認を待機
次に、下記の設定値を入力します。
タイトルやメッセージは自由に設定してください。

項目 設定値
承認の種類 承認/拒否 - 最初に応答
タイトル(任意) デバイス使用許可申請
担当者 動的コンテンツから「JSON の解析:forms answer results」のapproverを選択します。
詳細(任意) ▼依頼情報
依頼者名:[applicant_name]
依頼日時:[request_date_and_time]
理由:[application_reason]

▼ 申請情報
デバイスの使用日:[device_usage_date]
デバイスの使用端末:[applicant_computer_name]
デバイスポリシー:[device_policy_name]

▼依頼情報

  • [applicant_name]
    動的コンテンツから「JSON の解析:forms answer results」のapplicant_nameを選択します。
  • [request_date_and_time]
    式から下記の値を入力します。
    formatDateTime(convertTimeZone(utcNow(), 'UTC', 'Tokyo Standard Time'), 'yyyy-MM-dd HH:mm:ss')
    (この式は、utcNow関数で現在の日時(UTC:協定世界時)を取得し、convertTimeZone関数で日本標準時に変換した後、formatDateTime関数で「yyyy-MM-dd HH:mm:ss」形に変換します。)
  • [application_reason]
    動的コンテンツから「JSON の解析:forms answer results」のapplication_reasonを選択します。

▼ 申請情報

  • [device_usage_date]
    動的コンテンツから「JSON の解析:forms answer results」のdevice_usage_dateを選択します。
  • [applicant_computer_name]
    動的コンテンツから「JSON の解析:forms answer results」のapplicant_computer_nameを選択します。
  • [device_policy_name]
    動的コンテンツから「変数」のdevice_policy_nameを選択します。

3-7. 条件:承認された場合、デバイスポリシーを変更する

承認結果が「承認」である場合、「端末別の使用制限設定の変更API」を実行し、デバイスポリシーを変更するアクションを追加します。
APIが指定した期間は、デバイスが一時許可されるように設定します。

条件:承認された場合、デバイスポリシーを変更する
「条件」、「HTTP」アクションを追加し、設定値を入力します。

  • 条件
    「+新しいステップ」または「アクションを追加」から「コントロール」を選択し、「条件」を選択します。
    次に、下記の設定値を入力します。
項目 設定値
動的コンテンツから「開始して承認を待機」の「結果」を選択します。
Approve
次の値に等しい
  • HTTP
    「+新しいステップ」または「アクションを追加」から「HTTP」を選択し、「HTTP」を選択します。
    次に、下記の設定値を入力します。
項目 設定値
方法 PUT
URI https://[host_name]/catapisrv/api/v1/policies/devices/[device_policy_id]/client-settings/update
ヘッダー キー:Authorization
値:Bearer [api_token]
本文 下記参照
  • [host_name] 動的コンテンツの「変数」からhost_nameを選択します。
  • [device_policy_id] 動的コンテンツの「変数」からdevice_policy_idを選択します。
  • [api_token] 動的コンテンツの「変数」からapi_tokenを選択します。

下記をクリックすると本文(リクエストボディ)に入力する値を確認することが出来ます。

本文を確認する

{
  "client_settings": [
    {
      "client_id": [client_id],
      "temporary_allow": {
        "allow_type": 1,
        "start_datetime": [start_datetime],
        "end_datetime": [end_datetime]
      }
    }
  ]
}
  • [client_id]
    動的コンテンツの「変数」からclient_idを選択します。
  • [start_datetime]
    動的コンテンツの「タイム ゾーンの変換:デバイス一時許可の開始日時」から「変換後の時間」を選択します。
  • [end_datetime]
    動的コンテンツの「タイム ゾーンの変換:デバイス一時許可の終了日時」から「変換後の時間」を選択します。



3-8. Apply to each:Teams で承認結果を申請者に通知する

Teams から承認結果を申請者に通知するアクションを追加します。

Apply to each:Teamsで承認結果を申請者に通知する

「Apply to each」、「チャットまたはチャネルでメッセージを投稿する」アクションを追加し、設定値を入力します。
(通知内容に承認者のコメントを使用しているため、「Apply to each」を使用します。)

  • 「Apply to each」
    「+新しいステップ」または「アクションを追加」から「コントロール」を選択し、「Apply to each」を選択します。
    次に、下記の設定値を入力します。
項目 設定値
以前の手順から出力を選択 動的コンテンツから「JSON の解析:devices client-settings」のclient_settingsを選択します。


  • 「チャットまたはチャネルでメッセージを投稿する」
    「+新しいステップ」または「アクションを追加」から「Microsoft Teams」を選択し、「チャットまたはチャネルでメッセージを投稿する」を選択します。
    次に、下記の設定値を入力します。
項目 設定値
投稿者 フローボット
登録先 フローボットとチャットをする
Recipient 動的コンテンツから「JSON の解析:forms answer results」のapplicant_email_addressを選択します。
メッセージ(任意) 【デバイス使用許可申請の結果】
承認結果:[approval_result]
コメント:[comments]

▼申請情報
申請者(使用者):[applicant_name]
承認先:[approver]
デバイスの使用日:[device_usage_date]
コンピューター名:[applicant_computer_name]
申請理由:[application_reason]
  • [approval_result]
    動的コンテンツから「開始して承認を待機」の「結果」を選択します。
  • [comment]
    動的コンテンツから「Apply_to_each:Teamsで承認結果を申請者に通知する」の「回答数 コメント」を選択します。
  • [applicant_name]
    動的コンテンツから「JSON の解析:forms answer results」のapplicant_nameを選択します。
  • [approver]
    動的コンテンツから「JSON の解析:forms answer results」のapproverを選択します。
  • [device_usage_date]
    動的コンテンツから「JSON の解析:forms answer results」のdevice_usage_dateを選択します。
  • [applicant_computer_name]
    動的コンテンツから「JSON の解析:forms answer results」のapplicant_computer_nameを選択します。
  • [application_reason]
    動的コンテンツから「JSON の解析:forms answer results」のapplication_reasonを選択します。


4. エラー時の処理(任意)

「3. API実行、承認依頼、承認結果通知処理」が失敗、スキップ、タイムアウトした時にエラーを通知するアクションを追加します。

エラー時の処理
「+新しいステップ」または「アクションを追加」から「コントロール」>「スコープ」を選択します。
次に、「・・・」を選択して、「実行条件の構成」を選択します。
実行条件の構成
「失敗」、「スキップ」、「タイムアウト」にチェックを付け、「完了」を押します。
実行タイミングの設定
作成したスコープに「チャットまたはチャネルでメッセージを投稿する」、「終了」アクションを追加します。
フローに失敗した場合、管理者にエラーを通知して終了する

  • 「チャットまたはチャネルでメッセージを投稿する」
    「+新しいステップ」または「アクションを追加」から「Microsoft Teams」を選択し、「チャットまたはチャネルでメッセージを投稿する」を選択します。 次に、下記の設定値を入力します。
項目 設定値
投稿者 フローボット
登録先 フローボットとチャットをする
Recipient 動的コンテンツから「JSON の解析:forms answer results」のapproverを選択します。
メッセージ(任意) 【デバイス使用許可申請】
デバイスの使用許可申請フローでエラーが発生しました。
詳細はPower Automateの実行履歴 をご確認ください。
[Power Automateのリンク等]

エラーの詳細は、Power Automate の「マイフロー」>「28 日間の実行履歴」から確認することが出来るため、
メッセージに Power Automate のリンクを含めてもいいと思います。


  • 「終了」
    「+新しいステップ」または「アクションを追加」から「コントロール」を選択し、「終了」を選択します。
    次に、下記の設定値を入力します。
項目 設定値
状態 失敗
コード(任意) E00
メッセージ(任意) 例外のエラーが発生している。


補足

YouTube のスピンオフ配信にて、コミュニティの方に対して、
フローを実践している動画や LANSCOPE クラウド版の API の活用事例も紹介しています。
ガチガチに緊張していますが、是非ご覧ください。

www.youtube.com

おわりに

今まで、お客様のご要望を受けて、チームで開発することはありましたが、
自分が担当した内容を、配信で発表することが初めてだったので、とても緊張しました。
しかし、ご要望を頂いたコミュニティメンバーの方に「求めていたものだ」と伺った時はすごく嬉しかったです。

もっと LANSCOPE API を使っていただきたいという思いで、今回参加させていただきましたが、
今後も同じような機会があれば参加したいと思います。