实体和活动类型

适用于:SDK v4

实体是活动的一部分,提供有关活动或会话的更多信息。

注意

SDK 的不同部分定义单独的实体类或元素。

实体

消息的 entities 属性是一组开放式 schema.org 对象,允许在通道和机器人之间交换公共上下文元数据。

Mention 实体

许多通道支持机器人或用户在会话上下文中“提及”某人的功能。 要在消息中提及某个用户,请使用 mention 对象填充消息的 entities 属性。 mention 对象包含以下属性:

properties 说明
类型 实体(“mention”)的类型
Mentioned 指示提及了哪个用户的通道帐户对象
文本 activity.text 属性中的文本,表示 mention 本身(可能为空或为 null)

此代码示例演示如何将提及实体添加到实体集合。

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

提示

在尝试确定用户意向时,机器人可能希望忽略消息中提到它的部分。 调用 GetMentions 方法并评估答复中返回的 Mention 对象。

Place 对象

与位置相关的信息可以在消息中传输,具体方法是使用 Place 对象或 GeoCoordinates 对象填充消息的 entities 属性。

place 对象包含以下属性:

properties 说明
类型 实体(“Place”)的类型
地址 说明或邮寄地址对象(未来)
地域 地理坐标
HasMap 地图或地图对象的 URL(未来)
名称 位置的名称

geoCoordinates 对象包含以下属性:

properties 说明
类型 实体(“GeoCoordinates”)的类型
名称 位置的名称
经度 位置 (WGS 84) 的经度
纬度 位置 (WGS 84) 的纬度
Elevation 位置 (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
}

活动类型

活动可以是最常见的 message 之后的几种不同类型。 Bot Framework 活动架构中提供了不同活动类型的说明和更多详细信息。