实体和活动类型
适用于: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 活动架构中提供了不同活动类型的说明和更多详细信息。