Teams ID に対する Azure Communication Services サポート — ユース ケース

Microsoft Teams は、Microsoft Entra ID によって管理される ID と、Teams 管理センターとポリシーによって制御される通話エクスペリエンスを提供します。 ユーザーには、Microsoft Teams 電話の音声通話および高度な呼び出し機能を有効にするためのライセンスが割り当てられている場合があります。 Teams ID に対する Azure Communication Services サポートにより、Teams ボイス オーバー IP (VoIP) 通話、Teams 音声通話、Teams 会議への参加を管理することができます。 開発者は、Graph API を使用して Azure Communication Services を拡張し、Microsoft 365 エコシステムからコンテキスト データを提供することができます。 このページでは、既存の Microsoft テクノロジを使用して Teams ユーザーの呼び出しシナリオのエンドツーエンドのエクスペリエンスを提供する方法、およびAzure Communication Services calling SDK についてのインスピレーションを提供します。

ユースケース 1: Teams PSTN 通話を発信する

このシナリオでは、Contoso という企業が Fabrikam という企業に SaaS を提供するマルチテナントのユース ケースを紹介します。 Fabrikam のユーザーが、SaaS を使用してカスタム Web サイト経由で Teams 音声通話を発信します。この Web サイトは、Teams ユーザーの ID と、その Teams ユーザーに割り当てられた PSTN 接続の構成を取得します。

Diagram is showing user experience of Alice making Teams phone call to customer Megan.

次のシーケンス図は、Teams 音声通話を開始するための詳細な手順を示しています。

Sequence diagram is describing detailed set of steps that happens to initiate a Teams phone call using Azure Communication Services and Teams.

手順

  1. Contoso のクライアント アプリケーションで Fabrikam の Alice を認証します。Alice は、ブラウザーを使用して Fabrikam の Web ページを開き、認証を行います。 詳細については、Teams ID を使用した認証に関するページを参照してください。 認証が成功すると、Alice は最初のページにリダイレクトされます。
  2. 顧客とその PSTN 番号を読み込みます。Contoso は、顧客とそれに関連付けられている電話番号のリストを取得するためのカスタム ロジックを提供します。 このリストは、Alice 向けの最初のページに表示されます。
  3. Megan への呼び出しを開始します。Alice は、Contoso のクライアント アプリケーションで Megan への PSTN 呼び出しを開始するボタンを選択します。 クライアント アプリケーションは、Azure Communication Services calling SDK を使用して、呼び出し機能を提供します。 まず、最初の手順で取得した Azure Communication Services アクセス トークンを保持する callAgent のインスタンスを作成します。
const callClient = new CallClient(); 
tokenCredential = new AzureCommunicationTokenCredential('<AlICE_ACCESS_TOKEN>');
callAgent = await callClient.createTeamsCallAgent(tokenCredential)

次に、Megan の電話番号の呼び出しを開始する必要があります。

const pstnCallee = { phoneNumber: '<MEGAN_PHONE_NUMBER_E164_FORMAT>' }
const oneToOneCall = callAgent.startCall([pstnCallee], { threadId: '00000000-0000-0000-0000-000000000000' });
  1. PSTN 通話を Megan に接続します。この通話は、Alice に割り当てられた Teams 電話接続を介してルーティングされ、PSTN ネットワークに到達すると、指定された電話番号に関連付けられている電話を呼び出します。 Megan は、Alice の Teams ユーザーに関連付けられている電話番号からの着信呼び出しを認識します。
  2. Megan は呼び出しを受け入れます。Megan が呼び出しを受け入れると、Alice と Megan の間の接続が確立されます。

ユースケース 2: 着信 Teams 音声通話を受信する

このシナリオでは、Contoso という企業が Fabrikam という企業に SaaS を提供するマルチテナントのユース ケースを紹介します。 Fabrikam のユーザーは、SaaS を使用してカスタム Web サイト経由で Teams 音声通話を受信します。この Web サイトは、Teams ユーザーの ID とそのユーザーに割り当てられた PSTN 接続の構成を取得します。

Diagram is showing user experience of Alice receiving Teams phone call from customer Megan.

次のシーケンス図は、着信 Teams 音声通話を受け入れるための詳細な手順を示しています。

Sequence diagram is describing detailed set of steps that happens to receive a Teams phone call using Azure Communication Services and Teams.

手順

  1. Contoso のクライアント アプリケーションで Fabrikam の Alice を認証します。Alice は、ブラウザーを使用して Fabrikam の Web ページを開き、認証を行います。 詳細については、Teams ID を使用した認証に関するページを参照してください。 認証が成功すると、Alice は最初のページにリダイレクトされます。
  2. 通話を受け入れるためにサブスクライブします。クライアント アプリケーションは、Azure Communication Services calling SDK を使用して、呼び出し機能を提供します。 まず、最初の手順で取得した Azure Communication Services アクセス トークンを保持する callAgent のインスタンスを作成します。
const callClient = new CallClient(); 
tokenCredential = new AzureCommunicationTokenCredential('<AlICE_ACCESS_TOKEN>');
callAgent = await callClient.createTeamsCallAgent(tokenCredential)

次に、着信通話イベントをサブスクライブします。

const incomingCallHandler = async (args: { teamsIncomingCall: TeamsIncomingCall }) => {
    
    const incomingCall = args.teamsIncomingCall;
    
    // Get information about caller
    var callerInfo = incomingCall.callerInfo
    
    showIncomingCall(callerInfo,incomingCall);
};
callAgent.on('incomingCall', incomingCallHandler);

showIncomingCall メソッドは、着信を示し、通話の受け入れと拒否のための 2 つのボタンを示すユーザー インターフェイスをレンダリングする Contoso のカスタム メソッドです。 受け入れボタンを選択した場合は、次のコードが使用されます。

// Accept the call
var call = await incomingCall.accept();

拒否ボタンを選択した場合は、次のコードが使用されます。

// Reject the call
incomingCall.reject();
  1. Megan は Teams ユーザーに割り当てられた PSTN 番号の呼び出しを開始します。Megan は自分の電話を使って Alice を呼び出します。 通信事業者ネットワークは、Alice に割り当てられている Teams 電話接続に接続し、Alice に対して登録されているすべての Teams エンドポイントを呼び出します。 これには、Teams のデスクトップ、モバイル、Web クライアント、および Azure Communication Services calling SDK に基づくアプリケーションが含まれます。
  2. Contoso のクライアント アプリケーションは、Megan の着信呼び出しを表示します。クライアント アプリケーションは、着信呼び出し通知を受け取ります。 showIncomingCall メソッドは、Contoso のカスタム ロジックを使用して、電話番号を顧客名に変換します (たとえば、電話番号と顧客名で構成されるキーと値のペアを格納するデータベース)。 情報が取得されると、Contoso のクライアント アプリケーションに Alice 向けの通知が表示されます。
  3. Alice は呼び出しを受け入れます。Alice は、呼び出しを受け入れるボタンを選択し、Alice と Megan の間の接続が確立されます。

ユースケース 3: Teams PSTN 通話を発信する

このシナリオでは、Contoso という企業が Fabrikam という企業に SaaS を提供するマルチテナントのユース ケースを紹介します。 SaaS では、Fabrikam のユーザーが、Teams ユーザーの ID を取得するカスタム Web サイトを介して Teams VoIP 通話を発信することができます。

Diagram is showing user experience of Alice making Teams VoIP call to colleague Megan.

次のシーケンス図は、Teams PSTN 通話を開始するための詳細な手順を示しています。

Sequence diagram is describing detailed set of steps that happens to initiate a Teams VoIP call using Azure Communication Services and Teams.

手順

  1. Contoso のクライアント アプリケーションで Fabrikam の Alice を認証します。Alice は、ブラウザーを使用して Fabrikam の Web ページを開き、認証を行います。 詳細については、Teams ID を使用した認証に関するページを参照してください。 認証が成功すると、Alice は最初のページにリダイレクトされます。
  2. Fabrikam の組織とその ID からユーザーを読み込みます。Contoso クライアント アプリケーションは、Graph API を利用して、Fabrikam のテナントからユーザーのリストを取得します。 この操作を実行するには、Alice または彼女の管理者が Graph API に同意を示す必要があります。 Graph API コマンドの詳細については、ドキュメントを参照してください。
GET https://graph.microsoft.com/v1.0/users
Permissions: User.ReadBasic.All (delegated)
Response: response.body.value[1].displayName; // ”Megan Bowen”
	  response.body.value[1].id; // "e8b753b5-4117-464e-9a08-713e1ff266b3"

Contoso のクライアント アプリケーションには、ユーザーのリストと、特定のユーザーへの呼び出しを開始する機能が表示されます。

  1. Megan への呼び出しを開始します。Alice は、Contoso のクライアント アプリケーションで Megan への Teams VoIP 呼び出しを開始するボタンを選択します。 クライアント アプリケーションは、Azure Communication Services calling SDK を使用して、呼び出し機能を提供します。 Teams クライアントでの呼び出しは Teams チャットに関連付けられています。 まず、アプリケーションは VoIP 通話の専用のチャットの作成を要求します。
POST https://graph.microsoft.com/v1.0/chats
Body:
{
    "chatType": "oneOnOne",
    "members": [
        {
            "@odata.type": "#microsoft.graph.aadUserConversationMember",
            "roles": [
                "owner"
            ],
            "user@odata.bind": "https://graph.microsoft.com/v1.0/users('8c0a1a67-50ce-4114-bb6c-da9c5dbcf6ca')"
        },
        {
            "@odata.type": "#microsoft.graph.aadUserConversationMember",
            "roles": [
                "owner"
            ],
            "user@odata.bind": "https://graph.microsoft.com/v1.0/users('e8b753b5-4117-464e-9a08-713e1ff266b3')"
        }
    ]
}
Permissions: Chat.Create (delegated)
Response: response.body.value.id; // "19:8c0a1a67-50ce-4114-bb6c-da9c5dbcf6ca_e8b753b5-4117-464e-9a08-713e1ff266b3@unq.gbl.spaces"

次に、クライアント アプリケーションが、最初の手順で取得した Azure Communication Services アクセス トークンを保持する callAgent のインスタンスを作成します。

const callClient = new CallClient(); 
tokenCredential = new AzureCommunicationTokenCredential('<AlICE_ACCESS_TOKEN>');
callAgent = await callClient.createTeamsCallAgent(tokenCredential)

次に、Megan の Teams ID への呼び出しを開始します。

var teamsUser = { microsoftTeamsUserId: 'e8b753b5-4117-464e-9a08-713e1ff266b3'};
const oneToOneCall = callAgent.startCall([teamsUser], { threadId: '19:8c0a1a67-50ce-4114-bb6c-da9c5dbcf6ca_e8b753b5-4117-464e-9a08-713e1ff266b3@unq.gbl.spaces' });
  1. VoIP 呼び出しを Megan に接続します。この呼び出しは Teams を介してルーティングされ、Megan に関連付けられている Teams クライアントを呼び出します。 Megan は、Microsoft Entra ID で定義された名前を持つ Alice からの着信呼び出しを確認します。
  2. Megan は呼び出しを受け入れます。Megan が呼び出しを受け入れると、Alice と Megan の間の接続が確立されます。

ユースケース 4: 受信 Teams VoIP 通話を受信する

このシナリオでは、Contoso という企業が Fabrikam という企業に SaaS を提供するマルチテナントのユース ケースを紹介します。 SaaS では、Fabrikam のユーザーが、カスタム Web サイトを介して Teams VoIP 通話を受信できます。この Web サイトは、Teams ユーザーの ID を取得し、Teams ユーザーに適用されているルーティング ポリシーを適用します。

Diagram is showing user experience of Alice receiving Teams VoIP call from customer Megan.

次のシーケンス図は、着信 Teams VoIP 通話を受け入れるための詳細な手順を示しています。

Sequence diagram is describing detailed set of steps that happens to receive a Teams VoIP call using Azure Communication Services. Graph API, and Teams.

手順

  1. Contoso のクライアント アプリケーションで Fabrikam の Alice を認証します。Alice は、ブラウザーを使用して Fabrikam の Web ページを開き、認証を行います。 詳細については、Teams ID を使用した認証に関するページを参照してください。 認証が成功すると、Alice は最初のページにリダイレクトされます。
  2. 通話を受け入れるためにサブスクライブします。クライアント アプリケーションは、Azure Communication Services calling SDK を使用して、呼び出し機能を提供します。 まず、最初の手順で取得した Azure Communication Services アクセス トークンを保持する callAgent のインスタンスを作成します。
const callClient = new CallClient(); 
tokenCredential = new AzureCommunicationTokenCredential('<AlICE_ACCESS_TOKEN>');
callAgent = await callClient.createTeamsCallAgent(tokenCredential)

次に、アプリケーションは着信呼び出しイベントをサブスクライブします。

const incomingCallHandler = async (args: { teamsIncomingCall: TeamsIncomingCall }) => {
    
    const incomingCall = args.teamsIncomingCall;
    
    // Get information about caller
    var callerInfo = incomingCall.callerInfo
    
    showIncomingCall(callerInfo,incomingCall);
};
callAgent.on('incomingCall', incomingCallHandler);

showIncomingCall メソッドは、着信を示し、通話の受け入れと拒否のための 2 つのボタンを示すユーザー インターフェイスをレンダリングする Contoso のカスタム メソッドです。 受け入れボタンを選択した場合は、次のコードが使用されます。

// Accept the call
var call = await incomingCall.accept();

拒否ボタンを選択した場合は、次のコードが使用されます。

// Reject the call
incomingCall.reject();
  1. Megan が、Teams ユーザーである Alice に対する VoIP 呼び出しを開始します。Megan は、自分の Teams デスクトップ クライアントを使用して Alice を呼び出します。 Teams インフラストラクチャは、Alice に関連付けられているすべてのエンドポイントを呼び出します。 これには、Teams のデスクトップ、モバイル、Web クライアント、および Azure Communication Services calling SDK に基づくアプリケーションが含まれます。
  2. Contoso のクライアント アプリケーションは、Megan の着信呼び出しを表示します。クライアント アプリケーションは、着信呼び出し通知を受け取ります。 showIncomingCall メソッドは Graph API を使用して Teams ユーザー ID を表示名に変換します。
GET https://graph.microsoft.com/v1.0/users/e8b753b5-4117-464e-9a08-713e1ff266b3
Permissions: User.Read (delegated)
Response: response.body.value.displayName; // ”Megan Bowen”
	  response.body.value.id; // "e8b753b5-4117-464e-9a08-713e1ff266b3"

情報が取得されると、Contoso のクライアント アプリケーションに Alice 向けの通知が表示されます。

  1. Alice は呼び出しを受け入れます。Alice は、呼び出しを受け入れるボタンを選択し、Alice と Megan の間の接続が確立されます。

ユースケース 5: Teams の会議に参加する

このシナリオでは、Contoso という企業が Fabrikam という企業に SaaS を提供するマルチテナントのユース ケースを紹介します。 SaaS では、Fabrikam のユーザーが、Teams ユーザーの ID を取得するカスタム Web サイトを介して Teams の会議に参加することができます。

Diagram is showing user experience of Alice joining Teams Meeting.

次のシーケンス図は、Teams の会議に参加するための詳細な手順を示しています。

Sequence diagram is describing detailed set of steps that happens to join a Teams meeting using Azure Communication Services, Graph API, and Teams.

手順

  1. Contoso のクライアント アプリケーションで Fabrikam の Alice を認証します。Alice は、ブラウザーを使用して Fabrikam の Web ページを開き、認証を行います。 詳細については、Teams ID を使用した認証に関するページを参照してください。 認証が成功すると、Alice は最初のページにリダイレクトされます。
  2. Teams の会議とその ID を読み込みます。Contoso クライアント アプリケーションは、Graph API を使用して、Fabrikam のユーザーの Teams の会議のリストを取得します。 この操作を実行するには、Alice または彼女の管理者が Graph API に同意を示す必要があります。 Graph API コマンドの詳細については、ドキュメントを参照してください。
GET https://graph.microsoft.com/v1.0/me/calendar/calendarView?startDateTime={start_datetime}&endDateTime={end_datetime}
Permissions: Calendars.Read (delegated)
Response: response.body.value[0].subject; // ”Project Tailspin”
	  response.body.value[0].onlineMeeting.joinUrl; // "https://teams.microsoft.com/l/meetup-join/..."
	  response.body.value[0].start.dateTime;
	  response.body.value[0].end.dateTime;
	  response.body.value[0].location.displayName;

土に、Contoso のクライアント アプリケーションが、Teams の会議のリストと参加のための機能を表示します。

  1. Teams の会議 "Project Tailspin" に参加します。Alice は、Contoso のクライアント アプリケーションで Teams の会議 "Project tailspin" に参加するためのボタンを選択します。 クライアント アプリケーションは、Azure Communication Services calling SDK を使用して、呼び出し機能を提供します。 クライアント アプリケーションが、最初の手順で取得した Azure Communication Services アクセス トークンを保持する callAgent のインスタンスを作成します。
const callClient = new CallClient(); 
tokenCredential = new AzureCommunicationTokenCredential('<AlICE_ACCESS_TOKEN>');
callAgent = await callClient.createTeamsCallAgent(tokenCredential)

次に、アプリケーションは、受信した joinUrl を使用して会議に参加します。

var meetingLocator = new TeamsMeetingLinkLocator("https://teams.microsoft.com/l/meetup-join/...");
callAgent.startCallJoinAsync(meetingLocator , new JoinCallOptions());

Alice が、Teams の会議に参加します。

  1. Teams の会議に参加している他の参加者に提供されるエクスペリエンスは、標準の Teams の会議です。 構成と招待状に基づいて、Teams の会議には、Teams ユーザー、チーム Web クライアントを使用している Teams 匿名ユーザー、Teams デスクトップ クライアント、Teams モバイル クライアント、Communication Services calling SDK に基づくアプリケーションを使用している Azure Communication Services ユーザー、または電話を使用しているユーザーが参加できます。

次のステップ

次の記事が役立つ可能性があります。