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简明指南.本教程将一步一步指导你通过所有新语言特性.由短而简单的代码示例,带你了解如何 ...
随机推荐
- freemaker宏的用法
freemaker宏 定义:定义一个标签,标签体中可以包含参数,开始标签和结束标签可以包含内容,内容中可以通过${}方式引用标签体中定义的参数 用法:页面引入标签,通过标签可以直接输出标签的内容 He ...
- \n和\r\n的区别
\r是回车符,\n是换行符计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符.但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好 ...
- 网络编程demo之Udp和URL
首先是udp编程客户端发送消息给服务端,服务端接受然后打印到console控制台上 下面是一个有代表性的demo package com.henu.liulei; import java.io.IOE ...
- python-根据URL地址下载文件
博主个人网站:https://chenzhen.online 使用Python中提供的urllib.request下载网上的文件 #coding=utf-8 """ 目标 ...
- luogu 1169 棋盘制作(单调栈/悬线)
luogu 1169 棋盘制作(单调栈/悬线) 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应 ...
- 洛谷P2513 [HAOI2009]逆序对数列
P2513 [HAOI2009]逆序对数列 题目描述 对于一个数列{ai},如果有i<j且ai>aj,那么我们称ai与aj为一对逆序对数.若对于任意一个由1~n自然数组成的数列,可以很容易 ...
- [Xcode 实际操作]六、媒体与动画-(1)使用图形上下文按一定比例缩放图片
目录:[Swift]Xcode实际操作 本文将演示如何通过图形上下文,来实现图片缩放的功能. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKi ...
- Python web前端 08 字符串 数组 json
Python web前端 08 字符串 数组 json 一.string #string 字符串 #索引 下标 偏移量 ---从0开始 str[index]; #通过索引取字符串 可读不可写 str. ...
- Ocelot实现API网关服务
NET Core微服务之基于Ocelot实现API网关服务 https://www.cnblogs.com/edisonchou/p/api_gateway_ocelot_foundation_01. ...
- Storm编程入门API系列之Storm的Topology的stream grouping
概念,见博客 Storm概念学习系列之stream grouping(流分组) Storm的stream grouping的Shuffle Grouping 它是随机分组,随机派发stream里面的t ...