共用方式為


擴充通話體驗

您可以使用透過 Microsoft Teams 虛擬約會預約或透過 Microsoft Graph 虛擬約會 API 建立的現成虛擬約會體驗,讓取用者加入虛擬約會的 Microsoft 託管虛擬約會體驗。 如果您擁有 Microsoft Teams Premium,可以透過會議主題進一步自訂體驗,讓您選擇整個體驗中使用的影像、標誌和色彩。 Azure 通訊服務可協助想要自行裝載解決方案或自訂體驗的開發人員。

Azure 通訊服務提供三個自訂選項:

  • 透過現成可用使用者介面複合來自訂使用者介面。
  • 使用 UI 程式庫元件和複合來建置您自己的版面配置。
  • 使用軟體開發套件建置您自己的使用者介面

必要條件

本文的讀者應該了解下列主題:

可自訂的現成可用使用者介面複合

您可以整合 Azure 通訊服務使用者介面程式庫所提供的現成可用會議複合。 此複合提供現成的 React 元件,可整合到您的 Web 應用程式。 您可以在這裡找到更多有關搭配不同 Web 架構使用此複合的詳細資訊。

  1. 首先,提供應用程式使用者的詳細資料。 若要這樣做,請建立 Azure 通訊通話配接器引數 來保存使用者識別碼、存取權杖、顯示名稱和 Teams 會議 URL 的相關資訊。
const callAdapterArgs = {
        userId: new CommunicationUserIdentifier(<USER_ID>'),
        displayName: “Adele Vance”,
        credential: new AzureCommunicationTokenCredential('<TOKEN>'),
        locator: { meetingLink: '<TEAMS_MEETING_URL>'},
        endpoint: '<AZURE_COMMUNICATION_SERVICE_ENDPOINT_URL>';
}
  1. 使用 useAzureCommunicationCallAdapter 建立自訂 React 勾點,以建立通話配接器。
const callAdapter = useAzureCommunicationCallAdapter(callAdapterArgs);
  1. 傳回提供會議體驗的 React 元件 CallComposite
return (
  <div>
    <CallWithChatComposite
      adapter={callAdapter}
    />
  </div>
);

您可以使用自己的主題來進一步自訂使用者介面以進行自訂和商標,或最佳化桌面或行動裝置版面配置。 如果您想要進一步自訂配置,可以使用預先存在的使用者介面元件,如後續小節所述。

利用使用者介面元件建置您自己的版面配置

Azure 通訊服務使用者介面程式庫可讓您存取個別元件,以自訂其使用者介面及其行為。 下圖醒目提示可供使用的個別元件。

圖表顯示會議配置分解成個別使用者介面通話元件。

下表詳細說明個別元件:

元件 描述
方格版面配置 方格元件,以將影片圖格組織成 NxN 方格
影片圖格 當可用時顯示影片串流的元件,以及不可用時的預設靜態元件
控制列 用來組織 DefaultButtons 的容器,以連結至特定通話動作,例如靜音或共用畫面
影片庫 新增參與者時動態變更的周全影片庫元件

您也可以自訂聊天體驗。 下圖醒目提示聊天的個別元件。

圖表顯示會議配置分解成個別使用者介面聊天元件。

下表提供個別元件連結的描述

元件 描述
訊息對話 轉譯聊天訊息、系統訊息和自訂訊息的容器
傳送方塊 具有離散傳送按鈕的文字輸入元件
訊息狀態指標 顯示已傳送訊息狀態的多重狀況訊息狀態指標元件
輸入指標 文字元件,可轉譯在對話中主動輸入的參與者

讓我們看看如何使用控制列元件,以這個順序僅顯示相機和麥克風按鈕,以及控制選取這些按鈕之後執行的動作。

export const AllButtonsControlBarExample: () => JSX.Element = () => {
  return (
    <FluentThemeProvider>
      <ControlBar layout={'horizontal'}>
        <CameraButton
          onClick={() => {  /*handle onClick*/ }}
        />
        <MicrophoneButton
          onClick={() => {  /*handle onClick*/ }}
        />
      </ControlBar>
    </FluentThemeProvider>
)}

如需更多自訂,您可以新增更多預先定義的按鈕,且您可以變更其色彩、圖示或順序。 如果您有想要使用的現有使用者介面元件,或想要更充分掌控體驗,可以使用基礎軟體開發套件 (SDK) 來建置您自己的使用者介面。

使用軟體開發套件建置您自己的使用者介面

Azure 通訊服務提供聊天和通話 SDK,以建置虛擬約會體驗。 此體驗包含三個主要部分:驗證通話聊天。 我們針對每個範例都有專用的快速入門和 GitHub 範例,但下列程式碼範例示範如何啟用體驗。 使用者的驗證需要建立或選取現有的 Azure 通訊服務使用者,並發出權杖。 您可以使用連接字串來建立 CommunicationIdentityClient。 建議您在後端實作此邏輯,因為與用戶端共用連線字串並不安全。

var client = new CommunicationIdentityClient(connectionString);

使用 CreateUserAsync 方法,建立與您的 Azure 通訊服務資源相關聯的 Azure 通訊服務使用者。

var identityResponse = await client.CreateUserAsync();
var identity = identityResponse.Value;

使用聊天和通話範圍,發出與 Azure 通訊服務使用者相關聯的存取權杖。

var tokenResponse = await client.GetTokenAsync(identity, scopes: new [] { CommunicationTokenScope.VoIP, CommunicationTokenScope.Chat  });
var token =  tokenResponse.Value.Token;

現在您已擁有指派給此使用者的有效 Azure 通訊服務使用者和存取權杖。 您現在可以整合通話體驗。 這個部分是在用戶端上實作,在此範例中,假設屬性是從後端傳播至用戶端。 下列教學課程示範如何執行。 首先建立 CallClient 來起始 SDK,並讓您存取 CallAgent 和裝置管理員。

const callClient = new CallClient(); 
Create CallAgent from the client and define the display name of the user.
tokenCredential = new AzureCommunicationTokenCredential(token);
callAgent = await callClient.createCallAgent(tokenCredential, {displayName: 'Adele Vance'})

根據 Teams 會議 URL 加入與虛擬約會相關聯的 Microsoft Teams 會議。

var meetingLocator = new TeamsMeetingLinkLocator("<TEAMS_MEETING_URL>");
callAgent.join(meetingLocator , new JoinCallOptions());

這些步驟可讓您加入 Teams 會議。 然後,您可以透過管理喇叭、麥克風、相機和個別視訊串流來擴充這些步驟。 接著,您也可以選擇整合虛擬約會體驗中的聊天。

建立 ChatClient 來起始 SDK,並讓您存取通知和 ChatThreadClient

const chatClient = new ChatClient(
    endpointUrl,
    new AzureCommunicationTokenCredential(token)
  );

訂閱以接收 Azure 通訊服務使用者的即時聊天通知。

await chatClient.startRealtimeNotifications();

收到訊息時訂閱事件。

// subscribe to new message notifications
chatClient.on("chatMessageReceived", (e) => { /*Render message*/})

建立 ChatThreadClient 以起始用戶端,以進行與特定聊天對話相關的作業。

chatThreadClient = await chatClient.getChatThreadClient(threadIdInput.value);

在與虛擬約會相關聯的 Teams 會議聊天中傳送聊天訊息。

let sendMessageRequest = { content: 'Hello world!' };
let sendMessageOptions = { senderDisplayName : 'Adele Vance' };
let sendChatMessageResult = await chatThreadClient.sendMessage(sendMessageRequest, sendMessageOptions);

透過這三個階段,您有一個使用者可以使用音訊、視訊、螢幕共用和聊天來加入虛擬約會。 此方法可讓您完全控制使用者介面和個別動作的行為。

下一步