ダイアログの作成と送信

重要

このセクションのコード サンプルは、v4.6 以降のバージョンの Bot Framework SDK に基づいています。 以前のバージョンのドキュメントをお探しの場合は、ドキュメントの Resources フォルダーにある メッセージ拡張機能 - v3 SDK セクションを参照してください。

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

注:

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

最初の呼び出し要求

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

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

protected override async Task<MessagingExtensionActionResponse> OnTeamsMessagingExtensionFetchTaskAsync(ITurnContext<IInvokeActivity> turnContext, MessagingExtensionAction action, CancellationToken cancellationToken)
{
  //handle fetch task
}

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

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

protected override async Task<MessagingExtensionActionResponse> OnTeamsMessagingExtensionFetchTaskAsync(ITurnContext<IInvokeActivity> turnContext, MessagingExtensionAction action, CancellationToken cancellationToken)
{
  var messageText = action.MessagePayload.Body.Content;
  var fromId = action.MessagePayload.From.User.Id;

  //finish handling the fetchTask
}

fetchTask に応答する

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

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

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

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

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

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

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

このサンプルでは、Bot Framework SDK に加えて AdaptiveCards NuGet パッケージを使用します。

protected override async Task<MessagingExtensionActionResponse> OnTeamsMessagingExtensionFetchTaskAsync(ITurnContext<IInvokeActivity> turnContext, MessagingExtensionAction action, CancellationToken cancellationToken)
{
  string placeholder = "Not invoked from message";

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

  var response = new MessagingExtensionActionResponse()
  {
    Task = new TaskModuleContinueResponse()
    {
      Value = new TaskModuleTaskInfo()
      {
        Height = "small",
        Width = "small",
        Title = "Example dialog",
        Card = new Attachment()
        {
          ContentType = AdaptiveCard.ContentType,
          Content = new AdaptiveCard("1.0")
          {
            Body = new List<AdaptiveElement>()
            {
              new AdaptiveTextInput() { Id = "FormField1", Placeholder = placeholder},
              new AdaptiveTextInput() { Id = "FormField2", Placeholder = "FormField2"},
              new AdaptiveTextInput() { Id = "FormField3", Placeholder = "FormField3"},
            },
            Actions = new List<AdaptiveAction>()
            {
              new AdaptiveSubmitAction()
              {
                Type = AdaptiveSubmitAction.TypeName,
                Title = "Submit",
              },
            },
          },
        },
      },
    },
  };
  return response;
}

埋め込み Web ビューを使用してダイアログを作成する

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

protected override async Task<MessagingExtensionActionResponse> OnTeamsMessagingExtensionFetchTaskAsync(ITurnContext<IInvokeActivity> turnContext, MessagingExtensionAction action, CancellationToken cancellationToken)
{
  string placeholder = "Not invoked from message";

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

  var response = new MessagingExtensionActionResponse()
  {
    Task = new TaskModuleContinueResponse()
    {
      Value = new TaskModuleTaskInfo()
      {
        Height = "small",
        Width = "small",
        Title = "Example dialog",
        Url = "https://contoso.com/msteams/taskmodules/newcustomer",
        },
      },
    },
  };
  return response;
}

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

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

メッセージ拡張機能が 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/submitActionvalue.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"
}

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

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

private static Attachment GetAdaptiveCardAttachmentFromFile(string fileName)
  {
      //Read the card json and create attachment.
         string[] paths = { ".", "Resources", fileName };
         var adaptiveCardJson = File.ReadAllText(Path.Combine(paths));
         var adaptiveCardAttachment = new Attachment()
            {
                ContentType = "application/vnd.microsoft.card.adaptive",
                Content = JsonConvert.DeserializeObject(adaptiveCardJson),
            };
            return adaptiveCardAttachment;
        }

コード サンプル

サンプルの名前 説明 .NET Node.js Python マニフェスト
Teams メッセージ拡張機能アクション このサンプルでは、アクション コマンドを定義し、ダイアログを作成し、ダイアログ送信アクションに応答する方法を示します。 表示 表示 表示 表示
メッセージ拡張機能アクション プレビュー このサンプルでは、Bot Framework v4 を使用してメッセージング拡張機能でアクション プレビューを使用する方法を示します。 表示 表示 該当なし 表示
Teams メッセージ拡張機能検索 このサンプルでは、Search ベースのメッセージ拡張機能を構築する方法を示します。 これは、ナッゲット パッケージを検索し、検索ベースのメッセージング拡張機能で結果を表示します。 表示 表示 表示 表示

次の手順

関連項目