共用方式為


實體和活動類型

適用于: SDK v4

實體是活動的一部分,並提供活動或交談的其他資訊。

注意

SDK 的不同部分會定義不同的 實體 類別或元素。

實體

訊息的 entities 屬性是開放式 schema.org 物件的陣列,可讓通道與 Bot 之間交換通用內容中繼資料。

提及實體

許多頻道都支援聊天機器人或使用者在交談內容中「提及」某人的能力。 若要提及訊息中的使用者,請使用 mention 物件填入訊息的 entities 屬性 。 提及物件包含下列屬性:

屬性 描述
類型 實體的類型(「提及」)
提到 指出所提及使用者的通道帳戶物件
Text 代表提及本身的 activity.text 屬性內的文字(可能是空的或 Null 的)

此程式碼範例示範如何將提及實體新增至實體集合。

var entity = new Entity();
entity.SetAs(new Mention()
{
    Text = "@johndoe",
    Mentioned = new ChannelAccount()
    {
        Name = "John Doe",
        Id = "UV341235"
    }
});
entities.Add(entity);

提示

嘗試判斷使用者意圖時,Bot 可能會想要忽略所提及訊息的該部分。 GetMentions呼叫 方法並評估 Mention 回應中傳回的物件。

放置物件

藉由使用 Place 物件或 GeoCoordinates 物件填入訊息的 entities 屬性,即可在訊息中傳達位置相關資訊

place 物件包含下列屬性:

屬性 描述
類型 實體的類型 (「Place」)
位址 描述或郵政位址物件(未來)
地理位置 GeoCoordinates
HasMap 地圖或地圖物件的 URL(未來)
名稱 地點的名稱

geoCoordinates 物件包含下列屬性:

屬性 描述
類型 實體的類型 (「GeoCoordinates」)
名稱 地點的名稱
緯度 位置的經度 ( WGS 84
緯度 位置的緯度 ( WGS 84
提升權限 位置高度 ( WGS 84

此程式碼範例示範如何將位置實體新增至實體集合:

var entity = new Entity();
entity.SetAs(new Place()
{
    Geo = new GeoCoordinates()
    {
        Latitude = 32.4141,
        Longitude = 43.1123123,
    }
});
entities.Add(entity);

取用實體

若要取用實體,請使用 dynamic 關鍵字或強型別類別。

此程式碼範例示範如何使用 dynamic 關鍵字來處理訊息屬性內的 Entities 實體:

if (entity.Type == "Place")
{
    dynamic place = entity.Properties;
    if (place.geo.latitude > 34)
        // do something
}

此程式碼範例示範如何使用強型別類別來處理訊息屬性內的 Entities 實體:

if (entity.Type == "Place")
{
    Place place = entity.GetAs<Place>();
    GeoCoordinates geo = place.Geo.ToObject<GeoCoordinates>();
    if (geo.Latitude > 34)
        // do something
}

活動類型

活動可以是數種不同的類型,超過最常見的 訊息 。 您可以在 Bot Framework 活動架構 中找到 不同活動類型的說明和進一步詳細資料。