共用方式為


了解識別碼類型

通訊服務 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 參考

CommunicationUserIdentifier

Microsoft Teams 使用者

MicrosoftTeamsUserIdentifier 介面代表 Teams 使用者及其 Microsoft Entra 使用者物件識別碼。 您可以透過 Microsoft Graph REST API /users 端點,從回應中的 id 屬性擷取 Microsoft Entra 使用者物件識別碼。 如需如何使用 Microsoft Graph 的詳細資訊,請嘗試 Graph 總管並查看 Graph SDK。 或者,您也可以在使用者登入並取得權杖之後,在 oidMicrosoft 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 參考

MicrosoftTeamsUserIdentifier

電話號碼

PhoneNumberIdentifier 介面代表電話號碼。 此服務假設電話號碼的格式為 E.164 格式。

基本使用方式

// create an identifier
const phoneNumber = { phoneNumber: "+112345556789" };

API 參考

PhoneNumberIdentifier

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 參考

MicrosoftTeamsAppIdentifier

Unknown

UnknownIdentifier 介面的存在是為了與未來技術兼容,當您使用舊版 SDK,但最近已引進新的識別碼類型時,就可能會遇到此介面。 服務中的任何未知識別碼都會還原序列化為 SDK 中的 UnknownIdentifier

基本使用方式

// create an identifier
const unknownId = { id: "a raw id that originated in the service" };

API 參考

UnknownIdentifier

如何處理 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 參考

CommunicationUserIdentifier

Microsoft Teams 使用者

MicrosoftTeamsUserIdentifier 代表 Teams 使用者及其 Microsoft Entra 使用者物件識別碼。 您可以透過 Microsoft Graph REST API /users 端點,從回應中的 id 屬性擷取 Microsoft Entra 使用者物件識別碼。 如需如何使用 Microsoft Graph 的詳細資訊,請嘗試 Graph 總管並查看 Graph SDK。 或者,您也可以在使用者登入並取得權杖之後,在 oidMicrosoft 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 參考

MicrosoftTeamsUserIdentifier

電話號碼

PhoneNumberIdentifier 代表電話號碼。 此服務假設電話號碼的格式為 E.164 格式。

基本使用方式

// create an identifier
var phoneNumber = new PhoneNumberIdentifier("+112345556789");

API 參考

PhoneNumberIdentifier

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 參考

MicrosoftTeamsAppIdentifier

Unknown

UnknownIdentifier 的存在是為了與未來技術兼容,當您使用舊版 SDK,但最近已引進新的識別碼類型時,就可能會遇到此介面。 服務中的任何未知識別碼都會還原序列化為 SDK 中的 UnknownIdentifier

基本使用方式

// create an identifier
var unknown = new UnknownIdentifier("a raw id that originated in the service");

API 參考

UnknownIdentifier

如何處理 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 參考

CommunicationUserIdentifier

Microsoft Teams 使用者

MicrosoftTeamsUserIdentifier 代表 Teams 使用者及其 Microsoft Entra 使用者物件識別碼。 您可以透過 Microsoft Graph REST API /users 端點,從回應中的 id 屬性擷取 Microsoft Entra 使用者物件識別碼。 如需如何使用 Microsoft Graph 的詳細資訊,請嘗試 Graph 總管並查看 Graph SDK。 或者,您也可以在使用者登入並取得權杖之後,在 oidMicrosoft 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 參考

MicrosoftTeamsUserIdentifier

電話號碼

PhoneNumberIdentifier 代表電話號碼。 此服務假設電話號碼的格式為 E.164 格式。

基本使用方式

# create an identifier
phone_number = PhoneNumberIdentifier("+112345556789")

API 參考

PhoneNumberIdentifier

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 參考

MicrosoftTeamsAppIdentifier

Unknown

UnknownIdentifier 的存在是為了與未來技術兼容,當您使用舊版 SDK,但最近已引進新的識別碼類型時,就可能會遇到此介面。 服務中的任何未知識別碼都會還原序列化為 SDK 中的 UnknownIdentifier

基本使用方式

# create an identifier
unknown = UnknownIdentifier("a raw id that originated in the service")

API 參考

UnknownIdentifier

如何處理 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 參考

CommunicationUserIdentifier

Microsoft Teams 使用者

MicrosoftTeamsUserIdentifier 代表 Teams 使用者及其 Microsoft Entra 使用者物件識別碼。 您可以透過 Microsoft Graph REST API /users 端點,從回應中的 id 屬性擷取 Microsoft Entra 使用者物件識別碼。 如需如何使用 Microsoft Graph 的詳細資訊,請嘗試 Graph 總管並查看 Graph SDK。 或者,您也可以在使用者登入並取得權杖之後,在 oidMicrosoft 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 參考

MicrosoftTeamsUserIdentifier

電話號碼

PhoneNumberIdentifier 代表電話號碼。 此服務假設電話號碼的格式為 E.164 格式。

基本使用方式

// create an identifier
var phoneNumber = new PhoneNumberIdentifier("+112345556789");

API 參考

PhoneNumberIdentifier

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 參考

MicrosoftTeamsAppIdentifier

Unknown

UnknownIdentifier 的存在是為了與未來技術兼容,當您使用舊版 SDK,但最近已引進新的識別碼類型時,就可能會遇到此介面。 服務中的任何未知識別碼都會還原序列化為 SDK 中的 UnknownIdentifier

基本使用方式

// create an identifier
var unknown = new UnknownIdentifier("a raw id that originated in the service");

API 參考

UnknownIdentifier

如何處理 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 參考

CommunicationUserIdentifier

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 參考

MicrosoftTeamsUserIdentifier

電話號碼

PhoneNumberIdentifier 代表電話號碼。 此服務假設電話號碼的格式為 E.164 格式。

基本使用方式

// create an identifier
let phoneNumber = PhoneNumberIdentifier(phoneNumber: "+112345556789")

API 參考

PhoneNumberIdentifier

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 參考

MicrosoftTeamsAppIdentifier

Unknown

UnknownIdentifier 的存在是為了與未來技術兼容,當您使用舊版 SDK,但最近已引進新的識別碼類型時,就可能會遇到此介面。 服務中的任何未知識別碼都會還原序列化為 SDK 中的 UnknownIdentifier

基本使用方式

// create an identifier
let unknown = UnknownIdentifier("a raw id that originated in the service")

API 參考

UnknownIdentifier

如何處理 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 參考

CommunicationUserIdentifier

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 參考

MicrosoftTeamsUserIdentifier

電話號碼

PhoneNumberIdentifier 代表電話號碼。 此服務假設電話號碼的格式為 E.164 格式。

基本使用方式

// create an identifier
PhoneNumberIdentifier phoneNumber = new PhoneNumberIdentifier("+112345556789");

API 參考

PhoneNumberIdentifier

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 參考

MicrosoftTeamsAppIdentifier

Unknown

UnknownIdentifier 的存在是為了與未來技術兼容,當您使用舊版 SDK,但最近已引進新的識別碼類型時,就可能會遇到此介面。 服務中的任何未知識別碼都會還原序列化為 SDK 中的 UnknownIdentifier

基本使用方式

// create an identifier
UnknownIdentifier unknown = new UnknownIdentifier("a raw id that originated in the service");

API 參考

UnknownIdentifier

如何處理 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 物件和對應至具體識別碼子類型的屬性。 為了方便和回溯相容性的原因,kindrawId 屬性在要求中是選擇性屬性,但會填入到服務回應中。

通訊使用者

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。 或者,您也可以在使用者登入並取得權杖之後,在 oidMicrosoft 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 參考

PhoneNumberIdentifierModel

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

如何處理回應中的 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]

如果原始識別碼不正確,服務會讓要求失敗。

下一步