共用方式為


Azure 通訊服務的 Teams 身分識別支援 - 使用案例

Microsoft Teams 提供由 Microsoft Entra ID 所管理的身分識別,以及由 Teams 系統管理中心和原則所控制的通話體驗。 使用者可能已獲授權來啟用通話和 Microsoft Teams 電話的進階通話功能。 Azure 通訊服務的 Teams 身分識別支援可讓您管理 Teams voice over IP (VoIP) 通話、Teams 通話,以及加入 Teams 會議。 開發人員可以使用圖形 API 來擴充 Azure 通訊服務,以提供來自 Microsoft 365 生態系統的內容相關資料。 此頁面帶來靈感,描述如何使用現有的 Microsoft 技術,為 Teams 使用者和 Azure 通訊服務通話 SDK 的通話案例提供端對端體驗。

使用案例 1:撥出 Teams PSTN 電話

此案例顯示多租用戶使用案例,其中 Contoso 公司提供 SaaS 給 Fabrikam 公司。 SaaS 可讓 Fabrikam 的使用者透過自訂網站撥打 Teams 電話,該網站會採用 Teams 使用者的身分識別,以及指派給該 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 的網頁並驗證。 您可以找到有關使用 Teams 身分識別進行驗證的其他詳細資訊。 如果驗證成功,Alice 會重新導向初始頁面。
  2. 載入客戶及其 PSTN 號碼:Contoso 提供自訂邏輯來擷取客戶及其相關電話號碼的清單。 此清單在初始頁面上呈現給 Alice。
  3. 打電話給 Megan:Alice 在 Contoso 的用戶端應用程式中選取按鈕來撥打 PSTN 電話給 Megan。 用戶端應用程式使用 Azure 通訊服務通話 SDK 來提供通話功能。 首先會建立 callAgent 的執行個體,其中保存在第一個步驟期間取得的 Azure 通訊服務存取權杖。
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. 為 Megan 接通 PSTN 電話:通話經過指派給 Alice 的 Teams 電話連線發送,到達 PSTN 網路,並撥打所提供的電話號碼。 Megan 看到 Alice 的 Teams 使用者相關電話號碼來電。
  2. Megans 接受通話:Megan 接受通話,於是 Alice 與 Megan 之間建立連線。

使用案例 2:接聽 Teams 來電

此案例顯示多租用戶使用案例,其中 Contoso 公司提供 SaaS 給 Fabrikam 公司。 SaaS 可讓 Fabrikam 的使用者透過自訂網站接聽 Teams 電話,該網站會採用 Teams 使用者的身分識別,以及指派給該 Teams 使用者的 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 的網頁並驗證。 您可以找到有關使用 Teams 身分識別進行驗證的其他詳細資訊。 如果驗證成功,Alice 會重新導向初始頁面。
  2. 訂閱以接聽來電:用戶端應用程式使用 Azure 通訊服務通話 SDK 來提供通話功能。 首先會建立 callAgent 的執行個體,其中保存在第一個步驟期間取得的 Azure 通訊服務存取權杖。
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 方法是 Contoso 的自訂方法,可呈現使用者介面以指出來電,還有兩個按鈕可接受和拒絕通話。 如果您選取接受按鈕,則會使用下列程式碼:

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

如果您選取拒絕按鈕,則會使用下列程式碼:

// Reject the call
incomingCall.reject();
  1. Megan 開始撥打指派給 Teams 使用者 Alice 的 PSTN 號碼:Megan 打電話給 Alice。 電訊廠商網路會連線到指派給 Alice 的 Teams 電話連線,並給 Alice 註冊的所有 Teams 端點打電話。 其中包括:以 Azure 通訊服務通話 SDK 為基礎的 Teams 桌面、行動、Web 用戶端和應用程式。
  2. Contoso 的用戶端應用程式顯示 Megan 的來電:用戶端應用程式收到來電通知。 showIncomingCall 方法會使用 Contoso 的自訂邏輯,將電話號碼轉譯為客戶的名稱 (例如,資料庫中儲存由電話號碼和客戶名稱組成的機碼值組)。 擷取資訊時,Contoso 的用戶端應用程式中會向 Alice 顯示通知。
  3. Alice 接受通話:Alice 選取按鈕來接受通話,於是 Alice 與 Megan 之間建立連線。

使用案例 3:撥出 Teams VoIP 電話

此案例顯示多租用戶使用案例,其中 Contoso 公司提供 SaaS 給 Fabrikam 公司。 SaaS 可讓 Fabrikam 的使用者透過自訂網站 (採用 Teams 使用者的身分識別) 撥打 Teams VoIP 電話。

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

下列順序圖顯示起始 Teams VoIP 通話的詳細步驟:

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 的網頁並驗證。 您可以找到有關使用 Teams 身分識別進行驗證的其他詳細資訊。 如果驗證成功,Alice 會重新導向初始頁面。
  2. 從 Fabrikam 的組織載入使用者及其識別碼:Contoso 用戶端應用程式利用圖形 API,從 Fabrikam 的租用戶取得使用者清單。 Alice 或其管理員必須同意圖形 API 執行此動作。 請參閱文件以深入了解圖形 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 的用戶端應用程式中選取按鈕來撥打 Teams VoIP 電話給 Megan。 用戶端應用程式使用 Azure 通訊服務通話 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"

然後,用戶端應用程式會建立 callAgent 的執行個體,其中保存在第一個步驟期間取得的 Azure 通訊服務存取權杖。

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

然後,您開始撥打 Megan 的 Teams 識別碼。

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. 為 Megan 接通 VoIP 電話:通話經過 Teams 發送,並打電話給 Megan 相關聯的 Teams 用戶端。 Megan 看到 Alice 的來電 (其名稱定義於 Microsoft Entra ID 中)。
  2. Megans 接受通話:Megan 接受通話,於是 Alice 與 Megan 之間建立連線。

使用案例 4:接聽 Teams VoIP 來電

此案例顯示多租用戶使用案例,其中 Contoso 公司提供 SaaS 給 Fabrikam 公司。 SaaS 可讓 Fabrikam 的使用者透過自訂網站接聽 Teams VoIP 電話,該網站會採用 Teams 使用者的身分識別,並將路由原則套用至 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 的網頁並驗證。 您可以找到有關使用 Teams 身分識別進行驗證的其他詳細資訊。 如果驗證成功,Alice 會重新導向初始頁面。
  2. 訂閱以接聽來電:用戶端應用程式使用 Azure 通訊服務通話 SDK 來提供通話功能。 首先會建立 callAgent 的執行個體,其中保存在第一個步驟期間取得的 Azure 通訊服務存取權杖。
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 方法是 Contoso 的自訂方法,可呈現使用者介面以指出來電,還有兩個按鈕可接受和拒絕通話。 如果您選取接受按鈕,則會使用下列程式碼:

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

如果您選取拒絕按鈕,則會使用下列程式碼:

// Reject the call
incomingCall.reject();
  1. Megan 開始撥打 VoIP 電話給 Teams 使用者 Alice:Megan 使用 Teams 桌面用戶端打電話給 Alice。 Teams 基礎結構會打電話給 Alice 相關聯的所有端點。 其中包括:以 Azure 通訊服務通話 SDK 為基礎的 Teams 桌面、行動、Web 用戶端和應用程式。
  2. Contoso 的用戶端應用程式顯示 Megan 的來電:用戶端應用程式收到來電通知。 showIncomingCall 方法會使用圖形 API,將 Teams 使用者識別碼轉譯為顯示名稱。
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 公司提供 SaaS 給 Fabrikam 公司。 SaaS 可讓 Fabrikam 的使用者透過自訂網站 (採用 Teams 使用者的身分識別) 加入 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 的網頁並驗證。 您可以找到有關使用 Teams 身分識別進行驗證的其他詳細資訊。 如果驗證成功,Alice 會重新導向初始頁面。
  2. 載入 Teams 會議及其識別碼:Contoso 用戶端應用程式利用圖形 API 來取得 Fabrikam 使用者的 Teams 會議清單。 Alice 或其管理員必須同意圖形 API 執行此動作。 請參閱文件以深入了解圖形 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 通訊服務通話 SDK 來提供通話功能。 用戶端應用程式會建立 callAgent 的執行個體,其中保存在第一個步驟期間取得的 Azure 通訊服務存取權杖。
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 使用者、Teams 匿名使用者 (使用 Team Web 用戶端、Teams 桌面用戶端、Teams 行動用戶端)、Azure 通訊服務使用者 (透過以通訊服務通話 SDK 為基礎的應用程式),或使用電話的使用者。

下一步

您可能會對下列文章感興趣: