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. CF-811A

    A. Vladik and Courtesy time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  2. location对象介绍

    Location 对象 Location 对象 Location 对象包含有关当前 URL 的信息. Location 对象是 Window 对象的一个部分,可通过 window.location 属 ...

  3. 解析Xml文件的三种方式

    1.Sax解析(simple api  for xml) 使用流式处理的方式,它并不记录所读内容的相关信息.它是一种以事件为驱动的XML API,解析速度快,占用内存少.使用回调函数来实现. clas ...

  4. 修改mac host文件绑定域名

    打开终端在终端terminal中输入 sudo vi /etc/hosts 上一步输入完成之后按enter回车键,如果当前用户账号有密码,则在按完之后会提示输入密码,此时输入当前账户密码后继续按ert ...

  5. PAT甲级真题及训练集

    正好这个"水水"的C4来了 先把甲级刷完吧.(开玩笑-2017.3.26) 这是一套"伪题解". wacao 刚才登出账号测试一下代码链接,原来是看不到..有空 ...

  6. unity3d各种OpenFileDialog操作

    http://www.cnblogs.com/U-tansuo/archive/2012/07/10/GetOpenFileName.html 1 编辑模式(Editor)下: string path ...

  7. Python 获取页面title

    #!/usr/bin/python #coding=utf- #urllib2是python自带的模块,在python3.x中被改为urllib.request import urllib.reque ...

  8. 洛谷P1549 棋盘问题(2)

    P1549 棋盘问题(2) 题目描述 在N*N的棋盘上(1≤N≤10),填入1,2,…,N*N共N*N个数,使得任意两个相邻的数之和为素数. 例如:当N=2时,有: 其相邻数的和为素数的有: 1+2, ...

  9. python3编程技巧二——如何在列表、字典、集合 中根据条件筛选数据

    一.列表筛选数据 # coding=utf-8 from random import randint # 创建随机列表 l = [randint(-10, 10) for i in range(10) ...

  10. Linux操作学习笔记1

    Linux只有一个根目录/,所有的文件和设备都当成是文件进行管理: pwd 打印当前工作目录 (print working directory) whoami ls  列出当前目录面的文件 ls -l ...