# セルフサービスポータルを用いたデバイス問題の修正

始めに、一般的なセルフサービスの使用例のためのNQLの例を確認してください。

社員にデバイスに関する基本情報とトラブルシューティングのオプションを提供するために、Nexthinkデータを利用してデバイス情報を取得し、特定の修復を開始します。次のようにするためには:

* リモートアクションを使用してディスクスペースの問題を解決する。
* ワークフローを使用してMicrosoft Teamsのトラブルシューティングを行う。
* バッテリーの健全性が低い場合、新しいバッテリーを注文して修復する。

<figure><img src="/files/fS1x1G3ahWyX2AKDJGP5" alt=""><figcaption></figcaption></figure>

## 前提条件

セルフサービスポータルをNexthinkと統合する前に、以下の事項が整っていることを確認してください:

* Nexthinkライセンス
* 管理者権限

## セルフサービスポータルのインタラクション設計

<table><thead><tr><th width="220">インタラクションステージ</th><th>API技術</th></tr></thead><tbody><tr><td>ステップ1: コミュニケーションの認証</td><td><strong>API資格情報</strong>を設定して、APIを通じてトークンを収集します。</td></tr><tr><td>ステップ2: デバイスの特定</td><td><strong>NQL API</strong>を使用して、セルフサービスポータルウィジェットが<code>ユーザー名</code>に基づいてデバイスを識別できるようにします。 大規模な組織の場合、NexthinkはData Exporterを使用してこの情報をキャッシュすることを強く推奨します。</td></tr><tr><td>ステップ3: デバイスの診断</td><td><strong>NQL API</strong>（またはData Exporter）を使用してデバイスのパフォーマンスデータと、<strong>起動影響取得</strong>および<strong>バッテリーステータス取得</strong>のリモートアクションの結果を取得します。</td></tr><tr><td>ステップ4: 問題の修復</td><td><strong>Remote Actions API</strong>を使用して、ユーザーデバイスで<strong>ディスククリーンアップ</strong>リモートアクションをトリガーします。</td></tr><tr><td>ステップ5: 修正のフォローアップ</td><td><strong>NQL API</strong>を使用して修復状態と詳細を取得し、ユーザーに修復結果に関して通知します。</td></tr></tbody></table>

## Nexthink内で

Nexthink WebインターフェースでAPI機能を設定します。 次の順序で機能をリストの通りに従うことを推奨しますが、相互依存するものもあります。 それでも、ニーズに応じて異なるソリューション間を自由に移動する自由があります。

### データ収集用のリモートアクションの設定

Nexthinkライブラリから次のリモートアクションをインストールします:

* **起動影響取得**
* **バッテリーステータス取得**

実行を毎日スケジュールします。 詳細については、[リモートアクションの管理](https://github.com/nexthink/documentation.online-product-documentation/blob/develop/ja_docs/user-guide/remote-actions/getting-started-with-remote-actions/managing-remote-actions/README.md)を参照してください。

{% hint style="success" %}
このステップを完了する際、次のステップで使用するために両方のリモートアクションのNQL IDを保存してください。

NQL ID's:

* `get_startup_impact_windows`
* `get_battery_status`
  {% endhint %}

### 修復用のリモートアクションの設定

Nexthinkライブラリーから**ディスククリーンアップ**をインストールします。 すでにインストールされている場合は、それをコピーし、以下のように設定します:

* リモートアクショントリガーに**API**を選択します。
* セルフサービスポータルのニーズに合わせたデフォルトの入力パラメーター値を設定します。 ディスククリーンアップのリモートアクションの入力パラメータの表を以下でご覧ください。

#### ディスククリーンアップリモートアクションの入力パラメータ

<table><thead><tr><th width="337">入力</th><th>推奨値</th></tr></thead><tbody><tr><td><code>DiskCleanupCampaignId</code></td><td><p>キャンペーンを表示したい場合は、Nexthinkライブラリのキャンペーン<code>disk_cleanup_invoke</code>を使用してください。</p><p>キャンペーン確認のポップアップを表示させたくない場合は、値00000000-0000-0000-0000-000000000000を入力してください。</p></td></tr><tr><td><code>CleanupCompletedCampaignId</code></td><td><p>キャンペーンを表示したい場合は、Nexthinkライブラリのキャンペーン<code>disk_cleanup_completed</code>を使用してください。</p><p>キャンペーン通知のポップアップを表示させたくない場合は、値00000000-0000-0000-0000-000000000000を入力してください。</p></td></tr><tr><td><code>RemoveFilesNotModifiedInDays</code></td><td>Nexthinkライブラリのデフォルト値（7）</td></tr><tr><td><code>MaximumDelayInSeconds</code></td><td>Nexthinkライブラリのデフォルト値（30）</td></tr><tr><td><code>CleanupLevel</code></td><td><p>クリーンアップレベルを、ライトまたはディープから選択してください。</p><p>このフィールドは、キャンペーンを使用せず、従業員にクリーンアップレベルを選択させる場合にのみ動作します。 それ以外の場合は、従業員の選択が優先されます。</p></td></tr></tbody></table>

{% hint style="success" %}
このステップを完了したら、次のステップで使用するためにリモートアクションのNQL IDを保存してください。

NQL ID: `disk_cleanup`
{% endhint %}

### NQL APIクエリを作成

デザインされたシナリオに従い、3つのNQL APIクエリを作成する必要があります。

* ユーザー名に基づいてユーザーデバイスを取得—ステージ1: デバイスを特定する。
* 現在のトピックの診断を行うためにデバイスデータを取得—ステージ2: デバイスを診断する。
* リモートアクションのステータスと結果を取得する—ステージ4: 修正を追跡する。

各NQL APIクエリの詳細をご覧ください。

<details>

<summary>ユーザー名に基づいてユーザーデバイスを取得する</summary>

**クエリID**: #get\_device\_basic\_infos

```
デバイスの過去7日間
| セッション・イベントの過去7日間
| user.name == $username の条件に一致
| collector.uid, device.name, operating_system.platform, operating_system.name,
       hardware.type, hardware.manufacturer, last_seen をリスト
| last_seen を基準に降順でソート
```

* `collector.uid`フィールドは、次回のインタラクションでリモートアクションをトリガーする際にシステムが使用するキーです。
* 一致は`username`に基づいています。 代替アプローチについては、\[プリビルト] セクションを参照してください。

</details>

<details>

<summary>現在のトピックの診断を行うためにデバイスデータを取得する</summary>

**クエリID**: #diagnose\_device\_bad\_health

```
デバイス
| where device.name == $device_name 条件に一致
| device_performance.events の過去24時間含む
| free_space = system_drive_free_space.avg() / 1000000000 を計算
| collector.uid, device.name, free_space,
       remote_action.get_startup_impact_windows.execution.outputs.HighImpactCount,
       remote_action.get_battery_status.execution.outputs.BatteryHealth をリスト
```

**前提条件:**

* デバイス名を前のステップで取得しました。
* この例では、3つのデータポイントを収集します:
  * ディスクの空き容量は、標準のメトリックです。
  * 高いスタートアップインパクトのあるアプリケーションを確認するために、Nexthinkライブラリの**Get Startup Impact**というリモートアクションが必要です。 リモートアクションをインストール、設定し、毎日実行されるようにスケジュールしてください。
  * バッテリーの健康を確認するために、Nexthinkライブラリの**Get Battery Status**というリモートアクションが必要です。 リモートアクションをインストール、設定し、毎日実行されるようにスケジュールしてください。
* リモートアクションがスケジュールされていないか、デバイスでまだ実行されていない場合、対応する列は空になります。

</details>

<details>

<summary>ディスククリーンアップのリモートアクションを取得する</summary>

**コンテンツ: リモートアクション** from Nexthinkライブラリ (NQL ID: disk\_cleanup)

**前提条件**:

* 前のステップでNQL APIまたはデータエクスポート経由で`collector.uid`を取得しています。
* リモートアクション**Disk Cleanup**をインストールまたはNexthinkライブラリからリモートアクションをコピーし、以下のように設定します:
  * リモートアクショントリガー用に**API**を選択してください。
  * セルフサービスポータルのニーズに合ったデフォルトの入力パラメータ値を設定してください。 ディスククリーンアップリモートアクションの入力パラメータの表を以下でご覧ください。

</details>

{% hint style="success" %}
このステップを完了したら、次のステップで使用するためにすべてのNQL APIクエリのNQL IDを保存してください。

NQL ID'S:

* \#get\_device\_basic\_infos
* \#diagnose\_device\_bad\_health
* \#get\_remote\_action\_result
  {% endhint %}

### \<translation\_instructions>

NexthinkのWebインターフェイスでAPIクレデンシャルを作成し、Nexthinkとセルフサービスポータル間の安全な通信を確立します。 **Permissions**セクションで**Remote Actions API**と**NQL API**を選択してください。 [APIクレデンシャル](https://developer.nexthink.com/docs/api/api-credentials)についての詳細情報はドキュメントを参照してください。

## **セルフサービスポータルについて**

Nexthink内で必要なAPI機能をすべて設定した後、APIコールを実装してください。

### 手順1: 通信を認証する <a href="#chatbotusecases-authentication" id="chatbotusecases-authentication"></a>

以下のAPIコールを実行する前に、有効な認証トークンを取得する必要があります。 生成した[APIクレデンシャル](https://developer.nexthink.com/docs/api/api-credentials)を使用し、有効なOAuthトークンを取得する方法については、[Nexthink Developer](https://developer.nexthink.com/docs/api/getting-an-authentication-token)のドキュメントを参照してください。

### 手順2: デバイスを特定する

デバイスを特定するには、[ユーザー名に基づいてユーザーデバイスを取得する](#get-user-devices-based-on-the-username-of-the-user)で作成した`#get_device_basic_infos` **NQL API**クエリを使用してください。

<details>

<summary><strong>APIリクエスト</strong></summary>

`POST /api/v1/nql/execute`

```
{
 "queryId": "#get_device_basic_infos",
 "parameters": {
 "username": "[チャットボットにより特定されたユーザー名]"
  }
}
```

</details>

<details>

<summary><strong>Example APIレスポンス</strong></summary>

ステータス 200

```
{
 "queryId": "#get_device_basic_infos",
 "executedQuery": "...",
 "rows": 2,
 "executionDateTime": { ... },
 "headers": [
 "device.collector.uid",
 "device.name",
 "device.operating_system.platform",
 "device.operating_system.name",
 "device.hardware.type",
 "device.hardware.manufacturer",
 "device.last_seen"
    ],
 "data": [
        [
 "e0aa796d-e3af-47b5-88d8-228cf5551fb6",
 "XN1231242-2142",
 "Windows",
 "Windows 11 Pro 22H2 (64 bits)",
 "laptop",
 "Lenovo",
 "2023-07-17 17:53:49"
        ],
        [
 "9866a43b-caab-4948-86d2-5567b3ac1d24",
 "XCX124231-1231",
 "macOS",
 "macOS Ventura 13.4.1 (ARM 64 bits)",
 "laptop",
 "Apple",
 "2023-07-17 17:53:03"
        ]
    ]
}
```

**注釈:**

* ステータスコードが200でない場合、リクエストは失敗したか、レート制限を超えた可能性があります。 詳細については、[Nexthink Developer](https://developer.nexthink.com/docs/api/nql-api-overview)ドキュメントを参照してください。
* 返されたリストが空の場合、そのユーザーは指定された時間枠内（この例では過去7日間）にデバイスでアクティブでなかったことを意味します。 従業員がデバイスを使用開始してから、Nexthinkのデータプラットフォームにデータが利用可能になるまで、やや遅れがあります。

</details>

大規模な組織では、どのデバイスがどの従業員に使用されているかを特定するために、CMDBに依存することをNexthinkは推奨しています。 Nexthinkデータを活用し、Data exporterを使用してCMDBデータを強化および修正してください。 ServiceNowへの[セキュアファイル転送プロトコル（SFTP）を介したエクスポート](/platform/ja/configuring_nexthink/bringing-data-into-your-nexthink-instance/integrating-nexthink-with-third-party-tools/outbound-connectors/data-exporters/exporter-for-secure-file-transfer-protocol-sftp-server/cmdb-import-from-sftp-into-servicenow.md)または[HTTPを介したエクスポート](/platform/ja/configuring_nexthink/bringing-data-into-your-nexthink-instance/integrating-nexthink-with-third-party-tools/outbound-connectors/data-exporters/http-api-exporter/exporter-to-servicenow-cmdb.md)を設定する方法については、次のドキュメントを参照してください。

NQLクエリに基づいて、キーとなるユーザー情報を抽出するための定期的なデータエクスポートを考慮してください。

```
session.events の過去30日
| collector.uid, device.name, operating_system.platform, operating_system.name,
       hardware.type, hardware.manufacturer, last_seen によって最終イベントを時刻最大で要約
```

### 手順3: 特定されたデバイスを診断する

ユーザーがデバイスを選択した後、デバイス情報を取得するには、以前に作成した[現在のトピックの診断を行うためにデバイスデータを取得する](#get-device-data-to-perform-diagnostics-for-the-current-topic)下の `#diagnose_device_bad_health` **NQL API**クエリを使用してください。

<details>

<summary><strong>APIリクエスト</strong></summary>

`POST /api/v1/nql/execute`

```
{
 "queryId": "#diagnose_device_bad_health",
 "parameters": {
 "device_name": "[チャットボットにより特定されたデバイス名]"
  }
}
```

</details>

<details>

<summary><strong>Example APIレスポンス</strong></summary>

ステータス 200

```
{
 "queryId": "#diagnose_device_bad_health",
 "executedQuery": "...",
 "rows": 1,
 "executionDateTime": { ... },
 "headers": [
 "device.collector.uid",
 "device.name",
 "free_space_GB",
 "remote_action.get_startup_impact_windows.execution.outputs.HighImpactApplications",
 "remote_action.get_startup_impact_windows.execution.outputs.HighImpactCount",
 "remote_action.get_battery_status.execution.outputs.BatteryHealth"
    ],
 "data": [
        [
 "e0aa796d-e3af-47b5-88d8-228cf5551fb6",
 "XN1231242-2142",
 2.2316807136971,
 "",
 null,
 0.9
        ]
   ]
}
```

* `collector.uid`フィールドは、次回のインタラクションでリモートアクションをトリガーする際にシステムが使用するキーです。
* チャットボットが会話内で使用する3つの列は、意思決定の分岐点として使用されます:
  * **IF** `free_space_GB <= 6`\
    **THEN** 修正のためにライブラリのリモートアクション **Disk Cleanup**をトリガーします。
  * **IF** `remote_action.get_startup_impact_windows.execution.outputs.HighImpactCount > 0`\
    **THEN** スタートアップメニューからアプリケーションを無効にするために、ライブラリのリモートアクション **Disable Application from Startup menu** をトリガーし、 `remote_action.get_startup_impact_windows.execution.outputs.HighImpactApplications` の値を利用して高インパクトアプリケーションを無効にします。
  * **IF** `remote_action.get_battery_status.execution.outputs.BatteryHealth <= 0.85`\
    **THEN** バッテリー交換が必要です: このチャットボットからITSMチケットを作成してフォローアップしてください。

**注意:**

* ステータスコードが200でない場合、リクエストが失敗するか、レート制限を超えたということです。 詳細は[Nexthink Developer](https://developer.nexthink.com/docs/api/nql-api-overview)ドキュメントをご参照ください。
* 返されたリストが空の場合、指定された時間枠内でユーザーがどのデバイスにもアクティブでなかったことを意味します。
* 診断フィールドのいずれかがnullまたは空の場合、情報が利用できません。 空の値の可能性の理由は次のとおりです:
  * データプラットフォームフィールドでは、そのプラットフォームではフィールドがサポートされていません。 詳細については、[NQL データモデル](/platform/ja/understanding-key-data-platform-concepts/nql-data-model.md)のドキュメントを参照してください。
  * リモートアクションフィールドでは、システムがまだリモートアクションを実行に成功していません。 リモートアクションのスケジュール、ターゲティングNQLクエリ、リモートアクションダッシュボードを確認し、実行エラーの可能性を調べてください。

</details>

### ステップ4: 問題を修正してください

以前のステップで設定した **ディスククリーンアップ**リモートアクションを**Remote Action API**を使用して実行し、従業員がセルフサービスウィジェット内のボタンをクリックした後に問題を修正してください—[リモートアクションの構成](#configuring-remediation-remote-actions)を参照。

<details>

<summary><strong>APIリクエスト</strong></summary>

`POST /api/v1/act/execute`

```
{
 "remoteActionId": "disk_cleanup",
 "devices": ["e0aa796d-e3af-47b5-88d8-228cf5551fb6"]
}
```

</details>

<details>

<summary><strong>例 API 応答</strong></summary>

ステータス 200

```
{
 "requestId":"f27efd0c-8cb2-4d00-aae0-261aa06729c7",
 "expiresInMinutes":10080
}
```

* 成功したAPI呼び出しは、エンドポイントが準備ができ次第、リモートアクションが実行される予定であることを示します。
* 返されたリクエストIDを使用すると、実行状況を追跡できます。
* この呼び出しは非同期であり、成功したAPI呼び出しはリモートアクションの開始と完了を示しているわけではありません。

**注意:**

* ステータスコードが200でない場合は、リクエストが失敗したか、レート制限に達したことを意味します。 詳細は[Nexthink開発者ポータル](https://developer.nexthink.com/)のドキュメントを参照してください。

</details>

### ステップ5: 修正の追跡

以前に作成した `#get_remote_action_result` **NQL API**クエリを使用して、リモートアクションの状態と結果を取得してください。

{% hint style="warning" %}
Nexthinkは、APIでリモートアクションをトリガーしてから1分以上経過しない限り、リモートアクション結果を取得する呼び出しを推奨していません。

リアルタイムフィードバックを行い、自己サービスポータル開発でサポートされている場合は、リモートアクション完了時の通知用にウェブフックを使用することを検討してください。
{% endhint %}

{% hint style="info" %}
**前のステップからの入力**

以前のステップで **Remote action API** 呼び出しによって `request_id` を取得しました。 [ステップ4: 問題を修正](#step-4-remediating-the-issue)
{% endhint %}

<details>

<summary><strong>APIリクエスト</strong></summary>

`POST /api/v1/nql/execute`

```
{
 "queryId": "#get_remote_action_result",
 "parameters": {
 "request_id": "f27efd0c-8cb2-4d00-aae0-261aa06729c7"
  }
}
```

</details>

<details>

<summary><strong>例 API 応答</strong></summary>

ステータス 200

```
{
 "queryId": "#get_remote_action_result",
 "executedQuery": "...",
 "rows": 1,
 "executionDateTime": { ... },
 "headers": [
 "remote_action.execution.request_id",
 "device.name",
 "remote_action.name",
 "remote_action.execution.status",
 "remote_action.execution.status_details",
 "remote_action.execution.outputs"
    ],
 "data": [
        [
 "XN1231242-2142",
 "f27efd0c-8cb2-4d00-aae0-261aa06729c7",
 "ディスククリーンアップ",
 "成功",
 "ディスククリーンアップが正常に実行されました。 \r\nPowerShellはコード0で終了しました\n",
 "\"CleanupSpace\":1324470272.0"
        ]
    ]
}
```

* `remote_action.execution.status`は現在の実行ステータスを示します。 主要なステータスには次が含まれます:
  * `成功` はリモートアクションが正常に実行された場合。
  * `進行中` はシステムがまだ実行を完了していない場合。 リモートアクションのさまざまな状態についての詳細は、[リモートアクション](https://github.com/nexthink/documentation.online-product-documentation/blob/develop/ja_docs/user-guide/remote-actions/getting-started-with-remote-actions/README.md)ドキュメントを参照してください。
* `remote_action.execution.status_details`には、トラブルシューティングに役立つリモートアクション実行の詳細情報が含まれています。 意図的に、これは社員には直接公開されません。
* `remote_action.execution.outputs` はリモートアクションの出力値を含むJSONマップです。 **ディスククリーンアップ**リモートアクションでは、返される値は解放されたスペースの量をバイト単位で示しています。

**注意:**

* ステータスコードが200でない場合は、リクエストが失敗したか、レート制限に達したということです。 詳細については、[Nexthink 開発者ポータル](https://developer.nexthink.com/)を参照してください。
* システムが空のリストを返した場合、システムはまだリモートアクションの実行を作成していません。 これは、APIをトリガーしてから24時間を超えるか、指定された時間枠の前にAPIを呼び出すと発生します。

</details>

## プリビルトコンテンツ <a href="#chatbotusecases-pre-builtcontentprebuilt" id="chatbotusecases-pre-builtcontentprebuilt"></a>

セルフサービスポータルの統合を始めるにあたり、通常のチャットボットの会話で使用可能なトピックの例を見つけてください。 各トピックには次のものが含まれています:

* 前提データ収集用リモートアクション。 このセクションで参照されるすべてのリモートアクションはNexthinkライブラリで利用でき、事前に設定する必要があります:
  * データ収集リモートアクションのトリガータイプ**スケジュール**を選択し、スケジュールを1時間または1日の頻度で設定します。
  * 修正リモートアクションのトリガータイプをAPIとして有効にします。 詳細については、[リモートアクションの管理](https://github.com/nexthink/documentation.online-product-documentation/blob/develop/ja_docs/user-guide/remote-actions/getting-started-with-remote-actions/managing-remote-actions/README.md)ドキュメントを参照してください。
* 診断NQLクエリ。
* 診断クエリ結果の解釈方法に関するロジック。
* 各診断に対する可能な修正。

端末名を事前に特定していると仮定し、適切な流れで[エンドツーエンドユースケース](#step-4-remediating-the-issue)を使用して例を実装してください。

### 一般的なクエリ <a href="#chatbotusecases-generalqueries" id="chatbotusecases-generalqueries"></a>

[エンドツーエンドユースケース](#end-to-end-use-case)で示されているように、すべてのユースケースで有用な基本的なタスクを実行するための汎用クエリを構成します:

<table><thead><tr><th width="234">タスク</th><th>NQL クエリー</th></tr></thead><tbody><tr><td>ユーザーのデバイスの取得</td><td><p>クエリID: #get_device_basic_infos - <code>ユーザー名</code>に基づいて一致する</p><pre><code>過去7日間のデバイス
| セッションイベント
| ユーザー名== $username
| コレクタUID, デバイス名,オペレーティングシステム プラットフォーム, オペレーティングシステム 名,
ハードウェア タイプ, ハードウェア 製造業者, 最後に確認
| 最後に確認でソート desc
</code></pre><p><code>ユーザー名 == $username</code>に対するwhere句を調整して、例えば別のアプローチで使用できます:</p><ul><li>ユーザーのUPNがわかっている場合: <code>| ユーザー UPN == $upn</code> (コレクターレベルでのUPNの有効化が必要)</li><li>ユーザーのメールアドレスがわかっている場合: <code>| ユーザー ad.emailアドレス == $email</code> (Azure ADコネクタがアクティブ化され、メールフィールドが同期されていることが必要)</li><li>デバイス名がわかっている場合: <code>| デバイス名 == $device_name</code></li></ul><p>7日間以外の期間にユーザーがアクティブであったデバイスを考慮したい場合は、時間枠を調整します。</p><p>両方の<code>過去7日間</code>句を、Nexthinkテナントの最大データ保持期間、デフォルトで30日までの希望時間枠に置き換えてください。</p></td></tr><tr><td>修正リモートアクションのステータスと出力の取得</td><td><p>クエリID: #get_remote_action_result</p><pre><code>過去24時間のremote_action.実行
| request_id == $request_id
| request_id, デバイス名, リモートアクション名,
ステータス, ステータス詳細, 出力
</code></pre></td></tr></tbody></table>

***

関連トピック


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.nexthink.com/platform/ja/configuring_nexthink/bringing-data-into-your-nexthink-instance/integrating-nexthink-with-third-party-tools/integrating-self-service-portals/remediating-device-issues-with-self-service-portals.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
