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类简明指南的更多相关文章

  1. 手把手教你利用微软的Bot Framework,LUIS,QnA Maker做一个简单的对话机器人

    最近由于要参加微软亚洲研究院的夏令营,需要利用微软的服务搭建一个对话Bot,以便对俱乐部的情况进行介绍,所以现学了几天,搭建了一个简单的对话Bot,期间参考了大量的资料,尤其是下面的这篇博客: htt ...

  2. 下一个时代,对话即平台 —— 开始使用Bot Framework和Cognitive Service来打造你的智能对话服务

    在16年3月30号微软的全球开发者大会Build上发布了Bot Framework,微软认为下一个big thing是Conversation as a Platform,简称CaaP,中文应该叫做& ...

  3. 如何将 Microsoft Bot Framework 链接至微信公共号

    说到 Microsoft Bot Framework 其实微软发布了已经有一段时间了,有很多朋友可能还不太了解,微软Bot的功能今天我给大家简单的介绍一下,Bot Framework的开发基础以及如何 ...

  4. Power BI Embedded 与 Bot Framework 结合的AI解决方案

    最近最热门的话题莫过于AI了,之前我做过一片讲 BOTFRAMEWORK和微信 相结合的帖子 如何将 Microsoft Bot Framework 链接至微信公共号 我想今天基于这个题目扩展一下,P ...

  5. Bot Framework 搭建聊天机器人

    这周我来跟大家分享的是在Microsoft Build 2016上发布的微软聊天机器人的框架. 现如今,各种人工智能充斥在我们的生活里.最典型的人工智能产品就是聊天机器人,它既可以陪我们聊天,也可以替 ...

  6. Microsoft Bot Framework with LUIS

    今年微软的编程之美的主题是“对话即平台”,“人工智能”,要求参赛选手用到Bot Framework与Cognitive Services. 大多数人应该对这两个技术都不怎么熟悉吧,我就在这里写写自己所 ...

  7. 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 ...

  8. Power BI Embedded 与 Bot Framework 结合的AI报表系统

    最近最热门的话题莫过于AI了,之前我做过一片讲 BOTFRAMEWORK和微信 相结合的帖子 如何将 Microsoft Bot Framework 链接至微信公共号 我想今天基于这个题目扩展一下,P ...

  9. Java8简明指南

    Java8简明指南 转载自并发编程网 – ifeve.com本文链接地址: Java8简明指南 欢迎来到Java8简明指南.本教程将一步一步指导你通过所有新语言特性.由短而简单的代码示例,带你了解如何 ...

随机推荐

  1. day1 java基础回顾- Properties类与配置文件

    Properties配置文件说明 Properties类对应.properties文件.文件内容是键值对,键值对之间使用"="或空格隔开.开头是"#"的表示注释 ...

  2. 【机器学习】分类算法——Logistic回归

    一.LR分类器(Logistic Regression Classifier) 在分类情形下,经过学习后的LR分类器是一组权值w0,w1, -, wn,当测试样本的数据输入时,这组权值与测试数据按照线 ...

  3. 938. Range Sum of BST

    Given the root node of a binary search tree, return the sum of values of all nodes with value betwee ...

  4. linux文件重命名

    rename 命令用字符串替换的方式批量改变文件名. 语法 rename(参数) 参数 原字符串:将文件名需要替换的字符串: 目标字符串:将文件名中含有的原字符替换成目标字符串: 文件:指定要改变文件 ...

  5. qsc52(三角形线性插值)

    题目链接:http://qscoj.cn/problem/52/ 题意:中文题诶- 思路:水题,只要知道三角形插值和判断点在三角形内就OK了 关于三角形插值:http://www.cnblogs.co ...

  6. (三)siege的使用

    学习: ELK——http://dockone.io/article/3655 docker——http://www.testclass.net/docker/ Android Monkey压力测试— ...

  7. 进击JavaScript核心 --- (1)基本数据类型

    ES5之前提供了 5种基本数据类型 和 1种引用数据类型 基本数据类型:Undefined, Null, String, Number, Boolean 引用数据类型:Object ES6开始引入了一 ...

  8. shell编程 条件判断式----利用 if .... then ----多重

    条件判断式----利用 if .... then ----多重 在同一个数据的判断中,如果该数据需要进行多种不同的判断时,应该怎么作?举例来说,上面的 sh06.sh 脚本中,我们只要进行一次 $yn ...

  9. JQuery序列化表单serialize() 以及 serializeArray()

    都是利用form表单传递数据的 1.serialize()方法 描述:序列化表单内容为字符串,用于Ajax请求. 数据类似于这种: FirstName=Bill&LastName=Gates  ...

  10. Linux基本系统优化

    Linux基本系统优化  Linux Linux的网络功能相当强悍,一时之间我们无法了解所有的网络命令, 在配置服务器基础环境时,先了解下网络参数设定命令. ifconfig 查询.设置网卡和ip等参 ...