Bot Framework:Activity类简明指南
Bot Framework相关文档:https://docs.botframework.com/en-us/csharp/builder/sdkreference/attachments.html
Bot Framework提供的回复样式不仅仅是语言框。如果我们写下这样的代码:
Activity reply = activity.CreateReply($"You sent {activity.Text} which was {length} characters");
await connector.Conversations.ReplyToActivityAsync(reply);
(本代码来自官方文档)
我们注意到这里的Activity类(https://docs.botframework.com/en-us/csharp/builder/sdkreference/activities.html)的属性没有被妥善设置,所以使用了默认值。而在实际情况中,Activity类通常可以被设置各种各样的属性。
public class Activity : IActivity, IContactRelationUpdateActivity, IMessageActivity, ITypingActivity, IConversationUpdateActivity, IActionActivity
{
/// <summary>Initializes a new instance of the Activity class.</summary>
public Activity();
/// <summary>Initializes a new instance of the Activity class.</summary>
public Activity(string type = null, string id = null, DateTime? timestamp = null, string serviceUrl = null, string channelId = null, ChannelAccount from = null, ConversationAccount conversation = null, ChannelAccount recipient = null, string textFormat = null, string attachmentLayout = null, IList<ChannelAccount> membersAdded = null, IList<ChannelAccount> membersRemoved = null, string topicName = null, bool? historyDisclosed = null, string locale = null, string text = null, string summary = null, IList<Attachment> attachments = null, IList<Entity> entities = null, object channelData = null, string action = null, string replyToId = null);
(本代码来自类定义)
首先,Activity类有一个这样的属性:ActivityType
当Type(通常)被设置为Message时,能做的事情是最多的。下面我介绍4个属性,这4个属性都是Message能完成的。
1,Text&Locale/TextFormat属性:主要是文本和区域,文本格式这几个属性。
文本和区域:
Description | Example | |
---|---|---|
Text | A text payload in markdown syntax which will be rendered as appropriate on each channel | Hello, how are you? |
Locale | The locale of the sender (if known) | en |
文本格式:
Description | Notes | |
---|---|---|
plain | The text should be treated as raw text and no formatting applied at all | |
markdown | The text should be treated as markdown formatting and rendered on the channel as appropriate | default |
xml | The text is simple XML markup (subset of HTML) | Skype Only |
具体的规范可以自行查阅文档。
2,Attachment属性:是一系列附件对象,其中Rich Card就在这里;除此之外还可以设置多个Rich Card是以转盘的形式显示还是列表的形式。
Description | Example | |
---|---|---|
ContentType | The contentType of the ContentUrl property | image/png |
ContentUrl | A link to content of type ContentType | http://somedomain.com/cat.jpg |
Content | An embedded object of type contentType | If contentType = "application/vnd.microsoft.hero" then Content would be a JSON object for the HeroCard |
下表是AttachmentLayout属性:
Description | Notes | |
---|---|---|
list | Multiple attachments should be shown as a list | default |
carousel | multiple attachments should be shown as a carousel if possible, else fall back to a list |
3,Entities属性:Entities属性是一系列开放式schema.org对象,允许在通道和机器人之间交换常见的上下文元数据。当设置了这样的属性,我们就可以很好地串起上下文来分析。
其中,Mention实体就可以通过设置来感知自己有没有被提起(比如说有没有人通过@机器人 的方式使用它)。
Description | |
---|---|
type | type of the entity ("mention") |
mentioned | ChannelAccount of the person or user who was mentioned |
text | the text in the Activity.Text property which represents the mention. (this can be empty or null) |
而Place实体可以通过channels发送地址、地理信息。
The Place Object
Property | Description |
---|---|
Type | 'Place' |
Address | string description or PostalAddress (future) |
Geo | GeoCoordinates |
HasMap | URL to a map or complex "Map" object (future) |
Name | Name of the place |
GeoCoordinates Object
Property | Description |
---|---|
Type | 'GeoCoordinates' |
Name | Name of the place |
Longitude | Longitude of the location WGS 84 |
Latitude | Latitude of the location WGS 84 |
Elevation | Elevation of the location WGS 84 |
4,ChannelData property:可以传递额外的属性,更详细地描述每个channel启用的message。
当Type不是Message时,将会有其他的对应措施。比如说,
Conversation Update代表它的状态被改变,比如把bot添加到会话中,或者更改会话对象。
Contact Relation Update代表bot被用户在联系人列表中添加/删除了。
Typing可以告诉双方一个“正在打字”的状态。
Ping是用来测试Bot的。
Delete是用来删除用户的个人身份信息的。
我们在初次接触Bot时,应该重点掌握Message这种类型。
现在我们来读一段代码:
……(创建了一个connector) Activity replyToConversation = message.CreateReply("Should go to conversation, with a carousel");
replyToConversation.Recipient = message.From;
replyToConversation.Type = "message";
replyToConversation.AttachmentLayout = AttachmentLayouts.Carousel;
replyToConversation.Attachments = new List<Attachment>();
Dictionary<string, string> cardContentList = new Dictionary<string, string>();
cardContentList.Add("PigLatin", "https://<ImageUrl1>");
cardContentList.Add("Pork Shoulder", "https://<ImageUrl2>");
cardContentList.Add("Bacon", "https://<ImageUrl3>");
foreach(KeyValuePair<string, string> cardContent in cardContentList)
{
List<CardImage> cardImages = new List<CardImage>();
cardImages.Add(new CardImage(url:cardContent.Value ));
List<CardAction> cardButtons = new List<CardAction>();
CardAction plButton = new CardAction()
{
Value = $"https://en.wikipedia.org/wiki/{cardContent.Key}",
Type = "openUrl",
Title = "WikiPedia Page"
};
cardButtons.Add(plButton);
HeroCard plCard = new HeroCard()
{
Title = $"I'm a hero card about {cardContent.Key}",
Subtitle = $"{cardContent.Key} Wikipedia Page",
Images = cardImages,
Buttons = cardButtons
};
Attachment plAttachment = plCard.ToAttachment();
replyToConversation.Attachments.Add(plAttachment);
}
replyToConversation.AttachmentLayout = AttachmentLayoutTypes.Carousel;
var reply = await connector.Conversations.SendToConversationAsync(replyToConversation);
请关注第4行,设置了这个Activity类的收件人就是这个Activity的发起者(一对一对话中这一行可以被去掉)。
第5行中,设置了Type为Message。
第6行中,设置了显示模式为转盘。
第7行,表示这个activity要加入一些attachment(比如说别的文章会提到的Rich Card),初始化了一个List。
后面将三种东西打包作为三个整体使用。
后面的代码有兴趣的可以尝试,我在别的文章里会解释这些卡片的详细含义。
Bot Framework:Activity类简明指南的更多相关文章
- 手把手教你利用微软的Bot Framework,LUIS,QnA Maker做一个简单的对话机器人
最近由于要参加微软亚洲研究院的夏令营,需要利用微软的服务搭建一个对话Bot,以便对俱乐部的情况进行介绍,所以现学了几天,搭建了一个简单的对话Bot,期间参考了大量的资料,尤其是下面的这篇博客: htt ...
- 下一个时代,对话即平台 —— 开始使用Bot Framework和Cognitive Service来打造你的智能对话服务
在16年3月30号微软的全球开发者大会Build上发布了Bot Framework,微软认为下一个big thing是Conversation as a Platform,简称CaaP,中文应该叫做& ...
- 如何将 Microsoft Bot Framework 链接至微信公共号
说到 Microsoft Bot Framework 其实微软发布了已经有一段时间了,有很多朋友可能还不太了解,微软Bot的功能今天我给大家简单的介绍一下,Bot Framework的开发基础以及如何 ...
- Power BI Embedded 与 Bot Framework 结合的AI解决方案
最近最热门的话题莫过于AI了,之前我做过一片讲 BOTFRAMEWORK和微信 相结合的帖子 如何将 Microsoft Bot Framework 链接至微信公共号 我想今天基于这个题目扩展一下,P ...
- Bot Framework 搭建聊天机器人
这周我来跟大家分享的是在Microsoft Build 2016上发布的微软聊天机器人的框架. 现如今,各种人工智能充斥在我们的生活里.最典型的人工智能产品就是聊天机器人,它既可以陪我们聊天,也可以替 ...
- Microsoft Bot Framework with LUIS
今年微软的编程之美的主题是“对话即平台”,“人工智能”,要求参赛选手用到Bot Framework与Cognitive Services. 大多数人应该对这两个技术都不怎么熟悉吧,我就在这里写写自己所 ...
- How the Microsoft Bot Framework Changed Where My Friends and I Eat: Part 1
Bots are everywhere nowadays, and we interact with them all of the time. From interactions on our ph ...
- Power BI Embedded 与 Bot Framework 结合的AI报表系统
最近最热门的话题莫过于AI了,之前我做过一片讲 BOTFRAMEWORK和微信 相结合的帖子 如何将 Microsoft Bot Framework 链接至微信公共号 我想今天基于这个题目扩展一下,P ...
- Java8简明指南
Java8简明指南 转载自并发编程网 – ifeve.com本文链接地址: Java8简明指南 欢迎来到Java8简明指南.本教程将一步一步指导你通过所有新语言特性.由短而简单的代码示例,带你了解如何 ...
随机推荐
- 实现prim算法
如下找出该图的最小生成树 prim算法是求解该类问题的一种经典算法 Prim算法的基本思路:将图中的所有的顶点分为两类:树顶点(已经被选入生成树的顶点)和非树顶点(还未被选入生成树的顶点).首先选择任 ...
- window安装android打包环境
1.下载jdkhttp://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下载:jdk-8u1 ...
- Hyperledger Fabric 替换couchDB
fabric中默认数据存储的方式是levelDB,一个key/value存储的单机数据库.除此之外还提供了另外一种存储方式:couchDB.同样也是一个K/V 数据库,对fabric而言,相比于前者, ...
- AcDbSymbolTable of AcDbDatabase
AcDbBlockTable AcDbLayerTable AcDbTextStyleTable AcDbLinetypeTable AcDbViewTable AcDbUCSTable AcDbVi ...
- Ajax遇到的那些坑
提前说明:这里我用的是Windows系统,所以解决问题的方法也是仅限Windows系统,浏览器使用Chrome 第一个坑:Access to XMLHttpRequest at 'file:///C: ...
- 一文搞定 Redis 复制(全会的举个手看看)
阅读本文大概需要 5 分钟. 本文大纲 复制过程 数据间的同步 全量复制 部分复制 心跳 异步复制 总结 一.复制过程 Step 1:从节点执行 slaveof 命令. Step 2:从节点只是保存了 ...
- JS高级学习历程-15
昨天内容回顾 面向对象的私有成员.静态成员 私有成员:在构造函数里边定义局部变量,就是私有成员. 静态成员:在js里边,函数就是对象,可以通过给函数对象声明成员方式声明静态成员. 原型继承 关键字:p ...
- 微信小程序入门文档
一 基本介绍 微信专门为小程序开发了一个ide叫做微信开发者工具 最新一版的微信开发者工具,把微信公众号的调试开发工作也集成了进去,可以更换开发模式. https://mp.weixin.qq.com ...
- Educational Codeforces Round 65 (Rated for Div. 2) A. Telephone Number
链接:https://codeforces.com/contest/1167/problem/A 题意: A telephone number is a sequence of exactly 11 ...
- build spark
Error : Failed to find Spark jars directory (/home/pl62716/spark-2.2.0-SNAPSHOT/assembly/target/scal ...