トレーニング
ラーニング パス
Use advance techniques in canvas apps to perform custom updates and optimization - Training
Use advance techniques in canvas apps to perform custom updates and optimization
このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
メール サービスなど、ユーザーの代わりにリソースにアクセスするボットをMicrosoft Teamsに作成できます。 OAuth 2.0 に基づいて、Azure Bot Service v4 SDK 認証を使用できます。 この方法を使用すると、ユーザーの資格情報に基づいて認証トークンを使用できるボットを簡単に開発できます。 キーは、 ID プロバイダーの使用です。
OAuth 2.0 は、Microsoft Entra IDやその他の多くの ID プロバイダーによって使用される認証と承認のオープン標準です。 OAuth 2.0 の基本的な解釈は、Teams で認証を操作するための前提条件です。
基本的な理解については、OAuth 2 Simplifiedを参照してください。完全な仕様については、OAuth 2.0 を参照してください。
Azure Bot Service による認証の処理方法の詳細については、「会話内のユーザー認証」を参照してください。
この記事では、以下について説明します。
ボットの基礎、管理状態、ダイアログ ライブラリ、およびシーケンシャル会話フローを実装する方法について説明します。
Azure と OAuth 2.0 の開発に関する知識。
Microsoft Visual Studio と Git の最新バージョン。
Azure アカウント。 必要に応じて、Azure 無料アカウントを作成できます。
次のサンプル:
サンプル | BotBuilder のバージョン | デモ |
---|---|---|
cs-auth-sample での ボット認証 | v4_4 | OAuthCard のサポート |
js-auth-sample での ボット認証 | v4_4 | OAuthCard のサポート |
py-auth-sample での ボット認証 | v4_4 | OAuthCard のサポート |
リソース グループとサービス プランは厳密には必要ありませんが、作成したリソースを簡単に解放できます。 リソースを整理して管理できるようにしておくことをお勧めします。
リソース グループを使用して、Bot Framework の個々のリソースを作成します。 パフォーマンスを確保するために、これらのリソースが同じ Azure リージョンにあることを確認します。
ヒント
このチュートリアルの後半で作成するリソースと同様に、簡単にアクセスできるようにこのリソース グループをダッシュボードにピン留めすることをお勧めします。 これを行う場合は、ダッシュボードの右上にある 📌 ピン アイコンを選択します。
Azure Bot リソース登録は、Web サービスをボットとして Bot Framework に登録します。これにより、Microsoft アプリ ID とアプリ パスワード (クライアント シークレット) が提供されます。
重要
ボットが Azure でホストされていない場合にのみ、ボットを登録する必要があります。 Azure portalを使用してボットを作成した場合は、サービスに既に登録されています。 Bot Framework または開発者ポータルを通じてボットを作成した場合、ボットは Azure に登録されていません。
Azure porta にアクセスし、[リソースの作成] セクションで Azure Bot を検索します。
Azure Bot を開き [作成] を選択します。
[ボット ハンドル] フィールドでボット ハンドル名を入力します。
ドロップダウン リストから [サブスクリプション] を選択します。
ドロップダウン リストから [リソース グループ] を選択します。
Microsoft アプリ ID のマルチテナントとしてアプリ種類を選択します。
[確認 + 作成] を選びます。
検証に合格した場合は、[作成] を選択します。
Azure では、しばらくしてボットがプロビジョニングされます。
[リソースに移動] を選びます。 ボットと関連リソースがリソース グループに一覧表示されます。
Azure ボットが作成されます。
クライアント シークレットを作成するには:
[構成設定] で、[追加] を選択します。 将来の参照のために、Microsoft アプリ ID (クライアント ID) を保存します。
[Microsoft アプリ ID] の横にある [管理] を選択します。
[クライアント シークレット] セクションで、[新しいクライアント シークレット]を選択します。[クライアント シークレットの追加] ウィンドウが表示されます。
[説明] を入力し、[追加] を選択します。
[値] の列で、[クリップボードにコピー] を選択し、将来参照できるようにクライアント シークレット ID を保存します。
Microsoft Teams チャネルに追加するには:
[ホーム] に移動します。
[ 最近使ったリソース ] セクションからボットを開きます。
左側のウィンドウで [ チャネル ] を選択し、[ Microsoft Teams ] を選択します。
チェックボックスをオンにして利用規約に同意し、[同意する] を選択 します。
[保存] を選択します。
詳細については、「Microsoft Teams 用にボットを作成する」を参照してください。
認証には ID プロバイダーが必要です。 この手順では、Microsoft Entra プロバイダーを使用します。 または、サポートされている他のMicrosoft Entra ID ID プロバイダーを使用することもできます。
Azure portalの左側のナビゲーション パネルで、[Microsoft Entra ID] を選択します。
ヒント
アプリケーションによって要求されたアクセス許可を委任することに同意できるテナントで、このMicrosoft Entra リソースを作成して登録する必要があります。 テナントの作成手順については、「 ポータルにアクセスしてテナントを作成する」を参照してください。
左側のパネルで、[アプリの登録] を選択します。
右側のパネルで、左上の [新規登録] タブを選択します。
以下の情報を指定します。
https://token.botframework.com/.auth/web/redirect
に設定します。Azure によってアプリが作成されると、アプリの [概要 ] ページが表示されます。 次の情報をコピーしてファイルに保存します。
左側のパネルで [証明書とシークレット] を選択して、アプリケーションのクライアント シークレットを作成します。
注意
サービス プロバイダーには、Azure Active Directory v1 と Azure Active Directory v2 の 2 つのオプションがあります。 2 つのプロバイダー間の違いを ここでまとめますが、一般的に、v2 ではボットのアクセス許可の変更に関して柔軟性が高くなります。 Graph API アクセス許可がスコープ フィールドに一覧表示され、新しいアクセス許可が追加されると、ボットによって、ユーザーは次回のサインイン時に新しいアクセス許可に同意できるようになります。 v1 の場合、OAuth ダイアログで新しいアクセス許可を求めるメッセージが表示されるように、ボットの同意をユーザーが削除する必要があります。
Azure portal で、ダッシュボードからリソース グループを選択します。
ボット登録リンクを選択します。
リソース ページを開き、[設定]の下にある [構成] を選択します。
[OAuth 接続設定の追加] を選択します。 次の図は、リソース ページの対応する選択を示しています。
フォームに次のように入力します。
名前。 接続の名前を入力します。 この名前は、 appsettings.json
ファイル内のボットで使用します。 たとえば、 BotTeamsAuthADv1 です。
サービス プロバイダー。 Azure Active Directory を選択します。 このオプションを選択すると、Azure Active Directory 固有のフィールドが表示されます。
クライアント ID。Azure ID プロバイダー アプリ用に記録したアプリケーション (クライアント) ID を入力します。
クライアント シークレット。 Azure ID プロバイダー アプリ用に記録したシークレットを入力します。
許可の種類。
authorization_code
を入力します。
ログイン URL。
https://login.microsoftonline.com
を入力します。
テナント ID、ID プロバイダー アプリの作成時に選択したサポートされているアカウントの種類に応じて、先ほど Azure ID アプリ用に記録した ディレクトリ (テナント) ID を入力するか、common を入力します。 割り当てる値を決定するには、次の条件に従います。
[この組織ディレクトリ内のアカウントのみ (Microsoft のみ - シングル テナント)] または任意の組織ディレクトリ内のアカウント (Any Microsoft Entra ID テナント - Multitenant) を選択した場合は、Microsoft Entra アプリ用に前に記録したテナント ID を入力します。 これは、認証できるユーザーに関連付けられているテナントになります。
任意の組織ディレクトリ (任意のMicrosoft Entra ID テナント - マルチテナント) と個人用 Microsoft アカウント (Skype、Xbox など) で [アカウント] を選択した場合は、テナント ID の代わりに共通の単語を入力します。 それ以外の場合、Microsoft Entra アプリは、ID が選択されたテナントを介して検証し、個人用 Microsoft アカウントを除外します。
h.
リソース URL には、「https://graph.microsoft.com/
」と入力します。 この URL は、コード サンプルでは使用されません。
i.
[Scopes] は空白のままにします。 次の図に例を示します。
[保存] を選択します。
Azure portal で、ダッシュボードから Azure Bot を選択します。
リソース ページで、[設定] にある [構成] を選択します。
[OAuth 接続設定の追加] を選択します。
次の図は、リソース ページの対応する選択を示しています。
フォームに次のように入力します。
名前。 接続の名前を入力します。
appsettings.json
ファイル内のボットでこの名前を使用します。 たとえば、 BotTeamsAuthADv2 です。
サービス プロバイダー。 [ Azure Active Directory v2] を選択します。 このオプションを選択すると、Azure AD v2 固有のフィールドが表示されます。
クライアント ID。Azure ID プロバイダー アプリ用に記録したアプリケーション (クライアント) ID を入力します。
クライアント シークレット。 Azure ID プロバイダー アプリ用に記録したシークレットを入力します。
トークン交換 URL。 空白のままにします。
テナント ID、ID プロバイダー アプリの作成時に選択したサポートされているアカウントの種類に応じて、先ほど Azure ID アプリ用に記録した ディレクトリ (テナント) ID を入力するか、common を入力します。 割り当てる値を決定するには、次の条件に従います。
[この組織ディレクトリ内のアカウントのみ (Microsoft のみ - シングル テナント)] または任意の組織ディレクトリ内のアカウント (Any Microsoft Entra ID テナント - Multitenant) を選択した場合は、Microsoft Entra アプリ用に前に記録したテナント ID を入力します。 これは、認証できるユーザーに関連付けられているテナントになります。
任意の組織ディレクトリ (任意のMicrosoft Entra ID テナント - マルチテナント) と個人用 Microsoft アカウント (Skype、Xbox など) で [アカウント] を選択した場合は、テナント ID の代わりに共通の単語を入力します。 それ以外の場合、Microsoft Entra アプリは、ID が選択されたテナントを介して検証し、個人用 Microsoft アカウントを除外します。
[スコープ] には、User.Read、User.ReadBasic.All、Mail.Read など、アプリケーションで必要なグラフのアクセス許可のスペース区切りの一覧を入力します。
[保存] を選択します。
接続エントリを選択して、作成した接続を開きます。
[サービス プロバイダー接続設定] パネルの上部になる[テスト接続] を選択します。
初めて、アカウントの選択を求める新しいブラウザー ウィンドウが開きます。 使用するものを選択します。
次に、ID プロバイダーにデータ (資格情報) の使用を許可します。 次の図に例を示します。
[同意する] を選択します。
[test connection to <your-connection-name> Succeeded]\(成功しました\) ページが開きます。 エラーが発生した場合は、ページを更新します。 次の図に例を示します。
ボット コードでは、接続名を使用してユーザー認証トークンを取得します。
準備の設定が完了したら、この記事で使用するボットの作成に焦点を当ててみましょう。
cs-auth-sample を複製します。
Visual Studio を開きます。
ツール バーで、[ ファイル] > [プロジェクト/ソリューション > 開く ] を選択し、ボット プロジェクトを開きます。
C# では、次のように 更新appsettings.json 。
ConnectionName
を、ボット登録に追加した ID プロバイダー接続の名前に設定します。 この例で使用した名前は、BotTeamsAuthADv1 です。MicrosoftAppId
をボット登録時に保存した ボット アプリ ID に設定します。MicrosoftAppPassword
に設定します。ボット シークレットの文字によっては、パスワードを XML でエスケープすることが必要になる場合があります。 たとえば、アンパサンド (&) は &
としてエンコードする必要があります。
{
"MicrosoftAppType": "",
"MicrosoftAppId": "",
"MicrosoftAppPassword": "",
"ConnectionName": "",
ソリューション エクスプローラーで、TeamsAppManifest
フォルダーに移動し、manifest.json
を開き、id
を設定し、ボットの登録時に保存したボットアプリ ID にbotId
します。 詳細については、「アプリ マニフェスト」を参照してください。
ボットをデプロイするには、「 Azure にボットをデプロイする方法」の手順に従います。
または、Visual Studio の場合は、次の手順を実行できます:
Visual Studio ソリューション エクスプローラーで、プロジェクト名を長押し (または右クリック) します。
ドロップダウン メニューの [発行] を選択 します。
表示されたウィンドウで、[新規] リンクを選択します。
ダイアログ ウィンドウで、[App Service] と [新規作成] を選択します。
[公開] ボタンをクリックします。
次のダイアログ ウィンドウで、必要な情報を入力します。
[作成] を選択します。
デプロイが正常に完了すると、Visual Studio に反映されます。 既定のブラウザーでページが開き、[ ボットの準備ができました!] というメッセージが表示されます。 URL は https://botteamsauth.azurewebsites.net/
に似ています。 ファイルに保存します。
ブラウザーで、Azure portalに移動します。
リソース グループを確認すると、ボットが他のリソースと共に一覧表示されます。 次の図に例を示します。
リソース グループで、ボット登録名 (リンク) を選択します。
左側のウィンドウで [設定] を選択します。
[ メッセージング エンドポイント ] ボックスに、取得した URL の後に api/messages
を入力します。 たとえば、「 https://botteamsauth.azurewebsites.net/api/messages
」のように入力します。
注意
ボットに対して許可されるメッセージング エンドポイントは 1 つだけです。
左上の [保存] ボタンを選択します。
Microsoft Bot Framework Emulatorをインストールします。 詳細については、「 エミュレーターを使用したテストとデバッグ」を参照してください。
ボットのサンプル サインインを機能させるには、エミュレーターを構成する必要があります。
ボットで認証が必要な場合は、エミュレーターを構成する必要があります。 構成するには:
ボットにサインイン カードが表示され、ユーザーがサインイン ボタンを選択すると、エミュレーターによって、ユーザーが認証プロバイダーでサインインするために使用できるページが開きます。 ユーザーが個の操作を行うと、プロバイダーによってユーザー トークンが生成され、ボットに送信されます。 その後、ユーザーの代わりにボットが動作できるようになります。
認証メカニズムを構成したら、実際のボット テストを実行できます。
たとえば、Visual Studio を使用して、お使いのコンピューターでボット サンプルをローカルで実行します。
エミュレーターを起動します。
[ボットを開く] ボタンを選択します。
[ボットの URL] に、ボットのローカル URL を入力します。 通常は、http://localhost:3978/api/messages
です。
[Microsoft アプリ ID] に、appsettings.json
からボットのアプリ ID を入力します。
Microsoft App パスワードで、appsettings.json
からボットのアプリ パスワードを入力します。
[接続] を選択します。
ボットが起動して実行されたら、任意のテキストを入力してサインイン カードを表示します。
[サインイン] ボタンを選択します。
ポップアップ ダイアログが [ 開いている URL の確認 ] に表示され、ボットのユーザーを認証します (ユーザー)。
[確認] を選択します。
メッセージが表示されたら、該当するユーザーのアカウントを選択します。
エミュレーターに使用した構成に応じて、次のいずれかのオプションが表示されます。
次の図は、サインイン後のボット UI の例です。
ボットで [トークンを表示しますか?] を求められたときに [はい] を選択すると、次の応答が返されます。
入力チャット ボックスに 「ログアウト 」と入力してサインアウトします。ユーザー トークンが解放され、もう一度サインインするまでボットはユーザーに代わって行動できなくなります。
注意
ボット認証には、Bot Connector Service を使用する必要があります。 このサービスは、ボットのボット登録情報にアクセスします。
ブラウザーで、Azure portalに移動します。
リソース グループを見つけます。
リソース リンクを選択します。 リソース ページが表示されます。
リソース ページで、[Web チャットでテスト] を選択します。 ボットが起動し、事前定義された案内応答が表示されます。
チャット ボックスに何かを入力します。
[サインイン] ボックスを選択します。
ポップアップ ダイアログが [ 開いている URL の確認 ] に表示され、ボットのユーザーを認証します (ユーザー)。
[確認] を選択します。
メッセージが表示されたら、該当するユーザーのアカウントを選択します。 次の図は、サインイン後のボット UI の例です。
[はい] ボタンを選択して、認証トークンを表示します。 次の図に例を示します。
入力チャット ボックスに 「ログアウト 」と入力してサインアウトします。
注意
サインインで問題が発生した場合は、前の手順で説明したように、接続を再度テストしてみてください。 これにより、認証トークンが再作成される可能性があります。 Azure の Bot Framework Web チャット クライアントでは、認証が正しく確立される前に、何度かサインインする必要がある場合があります。
ボット プロジェクトで、TeamsAppManifest
フォルダーに manifest.json
が、outline.png
および color.png
と共に含まれていることを確認します。
ソリューション エクスプローラーで、TeamsAppManifest
フォルダーに移動します。 次の値を割り当てて、manifest.json
を編集します:
id
と botId
に割り当てられていることを確認します。validDomains: [ "token.botframework.com" ]
。
manifest.json
、outline.png
、および color.png
ファイルを選択して zip します。
Microsoft Teams を開きます。
左側のパネルの下部で、Apps アイコン を選択します。
右側のパネルの下部にある [カスタム アプリのアップロード] を選択します。
TeamsAppManifest
フォルダーに移動し、zip 形式のマニフェストをアップロードします。
[ 追加] を選択して、アプリを Teams にインストールします。
必要なスコープを検索して選択するか、一覧からチャネルまたはチャットを選択し、ダイアログ内を移動して [移動] を選択します。
左側のパネルで 3 つのドット (●●●) を選択します。 次に、[ 開発者ポータル ] アイコンを選択します。
[マニフェスト エディター] タブを選択します。アップロードしたボットのアイコンが表示されます。
また、ボットとメッセージを交換するために使用できるボットをチャットリストに連絡先として表示できます。
Teams は完全にクラウドベースの製品です。 HTTPS エンドポイントを使用して、アクセスするすべてのサービスをクラウドから利用できるようにする必要があります。 そのため、ボット (サンプル) を Teams で動作させるには、任意のクラウドにコードを発行するか、トンネリング ツールを使用してローカルで実行されているインスタンスに外部からアクセスできるようにする必要があります。 コンピューターでローカルに開くポートの外部アドレス指定可能な URL を作成する ngrok をお勧めします。 Teams アプリをローカルで実行するための準備として ngrok を設定するには、次の手順に従います。
ターミナル ウィンドウで、ngrok.exe
がインストールされているディレクトリに移動します。
環境変数 パスをポイントするように設定することをお勧めします。
たとえば、ngrok http 3978 --host-header=localhost:3978
を実行します。 必要に応じてポート番号を置き換えます。
指定したポートでリッスンするために ngrok が起動します。 その返しとして、ngrok が実行されている限り有効な外部アドレス指定可能な URL が提供されます。 次の図に例を示します。
次のような転送 HTTPS アドレスをコピーします: https://dea822bf.ngrok.io/
。
/api/messages
を追加してhttps://dea822bf.ngrok.io/api/messages
を取得します。これは、コンピューター上でローカルで実行され、Teams のチャットで Web 経由で到達できるボットのメッセージ エンドポイントです。
実行する最後の手順の 1 つは、デプロイされたボットのメッセージ エンドポイントを更新することです。 この例では、ボットを Azure にデプロイしました。 それでは、次の手順を実行しましょう:
https://dea822bf.ngrok.io/api/messages
)。ボットをローカルで起動します (Visual Studioデバッグ モードなど)。
Bot Framework ポータルの [Web チャットのテスト] を使用して、ローカルでの実行中にボットをテストします。 エミュレーターと同様に、このテストでは Teams 固有の機能にアクセスすることはできません。
ngrok
が実行されているターミナル ウィンドウでは、ボットと Web チャット クライアントの間の HTTP トラフィックを確認できます。 より詳細なビューが必要な場合は、ブラウザー ウィンドウで、前のターミナル ウィンドウから取得した http://127.0.0.1:4040
を入力します。 次の図に例を示します。
注意
ngrok を停止して再起動すると、URL が変更されます。 プロジェクトで ngrok を使用するには、また使用している機能に応じて、すべての URL 参照を更新する必要があります。
このマニフェストには、ボットに接続するために Teams で必要な情報が含まれています。
{
"$schema": "https://developer.microsoft.com/json-schemas/teams/v1.8/MicrosoftTeams.schema.json",
"manifestVersion": "1.5",
"version": "1.0.0",
"id": "",
"developer": {
"name": "TeamsBotAuth",
"websiteUrl": "https://www.microsoft.com",
"privacyUrl": "https://www.teams.com/privacy",
"termsOfUseUrl": "https://www.teams.com/termsofuse"
},
"icons": {
"color": "color.png",
"outline": "outline.png"
},
"name": {
"short": "TeamsBotAuth",
"full": "Teams Bot Authentication"
},
"description": {
"short": "TeamsBotAuth",
"full": "Teams Bot Authentication"
},
"accentColor": "#FFFFFF",
"bots": [
{
"botId": "",
"scopes": [
"groupchat",
"team"
],
"supportsFiles": false,
"isNotificationOnly": false
}
],
"permissions": [
"identity",
"messageTeamMembers"
],
"validDomains": [ "token.botframework.com" ]
}
認証では、Teams は他のチャネルとは異なる動作をします。
呼び出しアクティビティは、ActivityHandler をサブクラス化することによって行われる他のチャネルで使用されるイベント アクティビティではなく、ボットに送信されます。
Bots/DialogBot.cs
public class DialogBot<T> : TeamsActivityHandler where T : Dialog
{
protected readonly BotState ConversationState;
protected readonly Dialog Dialog;
protected readonly ILogger Logger;
protected readonly BotState UserState;
public DialogBot(ConversationState conversationState, UserState userState, T dialog, ILogger<DialogBot<T>> logger)
{
ConversationState = conversationState;
UserState = userState;
Dialog = dialog;
Logger = logger;
}
public override async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default(CancellationToken))
{
await base.OnTurnAsync(turnContext, cancellationToken);
// Save any state changes that might have occurred during the turn.
await ConversationState.SaveChangesAsync(turnContext, false, cancellationToken);
await UserState.SaveChangesAsync(turnContext, false, cancellationToken);
}
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
Logger.LogInformation("Running dialog with Message Activity.");
// Run the Dialog with the new message Activity.
await Dialog.RunAsync(turnContext, ConversationState.CreateProperty<DialogState>(nameof(DialogState)), cancellationToken);
}
}
}
Bots/TeamsBot.cs
OAuthPrompt を使用する場合は、呼び出しアクティビティをダイアログに転送する必要があります。
protected override async Task OnTeamsSigninVerifyStateAsync(ITurnContext<IInvokeActivity> turnContext, CancellationToken cancellationToken)
{
Logger.LogInformation("Running dialog with signin/verifystate from an Invoke Activity.");
// The OAuth Prompt needs to see the Invoke Activity in order to complete the login process.
// Run the Dialog with the new Invoke Activity.
await Dialog.RunAsync(turnContext, ConversationState.CreateProperty<DialogState>(nameof(DialogState)), cancellationToken);
}
protected virtual Task OnInvokeActivityAsync(ITurnContext<IInvokeActivity> turnContext, CancellationToken cancellationToken)
{
switch (turnContext.Activity.Name)
{
case "signin/verifyState":
return OnSigninVerifyStateAsync(turnContext, cancellationToken);
default:
return Task.CompletedTask;
}
}
protected virtual Task OnSigninVerifyStateAsync(ITurnContext<IInvokeActivity> turnContext, CancellationToken cancellationToken)
{
return Task.CompletedTask;
}
このセクションでは、ボット認証 v3 SDK のサンプルを提供します。
サンプルの名前 | 説明 | .NET | Node.js | Python | マニフェスト |
---|---|---|---|---|---|
ボット認証 | このサンプルでは、Teams 用ボットで認証を開始する方法を示します。 | 表示 | 表示 | 表示 | 表示 |
タブ、ボット、メッセージ拡張機能 (ME) SSO | このサンプルでは、Tab、Bot、ME の Microsoft Entra SSO ( 検索、アクション、リンク展開) を示します。 | 表示 | 表示 | 該当なし | 表示 |
Platform Docs に関するフィードバック
Platform Docs はオープンソース プロジェクトです。 フィードバックを提供するにはリンクを選択します。
トレーニング
ラーニング パス
Use advance techniques in canvas apps to perform custom updates and optimization - Training
Use advance techniques in canvas apps to perform custom updates and optimization