了解識別碼類型
通訊服務 SDK 和 REST API 會使用「識別碼」類型來識別通訊雙方。 例如,識別碼會指定要呼叫的對象,或傳送了聊天訊息的人員。
根據內容而定,識別碼會以額外的屬性包裝,例如,在聊天 SDK 會包裝在 ChatParticipant
內,在通話 SDK 中會包裝在 RemoteParticipant
內。
在本文中,您將了解不同類型的識別碼,以及這些識別碼在不同程式設計語言中的樣貌。 您也會獲得其使用秘訣。
CommunicationIdentifier 類型
有您自己建立的使用者身分識別,也有外部身分識別。 Microsoft Teams 使用者和電話號碼屬於外部身分識別,會在 Interop 案例中發揮作用。 每個不同的身分識別類型都有能夠作為其代表的對應識別碼。 識別碼是一種結構化類型,可提供類型安全,並且能與編輯器的程式碼完成良好地搭配運作。
通訊使用者
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 使用者物件識別碼。 您可以透過 Microsoft Graph REST API /users 端點,從回應中的 id
屬性擷取 Microsoft Entra 使用者物件識別碼。 如需如何使用 Microsoft Graph 的詳細資訊,請嘗試 Graph 總管並查看 Graph SDK。 或者,您也可以在使用者登入並取得權杖之後,在 oid
Microsoft Entra 識別碼權杖或 Microsoft Entra 存取權杖中找到形式為 宣告的識別碼。
基本使用方式
// 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 語音應用程式的 Bot,例如通話佇列和自動語音應答,搭配其 Microsoft Entra Bot 物件識別碼。 Teams 應用程式應該使用資源帳戶進行設定。 您可以透過 Microsoft Graph REST API /users 端點,從回應中的 id
屬性擷取 Microsoft Entra Bot 物件識別碼。 如需如何使用 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 參考
Unknown
UnknownIdentifier
介面的存在是為了與未來技術兼容,當您使用舊版 SDK,但最近已引進新的識別碼類型時,就可能會遇到此介面。 服務中的任何未知識別碼都會還原序列化為 SDK 中的 UnknownIdentifier
。
基本使用方式
// create an identifier
const unknownId = { id: "a raw id that originated in the service" };
API 參考
如何處理 CommunicationIdentifier
基底介面
當您為傳入「到」SDK 的具體類型建構識別碼時,SDK 會傳回 CommunicationIdentifierKind
(這是已辨別聯集)。 要限縮為具體類型很容易,因此建議您搭配模式比對來使用切換大小寫陳述式:
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
原始識別碼標記法
有時候您需要將識別碼序列化為一般字串。 例如,如果您想要將識別碼儲存在資料庫資料表中,或想要使用它作為 URL 參數的話。
針對該目的,識別碼有另一個稱為 RawId
的標記法。 識別碼一律可以轉譯為對應的原始識別碼,而且有效的原始識別碼一律可以轉換為識別碼。
自 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);
不正確的原始識別碼會直接轉換為 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 使用者物件識別碼。 您可以透過 Microsoft Graph REST API /users 端點,從回應中的 id
屬性擷取 Microsoft Entra 使用者物件識別碼。 如需如何使用 Microsoft Graph 的詳細資訊,請嘗試 Graph 總管並查看 Graph SDK。 或者,您也可以在使用者登入並取得權杖之後,在 oid
Microsoft Entra 識別碼權杖或 Microsoft Entra 存取權杖中找到形式為 宣告的識別碼。
基本使用方式
// 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 語音應用程式的 Bot,例如通話佇列和自動語音應答,搭配其 Microsoft Entra Bot 物件識別碼。 Teams 應用程式應該使用資源帳戶進行設定。 您可以透過 Microsoft Graph REST API /users 端點,從回應中的 id
屬性擷取 Microsoft Entra Bot 物件識別碼。 如需如何使用 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 參考
Unknown
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 (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;
}
原始識別碼標記法
有時候您需要將識別碼序列化為一般字串。 例如,如果您想要將識別碼儲存在資料庫資料表中,或想要使用它作為 URL 參數的話。
針對該目的,識別碼有另一個稱為 RawId
的標記法。 識別碼一律可以轉譯為對應的原始識別碼,而且有效的原始識別碼一律可以轉換為識別碼。
自 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);
不正確的原始識別碼會直接轉換為 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 使用者物件識別碼。 您可以透過 Microsoft Graph REST API /users 端點,從回應中的 id
屬性擷取 Microsoft Entra 使用者物件識別碼。 如需如何使用 Microsoft Graph 的詳細資訊,請嘗試 Graph 總管並查看 Graph SDK。 或者,您也可以在使用者登入並取得權杖之後,在 oid
Microsoft Entra 識別碼權杖或 Microsoft Entra 存取權杖中找到形式為 宣告的識別碼。
基本使用方式
# 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 語音應用程式的 Bot,例如通話佇列和自動語音應答,搭配其 Microsoft Entra Bot 物件識別碼。 Teams 應用程式應該使用資源帳戶進行設定。 您可以透過 Microsoft Graph REST API /users 端點,從回應中的 id
屬性擷取 Microsoft Entra Bot 物件識別碼。 如需如何使用 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 參考
Unknown
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
原始識別碼標記法
有時候您需要將識別碼序列化為一般字串。 例如,如果您想要將識別碼儲存在資料庫資料表中,或想要使用它作為 URL 參數的話。
針對該目的,識別碼有另一個稱為 RawId
的標記法。 識別碼一律可以轉譯為對應的原始識別碼,而且有效的原始識別碼一律可以轉換為識別碼。
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)
不正確的原始識別碼會直接轉換為 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 使用者物件識別碼。 您可以透過 Microsoft Graph REST API /users 端點,從回應中的 id
屬性擷取 Microsoft Entra 使用者物件識別碼。 如需如何使用 Microsoft Graph 的詳細資訊,請嘗試 Graph 總管並查看 Graph SDK。 或者,您也可以在使用者登入並取得權杖之後,在 oid
Microsoft Entra 識別碼權杖或 Microsoft Entra 存取權杖中找到形式為 宣告的識別碼。
基本使用方式
// 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 語音應用程式的 Bot,例如通話佇列和自動語音應答,搭配其 Microsoft Entra Bot 物件識別碼。 Teams 應用程式應該使用資源帳戶進行設定。 您可以透過 Microsoft Graph REST API /users 端點,從回應中的 id
屬性擷取 Microsoft Entra Bot 物件識別碼。 如需如何使用 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 參考
Unknown
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
}
原始識別碼標記法
有時候您需要將識別碼序列化為一般字串。 例如,如果您想要將識別碼儲存在資料庫資料表中,或想要使用它作為 URL 參數的話。
針對該目的,識別碼有另一個稱為 RawId
的標記法。 識別碼一律可以轉譯為對應的原始識別碼,而且有效的原始識別碼一律可以轉換為識別碼。
自 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);
不正確的原始識別碼會直接轉換為 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 使用者物件識別碼。 您可以透過 Microsoft Graph REST API /users 端點,從回應中的 id
屬性擷取 Microsoft Entra 使用者物件識別碼。 如需如何使用 Microsoft Graph 的詳細資訊,請嘗試 Graph 總管並查看 Graph SDK。 或者,您也可以在使用者登入並取得權杖之後,在oid
識別碼權杖或 Microsoft Entra 存取權杖中找到形式為 宣告的識別碼。
基本使用方式
// 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 語音應用程式的 Bot,例如通話佇列和自動語音應答,搭配其 Microsoft Entra Bot 物件識別碼。 Teams 應用程式應該使用資源帳戶進行設定。 您可以透過 Microsoft Graph REST API /users 端點,從回應中的 id
屬性擷取 Microsoft Entra Bot 物件識別碼。 如需如何使用 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 參考
Unknown
UnknownIdentifier
的存在是為了與未來技術兼容,當您使用舊版 SDK,但最近已引進新的識別碼類型時,就可能會遇到此介面。 服務中的任何未知識別碼都會還原序列化為 SDK 中的 UnknownIdentifier
。
基本使用方式
// create an identifier
let unknown = UnknownIdentifier("a raw id that originated in the service")
API 參考
如何處理 CommunicationIdentifier
基底通訊協定
當您為傳入「到」SDK 的具體類型建構識別碼時,SDK 會傳回 CommunicationIdentifier
通訊協定。 要向下轉換回具體類型很容易,因此建議您搭配模式比對來使用切換大小寫陳述式:
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;
}
原始識別碼標記法
有時候您需要將識別碼序列化為一般字串。 例如,如果您想要將識別碼儲存在資料庫資料表中,或想要使用它作為 URL 參數的話。
針對該目的,識別碼有另一個稱為 RawId
的標記法。 識別碼一律可以轉譯為對應的原始識別碼,而且有效的原始識別碼一律可以轉換為識別碼。
自 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);
不正確的原始識別碼會直接轉換為 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 使用者物件識別碼。 您可以透過 Microsoft Graph REST API /users 端點,從回應中的 id
屬性擷取 Microsoft Entra 使用者物件識別碼。 如需如何使用 Microsoft Graph 的詳細資訊,請嘗試 Graph 總管並查看 Graph SDK。 或者,您也可以在使用者登入並取得權杖之後,在oid
識別碼權杖或 Microsoft Entra 存取權杖中找到形式為 宣告的識別碼。
基本使用方式
// 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 語音應用程式的 Bot,例如通話佇列和自動語音應答,搭配其 Microsoft Entra Bot 物件識別碼。 Teams 應用程式應該使用資源帳戶進行設定。 您可以透過 Microsoft Graph REST API /users 端點,從回應中的 id
屬性擷取 Microsoft Entra Bot 物件識別碼。 如需如何使用 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 參考
Unknown
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
}
原始識別碼標記法
有時候您需要將識別碼序列化為一般字串。 例如,如果您想要將識別碼儲存在資料庫資料表中,或想要使用它作為 URL 參數的話。
針對該目的,識別碼有另一個稱為 RawId
的標記法。 識別碼一律可以轉譯為對應的原始識別碼,而且有效的原始識別碼一律可以轉換為識別碼。
自 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);
不正確的原始識別碼會直接轉換為 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 使用者物件識別碼。 您可以透過 Microsoft Graph REST API /users 端點,從回應中的 id
屬性擷取 Microsoft Entra 使用者物件識別碼。 如需如何使用 Microsoft Graph 的詳細資訊,請嘗試 Graph 總管並查看 Graph SDK。 或者,您也可以在使用者登入並取得權杖之後,在 oid
Microsoft Entra 識別碼權杖或 Microsoft Entra 存取權杖中找到形式為 宣告的識別碼。
基本使用方式
// 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 語音應用程式的 Bot,例如通話佇列和自動語音應答,搭配其 Microsoft Entra Bot 物件識別碼。 Teams 應用程式應該使用資源帳戶進行設定。 您可以透過 Microsoft Graph REST API /users 端點,從回應中的 id
屬性擷取 Microsoft Entra Bot 物件識別碼。 如需如何使用 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
Unknown
如果服務中引進新的識別碼,而您使用的是舊版 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}`);
}
原始識別碼標記法
有時候您需要將識別碼序列化為一般字串。 例如,如果您想要將識別碼儲存在資料庫資料表中,或想要使用它作為 URL 參數的話。
針對該目的,識別碼有另一個稱為 RawId
的標記法。 識別碼一律可以轉譯為對應的原始識別碼,而且有效的原始識別碼一律可以轉換為識別碼。
如果您使用 Azure SDK,其會協助您進行轉換。 如果您直接使用 REST API,則必須手動建構原始識別碼,如下所述。
通訊使用者
識別碼:
{
"communicationUser": {
"id": "[communicationUserId]"
}
}
原始識別碼:
[communicationUserId]
原始識別碼與 communicationUser.id
相同。
Microsoft Teams 使用者
識別碼:
{
"microsoftTeamsUser": {
"userId": "[entraUserId]"
}
}
原始識別碼:
8:orgid:[entraUserId]
原始識別碼是前置詞為 8:orgid:
的 Microsoft Entra 使用者物件識別碼。
識別碼:
{
"microsoftTeamsUser": {
"userId": "[entraUserId]",
"cloud": "gcch"
}
}
原始識別碼:
8:gcch:[entraUserId]
原始識別碼是前置詞為 8:gcch:
或 8:dod:
(取決於雲端環境) 的 Microsoft Entra 使用者物件識別碼。
識別碼:
{
"microsoftTeamsUser": {
"userId": "[visitorUserId]",
"isAnonymous": true
}
}
原始識別碼:
8:teamsvisitor:[visitorUserId]
原始識別碼是前置詞為 8:teamsvisitor:
的 Teams 訪客識別碼。 Teams 訪客識別碼是 Teams 為了啟用會議存取而產生的暫時識別碼。
電話號碼
識別碼:
{
"phoneNumber": {
"value": "+1123455567"
}
}
原始識別碼:
4:+1123455567
原始識別碼是以 4:
為前綴的 E.164 格式的電話號碼。
Microsoft Teams 應用程式
識別碼:
{
"microsoftTeamsApp": {
"appId": "[entraUserId]"
}
}
原始識別碼:
28:orgid:[entraUserId]
原始識別碼是前置詞為 28:orgid:
應用程式的 Entra 使用者物件識別碼。
識別碼:
{
"microsoftTeamsUser": {
"userId": "[entraUserId]",
"cloud": "gcch"
}
}
原始識別碼:
28:gcch:[entraUserId]
原始識別碼是前置詞為 28:gcch:
或 28:dod:
(取決於雲端環境) 應用程式的 Entra 使用者物件識別碼。
Unknown
識別碼:
{
"rawId": "[unknown identifier id]"
}
原始識別碼:
[unknown identifier id]
如果原始識別碼不正確,服務會讓要求失敗。
下一步
- 如需通訊身分識別的簡介,請參閱身分識別模型。
- 若要了解如何快速建立用於測試的身分識別,請參閱快速建立身分識別快速入門。
- 若要了解如何搭配 Microsoft Teams 使用通訊服務,請參閱 Teams 互通性。
- 若要了解如何使用原始識別碼,請參閱通訊 SDK 中字串識別碼的使用案例。