你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

适用于 .NET 的 Azure 通信室客户端库 - 版本 1.0.0

此包包含适用于 Azure 通信服务 会议室服务的 C# SDK。 Azure 通信服务 (ACS) 会议室是一组 API,由 Contoso 服务器应用程序用来创建具有固定生存期和参与者集的服务器托管会话空间,并预先定义服务器层的规则,无论谁何时都可以 (通信,例如计划会议创建) 。

随着 ACS 会议室的正式发布,Contoso 将能够:

- Create a meeting space with known time coordinates (validFrom/validUntil)
- Join voice/video calls within that meeting space using the ACS web calling SDK or native mobile calling SDKs
- Add participants to a room
- Assign pre-defined roles to room participants

最能使用会议室main方案:

- Virtual Visits (e.g., telemedicine, remote financial advisor, virtual classroom, etc...)
- Virtual Events (e.g., live event, company all-hands, live concert, etc...)

源代码 | 产品文档 | 样品

入门

安装包

使用 NuGet 安装适用于 .NET 的 Azure 通信室客户端库:

dotnet add package Azure.Communication.Rooms

先决条件

需要 Azure 订阅通信服务资源 才能使用此包。

若要创建新的通信服务,可以使用 Azure 门户Azure PowerShell.NET 管理客户端库

关键概念

RoomsClient 提供创建聊天室、更新会议室、获取会议室、列出会议室、删除聊天室、添加参与者、更新参与者、删除参与者和列出参与者的功能。

使用语句

using Azure.Communication.Rooms

验证客户端

会议室客户端可以使用从 Azure 门户中的 Azure 通信资源获取的连接字符串进行身份验证。

var connectionString = Environment.GetEnvironmentVariable("connection_string") // Find your Communication Services resource in the Azure portal
RoomsClient client = new RoomsClient(connectionString);

示例

创建房间

若要创建聊天室,请从 RoomsClient调用 CreateRoomCreateRoomAsync 函数。 validFromvalidUntilparticipants 参数都是可选的。 如果未 validFrom 提供 和 validUntil ,则 的 validFrom 默认值为当前日期时间,默认值为 validUntilvalidFrom + 180 days。 定义 RoomParticipant时,如果未指定角色,则默认为 Attendee 。 返回的值包含 Response<CommunicationRoom> 创建的房间详细信息,以及发生故障时的状态和关联的错误代码。

// Create communication users using the CommunicationIdentityClient
Response<CommunicationUserIdentifier> communicationUser1 = await communicationIdentityClient.CreateUserAsync();
Response<CommunicationUserIdentifier> communicationUser2 = await communicationIdentityClient.CreateUserAsync();

DateTimeOffset validFrom = DateTimeOffset.UtcNow;
DateTimeOffset validUntil = validFrom.AddDays(1);
RoomParticipant participant1 = new RoomParticipant(communicationUser1.Value); // If role is not provided, then it is set as Attendee by default
RoomParticipant participant2 = new RoomParticipant(communicationUser2.Value) { Role = ParticipantRole.Presenter};
List<RoomParticipant> invitedParticipants = new List<RoomParticipant>
{
    participant1,
    participant2
};

Response<CommunicationRoom> createRoomResponse = await roomsClient.CreateRoomAsync(validFrom, validUntil, invitedParticipants);
CommunicationRoom createCommunicationRoom = createRoomResponse.Value;

更新会议室

validFrom可以通过从 RoomsClient调用 UpdateRoomUpdateRoomAsync 函数来更新所创建房间的 和 validUntil 属性。

validUntil = validFrom.AddDays(30);
Response<CommunicationRoom> updateRoomResponse = await roomsClient.UpdateRoomAsync(createdRoomId, validFrom, validUntil);
CommunicationRoom updateCommunicationRoom = updateRoomResponse.Value;

获取创建的房间

可以通过从 RoomsClient 中调用 GetRoomGetRoomAsync 函数并传入关联的 roomId来检索创建的房间。

Response<CommunicationRoom> getRoomResponse = await roomsClient.GetRoomAsync(createdRoomId);
CommunicationRoom getCommunicationRoom = getRoomResponse.Value;

获取所有会议室

可以通过从 RoomsClient调用 GetRoomsGetRoomsAsync 函数来检索在 ACS 资源下创建的所有有效会议室。

AsyncPageable<CommunicationRoom> allRooms = roomsClient.GetRoomsAsync();
await foreach (CommunicationRoom room in allRooms)
{
    Console.WriteLine($"Room with id {room.Id} is valid from {room.ValidFrom} to {room.ValidUntil}.");
}

删除房间

若要删除会议室,请 DeleteRoom 从 RoomsClient 调用 或 DeleteRoomAsync 函数。

Response deleteRoomResponse = await roomsClient.DeleteRoomAsync(createdRoomId);

在聊天室中添加或更新参与者

若要添加新参与者或更新现有参与者,请从 RoomsClient 调用 AddOrUpdateParticipantsAddOrUpdateParticipantsAsync 函数。

Response<CommunicationUserIdentifier> communicationUser3 = await communicationIdentityClient.CreateUserAsync();
RoomParticipant newParticipant = new RoomParticipant(communicationUser3.Value) { Role = ParticipantRole.Consumer };

// Previous snippet for create room added participant2 as Presenter
participant2 = new RoomParticipant(communicationUser2) { Role = ParticipantRole.Attendee };

List<RoomParticipant> participantsToAddOrUpdate = new List<RoomParticipant>
{
    participant2,   // participant2 updated from Presenter to Attendee
    newParticipant, // newParticipant added to the room
};

Response addOrUpdateParticipantResponse = await roomsClient.AddOrUpdateParticipantsAsync(createdRoomId, participantsToAddOrUpdate);

删除聊天室中的参与者

若要从聊天室中删除参与者,请从 RoomsClient 调用 RemoveParticipantsRemoveParticipantsAsync 函数。

List<CommunicationIdentifier> participantsToRemove = new List<CommunicationIdentifier>
{
   communicationUser1,
   communicationUser2
};
Response removeParticipantResponse = await roomsClient.RemoveParticipantsAsync(createdRoomId, participantsToRemove);

在聊天室中获取参与者

若要从聊天室获取所有参与者,请从 RoomsClient 调用 GetParticipantsGetParticipantsAsync 函数。 返回的值是 Pageable<RoomParticipant>AsyncPageable<RoomParticipant> ,其中包含参与者的分页列表。

AsyncPageable<RoomParticipant> allParticipants = roomsClient.GetParticipantsAsync(createdRoomId);
await foreach (RoomParticipant participant in allParticipants)
{
    Console.WriteLine($" Participant with id {participant.CommunicationIdentifier.RawId} is a {participant.Role}");
}

疑难解答

服务响应

对于 RequestFailedException 任何不成功的请求,会作为服务响应引发 。 异常包含有关从服务返回的响应代码的信息。

try
{
    CommunicationIdentityClient communicationIdentityClient = CreateInstrumentedCommunicationIdentityClient();
    Response<CommunicationUserIdentifier> communicationUser1 = await communicationIdentityClient.CreateUserAsync();
    Response<CommunicationUserIdentifier> communicationUser2 = await communicationIdentityClient.CreateUserAsync();
    DateTimeOffset validFrom = DateTimeOffset.UtcNow;
    DateTimeOffset validUntil = validFrom.AddDays(1);
    List<RoomParticipant> createRoomParticipants = new List<RoomParticipant>();
    RoomParticipant participant1 = new RoomParticipant(communicationUser1.Value) { Role = ParticipantRole.Presenter };
    RoomParticipant participant2 = new RoomParticipant(communicationUser2.Value) { Role = ParticipantRole.Attendee };
    Response<CommunicationRoom> createRoomResponse = await roomsClient.CreateRoomAsync(validFrom, validUntil, createRoomParticipants);
    CommunicationRoom createRoomResult = createRoomResponse.Value;
}
catch (RequestFailedException ex)
{
    Console.WriteLine(ex.Message);
}

后续步骤

贡献

本项目欢迎贡献和建议。 大多数贡献要求你同意贡献者许可协议 (CLA),并声明你有权(并且确实有权)授予我们使用你的贡献的权利。 有关详细信息,请访问 cla.microsoft.com

此项目采用了 Microsoft 开放源代码行为准则。 有关详细信息,请参阅行为准则常见问题解答,或如果有任何其他问题或意见,请与 联系。

发布 sdk 后更新示例代码链接