ダイアログの作成と送信

アダプティブ カードまたは埋め込み Web ビューを使用して、モーダル ダイアログ (TeamsJS v1.x ではタスク モジュールと呼ばれます) を作成できます。 ダイアログを作成するには、最初の呼び出し要求と呼ばれるプロセスを実行する必要があります。 このドキュメントでは、1 対 1 のチャット、グループ チャット、チャネル (新しい投稿)、チャネル (スレッドへの返信)、およびコマンド ボックスからダイアログが呼び出されたときの初期呼び出し要求、ペイロード アクティビティのプロパティについて説明します。

注:

アプリ マニフェストで定義されたパラメーターを使用してダイアログを設定しない場合は、アダプティブ カードまたは埋め込み Web ビューのいずれかを使用してユーザー用のダイアログを作成する必要があります。

注:

エージェントは、より柔軟でインテリジェントで将来に備えたエクスペリエンスを提供し、より豊富な推論、より簡単な開発、進化する Teams および Microsoft 365 プラットフォームとのより良い整合性を可能にします。 エージェントを調べて構築することをお勧めします。

詳細については、「 宣言型エージェントのビルド 」および「 Teams でのエージェントのビルド」を参照してください。

既存のボットベースのメッセージ拡張機能がある場合は、 エージェントとしても拡張 できます。

最初の呼び出し要求

最初の呼び出し要求の過程で、サービスは型 composeExtensions/fetchTask の Activity オブジェクトを受信します。アダプティブ カードまたは埋め込み Web ビューへの URL を含む task オブジェクトで応答する必要があります。 最初の呼び出しペイロードには、標準のボット アクティビティ プロパティとともに次の要求メタデータが含まれます。

プロパティ名 用途
type 要求の種類。 invoke である必要があります。
name サービスに対して発行されるコマンドの種類。 composeExtension/fetchTask である必要があります。
from.id 要求を送信したユーザーの ID。
from.name 要求を送信したユーザーの名前。
from.aadObjectId 要求を送信したユーザーの Microsoft Entra オブジェクト ID。
channelData.tenant.id Microsoft Entra テナント ID。
channelData.channel.id チャネル ID (要求がチャネルで行われた場合)。
channelData.team.id チーム ID (要求がチャネルで行われた場合)。
value.commandId 呼び出されたコマンドの ID が含まれます。
value.commandContext イベントをトリガーしたコンテキスト。 compose である必要があります。
value.context.theme ユーザーのクライアント テーマ。これは、埋め込み Web ビューの書式設定に役立ちます。 default、contrast、または dark である必要があります。

例

最初の呼び出し要求のコードは、次の例で示されています。

{
  "type": "invoke",
  "id": "f:bc319b1d-571a-194d-9ffb-11d7ab37c9ff",
  "from": {
    "id": "29:1aBjVi5MwCFfhPIV03E5uDdfpBFXp_2Yz-sjrvVg12oavg96cqpE_DiMhOpmN9zHeZpYbJcuUEKuSDy2AYWPz1A",
    "name": "Olo Brockhouse",
    "aadObjectId": "b130c271-d2eb-45f9-83ab-9eb3fe3788bc"
  }
  "channelData": {
    "tenant": {
      "id": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
    },
    "source": {
      "name": "compose"
    }
  },
  "value": {
    "commandId": "Test",
    "commandContext": "compose",
    "requestId": "fe50f49e5c74440bb2ebf07f49e9553c",
    "context": {
      "theme": "default"
    }
  },
  "name": "composeExtension/fetchTask"

1 対 1 のチャットからダイアログが呼び出されたときのペイロード アクティビティ プロパティ

1 対 1 のチャットからダイアログが呼び出されたときのペイロード アクティビティのプロパティは、以下のとおりです。

プロパティ名 用途
type 要求の種類。 invoke である必要があります。
name サービスに対して発行されるコマンドの種類。 composeExtension/fetchTask である必要があります。
from.id 要求を送信したユーザーの ID。
from.name 要求を送信したユーザーの名前。
from.aadObjectId 要求を送信したユーザーの Microsoft Entra オブジェクト ID。
channelData.tenant.id Microsoft Entra テナント ID。
channelData.source.name ダイアログが呼び出されるソース名。
ChannelData.legacy. replyToId このメッセージが返信となるメッセージの ID を取得または設定します。
value.commandId 呼び出されたコマンドの ID が含まれます。
value.commandContext イベントをトリガーしたコンテキスト。 compose である必要があります。
value.context.theme ユーザーのクライアント テーマ。これは、埋め込み Web ビューの書式設定に役立ちます。 default、contrast、または dark である必要があります。

例

ダイアログが 1 対 1 のチャットから呼び出されたときのペイロード アクティビティのプロパティを次の例に示します:

{
  "type": "invoke",
  "id": "f:bc319b1d-571a-194d-9ffb-11d7ab37c9ff",
  "from": {
    "id": "29:1aBjVi5MwCFfhPIV03E5uDdfpBFXp_2Yz-sjrvVg12oavg96cqpE_DiMhOpmN9zHeZpYbJcuUEKuSDy2AYWPz1A",
    "name": "Olo Brockhouse",
    "aadObjectId": "b130c271-d2eb-45f9-83ab-9eb3fe3788bc"
  }
  "channelData": {
    "tenant": {
      "id": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
    },
    "source": {
      "name": "compose"
    }
  },
  "value": {
    "commandId": "Test",
    "commandContext": "compose",
    "requestId": "fe50f49e5c74440bb2ebf07f49e9553c",
    "context": {
      "theme": "default"
    }
  },
  "name": "composeExtension/fetchTask"
}

グループ チャットからダイアログが呼び出されたときのペイロード アクティビティ プロパティ

グループ チャットからダイアログが呼び出されたときのペイロード アクティビティのプロパティは、以下のとおりです。

プロパティ名 用途
type 要求の種類。 invoke である必要があります。
name サービスに対して発行されるコマンドの種類。 composeExtension/fetchTask である必要があります。
from.id 要求を送信したユーザーの ID。
from.name 要求を送信したユーザーの名前。
from.aadObjectId 要求を送信したユーザーの Microsoft Entra オブジェクト ID。
channelData.tenant.id Microsoft Entra テナント ID。
channelData.source.name ダイアログが呼び出されるソース名。
ChannelData.legacy. replyToId このメッセージが返信となるメッセージの ID を取得または設定します。
value.commandId 呼び出されたコマンドの ID が含まれます。
value.commandContext イベントをトリガーしたコンテキスト。 compose である必要があります。
value.context.theme ユーザーのクライアント テーマ。これは、埋め込み Web ビューの書式設定に役立ちます。 default、contrast、または dark である必要があります。

例

グループ チャットからダイアログが呼び出されたときのペイロード アクティビティのプロパティを次の例に示します。

{
  "type": "invoke",
  "id": "f:bf72031f-a17e-f99c-48dc-5c0714950d87",
  "from": {
    "id": "29:1aBjVi5MwCFfhPIV03E5uDdfpBFXp_2Yz-sjrvVg12oavg96cqpE_DiMhOpmN9zHeZpYbJcuUEKuSDy2AYWPz1A",
    "name": "Olo Brockhouse",
    "aadObjectId": "b130c271-d2eb-45f9-83ab-9eb3fe3788bc"
  },
  "conversation": {
    "isGroup": true,
    "conversationType": "groupChat",
    "id": "19:d77be72390a1416e9644261e9064fa00@thread.skype",
    "tenantId": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
  },
  "channelData": {
    "tenant": {
      "id": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
    },
    "source": {
      "name": "compose"
    }
  },
  "value": {
    "commandId": "Test",
    "commandContext": "compose",
    "requestId": "213167a1e3b6428b93e186ea5407c759",
    "context": {
      "theme": "default"
    }
  },
  "name": "composeExtension/fetchTask"
}

会議チャットからダイアログが呼び出されたときのアクティビティ プロパティをペイロードする

会議チャットからダイアログが呼び出されたときのペイロード アクティビティ プロパティを次の例に示します。

{
   "type": "invoke",
   "id": "f:4d271f11-4eed-622f-e820-6d82bf91692f",
   "channelId": "msteams",
   "from": {
      "id": "29:1yLsdbTM1UjxqqD8cjduNUCI1jm8xZaH3lx9u5JQ04t2bknuTCkP45TXdfROTOWk1LzN1AqTgFZUEqHIVGn_qUA",
      "name": "MOD Administrator",
      "aadObjectId": "ef16aa89-5b26-4a2c-aebb-761b551577c0"
   },
   "conversation": {
      "tenantId": "c9f9aafd-64ac-4f38-8e05-12feba3fb090",
      "id": "19:meeting_NTk4ZDY4ZmYtOWEzZS00OTRkLThhY2EtZmUzZmUzMDQyM2M0@thread.v2",
      "name": "Test meeting"
   },   
   "channelData": {
      "tenant": {
         "id": "c9f9aafd-64ac-4f38-8e05-12feba3fb090"
      },
      "source": {
         "name": "compose"
      },
      "meeting": {
         "id": "MCMxOTptZWV0aW5nX05UazRaRFk0Wm1ZdE9XRXpaUzAwT1RSa0xUaGhZMkV0Wm1VelptVXpNRFF5TTJNMEB0aHJlYWQudjIjMA=="
      }
   },
   "value": {
      "commandId": "Test",
      "commandContext": "compose",
      "requestId": "c46a6b53573f42b5bc801716e5ccc960",
      "context": {
         "theme": "default"
      }
   },
   "name": "composeExtension/fetchTask",
}

ダイアログがチャネルから呼び出されたときのペイロード アクティビティ プロパティ (新しい投稿)

ダイアログがチャネル (新しい投稿) から呼び出されたときのペイロード アクティビティ プロパティは、以下のとおりです。

プロパティ名 用途
type 要求の種類。 invoke である必要があります。
name サービスに対して発行されるコマンドの種類。 composeExtension/fetchTask である必要があります。
from.id 要求を送信したユーザーの ID。
from.name 要求を送信したユーザーの名前。
from.aadObjectId 要求を送信したユーザーの Microsoft Entra オブジェクト ID。
channelData.tenant.id Microsoft Entra テナント ID。
channelData.channel.id チャネル ID (要求がチャネルで行われた場合)。
channelData.team.id チーム ID (要求がチャネルで行われた場合)。
channelData.source.name ダイアログが呼び出されるソース名。
ChannelData.legacy. replyToId このメッセージが返信となるメッセージの ID を取得または設定します。
value.commandId 呼び出されたコマンドの ID が含まれます。
value.commandContext イベントをトリガーしたコンテキスト。 compose である必要があります。
value.context.theme ユーザーのクライアント テーマ。これは、埋め込み Web ビューの書式設定に役立ちます。 default、contrast、または dark である必要があります。

例

ダイアログがチャネル (新しい投稿) から呼び出されたときのペイロード アクティビティ プロパティを次の例に示します。

{
  "type": "invoke",
  "id": "f:a5fbb109-c989-c449-ee83-71ac99919d4b",
  "from": {
    "id": "29:1aBjVi5MwCFfhPIV03E5uDdfpBFXp_2Yz-sjrvVg12oavg96cqpE_DiMhOpmN9zHeZpYbJcuUEKuSDy2AYWPz1A",
    "name": "Olo Brockhouse",
    "aadObjectId": "b130c271-d2eb-45f9-83ab-9eb3fe3788bc"
  },
  "conversation": {
    "isGroup": true,
    "conversationType": "channel",
    "id": "19:6decf54d86d945e4b3924b63a9161a78@thread.skype",
    "name": "parsable",
    "tenantId": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
  },
  "channelData": {
    "channel": {
      "id": "19:6decf54d86d945e4b3924b63a9161a78@thread.skype"
    },
    "team": {
      "id": "19:acca514e83cb497e960e0b014d405336@thread.skype"
    },
    "tenant": {
      "id": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
    },
    "source": {
      "name": "compose"
    }
  },
  "value": {
    "commandId": "Test",
    "commandContext": "compose",
    "requestId": "5336640edc7748b28ce2df43f5b45963",
    "context": {
      "theme": "default"
    }
  },
  "name": "composeExtension/fetchTask"
}

ダイアログがチャネルから呼び出されたときのペイロード アクティビティ プロパティ (スレッドへの返信)

ダイアログがチャネルから呼び出されたとき (スレッドへの返信) ペイロード アクティビティ プロパティは、以下のとおりです。

プロパティ名 用途
type 要求の種類。 invoke である必要があります。
name サービスに対して発行されるコマンドの種類。 composeExtension/fetchTask である必要があります。
from.id 要求を送信したユーザーの ID。
from.name 要求を送信したユーザーの名前。
from.aadObjectId 要求を送信したユーザーの Microsoft Entra オブジェクト ID。
channelData.tenant.id Microsoft Entra テナント ID。
channelData.channel.id チャネル ID (要求がチャネルで行われた場合)。
channelData.team.id チーム ID (要求がチャネルで行われた場合)。
channelData.source.name ダイアログが呼び出されるソース名。
ChannelData.legacy. replyToId このメッセージが返信となるメッセージの ID を取得または設定します。
value.commandId 呼び出されたコマンドの ID が含まれます。
value.commandContext イベントをトリガーしたコンテキスト。 compose である必要があります。
value.context.theme ユーザーのクライアント テーマ。これは、埋め込み Web ビューの書式設定に役立ちます。 default、contrast、または dark である必要があります。

例

ダイアログがチャネルから呼び出されたときのペイロード アクティビティ プロパティ (スレッドへの返信) を次の例に示します。

{
  "type": "invoke",
  "id": "f:19ccc884-c792-35ef-2f40-d0ff43dcca71",
  "from": {
    "id": "29:1aBjVi5MwCFfhPIV03E5uDdfpBFXp_2Yz-sjrvVg12oavg96cqpE_DiMhOpmN9zHeZpYbJcuUEKuSDy2AYWPz1A",
    "name": "Olo Brockhouse",
    "aadObjectId": "b130c271-d2eb-45f9-83ab-9eb3fe3788bc"
  },
  "conversation": {
    "isGroup": true,
    "conversationType": "channel",
    "id": "19:6decf54d86d945e4b3924b63a9161a78@thread.skype;messageid=1611060744833",
    "name": "parsable",
    "tenantId": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
  },
  "channelData": {
    "channel": {
      "id": "19:6decf54d86d945e4b3924b63a9161a78@thread.skype"
    },
    "team": {
      "id": "19:acca514e83cb497e960e0b014d405336@thread.skype"
    },
    "tenant": {
      "id": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
    },
    "source": {
      "name": "compose"
    }
  },
  "value": {
    "commandId": "TEst",
    "commandContext": "message",
    "requestId": "7f7d22efe5414818becebcec649a7912",
    "messagePayload": {
      "linkToMessage": "https://teams.microsoft.com/l/message/19:6decf54d86d945e4b3924b63a9161a78@thread.skype/1611060744833",
      "id": "1611060744833",
      "replyToId": null,
      "createdDateTime": "2021-01-19T12:52:24.833Z",
      "lastModifiedDateTime": null,
      "deleted": false,
      "summary": null,
      "importance": "normal",
      "locale": "en-us",
      "body": {
        "contentType": "html",
        "content": "<div><div><at id=\"0\">Testing outgoing Webhook-Nikitha</at> - Hi</div>\n</div>"
      },
      "from": {
        "device": null,
        "conversation": null,
        "user": {
          "userIdentityType": "aadUser",
          "id": "b130c271-d2eb-45f9-83ab-9eb3fe3788bc",
          "displayName": "Olo Brockhouse"
        },
        "application": null
      },
      "reactions": [],
      "mentions": [
        {
          "id": 0,
          "mentionText": "Testing outgoing Webhook-Nikitha",
          "mentioned": {
            "device": null,
            "conversation": null,
            "user": null,
            "application": {
              "applicationIdentityType": "webhook",
              "id": "b8c1c68c-e290-4bdd-81c3-266f310751dc",
              "displayName": "Testing outgoing Webhook-Nikitha"
            }
          }
        }
      ],
      "attachments": []
    },
    "context": {
      "theme": "default"
    }
  },
  "name": "composeExtension/fetchTask"
}

コマンド ボックスからダイアログを呼び出したときのペイロード アクティビティのプロパティ

コマンド ボックスからダイアログが呼び出されたときのペイロード アクティビティのプロパティは、以下のとおりです。

プロパティ名 用途
type 要求の種類。 invoke である必要があります。
name サービスに対して発行されるコマンドの種類。 composeExtension/fetchTask である必要があります。
from.id 要求を送信したユーザーの ID。
from.name 要求を送信したユーザーの名前。
from.aadObjectId 要求を送信したユーザーの Microsoft Entra オブジェクト ID。
channelData.tenant.id Microsoft Entra テナント ID。
channelData.source.name ダイアログが呼び出されるソース名。
value.commandId 呼び出されたコマンドの ID が含まれます。
value.commandContext イベントをトリガーしたコンテキスト。 compose である必要があります。
value.context.theme ユーザーのクライアント テーマ。これは、埋め込み Web ビューの書式設定に役立ちます。 default、contrast、または dark である必要があります。

例

ダイアログがコマンド ボックスから呼び出されたときのペイロード アクティビティのプロパティを次の例に示します。

{
  "type": "invoke",
  "id": "f:172560f1-95f9-3189-edb2-b7612cd1a3cd",
    "id": "29:1aBjVi5MwCFfhPIV03E5uDdfpBFXp_2Yz-sjrvVg12oavg96cqpE_DiMhOpmN9zHeZpYbJcuUEKuSDy2AYWPz1A",
    "name": "Olo Brockhouse",
    "aadObjectId": "b130c271-d2eb-45f9-83ab-9eb3fe3788bc"
  },
  "conversation": {
    "isGroup": true,
    "conversationType": "channel",
    "id": "19:6decf54d86d945e4b3924b63a9161a78@thread.skype",
    "name": "parsable",
    "tenantId": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
  },
  "channelData": {
    "channel": {
      "id": "19:6decf54d86d945e4b3924b63a9161a78@thread.skype"
    },
    "team": {
      "id": "19:acca514e83cb497e960e0b014d405336@thread.skype"
    },
    "tenant": {
      "id": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
    },
    "source": {
      "name": "compose"
    }
  },
  "value": {
    "commandId": "TEst",
    "commandContext": "compose",
    "requestId": "d2ce690cdc2b4920a538e75882610a30",
    "context": {
      "theme": "default"
    }
  },
  "name": "composeExtension/fetchTask"
}

例

次のコード セクションは、fetchTask 要求の例です。

using Microsoft.Teams.Apps.MessageExtensions;

// ...

teams.OnFetchTask(async (context, cancellationToken) =>
{
    // Handle fetch task
  MessageExtensionAction? action = context.Activity.Value;
  string? commandId = action?.CommandId;

  return MessageExtensionActionResponse.CreateBuilder().Build();
});

メッセージからの最初の呼び出し要求

ボットがメッセージから呼び出される場合、最初の呼び出し要求の value オブジェクトには、メッセージ拡張機能が呼び出されるメッセージの詳細が含まれている必要があります。 reactions 配列と mentions 配列は省略可能であり、元のメッセージにリアクションやメンションがない場合は存在しません。 次のセクションは、value オブジェクトの例です。

using Microsoft.Teams.Apps.MessageExtensions;

// ...

teams.OnFetchTask(async (context, cancellationToken) =>
{
  MessageExtensionAction? action = context.Activity.Value;

  var messageText = action?.MessagePayload?.Body?.Content;
  var fromId = action?.MessagePayload?.From?.User?.Id;

  return MessageExtensionActionResponse.CreateBuilder().Build();
});

fetchTask に応答する

アダプティブ カードまたは Web URL を持つ taskInfo オブジェクトか、単純な文字列メッセージを含む task オブジェクトを使用して、呼び出し要求に応答します。

プロパティ名 用途
type フォームを表示する continue 、または単純なポップアップの message にすることができます。
value フォームの taskInfo オブジェクト、またはメッセージの string オブジェクトのいずれかです。

taskInfo オブジェクトのスキーマは次のとおりです。

プロパティ名 用途
title ダイアログのタイトル。
height 整数 (ピクセル単位) か、small、medium、large のいずれかである必要があります。
width 整数 (ピクセル単位) か、small、medium、large のいずれかである必要があります。
card フォームを定義するアダプティブ カード (使用している場合)。
url 埋め込み Web ビューとしてダイアログ内で開く URL。
fallbackUrl クライアントがダイアログ機能をサポートしていない場合、この URL はブラウザー タブで開かれます。

アダプティブ カードを使用して fetchTask に応答する

アダプティブ カードを使用する場合は、アダプティブ カードを含む value オブジェクトを使用してtaskオブジェクトで応答する必要があります。

例

次のコード セクションは、アダプティブ カードを使用して応答 fetchTask 例です。

このサンプルでは、Teams SDK に含まれている Microsoft.Teams.Cards パッケージを使用します。

using System.Text.Json;
using Microsoft.Teams.Apps.MessageExtensions;
using Microsoft.Teams.Apps.Schema;
using Microsoft.Teams.Apps.TaskModules;
using Microsoft.Teams.Cards;

// ...

teams.OnFetchTask(async (context, cancellationToken) =>
{
    string placeholder = "Not invoked from message";

  MessageExtensionAction? action = context.Activity.Value;

  if (action?.MessagePayload != null)
    {
    var messageText = action.MessagePayload.Body?.Content;
    var fromId = action.MessagePayload.From?.User?.Id;
        placeholder = "Invoked from message";
    }

    var card = new AdaptiveCard
    {
        Version = "1.5",
        Body = new List<CardElement>
        {
            new TextInput { Id = "FormField1", Placeholder = placeholder },
            new TextInput { Id = "FormField2", Placeholder = "FormField2" },
            new TextInput { Id = "FormField3", Placeholder = "FormField3" }
        },
        Actions = new List<Cards.Action>
        {
            new SubmitAction { Title = "Submit" }
        }
    };

    TeamsAttachment attachment = TeamsAttachment.CreateBuilder()
      .WithAdaptiveCard(JsonSerializer.SerializeToElement(card))
      .Build();

    return MessageExtensionActionResponse.CreateBuilder()
      .WithTask(TaskModuleResponse.CreateBuilder()
        .WithType(TaskModuleResponseTypes.Continue)
        .WithTitle("Example dialog")
        .WithHeight(TaskModuleSizes.Small)
        .WithWidth(TaskModuleSizes.Small)
        .WithCard(attachment))
      .Build();
});

埋め込み Web ビューでダイアログを作成する

埋め込み Web ビューを使用する場合、読み込む Web フォームへの URL を含む value オブジェクトを含む task オブジェクトで応答する必要があります。 読み込む URL のドメインは、アプリのマニフェストの validDomains 配列に含める必要があります。 埋め込み Web ビューの作成の詳細については、 ダイアログのドキュメントを参照してください。

using Microsoft.Teams.Apps.MessageExtensions;
using Microsoft.Teams.Apps.TaskModules;

// ...

teams.OnFetchTask(async (context, cancellationToken) =>
{
    await Task.CompletedTask;

    return MessageExtensionActionResponse.CreateBuilder()
        .WithTask(TaskModuleResponse.CreateBuilder()
            .WithType(TaskModuleResponseTypes.Continue)
            .WithTitle("Example dialog")
            .WithHeight(TaskModuleSizes.Small)
            .WithWidth(TaskModuleSizes.Small)
            .WithUrl("https://contoso.com/msteams/taskmodules/newcustomer"))
        .Build();
});

会話型ボットのインストールを要求する

アプリに会話型ボットが含まれている場合は、会話にボットをインストールしてからダイアログを読み込みます。 ボットは、ダイアログの追加コンテキストを取得するのに役立ちます。 このシナリオの例として、参加者一覧をフェッチして、ユーザー ピッカー コントロールまたはチーム内のチャネルの一覧を設定することが挙げられます。

メッセージ拡張機能が composeExtensions/fetchTask 呼び出しを受信したら、フローを容易にするために、ボットが現在のコンテキストにインストールされているかどうかを確認します。 たとえば、参加者一覧の取得呼び出しでフローを確認します。 ボットがインストールされていない場合、ユーザーにボットのインストールを要求するアクションを含むアダプティブ カードを返します。 ユーザーには、確認のためにその場所にアプリをインストールするアクセス許可が必要です。 アプリのインストールに失敗した場合、ユーザーは管理者に問い合わせるメッセージを受信します。

例

次のコード セクションは、応答の例です。

{
  "type": "AdaptiveCard",
  "body": [
    {
      "type": "TextBlock",
      "text": "Looks like you haven't used Disco in this team/chat"
    }
  ],
  "actions": [
    {
      "type": "Action.Submit",
      "title": "Continue",
      "data": {
        "msteams": {
          "justInTimeInstall": true
        }
      }
    }
  ],
  "version": "1.0"
}

会話型ボットのインストール後、name = composeExtensions/submitAction と value.data.msteams.justInTimeInstall = true を含む別の呼び出しメッセージを受信します。

例

次のコード セクションは、呼び出しに対するタスク応答の例です。

{
  "value": {
    "commandId": "giveKudos",
    "commandContext": "compose",
    "context": {
      "theme": "default"
    },
    "data": {
      "msteams": {
        "justInTimeInstall": true
      }
    }
  },
  "conversation": {
    "id": "19:7705841b240044b297123ad7f9c99217@thread.skype"
  },
  "name": "composeExtension/submitAction",
  "imdisplayname": "Bob Smith"
}

呼び出しに対するタスク応答は、インストールされているボットの応答と同じである必要があります。

例

次のコード セクションは、アダプティブ カードを使用したアプリの Just-In Time インストールの例です。

using Microsoft.Teams.Cards;

// ...

var installCard = new AdaptiveCard
{
    Body = new List<CardElement>
    {
        new TextBlock("Looks like you haven't used Disco in this team/chat")
    },
    Actions = new List<Cards.Action>
    {
        new SubmitAction
        {
            Title = "Continue",
            Data = new Dictionary<string, object>
            {
                ["msteams"] = new Dictionary<string, object>
                {
                    ["justInTimeInstall"] = true
                }
            }
        }
    }
};

コード サンプル

サンプルの名前 説明 .NET Node.js Python マニフェスト
Teams メッセージ拡張機能アクション このサンプルでは、ユーザーが対話的にコンテンツを生成できるように、Microsoft Teams 用の Action-Based メッセージング拡張機能を作成する方法を示します。 ボット、メッセージ拡張機能、ユーザー入力とのシームレスな統合により機能が強化されます。 表示 表示 表示 表示
メッセージ拡張機能アクションのプレビュー このサンプル アプリは、Teams メッセージング拡張機能でアクション プレビューを使用して、ユーザーがタスク モジュールの入力からカードを作成できるようにする方法を示しています。 ユーザーにメッセージを割り当てることでユーザー エンゲージメントを強化するボットとの対話を紹介します。 表示 表示 該当なし 表示
Teams メッセージ拡張機能検索 このサンプルでは、ユーザーが検索を実行して結果を取得できるメッセージング拡張機能を Microsoft Teams で作成する方法を示します。 表示 表示 表示 該当なし

次の手順

関連項目