你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
了解标识符类型
通信服务 SDK 和 REST API 使用标识符类型来识别谁正在与谁通信。 例如,标识符指定被呼叫方,或聊天消息的发送方。
根据上下文使用额外的属性包装标识符,例如在聊天 SDK 中的 ChatParticipant
内或在呼叫 SDK 中的 RemoteParticipant
内进行包装。
本文介绍不同类型的标识符,以及它们在不同编程语言中的外观。 此外提供有关如何使用标识符的提示。
CommunicationIdentifier 类型
有些用户标识是你自己创建的,此外还存在一些外部标识。 Microsoft Teams 用户和电话号码是在互操作方案中发挥作用的外部标识。 在这些不同的标识类型中,每种类型都有一个对应的标识符表示该类型。 标识符是一种结构化类型,它提供类型安全性,能够很好地处理编辑器的代码完成。
通信用户
CommunicationUserIdentifier
接口表示使用标识 SDK 或 REST API 创建的用户标识。 如果应用程序不使用 Microsoft Teams 互操作性或电话功能,则它是唯一使用的标识符。
基本用法
// at some point you will have created a new user identity in your trusted service
const newUser = await identityClient.createUser();
// and then send newUser.communicationUserId down to your client application
// where you can again create an identifier for the user
const sameUser = { communicationUserId: newUserId };
API 参考
Microsoft Teams 用户
MicrosoftTeamsUserIdentifier
接口代表 Teams 用户及其 Microsoft Entra 用户对象 ID。 可以通过 Microsoft Graph REST API /users 终结点从响应中的 id
属性检索 Microsoft Entra 用户对象 ID。 有关如何使用 Microsoft Graph 的详细信息,请尝试使用 Graph 浏览器并查看 Graph SDK。 或者,可以在用户登录并获取令牌后,在 Microsoft Entra 令牌或 Microsoft Entra 访问令牌中找到作为 oid
声明提供的 ID。
基本用法
// get the Teams user's ID from Graph APIs if only the email is known
const user = await graphClient.api("/users/bob@contoso.com").get();
// create an identifier
const teamsUser = { microsoftTeamsUserId: user.id };
// if you're not operating in the public cloud, you must also pass the right Cloud type.
const gcchTeamsUser = { microsoftTeamsUserId: userId, cloud: "gcch" };
API 参考
电话号码
PhoneNumberIdentifier
接口表示电话号码。 服务假设电话号码采用 E.164 格式。
基本用法
// create an identifier
const phoneNumber = { phoneNumber: "+112345556789" };
API 参考
Microsoft Teams 应用程序
MicrosoftTeamsAppIdentifier
接口代表 Teams 语音应用程序的机器人,例如呼叫队列和自动助理及其 Microsoft Entra 机器人对象 ID。 应使用资源帐户配置 Teams 应用程序。 可以通过 Microsoft Graph REST API /users 终结点从响应中的 id
属性检索 Microsoft Entra 机器人对象 ID。 有关如何使用 Microsoft Graph 的详细信息,请尝试使用 Graph 浏览器并查看 Graph SDK。
基本用法
// Get the Microsoft Teams App's ID from Graph APIs
const users = await graphClient.api("/users")
.filter(filterConditions)
.select('displayName,id')
.get();
//Here we assume that you have a function getBotFromUsers that gets the bot from the returned response
const bot = getBotFromUsers(users);
// Create an identifier
const teamsAppIdentifier = { teamsAppId: bot.id };
// If you're not operating in the public cloud, you must also pass the right Cloud type.
const gcchTeamsAppIdentifier = { teamsAppId: id, cloud: "gcch" };
API 参考
未知
UnknownIdentifier
接口面向未来,如果你使用的是旧版 SDK,而最近引入了新的标识符类型,则你可能会看到此接口。 服务中的任何未知标识符都将在 SDK 中反序列化为 UnknownIdentifier
。
基本用法
// create an identifier
const unknownId = { id: "a raw id that originated in the service" };
API 参考
如何处理 CommunicationIdentifier
基接口
为传入 SDK 的具体类型构造标识符时,SDK 会返回一个 CommunicationIdentifierKind
,即一个可区分联合。 可以轻松缩小为具体类型,我们建议在模式匹配中使用 switch-case 语句:
switch (communicationIdentifier.kind)
{
case "communicationUser":
// TypeScript has narrowed communicationIdentifier to be a CommunicationUserKind
console.log(`Communication user: ${communicationIdentifier.communicationUserId}`);
break;
case "microsoftTeamsUser":
// narrowed to MicrosoftTeamsUserKind
console.log(`Teams user: ${communicationIdentifier.microsoftTeamsUserId}`);
break;
case "microsoftTeamsApp":
// narrowed to MicrosoftTeamsAppIdentifier
console.log(`Teams app: ${communicationIdentifier.teamsAppId}`);
break;
case "phoneNumber":
// narrowed to PhoneNumberKind
console.log(`Phone number: ${communicationIdentifier.phoneNumber}`);
break;
case "unknown":
// narrowed to UnknownIdentifierKind
console.log(`Unknown: ${communicationIdentifier.id}`);
break;
default:
// be careful here whether you want to throw because a new SDK version
// can introduce new identifier types
break;
}
标识符接口的设计使你不必指定 kind
来降低详细程度,并且仅在从 SDK 返回时才使用具有 kind
属性的区分联合。 但是,如果你需要将标识符转换为其对应的区分联合类型,可以使用以下帮助器:
const identifierKind = getIdentifierKind(identifier); // now you can switch-case on the kind
原始 ID 表示形式
有时需要将标识符序列化为平面字符串。 例如,如果你要将标识符存储在数据库表中,或者要将其用作 URL 参数。
为此,标识符可以采用名为 RawId
的另一种表示形式。 标识符始终可以转换为其对应的原始 ID,而有效的原始 ID 始终可以转换为标识符。
从 azure-communication-common@2.1.0
开始,SDK 可以帮助完成这种转换:
// get an identifier's raw Id
const rawId = getIdentifierRawId(communicationIdentifier);
// create an identifier from a given raw Id
const identifier = createIdentifierFromRawId(rawId);
无效的原始 ID 只会在 SDK 中转换为 UnknownIdentifier
,任何验证只会在服务端发生。
通信用户
CommunicationUserIdentifier
表示使用标识 SDK 或 REST API 创建的用户标识。 如果应用程序不使用 Microsoft Teams 互操作性或电话功能,则它是唯一使用的标识符。
基本用法
// at some point you will have created a new user identity in your trusted service
CommunicationUserIdentifier newUser = await identityClient.CreateUser();
// and then send newUser.Id down to your client application
// where you can again create an identifier for the user
var sameUser = new CommunicationUserIdentifier(newUserId);
API 参考
Microsoft Teams 用户
MicrosoftTeamsUserIdentifier
代表 Teams 用户及其 Microsoft Entra 用户对象 ID。 可以通过 Microsoft Graph REST API /users 终结点从响应中的 id
属性检索 Microsoft Entra 用户对象 ID。 有关如何使用 Microsoft Graph 的详细信息,请尝试使用 Graph 浏览器并查看 Graph SDK。 或者,可以在用户登录并获取令牌后,在 Microsoft Entra 令牌或 Microsoft Entra 访问令牌中找到作为 oid
声明提供的 ID。
基本用法
// get the Teams user's ID from Graph APIs if only the email is known
var user = await graphClient.Users["bob@contoso.com"]
.Request()
.GetAsync();
// create an identifier
var teamsUser = new MicrosoftTeamsUserIdentifier(user.Id);
// if you're not operating in the public cloud, you must also pass the right Cloud type.
var gcchTeamsUser = new MicrosoftTeamsUserIdentifier(userId: userId, cloud: CommunicationCloudEnvironment.Gcch);
API 参考
电话号码
PhoneNumberIdentifier
表示电话号码。 服务假设电话号码采用 E.164 格式。
基本用法
// create an identifier
var phoneNumber = new PhoneNumberIdentifier("+112345556789");
API 参考
Microsoft Teams 应用程序
MicrosoftTeamsAppIdentifier
接口代表 Teams 语音应用程序的机器人,例如呼叫队列和自动助理及其 Microsoft Entra 机器人对象 ID。 应使用资源帐户配置 Teams 应用程序。 可以通过 Microsoft Graph REST API /users 终结点从响应中的 id
属性检索 Microsoft Entra 机器人对象 ID。 有关如何使用 Microsoft Graph 的详细信息,请尝试使用 Graph 浏览器并查看 Graph SDK。
基本用法
// Get the Microsoft Teams App's ID from Graph APIs
var users = await graphClient.Users.GetAsync((requestConfiguration) =>
{
requestConfiguration.QueryParameters.Select = new string []{ "displayName","id" };
requestConfiguration.QueryParameters.Filter = filterConditions;
});
// Here we assume that you have a function GetBotFromUsers that gets the bot from the returned response
var bot = GetBotFromUsers(users);
// Create an identifier
var teamsAppIdentifier = new MicrosoftTeamsAppIdentifier(bot.Id);
// If you're not operating in the public cloud, you must also pass the right Cloud type.
var gcchTeamsAppIdentifier = new MicrosoftTeamsAppIdentifier(bot.Id, CommunicationCloudEnvironment.Gcch);
API 参考
未知
UnknownIdentifier
面向未来,如果你使用的是旧版 SDK,而最近引入了新的标识符类型,则你可能会看到此接口。 服务中的任何未知标识符都将在 SDK 中反序列化为 UnknownIdentifier
。
基本用法
// create an identifier
var unknown = new UnknownIdentifier("a raw id that originated in the service");
API 参考
如何处理 CommunicationIdentifier
基类
为传入 SDK 的具体类型构造标识符时,SDK 会返回 CommunicationIdentifier
协议。 可以轻松地向下强制转换为具体类型,我们建议在模式匹配中使用 switch-case 语句:
switch (communicationIdentifier)
{
case CommunicationUserIdentifier communicationUser:
Console.WriteLine($"Communication user: {communicationUser.Id}");
break;
case MicrosoftTeamsUserIdentifier teamsUser:
Console.WriteLine($"Teams user: {teamsUser.UserId}");
break;
case MicrosoftTeamsAppIdentifier teamsApp:
Console.WriteLine($"Teams app: {teamsApp.AppId}");
break;
case PhoneNumberIdentifier phoneNumber:
Console.WriteLine($"Phone number: {phoneNumber.PhoneNumber}");
break;
case UnknownIdentifier unknown:
Console.WriteLine($"Unknown: {unknown.Id}");
break;
default:
// be careful here whether you want to throw because a new SDK version
// can introduce new identifier types
break;
}
原始 ID 表示形式
有时需要将标识符序列化为平面字符串。 例如,如果你要将标识符存储在数据库表中,或者要将其用作 URL 参数。
为此,标识符可以采用名为 RawId
的另一种表示形式。 标识符始终可以转换为其对应的原始 ID,而有效的原始 ID 始终可以转换为标识符。
从 Azure.Communication.Common 1.2.0
开始,SDK 可以帮助完成这种转换:
// get an identifier's raw Id
string rawId = communicationIdentifier.RawId;
// create an identifier from a given raw Id
CommunicationIdentifier identifier = CommunicationIdentifier.FromRawId(rawId);
无效的原始 ID 只会在 SDK 中转换为 UnknownIdentifier
,任何验证只会在服务端发生。
通信用户
CommunicationUserIdentifier
表示使用标识 SDK 或 REST API 创建的用户标识。 如果应用程序不使用 Microsoft Teams 互操作性或电话功能,则它是唯一使用的标识符。
基本用法
# at some point you will have created a new user identity in your trusted service
new_user = identity_client.create_user()
# and then send new_user.properties['id'] down to your client application
# where you can again create an identifier for the user
same_user = CommunicationUserIdentifier(new_user_id)
API 参考
Microsoft Teams 用户
MicrosoftTeamsUserIdentifier
代表 Teams 用户及其 Microsoft Entra 用户对象 ID。 可以通过 Microsoft Graph REST API /users 终结点从响应中的 id
属性检索 Microsoft Entra 用户对象 ID。 有关如何使用 Microsoft Graph 的详细信息,请尝试使用 Graph 浏览器并查看 Graph SDK。 或者,可以在用户登录并获取令牌后,在 Microsoft Entra 令牌或 Microsoft Entra 访问令牌中找到作为 oid
声明提供的 ID。
基本用法
# get the Teams user's ID from Graph APIs if only the email is known
user_id = graph_client.get("/users/bob@contoso.com").json().get("id");
# create an identifier
teams_user = MicrosoftTeamsUserIdentifier(user_id)
# if you're not operating in the public cloud, you must also pass the right Cloud type.
gcch_teams_user = MicrosoftTeamsUserIdentifier(user_id, cloud=CommunicationCloudEnvironment.GCCH)
API 参考
电话号码
PhoneNumberIdentifier
表示电话号码。 服务假设电话号码采用 E.164 格式。
基本用法
# create an identifier
phone_number = PhoneNumberIdentifier("+112345556789")
API 参考
Microsoft Teams 应用程序
MicrosoftTeamsAppIdentifier
接口代表 Teams 语音应用程序的机器人,例如呼叫队列和自动助理及其 Microsoft Entra 机器人对象 ID。 应使用资源帐户配置 Teams 应用程序。 可以通过 Microsoft Graph REST API /users 终结点从响应中的 id
属性检索 Microsoft Entra 机器人对象 ID。 有关如何使用 Microsoft Graph 的详细信息,请尝试使用 Graph 浏览器并查看 Graph SDK。
基本用法
# Get the Microsoft Teams App's ID from Graph APIs
users = graph_client.get("/users").json()
# Here we assume that you have a function get_bot_from_users that gets the bot from the returned response
bot = get_bot_from_users(users);
# Create an identifier
teams_app_identifier = MicrosoftTeamsAppIdentifier(app_id=bot.get("id"))
# If you're not operating in the public cloud, you must also pass the right Cloud type.
gcch_teams_app_identifier = MicrosoftTeamsAppIdentifier(
app_id=bot.get("id"),
cloud=CommunicationCloudEnvironment.GCCH
)
API 参考
未知
UnknownIdentifier
面向未来,如果你使用的是旧版 SDK,而最近引入了新的标识符类型,则你可能会看到此接口。 服务中的任何未知标识符都将在 SDK 中反序列化为 UnknownIdentifier
。
基本用法
# create an identifier
unknown = UnknownIdentifier("a raw id that originated in the service")
API 参考
如何处理 CommunicationIdentifier
基类
为传入 SDK 的具体类型构造标识符时,SDK 会返回 CommunicationIdentifier
协议。 具体标识符类只是 CommunicationIdentifier 协议和一个名为 properties
的类型化字典。 因此,可以在协议的 kind
实例变量上使用模式匹配来转换为具体类型:
match communication_identifier.kind:
case CommunicationIdentifierKind.COMMUNICATION_USER:
print(f"Communication user: {communication_identifier.properties['id']}")
case CommunicationIdentifierKind.MICROSOFT_TEAMS_USER:
print(f"Teams user: {communication_identifier.properties['user_id']}")
case CommunicationIdentifierKind.MICROSOFT_TEAMS_APP:
print(f"Teams app: {communication_identifier.properties['app_id']}")
case CommunicationIdentifierKind.PHONE_NUMBER:
print(f"Phone number: {communication_identifier.properties['value']}")
case CommunicationIdentifierKind.UNKNOWN:
print(f"Unknown: {communication_identifier.raw_id}")
case _:
# be careful here whether you want to throw because a new SDK version
# can introduce new identifier types
原始 ID 表示形式
有时需要将标识符序列化为平面字符串。 例如,如果你要将标识符存储在数据库表中,或者要将其用作 URL 参数。
为此,标识符可以采用名为 RawId
的另一种表示形式。 标识符始终可以转换为其对应的原始 ID,而有效的原始 ID 始终可以转换为标识符。
SDK 可以帮助完成这种转换:
# get an identifier's raw Id
raw_id = communication_identifier.raw_id
# create an identifier from a given raw Id
identifier = identifier_from_raw_id(raw_id)
无效的原始 ID 只会在 SDK 中转换为 UnknownIdentifier
,任何验证只会在服务端发生。
通信用户
CommunicationUserIdentifier
表示使用标识 SDK 或 REST API 创建的用户标识。 如果应用程序不使用 Microsoft Teams 互操作性或电话功能,则它是唯一使用的标识符。
基本用法
// at some point you will have created a new user identity in your trusted service
CommunicationUserIdentifier newUser = identityClient.CreateUser();
// and then send newUser.getId() down to your client application
// where you can again create an identifier for the user
var sameUser = new CommunicationUserIdentifier(newUserId);
API 参考
Microsoft Teams 用户
MicrosoftTeamsUserIdentifier
代表 Teams 用户及其 Microsoft Entra 用户对象 ID。 可以通过 Microsoft Graph REST API /users 终结点从响应中的 id
属性检索 Microsoft Entra 用户对象 ID。 有关如何使用 Microsoft Graph 的详细信息,请尝试使用 Graph 浏览器并查看 Graph SDK。 或者,可以在用户登录并获取令牌后,在 Microsoft Entra 令牌或 Microsoft Entra 访问令牌中找到作为 oid
声明提供的 ID。
基本用法
// get the Teams user's ID from Graph APIs if only the email is known
var user = graphClient.users("bob@contoso.com")
.buildRequest()
.get();
// create an identifier
var teamsUser = new MicrosoftTeamsUserIdentifier(user.id);
// if you're not operating in the public cloud, you must also set the right Cloud type.
var gcchTeamsUser = new MicrosoftTeamsUserIdentifier(userId).setCloudEnvironment(CommunicationCloudEnvironment.GCCH);
API 参考
电话号码
PhoneNumberIdentifier
表示电话号码。 服务假设电话号码采用 E.164 格式。
基本用法
// create an identifier
var phoneNumber = new PhoneNumberIdentifier("+112345556789");
API 参考
Microsoft Teams 应用程序
MicrosoftTeamsAppIdentifier
接口代表 Teams 语音应用程序的机器人,例如呼叫队列和自动助理及其 Microsoft Entra 机器人对象 ID。 应使用资源帐户配置 Teams 应用程序。 可以通过 Microsoft Graph REST API /users 终结点从响应中的 id
属性检索 Microsoft Entra 机器人对象 ID。 有关如何使用 Microsoft Graph 的详细信息,请尝试使用 Graph 浏览器并查看 Graph SDK。
基本用法
// Get the Microsoft Teams App's ID from Graph APIs
var user = graphClient.users()
.buildRequest()
.filter(filterConditions)
.select("displayName,id")
.get();
//Here we assume that you have a function getBotFromUsers that gets the bot from the returned response
var bot = getBotFromUsers(users);
// Create an identifier
var teamsAppIdentifier = new MicrosoftTeamsAppIdentifier(bot.id);
// If you're not operating in the public cloud, you must also pass the right Cloud type.
var gcchTeamsAppIdentifier = new MicrosoftTeamsAppIdentifier(bot.id, CommunicationCloudEnvironment.GCCH);
API 参考
未知
UnknownIdentifier
面向未来,如果你使用的是旧版 SDK,而最近引入了新的标识符类型,则你可能会看到此接口。 服务中的任何未知标识符都将在 SDK 中反序列化为 UnknownIdentifier
。
基本用法
// create an identifier
var unknown = new UnknownIdentifier("a raw id that originated in the service");
API 参考
如何处理 CommunicationIdentifier
基类
为传入 SDK 的具体类型构造标识符时,SDK 会返回抽象 CommunicationIdentifier
。 可以向下强制转换回具体类型:
if (communicationIdentifier instanceof CommunicationUserIdentifier) {
System.out.println("Communication user: " + ((CommunicationUserIdentifier)communicationIdentifier).getId());
}
else if (communicationIdentifier instanceof MicrosoftTeamsUserIdentifier) {
System.out.println("Teams user: " + ((MicrosoftTeamsUserIdentifier)communicationIdentifier).getUserId());
}
else if (communicationIdentifier instanceof MicrosoftTeamsAppIdentifier) {
Log.i(tag, "Teams app: " + (( MicrosoftTeamsAppIdentifier)communicationIdentifier).getAppId());
}
else if (communicationIdentifier instanceof PhoneNumberIdentifier) {
System.out.println("Phone number: " + ((PhoneNumberIdentifier)communicationIdentifier).getPhoneNumber());
}
else if (communicationIdentifier instanceof UnknownIdentifier) {
System.out.println("Unkown user: " + ((UnknownIdentifier)communicationIdentifier).getId());
}
else {
// be careful here whether you want to throw because a new SDK version
// can introduce new identifier types
}
原始 ID 表示形式
有时需要将标识符序列化为平面字符串。 例如,如果你要将标识符存储在数据库表中,或者要将其用作 URL 参数。
为此,标识符可以采用名为 RawId
的另一种表示形式。 标识符始终可以转换为其对应的原始 ID,而有效的原始 ID 始终可以转换为标识符。
从 azure-communication-common 1.2.0
开始,SDK 可以帮助完成这种转换:
// get an identifier's raw Id
String rawId = communicationIdentifier.getRawId();
// create an identifier from a given raw Id
CommunicationIdentifier identifier = CommunicationIdentifier.fromRawId(rawId);
无效的原始 ID 只会在 SDK 中转换为 UnknownIdentifier
,任何验证只会在服务端发生。
通信用户
CommunicationUserIdentifier
表示使用标识 SDK 或 REST API 创建的用户标识。 如果应用程序不使用 Microsoft Teams 互操作性或电话功能,则它是唯一使用的标识符。
基本用法
// at some point you will have created a new user identity in your trusted service
// and send the new user id down to your client application
// where you can create an identifier for the user
let user = CommunicationUserIdentifier(newUserId)
API 参考
Microsoft Teams 用户
MicrosoftTeamsUserIdentifier
代表 Teams 用户及其 Microsoft Entra 用户对象 ID。 可以通过 Microsoft Graph REST API /users 终结点从响应中的 id
属性检索 Microsoft Entra 用户对象 ID。 有关如何使用 Microsoft Graph 的详细信息,请尝试使用 Graph 浏览器并查看 Graph SDK。 或者,可以在用户登录并获取令牌后,在 ID 令牌或 Microsoft Entra 访问令牌中找到作为 oid
声明提供的 ID。
基本用法
// get the Teams user's ID if only the email is known, assuming a helper method for the Graph API
let userId = await getUserIdFromGraph("bob@contoso.com")
// create an identifier
let teamsUser = MicrosoftTeamsUserIdentifier(userId: userId)
// if you're not operating in the public cloud, you must also pass the right Cloud type.
let gcchTeamsUser = MicrosoftTeamsUserIdentifier(userId: userId, cloud: CommunicationCloudEnvironment.Gcch)
API 参考
电话号码
PhoneNumberIdentifier
表示电话号码。 服务假设电话号码采用 E.164 格式。
基本用法
// create an identifier
let phoneNumber = PhoneNumberIdentifier(phoneNumber: "+112345556789")
API 参考
Microsoft Teams 应用程序
MicrosoftTeamsAppIdentifier
接口代表 Teams 语音应用程序的机器人,例如呼叫队列和自动助理及其 Microsoft Entra 机器人对象 ID。 应使用资源帐户配置 Teams 应用程序。 可以通过 Microsoft Graph REST API /users 终结点从响应中的 id
属性检索 Microsoft Entra 机器人对象 ID。 有关如何使用 Microsoft Graph 的详细信息,请尝试使用 Graph 浏览器并查看 Graph SDK。
基本用法
// Get the Microsoft Teams App's ID from Graph APIs, assuming a helper method for the Graph API
let botId = await getBotIdFromGraph()
// Create an identifier
let teamsAppIdentifier = MicrosoftTeamsAppIdentifier(appId: botId)
// If you're not operating in the public cloud, you must also pass the right Cloud type.
let gcchTeamsAppIdentifier = MicrosoftTeamsAppIdentifier(appId: botId, cloudEnvironment: CommunicationCloudEnvironment.Gcch)
API 参考
未知
UnknownIdentifier
面向未来,如果你使用的是旧版 SDK,而最近引入了新的标识符类型,则你可能会看到此接口。 服务中的任何未知标识符都将在 SDK 中反序列化为 UnknownIdentifier
。
基本用法
// create an identifier
let unknown = UnknownIdentifier("a raw id that originated in the service")
API 参考
如何处理 CommunicationIdentifier
基协议
为传入 SDK 的具体类型构造标识符时,SDK 会返回 CommunicationIdentifier
协议。 可以轻松地向下强制转换回具体类型,我们建议在模式匹配中使用 switch-case 语句:
switch (communicationIdentifier)
{
case let communicationUser as CommunicationUserIdentifier:
print(#"Communication user: \(communicationUser.id)"#)
case let teamsUser as MicrosoftTeamsUserIdentifier:
print(#"Teams user: \(teamsUser.UserId)"#)
case let teamsApp as MicrosoftTeamsAppIdentifier:
print(#"Teams app: \(teamsApp.appId)"#)
case let phoneNumber as PhoneNumberIdentifier:
print(#"Phone number: \(phoneNumber.PhoneNumber)"#)
case let unknown as UnknownIdentifier:
print(#"Unknown: \(unknown.Id)"#)
@unknown default:
// be careful here whether you want to throw because a new SDK version
// can introduce new identifier types
break;
}
原始 ID 表示形式
有时需要将标识符序列化为平面字符串。 例如,如果你要将标识符存储在数据库表中,或者要将其用作 URL 参数。
为此,标识符可以采用名为 RawId
的另一种表示形式。 标识符始终可以转换为其对应的原始 ID,而有效的原始 ID 始终可以转换为标识符。
从 Azure.Communication.Common 1.1.0
开始,SDK 可以帮助完成这种转换:
Swift
// get an identifier's raw Id
let rawId = communicationIdentifier.rawId;
// create an identifier from a given raw Id
let identifier = createCommunicationIdentifier(fromRawId: rawId);
无效的原始 ID 只会在 SDK 中转换为 UnknownIdentifier
,任何验证只会在服务端发生。
通信用户
CommunicationUserIdentifier
表示使用标识 SDK 或 REST API 创建的用户标识。 如果应用程序不使用 Microsoft Teams 互操作性或电话功能,则它是唯一使用的标识符。
基本用法
// at some point you will have created a new user identity in your trusted service
CommunicationUserIdentifier newUser = identityClient.CreateUser();
// and then send newUser.getId() down to your client application
// where you can again create an identifier for the user
CommunicationUserIdentifier sameUser = new CommunicationUserIdentifier(newUserId);
API 参考
Microsoft Teams 用户
MicrosoftTeamsUserIdentifier
代表 Teams 用户及其 Microsoft Entra 用户对象 ID。 可以通过 Microsoft Graph REST API /users 终结点从响应中的 id
属性检索 Microsoft Entra 用户对象 ID。 有关如何使用 Microsoft Graph 的详细信息,请尝试使用 Graph 浏览器并查看 Graph SDK。 或者,可以在用户登录并获取令牌后,在 ID 令牌或 Microsoft Entra 访问令牌中找到作为 oid
声明提供的 ID。
基本用法
// get the Teams user's ID from Graph APIs if only the email is known
User user = graphClient.users("bob@contoso.com")
.buildRequest()
.get();
// create an identifier
MicrosoftTeamsUserIdentifier teamsUser = new MicrosoftTeamsUserIdentifier(user.id);
// if you're not operating in the public cloud, you must also set the right Cloud type.
MicrosoftTeamsUserIdentifier gcchTeamsUser = new MicrosoftTeamsUserIdentifier(userId).setCloudEnvironment(CommunicationCloudEnvironment.GCCH);
API 参考
电话号码
PhoneNumberIdentifier
表示电话号码。 服务假设电话号码采用 E.164 格式。
基本用法
// create an identifier
PhoneNumberIdentifier phoneNumber = new PhoneNumberIdentifier("+112345556789");
API 参考
Microsoft Teams 应用程序
MicrosoftTeamsAppIdentifier
接口代表 Teams 语音应用程序的机器人,例如呼叫队列和自动助理及其 Microsoft Entra 机器人对象 ID。 应使用资源帐户配置 Teams 应用程序。 可以通过 Microsoft Graph REST API /users 终结点从响应中的 id
属性检索 Microsoft Entra 机器人对象 ID。 有关如何使用 Microsoft Graph 的详细信息,请尝试使用 Graph 浏览器并查看 Graph SDK。
基本用法
// Get the Microsoft Teams App's ID from Graph APIs
UserCollectionPage users = graphClient.users()
.buildRequest()
.filter(filterConditions)
.select("displayName,id")
.get();
//Here we assume that you have a function getBotFromUsers that gets the bot from the returned response
User bot = getBotFromUsers(users);
// Create an identifier
MicrosoftTeamsAppIdentifier teamsAppIdentifier = new MicrosoftTeamsAppIdentifier(bot.id);
// If you're not operating in the public cloud, you must also pass the right Cloud type.
MicrosoftTeamsAppIdentifier gcchTeamsAppIdentifier = new MicrosoftTeamsAppIdentifier(bot.id, CommunicationCloudEnvironment.GCCH);
API 参考
未知
UnknownIdentifier
面向未来,如果你使用的是旧版 SDK,而最近引入了新的标识符类型,则你可能会看到此接口。 服务中的任何未知标识符都将在 SDK 中反序列化为 UnknownIdentifier
。
基本用法
// create an identifier
UnknownIdentifier unknown = new UnknownIdentifier("a raw id that originated in the service");
API 参考
如何处理 CommunicationIdentifier
基类
为传入 SDK 的具体类型构造标识符时,SDK 会返回抽象 CommunicationIdentifier
。 可以向下强制转换回具体类型:
if (communicationIdentifier instanceof CommunicationUserIdentifier) {
Log.i(tag, "Communication user: " + ((CommunicationUserIdentifier)communicationIdentifier).getId());
}
else if (communicationIdentifier instanceof MicrosoftTeamsUserIdentifier) {
Log.i(tag, "Teams user: " + ((MicrosoftTeamsUserIdentifier)communicationIdentifier).getUserId());
}
else if (communicationIdentifier instanceof MicrosoftTeamsAppIdentifier) {
Log.i(tag, "Teams app: " + (( MicrosoftTeamsAppIdentifier)communicationIdentifier).getAppId());
}
else if (communicationIdentifier instanceof PhoneNumberIdentifier) {
Log.i(tag, "Phone number: " + ((PhoneNumberIdentifier)communicationIdentifier).getPhoneNumber());
}
else if (communicationIdentifier instanceof UnknownIdentifier) {
Log.i(tag, "Unkown user: " + ((UnknownIdentifier)communicationIdentifier).getId());
}
else {
// be careful here whether you want to throw because a new SDK version
// can introduce new identifier types
}
原始 ID 表示形式
有时需要将标识符序列化为平面字符串。 例如,如果你要将标识符存储在数据库表中,或者要将其用作 URL 参数。
为此,标识符可以采用名为 RawId
的另一种表示形式。 标识符始终可以转换为其对应的原始 ID,而有效的原始 ID 始终可以转换为标识符。
从 azure-communication-common 1.1.0
开始,SDK 可以帮助完成这种转换:
// get an identifier's raw Id
String rawId = communicationIdentifier.getRawId();
// create an identifier from a given raw Id
CommunicationIdentifier identifier = CommunicationIdentifier.fromRawId(rawId);
无效的原始 ID 只会在 SDK 中转换为 UnknownIdentifier
,任何验证只会在服务端发生。
在 REST API 中,标识符是一种多态类型:可以构造一个 JSON 对象和一个映射到具体标识符子类型的属性。 出于方便性和后向兼容,kind
和 rawId
属性在请求中是可选的,但会在服务响应中填充。
通信用户
CommunicationUserIdentifierModel
表示使用标识 SDK 或 REST API 创建的用户标识。 如果应用程序不使用 Microsoft Teams 互操作性或电话功能,则它是唯一使用的标识符。
基本用法
// at some point you will have created a new user identity in your trusted service
// you can specify an identifier with the id of the new user in a request
{
"communicationUser": {
"id": "8:acs:8540c0de-899f-5cce-acb5-3ec493af3800_c94ff260-162d-46d6-94fd-e79f4d213715"
}
}
// the corresponding serialization in a response
{
"kind": "communicationUser",
"rawId": "8:acs:8540c0de-899f-5cce-acb5-3ec493af3800_c94ff260-162d-46d6-94fd-e79f4d213715",
"communicationUser": {
"id": "8:acs:8540c0de-899f-5cce-acb5-3ec493af3800_c94ff260-162d-46d6-94fd-e79f4d213715"
}
}
可以在用于添加参与者的聊天 REST API 中找到包含标识符的请求示例,以及在获取聊天消息下找到包含标识符的响应示例。
API 参考
CommunicationUserIdentifierModel
Microsoft Teams 用户
MicrosoftTeamsUserIdentifierModel
代表 Teams 用户及其 Microsoft Entra 用户对象 ID。 可以通过 Microsoft Graph REST API /users 终结点从响应中的 id
属性检索 Microsoft Entra 用户对象 ID。 有关如何使用 Microsoft Graph 的详细信息,请尝试使用 Graph 浏览器并查看 Graph SDK。 或者,可以在用户登录并获取令牌后,在 Microsoft Entra 令牌或 Microsoft Entra 访问令牌中找到作为 oid
声明提供的 ID。
基本用法
// request
{
"microsoftTeamsUser": {
"userId": "daba101a-91c5-44c9-bb9b-e2a9a790571a"
}
}
// response
{
"kind": "microsoftTeamsUser",
"rawId": "8:orgid:daba101a-91c5-44c9-bb9b-e2a9a790571a",
"microsoftTeamsUser": {
"userId": "daba101a-91c5-44c9-bb9b-e2a9a790571a"
}
}
// if you're not operating in the public cloud, you must also pass the right Cloud type in a request
{
"microsoftTeamsUser": {
"userId": "daba101a-91c5-44c9-bb9b-e2a9a790571a",
"cloud": "gcch"
}
}
// response
{
"kind": "microsoftTeamsUser",
"rawId": "8:gcch:daba101a-91c5-44c9-bb9b-e2a9a790571a",
"microsoftTeamsUser": {
"userId": "daba101a-91c5-44c9-bb9b-e2a9a790571a",
"isAnonymous": false,
"cloud": "gcch"
}
}
API 参考
MicrosoftTeamsUserIdentifierModel
电话号码
PhoneNumberIdentifierModel
表示电话号码。 服务假设电话号码采用 E.164 格式。
基本用法
// request
{
"phoneNumber": {
"value": "+112345556789"
}
}
// response
{
"kind": "phoneNumber",
"rawId": "4:+112345556789",
"phoneNumber": {
"value": "+112345556789"
}
}
API 参考
Microsoft Teams 应用程序
MicrosoftTeamsAppIdentifierModel
代表 Teams 语音应用程序的机器人,例如呼叫队列和自动助理及其 Microsoft Entra 机器人对象 ID。 应使用资源帐户配置 Teams 应用程序。 可以通过 Microsoft Graph REST API /users 终结点从响应中的 id
属性检索 Microsoft Entra 机器人对象 ID。 有关如何使用 Microsoft Graph 的详细信息,请尝试使用 Graph 浏览器并查看 Graph SDK。
基本用法
// request
{
"microsoftTeamsApp": {
"appId": "45ab2481-1c1c-4005-be24-0ffb879b1130"
}
}
// response
{
"kind": "microsoftTeamsApp",
"rawId": "28:orgid:45ab2481-1c1c-4005-be24-0ffb879b1130",
"microsoftTeamsApp": {
"appId": "45ab2481-1c1c-4005-be24-0ffb879b1130"
}
}
// if you're not operating in the public cloud, you must also pass the right Cloud type in a request
{
"microsoftTeamsApp": {
"appId": "45ab2481-1c1c-4005-be24-0ffb879b1130",
"cloud": "gcch"
}
}
// response
{
"kind": "microsoftTeamsApp",
"rawId": "28:gcch:45ab2481-1c1c-4005-be24-0ffb879b1130",
"microsoftTeamsApp": {
"appId": "45ab2481-1c1c-4005-be24-0ffb879b1130",
"cloud": "gcch"
}
}
API 参考
MicrosoftTeamsAppIdentifierModel
未知
如果服务中引入了新标识符,并且你使用的是旧 API 版本,该标识符将降级到 CommunicationIdentifierModel
。
基本用法
// request
{
"rawId": "a raw id that originated in the service"
}
// response
{
"kind": "unknown",
"rawId": "a raw id that originated in the service"
}
API 参考
如何处理响应中的 CommunicationIdentifierModel
最近的 API 版本填充了可用于区分的 kind
属性:
switch (communicationIdentifier.kind)
{
case "communicationUser":
console.log(`Communication user: ${communicationIdentifier.communicationUser.id}`);
break;
case "microsoftTeamsUser":
console.log(`Teams user: ${communicationIdentifier.microsoftTeamsUser.userId}`);
break;
case "microsoftTeamsApp":
console.log(`Teams user: ${communicationIdentifier.microsoftTeamsApp.appId}`);
break;
case "phoneNumber":
console.log(`Phone number: ${communicationIdentifier.phoneNumber.value}`);
break;
case "unknown":
console.log(`Unknown: ${communicationIdentifier.rawId}`);
break;
default:
// this case should not be hit because adding a new identifier type requires a new API version
// if it does get hit, please file an issue on https://github.com/Azure/azure-rest-api-specs/issues
break;
}
较旧的 API 版本中缺少 kind
属性,必须检查是否存在正确的子属性:
if (communicationIdentifier.communicationUser) {
console.log(`Communication user: ${communicationIdentifier.communicationUser.id}`);
} else if (communicationIdentifier.microsoftTeamsUser) {
console.log(`Teams user: ${communicationIdentifier.microsoftTeamsUser.userId}`);
} else if (communicationIdentifier.microsoftTeamsApp) {
console.log(`Teams app: ${communicationIdentifier.microsoftTeamsApp.appId}`);
} else if (communicationIdentifier.phoneNumber) {
console.log(`Phone number: ${communicationIdentifier.phoneNumber.value}`);
} else {
console.log(`Unknown: ${communicationIdentifier.rawId}`);
}
原始 ID 表示形式
有时需要将标识符序列化为平面字符串。 例如,如果你要将标识符存储在数据库表中,或者要将其用作 URL 参数。
为此,标识符可以采用名为 RawId
的另一种表示形式。 标识符始终可以转换为其对应的原始 ID,而有效的原始 ID 始终可以转换为标识符。
如果你正在使用 Azure SDK,它将帮助你进行转换。 如果直接使用 REST API,则需要手动生成原始 ID,如下所述。
通信用户
标识符:
{
"communicationUser": {
"id": "[communicationUserId]"
}
}
原始 ID:
[communicationUserId]
原始 ID 与 communicationUser.id
相同。
Microsoft Teams 用户
标识符:
{
"microsoftTeamsUser": {
"userId": "[entraUserId]"
}
}
原始 ID:
8:orgid:[entraUserId]
原始 ID 是前缀为 8:orgid:
的 Microsoft Entra 用户对象 ID。
标识符:
{
"microsoftTeamsUser": {
"userId": "[entraUserId]",
"cloud": "gcch"
}
}
原始 ID:
8:gcch:[entraUserId]
原始 ID 是前缀为 8:gcch:
或 8:dod:
(取决于云环境)的 Microsoft Entra 用户对象 ID。
标识符:
{
"microsoftTeamsUser": {
"userId": "[visitorUserId]",
"isAnonymous": true
}
}
原始 ID:
8:teamsvisitor:[visitorUserId]
原始 ID 是以 8:teamsvisitor:
为前缀的 Teams 访客 ID。 Teams 访客 ID 是 Teams 为使访客能够访问会议而生成的临时 ID。
电话号码
标识符:
{
"phoneNumber": {
"value": "+1123455567"
}
}
原始 ID:
4:+1123455567
原始 ID 是前缀为 4:
的 E.164 格式电话号码。
Microsoft Teams 应用程序
标识符:
{
"microsoftTeamsApp": {
"appId": "[entraUserId]"
}
}
原始 ID:
28:orgid:[entraUserId]
原始 ID 是应用程序的 Entra 用户对象 ID,其前缀为 28:orgid:
。
标识符:
{
"microsoftTeamsUser": {
"userId": "[entraUserId]",
"cloud": "gcch"
}
}
原始 ID:
28:gcch:[entraUserId]
原始 ID 是应用程序的 Entra 用户对象 ID,其前缀为 28:gcch:
或 28:dod:
,具体取决于云环境。
未知
标识符:
{
"rawId": "[unknown identifier id]"
}
原始 ID:
[unknown identifier id]
如果原始 ID 无效,则服务会使失败请求。
后续步骤
- 有关通信标识的简介,请参阅标识模型。
- 若要了解如何快速创建用于测试的标识,请参阅快速创建标识快速入门。
- 若要了解如何将通信服务与 Microsoft Teams 一起使用,请参阅 Teams 互操作性。
- 若要了解如何使用原始 ID,请参阅通信 SDK 中字符串标识符的用例。