Microsoft Teams
Microsoft Teamsチャネルを設定すると、ユーザーはMicrosoft Teamsのユーザー・インタフェースを使用してデジタル・アシスタント(またはスタンドアロン・スキル)とチャットできます。
チャネルを設定するプロセスを次に示します:
- Microsoft Teamsの開発者ポータルで、アプリケーションを作成し、ボットをそのアプリケーションに追加します。
- ボットのアプリケーションIDとパスワードを使用して、デジタル・アシスタントでチャネルを作成します。
- チャネルを作成するときに生成されたWebフックURLをコピーして、ボットに追加します。
- Microsoft Teamsでデジタル・アシスタントをテストします。
ステップ1: ボットの作成
デジタル・アシスタント(またはスタンドアロン・スキル)をMicrosoft Teamsで使用するには、チーム開発者ポータルを使用して次のものを作成する必要があります:
- Microsoft Teamsアプリケーション。このアプリケーションは、作成するボットのコンテナであり、Teamsでボットにアクセスする方法です。
- ボット。これは、Oracle Digital Assistantと通信するアプリケーション内のアーティファクトです
Teams開発者ポータルは、GCC-Highテナントや国防総省(DoD)テナントなど、一部の種類のMicrosoftテナントでは使用できません。このようなテナントで作業している場合は、通常のテナントを使用してアプリケーションを構築し、アプリケーションをダウンロードしてから、Microsoft Graphを使用してアプリケーションを国別クラウドにアップロードできます。詳細は、MicrosoftのサイトのDeveloper Portal for TeamsおよびNational Cloud Deploymentsを参照してください。
ステップを次に示します:
- https://dev.teams.microsoft.com/homeに移動して、Microsoftアカウントでログインします。
- 左側のナビゲーションで、「アプリケーション」をクリックします。
- +「新規アプリケーション」をクリックします
- 「アプリケーションの追加」ダイアログで、Microsoft Teamsに表示されるアプリケーションに使用する名前を入力し、「追加」をクリックします。
(このアプリケーションはボットをカプセル化しますが、それは後で作成します。)
- 「基本情報」ページで、アプリケーション(クライアント) ID以外の残りの必須フィールドに入力し、「保存」をクリックします。
- ページの左側のナビゲーションで、「構成」セクションで「アプリケーション機能」を選択します。
- 「ボット」をクリックします。
- 「Create a new bot」リンクをクリックします。
- 「Bot Management」ページで、「+ New Bot」をクリックします。
- 「ボットの追加」ダイアログで、ボットの名前を入力します。
- ページの「チャネル」セクションで、「Microsoft Teams」チェック・ボックスを選択し、「保存」をクリックします。
- 「クライアント・シークレット」セクションで、「ボットのクライアント・シークレットの追加」を選択します。
- 生成されたクライアント・シークレットの値をコピーして、システム上の安全な場所に保存します。
- ページの「クライアント・シークレット」セクションで、「Azure」リンクを右クリックして、Azure Active Directoryの「アプリケーション登録」ページを別のブラウザ・タブで開きます。
- 「アプリケーション登録」ページで、作成したボット・リソースを選択します。
- 左レールで、「Authentication」を選択します。
- ページの「サポートされているアカウント・タイプ」セクションで、マルチテナント・オプション(任意の組織ディレクトリ内のアカウント(任意のMicrosoft Entra IDテナント- マルチテナント))を選択します。
- 外部イベントを使用してMicrosoft Teamsチャネルを介してユーザーにメッセージを送信できるようにする場合は、Microsoft Graph APIを介してユーザー・プロファイルをフェッチする権限を追加します。(外部イベント機能は、過去の会話からキャッシュされたユーザー・データを使用して通知を生成するか、ユーザーとの対話をプロアクティブに開始します。)これらの権限を追加するステップは、次のとおりです。
- ボットの「アプリケーション登録」ページの左側のナビゲーションで、「API Permissions」を選択します。
- 「アクセス権の追加」をクリックします。
- 「API権限のリクエスト」ダイアログで、「Microsoft Graph」を選択します。
- 「Application permissions」を選択します。
- Directory.Read.All権限を選択し、「権限の追加」をクリックします。
- 「構成済権限」リストに権限が表示されたら、権限を選択し、「管理者承諾の付与」をクリックしてから、「管理者同意確認の付与」ダイアログで「はい」をクリックします。
-
ブラウザでDeveloper Portalを開いているタブに戻ります。
-
左側のナビゲーションで、「アプリケーション」をクリックし、アプリケーションを選択します。
-
アプリケーションの左側のナビゲーションで、「アプリケーション機能」を選択します。
-
「ボット」タイルをクリックします。
-
「既存のボットの選択」の下のドロップダウンで、作成したボットを選択します。
-
再度、アプリケーションの左側のナビゲーションで、「アプリケーション機能」を選択します。
-
「ボット」タイトルで、ボットIDをコピーしてテキスト・ファイルに保存します。
ノート
ボットIDを手動でトランスクリプトする必要がある場合があります。このIDは、デジタル・アシスタントでチャネルを作成するときに必要になります。
- ページの「スコープ」セクションで、「個人」を選択します。
(他のスコープを選択することもできますが、ボットが応答するには「個人」が必要です。)
-
「Save」をクリックします。
-
オプションで、ページの左側のナビゲーションの「構成」セクションで、「ドメイン」を選択し、ボット・ユーザーのアクセス元となるドメインを追加します。
-
ブラウザで開発者ポータルを開いたままにします。
後で、デジタル・アシスタントでチャネルを作成するときに取得するWebフックURLを使用して登録を完了します。
ステップ2: デジタル・アシスタントでのチャネルの作成
-
別のブラウザ・ウィンドウまたはタブで、デジタル・アシスタントを開き、左側のメニューの「チャネル」をクリックして、「ユーザー」を選択します。
-
「+チャネル」をクリックして「チャネルの作成」ダイアログを開きます。
-
チャネルの名前を指定します。
-
チャネル・タイプとして「Microsoft Teams」を選択します。
-
「MicrosoftボットID」に、作成したMicrosoftボットのIDを入力します。
-
「Microsoftボット・パスワード(クライアント・シークレット値)」に、ボットに対して生成されたパスワードまたはクライアント・シークレットの「値」(クライアント・シークレットIDと混同しないように)を入力します。
-
「作成」をクリックします。
-
「チャネル」ページで、WebフックURLをコピーして、システム上の便利な場所に貼り付けます。
-
をクリックし、チャネルに関連付けるデジタル・アシスタントまたはスキルを選択します。
-
「チャネル有効」コントロールをオンに切り替えます。
ステップ3: Microsoft TeamsのWebフックURLの構成
ここで、Microsoft Teamsに戻って構成を完了する必要があります。
-
Teams開発者ポータルが開いているブラウザ・タブに戻ります。
-
ページの左端のナビゲーションで、「ツール」アイコンを選択し、「Bot Management」をクリックします。
-
作成したボットを選択します。
- ボットのページで、「構成」タブを選択します。
-
「ボット・エンドポイント・アドレス」フィールドに、デジタル・アシスタントでチャネルを作成したときに取得したWebフックURLを貼り付け、「保存」をクリックします。
ステップ4: Office 365テナントでのアプリケーションの有効化
次に、Office 365管理者に依頼してテナントを次のように構成する必要があります:
- Microsoft Teamsで外部アプリケーションを許可します。
- 外部アプリケーションのサイドローディングを許可します。
- 新しい外部アプリケーションをデフォルトで有効にします。
具体的なステップは、https://docs.microsoft.com/en-us/microsoftteams/platform/concepts/build-and-test/prepare-your-o365-tenantを参照してください。
ステップ5: Microsoft Teamsでのテスト
Microsoft Teamsチャネルとメッセージングの構成が完了したら、Microsoft Teamsでデジタル・アシスタント(またはスキル)をテストできます。手順は次のとおりです:
- Microsoft Developer Portalで作成したアプリケーションのページで、「チームでのプレビュー」ボタンをクリックします。
Microsoft TeamsチャネルのSSO構成
Microsoft Teamsに対して構成した認証と同じ認証がデジタル・アシスタントまたはスキルで必要な場合には、Microsoft Teams内でそのデジタル・アシスタントまたはスキルに対してシングル・サインオン(SSO)認証を設定できます。
このSSO認証が設定されると、ユーザーはAzure Active Directory (Azure AD)資格証明を使用してTeamsにログインし、再度サインインすることなく、デジタル・アシスタントとシームレスに対話できるようになります。
デジタル・アシスタントを介してアクセスされるバックエンド・アプリケーションは、Azure ADアクセス・トークンを直接サポートする必要があります。Teamsを使用するFusionベースのクラウド・アプリケーション(FA)のお客様は、Azure ADとFAの間でSSOが有効になっている場合もあります。ただし、Teamsから生成されたセキュリティ・アクセス・トークンは現在FAとの通信に直接使用できないため、TeamsセッションからFAとのシームレスな会話はできません。この相違に対処するために、トークン交換用のカスタム・ソリューションを実装できます。詳細は、このブログ投稿を参照してください。
Microsoft TeamsチャネルのSSOを構成する一般的なステップは、次のとおりです:
- (まだ作成していない場合)前のトピックの説明に従って、Microsoft Teamsチャネルを作成します。
- Azure PortalでAzure ADアプリケーションを作成します。
- SSOの詳細でMicrosoftボット登録を更新します。
- Oracle Digital Assistantで、Azure ADアプリケーションをMicrosoft Identity Platform認証サービスとして登録します。
- 登録した認証サービスを介してスキルでの認証を有効にします。
Azure ADアプリケーションの作成
Microsoft Teams内でスキルまたはデジタル・アシスタントのSSOを設定するには、Azure ADアプリケーションを作成する必要があります。このアプリケーションは、Microsoft Teamsチャネルの設定の一部としてすでに作成したAzure ADアプリケーションに加えてあります。
開始する前に、次のものがあることを確認してください:
- アクティブなサブスクリプションが含まれるAzureアカウント。
- Microsoft Teamsチャネルに対して設定したボットのMicrosoftアプリID。
- Azureポータルへの管理者アクセス権。
SSO対応のAzure ADアプリケーションを作成するステップは次のとおりです:
- 新しいアプリケーション登録を作成します:
- Azureポータルでhttps://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBladeに移動します。
- 「新しい登録」をクリックします。
- 「Name」フィールドに入力します。
- 「サポートされているアカウントの種類」セクションで、「任意の組織のディレクトリ (任意の Azure AD ディレクトリ - マルチテナント) 内のアカウントと、個人用の Microsoft アカウント (Skype、Xboxなど)」ラジオ・ボタンを選択します。
- 「Register」をクリックします。
アプリケーションが作成されると、「Overview」セクションが表示されます。アプリケーション(クライアント) IDおよびディレクトリ(テナント) IDをアプリケーション用に作成する必要があります。
- Webプラットフォーム構成を追加します:
- 左側のナビゲーションで、「Authentication」を選択します。
- 「プラットフォーム構成」で、「プラットフォームの追加」をクリックし、「Web」を選択します。
- 次のフォーマットを使用してリダイレクトURIを追加します:
<YOUR_Oracle-Digital-Assistant_URL>/connectors/v2/callback
- 「Configure」をクリックします。
- クライアント・シークレットを作成します:
- 左側のナビゲーションで、「Certificates and secrets」を選択します。
- 「+ New client secret」をクリックし、必要なフィールドに入力して、「Add」をクリックします。
- クライアント・シークレット値をコピーし、安全な場所に格納します。この値は、後で必要になります。
- トークンを構成します:
- 左側のナビゲーションで、「Token configuration」を選択します。
- 「+ Add optional claim」をクリックします。
- 「Token type」で、「Access」を選択します。
- 次の要求を選択します:
- given_name
- upn
- 「Add」をクリックします。
- 「Turn on the Microsoft Graph email, profile permission (required for claims to appear in token)」オプションを選択し、「Add」をクリックします。
- 左側のナビゲーションで、「API permissions」を選択します。
ここで、3つの権限が作成されていることを確認します。
- 「+権限の追加」をクリックし、User.ReadBasic.Allを追加します。
プロファイル情報にアクセスするには、これが必要になります。
- アプリケーションID URIを設定します:
- 左側のナビゲーションで、「Expose an API」を選択します。
- 「Application ID URI」フィールドをクリックします。
- 次のフォーマットで値を更新します:
api://botid-<Microsoft_App_ID_for_your_bot>
ノート
これは、SSO APPのアプリケーションIDではなくボットのアプリケーションIDである必要があります。 - 「+ Add a scope」をクリックします。
- 開いたパネルで:
- 「Scope」名として
access_as_user
を設定します。スコープ名のドメイン・パートがテキスト・フィールドのすぐ下に表示され、前のステップで設定したアプリケーションID URIの末尾に
/access_as_user
が追加されます。 - 「Who can consent?」を「Admins and users」に設定します。
- 「Scope」名として
- 管理者とユーザーの同意のプロンプトを構成するためのフィールドに、
access_as_user
スコープに適した値を入力します。いくつかの推奨設定を次に示します:
- Admin consent title: Teamsがユーザーのプロファイルにアクセスできます。
- Admin consent description: Teamsが、現在のユーザーとしてアプリケーションのWeb APIをコールできます。
- User consent title: Teamsが、ユーザー・プロファイルにアクセスして、ユーザーのかわりに要求を行うことができます。
- User consent description: Teamsが、ユーザーと同じ権限を使用して、このアプリのAPIをコールできるようになります。
- 「State」が「Enabled」に設定されていることを確認します。
- 「Authorized client applications」セクションで、「+ Add a client application」をクリックします。
- 次のIDを入力します:
1fec8e78-bce4-4aaf-ab1b-5451cc387264
これは、Teamsモバイルおよびデスクトップ・アプリケーションです。
5e3ce6c0-2b1f-4285-8d4b-75ee78787346
これは、Teams Webアプリケーションです。
- マニフェストを更新します:
- 左側のナビゲーションで、「Manifest」を選択します。
"acceptMappedClaims"
をtrue
に設定します。"accessTokenAcceptedVersion"
を2
に設定します。- 「Save」をクリックします。
- テナント管理者権限をAzure ADアプリケーションに付与します。
- 左側のナビゲーションで、「Overview」を選択します。
- アプリケーション(クライアント) ID、ディレクトリ(テナント) IDおよびアプリケーションID URIをコピーし、便利な場所に保存します。
- プライベート・ブラウザ・ウィンドウで、Microsoft管理者アカウントにログインします。
URLの形式は次のとおりです:
ここで、https://login.microsoftonline.com/<tenant-id>/adminconsent?client_id=<client-id>
<tenant-id>
をコピー済のディレクトリ(テナント) IDで置き換え、<client-id>
をコピー済のアプリケーション(クライアント) IDで置き換えます。
- 「Permissions requested」ダイアログで、権限を確認して受け入れます。
SSOの詳細によるボット登録の更新
構成したSSOの詳細でMicrosoftボットを更新します:
- Teams開発者ポータルでボットを開き、マニフェスト・エディタを開きます。
- 「基本情報」タブを選択します。
- 「Application (client) ID」フィールドにスクロール・ダウンし、アプリケーション(クライアント) IDを挿入します。
- 「シングル・サインオン」タブを選択します。
- 「アプリケーションID URI」で、前にコピーしたアプリケーションID URIを追加します。
- 左側のナビゲーションで、「組織に公開」を選択します。
デジタル・アシスタントでの認証サービスとしてのAzure ADアプリケーションの登録
ここで、Azure ADアプリケーションを認証サービスとしてOracle Digital Assistantに登録します。
-
別のブラウザ・ウィンドウまたはタブで、デジタル・アシスタントを開き、左側のメニューで「設定」を展開して「認証サービス」を選択します。
- 「+サービス」をクリックします。
- 「新規認証サービス」ダイアログで、次の値を入力します:
- アイデンティティ・プロバイダ: Microsoft IDプラットフォーム
- 名前: 認証サービスを識別するための名前。
- トークン・エンドポイントURL: アクセス・トークンをリクエストするためのアイデンティティ・プロバイダのURL。次を使用します:
https://login.microsoftonline.com/<Azure-Active-Directory-TenantID>/oauth2/v2.0/token
- 認可エンドポイント: ユーザーがユーザー名とパスワードを入力して認証するページのIDPのURL。次を使用します:
https://login.microsoftonline.com/<Azure-Active-Directory-TenantID>/oauth2/v2.0/authorize
- クライアントIDおよびクライアント・シークレット: 登録されたAzure ADアプリケーション(OAuthクライアント)のクライアントIDおよびシークレット。アプリケーションIDとシークレットを使用します。
- スコープ:
<Application(client)_ID_for_your_bot>/access_as_user
- サブジェクト要求: ユーザーの識別に使用するアクセス・トークン・プロファイル要求。電子メールを使用します。
スキルからの認証サービスの参照
SSO認証を必要とするスキルでは、ダイアログ・フローにOAuth 2.0アカウント・リンク・コンポーネントを組み込み、認証サービスを介して認証を処理します。そのコンポーネントでは、必ずenableSingleSignOn
プロパティをtrue
に設定してください。(YAMLベースのダイアログ・フローの場合、コンポーネントはSystem.OAuth2AccountLinkと呼ばれます。)
ヒント:
コンポーネントに認証サービスの名前をハードコーディングしない場合は、コンポーネントに渡すカスタム・パラメータを作成できます。カスタム・パラメータを参照してください。サポートされている機能
デジタル・アシスタントのMicrosoft Teamsチャネルでは、次の機能がサポートされています:
- テキスト(送信と受信の両方)
- イメージ(送信と受信の両方)
- ファイル(送信と受信の両方)
- 絵文字(送信と受信の両方)
- リンク
- ポストバック
- カスタム・プロパティ
- カルーセル・コンポーネント
- リスト・コンポーネント
異なる書式設定機能および構文を使用してスキルを複数のチャネルにターゲット指定する場合は、メッセージで基本的なHTMLマークアップを使用できます。その場合、メッセージがチャネルに送信されると、そのマークアップは自動的にMicrosoft Teamsマークダウン形式に変換されます。これは、Microsoft Teams以外にスキルを他のチャネルにターゲティングする場合に特に役立ちます。チャネルでのリッチ・テキスト形式を参照してください。
メッセージの制約
デジタル・アシスタントのMicrosoft Teamsチャネルには、次のようなメッセージの制約があります:
- テキスト・メッセージ
- テキスト・アクション・ラベルの最大長: 1行(約50文字)
- 許可されるテキスト・アクションのタイプ: ポストバック、コール、URL
- 水平カード
- タイトルの最大長: 2行(約80文字)
- 説明の最大長: 25,000文字
- カード・アクション・ラベルの最大長: 1行(約50文字)
- カードの最大数: 10
- カード・アクションの最大数: 6。カード・アクションの数が6を超える場合、残りのカード・アクションをレンダリングするためにカードが複製されます。
- カード・アクションの最小数: 0
- カード・リスト・アクションの最大数: 6
- 説明、イメージまたはアクションが少なくとも1つ必要かどうか: いいえ
- 許可されるカード・アクションのタイプ: ポストバック、コール、URL
- 許可されるカード・リスト・アクションのタイプ: ポストバック、コール、URL
- 垂直カード
- タイトルの最大長: 2行(約80文字)
- 説明の最大長: 25,000文字
- カード・アクション・ラベルの最大長: 1行(約50文字)
- カードの最大数: 10
- カード・アクションの最大数: 3
- カード・アクションの最小数: 0
- カード・リスト・アクションの最大数: 6
- 説明、イメージまたはアクションが少なくとも1つ必要かどうか: いいえ
- 許可されるカード・アクションのタイプ: ポストバック、コール、URL
- 許可されるカード・リスト・アクションのタイプ: ポストバック、コール、URL
- アタッチメント・メッセージ
- サポートの有無: はい
- 許可されるアクションのタイプ: ポストバック、コール、URL
- アクション・ボタン
- グローバル・アクション・ラベルの最大長: 1行(約50文字)
- グローバル・アクションの最大数: 6
- 許可されるグローバル・アクションのタイプ: ポストバック、コール、URL
Microsoft Teamsのアダプティブ・カード
Oracle Digital AssistantでMicrosoft Teamsチャネルを介して公開するスキルには、アダプティブ・カードを使用できます。
そのためには、共通レスポンス・コンポーネントのchannelCustomProperties
要素を使用し、type
プロパティを"AdaptiveCard"
に設定します。
このエレメントは、コンポーネントの次のレベルで使用できます。
cards
レスポンス・アイテム内のcard要素のレベル。これにより、card要素にiteratorVariable
が指定されている場合に複数回スタンプ・アウトされる単一のアダプティブ・カード構造を定義できます。- textレスポンス・アイテムのレベル。一般的には、単一のアダプティブ・カードを作成する場合です。(複数のカードを定義できますが、ここでは
iteratorVariable
プロパティはサポートされていません。)
ヒント:
ダイアログ・フロー・エディタ(ビジュアル・モードとYAMLダイアログ・モードの両方)には、ニーズに適応できるサンプル・メタデータを含むMicrosoft Adaptive Cardsテンプレートがあります。Microsoft Teamsでは現在、アダプティブ・カードを含むカルーセルはサポートされていません。共通レスポンス・コンポーネントのメタデータに関しては、これは、カード・レイアウト・プロパティが無視されることを意味します。水平レイアウト(カルーセル)はサポートされていないため、カードは常に垂直方向にレイアウトされます。
注意を要する2つ目の制限は、アダプティブ・カードに含まれているボタンをユーザーがタップした場合、ボタン・ラベルが会話履歴にユーザー・メッセージとして出力されないという点です。つまり、ユーザーは、自分が選択したボタンを視覚的に確認できません。単純なテキスト・メッセージとともに表示されるボタンや標準の共通レスポンス・コンポーネント・カード(Microsoftのヒーロー・カードを使用するもの)とともに表示されるボタンではボタン・ラベルが出力されるため、このことは、一貫性のないユーザー・エクスペリエンスにつながる可能性があります。
例: cardsレスポンス・アイテム内のアダプティブ・カード
複数のカードをスタンプ・アウトするには、タイプがcardsのレスポンス・アイテム内のcard
要素でiteratorVariable
を使用します。アダプティブ・カードを使用して複数のピザ・カードをスタンプ・アウトする例を次に示します:
responseItems:
- type: "cards"
headerText: "Here are our pizzas you can order today:"
cardLayout: "horizontal"
cards:
- title: "${pizzas.name}"
description: "${pizzas.description}"
imageUrl: "${pizzas.image}"
iteratorVariable: "pizzas"
actions:
- label: "Order Now"
type: "postback"
payload:
action: "order"
variables:
orderedPizza: "${pizzas.name}"
orderedPizzaImage: "${pizzas.image}"
channelCustomProperties:
- channel: "msteams"
properties:
adaptiveCard:
type: "AdaptiveCard"
version: "1.0"
fallbackText: "Adaptive card version not supported"
body:
- type: "TextBlock"
text: "${pizzas.name}"
weight: "bolder"
- type: "TextBlock"
text: "${pizzas.description}"
wrap: true
- type: "Image"
url: "${pizzas.image}"
horizontalAlignment: "center"
actions:
- type: "Action.Submit"
title: "Order"
data:
action: "order"
variables:
orderedPizza: "${pizzas.name}"
orderedPizzaImage: "${pizzas.image}"
例: textレスポンス・アイテム内のアダプティブ・カード
textレスポンス・アイテムを使用して、次のようにアダプティブ・カードを定義できます:
responseItems:
- type: "text"
text: "This text is replaced with adaptive card defined in custom property"
footerText: "Is that correct?"
visible:
expression: "${system.channelType=='msteams' && system.entityToResolve.value.name=='Confirmed'}"
channelCustomProperties:
- channel: "msteams"
properties:
adaptiveCard:
type: "AdaptiveCard"
version: '1.0'
fallbackText: "Adaptive card version not supported"
body:
- type: TextBlock
text: 'I have all information needed to create your expense. Just to verify my understanding, here is an overview of your expense:'
wrap: true
- type: FactSet
facts:
- title: Expense Type
value: "${expense.value.Type}"
- title: Amount
value: "${expense.value.Amount.totalCurrency}"
- title: Date
value: "${expense.value.Date.date?number_to_date}"
- title: Receipt URL
value: "${expense.value.Receipt?has_content?then(expense.value.Receipt.url,'N/A')}"
actions:
- type: Action.ShowCard
title: Edit
id: edit
card:
type: AdaptiveCard
version: '1.0'
body:
- type: TextBlock
size: Medium
weight: Bolder
text: Edit Expense
- type: TextBlock
text: Expense Type
weight: Bolder
- type: Input.ChoiceSet
choices:
- title: Metro, bus, train
value: Public transport
- title: Taxi
value: Taxi
- title: Breakfast, lunch, dinner
value: dinner
id: Type
value: "${expense.value.Type!''}"
spacing: None
- type: TextBlock
text: Amount
weight: Bolder
- type: Input.Text
id: amount
spacing: None
value: "${expense.value.Amount?has_content?then(expense.value.Amount.totalCurrency,'')}"
- type: TextBlock
text: Date
weight: Bolder
- type: Input.Date
id: Date
value: "${expense.value.Date?has_content?then(expense.value.Date.date?number_to_date,'')}"
spacing: None
actions:
- type: Action.Submit
title: Submit
id: submit
また、このカスタム・プロパティで複数のアダプティブ・カードを定義することもできます。そのためには、type
プロパティの前にハイフン(-
)を付けて、マップではなくYAMLリストを指定します:
channelCustomProperties:
- channel: "msteams"
properties:
adaptiveCard:
- type: AdaptiveCard
body: ...
- type: AdaptiveCard
body: ...
これは、複数の静的カードをスタンプ・アウトする必要がある場合に便利なことがありますが、iteratorVariable
プロパティを使用して複数のカードをスタンプ・アウトするほうが一般的です。
送信アクション
アダプティブ・カードには送信アクション(Action.Submit
)があり、これを使用してユーザー入力を収集し、スキルに送信できます。
アクションのペイロードは、送信アクションのdata
プロパティで定義します。共通レスポンス・コンポーネントで、ボタンが選択された後に遷移したり、いくつかの変数を設定するようにする場合、標準のaction
プロパティとvariables
プロパティを使用できます:
actions:
- type: "Action.Submit"
title: "Order"
data:
action: "order"
variables:
orderedPizza: "${pizzas.name}"
orderedPizzaImage: "${pizzas.image}"
カードで入力フィールドを使用する場合、それらのフィールドの名前と値がキーと値のペアとしてdata
JSONオブジェクトに追加されます。「Edit Expense」カードが含まれている上の例には、経費タイプ、金額および日付を変更するための3つのフィールドがあります。この場合、ユーザーが「Submit」ボタンをタップすると、次のようなJSONオブジェクトが送信されます:
{
"Type" : "Taxi",
"Amount" : "10.0 dollar"
"Date" : "2019-09-02"
}
共通レスポンス・コンポーネントは、action
プロパティとvariables
プロパティを使用する一般的なペイロード構造に従っていないため、この情報をどのように処理すればよいですか。これを解決するには、次のオプションがあります:
-
JSONペイロードを文字列に変換します。後で、これがエンティティに対して照合されます。一致するものが見つかった場合、そのコンポーネントで設定された変数が、対応するエンティティ値(コンポジット・バッグ・エンティティの場合はエンティティ値)に更新されます。
このオプションを構成するには、送信アクションの
data
プロパティにブール型のsystem.convertToString
プロパティを追加します:actions: - type: Action.Submit title: Submit id: submit data: system.convertToString: true
-
入力フィールドと同じ名前を持つ変数がスキルで更新されるようにします。上の例では、
"Type"
、"Amount"
および"Date"
変数が更新されます。このオプションを構成するには、送信アクションの
data
プロパティにブール型のsystem.setVariables
プロパティを追加します:actions: - type: Action.Submit title: Submit id: submit data: system.setVariables: true
これらのいずれのオプションも構成しない場合、送信された値は無視されます。
共通レスポンス・コンポーネントをコンポジット・バッグ・エンティティとともに使用する場合は、通常、最初のオプションを使用します。これにより、文字列化されたJSONペイロードに基づいて、バッグ内のすべての一致したエンティティが設定されます。
これらの送信アクションが機能するためには、コンポーネントの
processUserMessage
プロパティをtrue
に設定する必要があります。
アダプティブ・カードで選択したボタンのエコー・テキスト
ユーザーがアダプティブ・カードでボタンを選択しても、カードにmessageBack
アクションを含めないかぎり、ユーザーがそのオプションを選択したことを示すように会話は更新されません。
messageBack
アクションを設定するには、https://docs.microsoft.com/en-us/microsoftteams/platform/task-modules-and-cards/cards/cards-actions#adaptive-cards-with-messageback-actionを参照してください。
アダプティブ・カードのボタンおよびフィールドの無効化
技術的にはアダプティブ・カードのボタンやフィールドを無効にすることはできませんが、送信アクションの起動時にカードを置き換えることで同様の効果を実現できます。これは、共通レスポンス・コンポーネントでMicrosoft Teams固有のブール型のreplaceMessage
プロパティを使用して行います。
このようにカードを再レンダリングできるようにするには、カスタム・レスポンス・コンポーネントのchannelCustomProperties
セクション内にこのプロパティを追加します:
...
- type: "text"
text: "This text is replaced with the adaptive card defined in custom property"
channelCustomProperties:
- channel: "msteams"
properties:
replaceMessage: "true"
adaptiveCard:
...
Apache FreeMarker式を使用して、プロパティの値を設定することもできます。
アダプティブ・カード定義を作成するためのヒント
アダプティブ・カードのJSONスキーマは比較的複雑で、様々なコンストラクトをサポートしています。そのため、Common Responeコンポーネント内で直接、アダプティブ カードの内容を手動で定義しようとすると、エラーが発生しやすくなります。次のプロセスを使用したほうが、アダプティブ・カードをより簡単に作成できる可能性があります:
- Microsoftのアダプティブ・カード・デザイナのビジュアル・ツールを使用して、アダプティブ・カード定義を作成します。
- 「カード JSON のコピー」をクリックして、定義をJSONフォーマットで取得します。
- オンライン・コンバータ(https://jsonformatter.org/json-to-yamlなど)を使用して、定義をYAMLに変換します。
- 結果をテキスト・エディタにコピーし、ダイアログ・フロー定義内で表示される場所に必要なインデントを挿入します。
- 結果のテキストをダイアログ・フローに貼り付けます。
Teamsでサポートされているアダプティブ・カードのバージョンを最新に保つには、https://docs.microsoft.com/en-us/adaptive-cards/resources/partnersを参照してください。https://adaptivecards.io/explorer/にアクセスして、すべての要素とプロパティのリスト、およびそれらが導入されたバージョンを確認できます。
アダプティブ・カード・デザイナでは、使用されている要素とアダプティブ・カードのバージョン番号の組合せは確認されないことに注意してください。たとえば、ActionSet
要素はバージョン1.2で導入されましたが、デザイナでバージョン番号として1.0を指定しても、この要素を追加することはできません。
1.0でアクションを使用する場合は、body
プロパティの下にある個別のactions
プロパティを使用します。ビジュアル・デザイナを使用してこのactions
要素を追加することはできないため、手動で追加する必要があります。
デジタル・アシスタントのようこそメッセージの無効化
ユーザーがMicrosoft Teamsチャネルを介してデジタル・アシスタントに接続すると、会話を開始するために内部メッセージがデジタル・アシスタントに送信されます。デフォルトでは、このメッセージは「help」という単語で、デジタル・アシスタントのhelp
システム・インテントがトリガーされ、デジタル・アシスタントのスキルのようこそメッセージおよびカードが表示されます。
この動作を無効にするには、Internal Welcome Message
プロパティを"help"以外の値に変更します。デジタル・アシスタントのリソース・バンドルのそのプロパティの値を変更できます。
ユーザーがチームに接続するときにデジタル・アシスタントに設定される内部メッセージを変更するには、チャネル:
をクリックしてサイド・メニューを開き、「開発」→「デジタル・アシスタント」を選択してデジタル・アシスタントを開きます。
- デジタル・アシスタントの左側のナビゲーションで
,をクリックし、「構成」タブを選択します。
- 「フィルタ」フィールドに
internal
と入力して、リソース・バンドル・キーのリストをすばやく絞り込みます。 - 「その他- internalWelcomeMessage」キーを選択します。
- キーの値の上にマウスを置き、表示される
アイコンを選択します。
- 使用する値に値を置き換えて、「エントリの更新」をクリックします。
デジタル・アシスタントが21.04より前のプラットフォーム・バージョンにある場合、リソース・バンドル・キーは構成プロパティに対して自動的に定義されません。その場合は、デジタル・アシスタントの「設定」ページ(

スキルのようこそメッセージの有効化
デフォルトでは、ユーザーがMicrosoft Teamsチャネルを介してスタンドアロン・スキルに直接接続する場合、ユーザーにようこそメッセージは送信されません。ただし、スキルの「ようこそ状態」プロパティを構成すると、スキルはその状態を使用して、ユーザーが接続したときにメッセージを表示します。
をクリックしてサイド・メニューを開き、「開発」→「スキル」を選択して、スキルを開きます。
- スキルの左側のナビゲーションで
をクリックし、「デジタル・アシスタント」タブを選択します。
- 「ようこそ状態」フィールドに、ようこそメッセージを表示する状態の名前を入力します。
この方法で「ようこそ状態」プロパティを使用すると、スタンドアロン・スキルはMicrosoft Teamsチャネルでのみ機能します。他のチャネルの場合、このプロパティはスタンドアロン・スキルでは無視されます。