Teams Bot开发系列:Activity和Turn

这篇文章我们来说一下Activity和Turn这两个bot framework中最重要的两个概念,同时也介绍一下TurnContext和BotAdapter

Activity

一个activity是聊天双方的一个信息载体,它可以是一条消息,也可以是一个动作。比如用户给bot发送一条文字消息,这就是一个activity,bot给用户回复一张图片,那这是另一个activity。

Activity是bot framework里最重要的概念,让我们来一起看一下c# sdk里对activity的定义。真实感受一下

    public class Activity{public string Type { get; set; }public string Id { get; set; }public DateTimeOffset? Timestamp { get; set; }public DateTimeOffset? LocalTimestamp { get; set; }public string LocalTimezone { get; set; }public string ServiceUrl { get; set; }public string ChannelId { get; set; }public ChannelAccount From { get; set; }public ConversationAccount Conversation { get; set; }public ChannelAccount Recipient { get; set; }public string TextFormat { get; set; }public string AttachmentLayout { get; set; }public IList<ChannelAccount> MembersAdded { get; set; }public IList<ChannelAccount> MembersRemoved { get; set; }public IList<MessageReaction> ReactionsAdded { get; set; }public IList<MessageReaction> ReactionsRemoved { get; set; }public string TopicName { get; set; }public bool? HistoryDisclosed { get; set; }public string Locale { get; set; }public string Text { get; set; }public string Speak { get; set; }public string InputHint { get; set; }public string Summary { get; set; }public SuggestedActions SuggestedActions { get; set; }public IList<Attachment> Attachments { get; set; }public IList<Entity> Entities { get; set; }public object ChannelData { get; set; }public string Action { get; set; }public string ReplyToId { get; set; }public string Label { get; set; }public string ValueType { get; set; }public object Value { get; set; }public string Name { get; set; }public ConversationReference RelatesTo { get; set; }public string Code { get; set; }public DateTimeOffset? Expiration { get; set; }public string Importance { get; set; }public string DeliveryMode { get; set; }public IList<string> ListenFor { get; set; }public IList<TextHighlight> TextHighlights { get; set; }public SemanticAction SemanticAction { get; set; }public string CallerId { get; set; }}

除了上面这么多的属性,还有很多方法和扩展方法,是一个非常大的类,我们以后详细一一说明。

Turn

下面是对于turn的官方说明:

In a conversation, people often speak one-at-a-time, taking turns speaking. With a bot, it generally reacts to user input. Within the Bot Framework SDK, a turn consists of the user’s incoming activity to the bot and any activity the bot sends back to the user as an immediate response. You can think of a turn as the processing associated with the arrival of a given activity.

一个turn就是对一个activity的相关处理。比如说,对于用户发给我们bot一条消息,我们把这条消息转发给另一个用户,同时对消息本身点赞,那这两个操作一起是一个turn,是针对用户发来的消息的处理的turn。

Turn上下文(Turn Context)

我认为TurnContext是仅次于Activity的概念,turn context对象跟随着整个消息的处理过程。地位非常类似以前asp.net的HttpContext概念。

    public interface ITurnContext{BotAdapter Adapter { get; }TurnContextStateCollection TurnState { get; }Activity Activity { get; }bool Responded { get; }Task<ResourceResponse> SendActivityAsync(...);Task<ResourceResponse> UpdateActivityAsync(...);Task DeleteActivityAsync(...);ITurnContext OnSendActivities(...);ITurnContext OnUpdateActivity(...);ITurnContext OnDeleteActivity(...);}

可以看到TurnContext不算庞大,其他的属性和方法看名字比较容易理解。其中一个主要概念是BotAdapter

BotAdapter

从官方说明,我们可以看到这个是链接你bot endpoint和bot处理逻辑的一个桥梁,它封装了对于安全验证和对middleware的处理。当你的bot endpoint收到一个请求时,BotAdapter会验证这个请求是不是从正式渠道发送来的请求,如果是,它会创建Turn Context,然后开始各个middleware的处理。

要注意的一点是:Activity是贯穿于Azure bot service和bot framework sdk整条pipeline的,但是turn,turn context和BotAdapter,目前版本(v4)只是存在于bot framework sdk,是帮助开发人员处理bot的一个东西,如果你不想用turn,想自己处理整个bot的聊天,你可以只使用 Microsoft.Bot.Schema(包含Activity定义),不添加Microsoft.Bot.Builder库(含有turncontext和BotAdapter定义)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/277942.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu16.04下安装opencv出现libgtk2.0-dev配置失败问题解决方法

第一次在ubuntu下安装opencv&#xff0c;遇到很多问题&#xff0c;特别是libgtk2.0-dev总是配置失败的问题&#xff0c;在网上也看到一些解决方法&#xff0c;自己也遇到一些比较奇葩的问题&#xff0c;故整理于此。 网上大部分的解决方案就是更改下载源&#xff0c;我看到一些…

03|模型I/O:输入提示、调用模型、解析输出

03&#xff5c;模型I/O&#xff1a;输入提示、调用模型、解析输出 从这节课开始&#xff0c;我们将对 LangChain 中的六大核心组件一一进行详细的剖析。 模型&#xff0c;位于 LangChain 框架的最底层&#xff0c;它是基于语言模型构建的应用的核心元素&#xff0c;因为所谓 …

selenuim自动化爬取汽车在线谷米爱车网车辆GPS数据爬虫

#为了实时获取车辆信息&#xff0c;以及为了后面进行行使轨迹绘图&#xff0c;写了一个基于selelnium的爬虫爬取了车辆gps数据。 #在这里发现selenium可以很好的实现网页解析和处理js处理 #导包 import timefrom selenium import webdriverfrom selenium.webdriver.support.wai…

Teams Bot开发系列:Activity处理流程

上篇文章介绍了什么是Activity&#xff0c;Turn&#xff0c;TurnContext和BotAdapter&#xff0c;这篇文章我们看看这些东西是如何窜起来的&#xff0c;他们是如何处理用户发给bot的消息的。 我们以一个最简单的bot&#xff0c;echo bot为例子&#xff0c;所谓的echo bot就是用…

写单元测试的好处(转)

许多开发者都有个习惯&#xff0c;常常不乐意去写个简单的单元测试程序来验证自己的代码。对自己的程序一直非常有自信&#xff0c;或存在侥幸心理每次运行通过后就直接扔给测试组测试了。然而每次测试组的BUG提交过来后就会发现自己的程序还存在许多没有想到的漏洞。但是每次修…

linux下搭建go环境--问题记录

记录自己在linux上搭建go环境的经历。&#xff08;因为各种版本&#xff0c;linux系统问题挣扎了几天&#xff09; 安装vmware-tools,把我要运行代码拷进来。这个网上方法很多&#xff0c;我的电脑抽风不能安装&#xff0c;后面重装的虚拟机确定Ubuntu版本、位数。很重要&#…

Teams Bot开发系列:Teams的Activity处理

上一篇文章讲了activity处理的流程&#xff0c;我们bot的核心处理逻辑放在ActivityHandler的子类里&#xff0c;通过重载OnMessageActivityAsync()方法来实现。 这篇文章我来讲一下对于Teams的bot来说&#xff0c;整个处理的逻辑会有哪些不同点。 通过之前的文章&#xff0c;…

取球博弈

两个人玩取球的游戏。一共有N个球&#xff0c;每人轮流取球&#xff0c;每次可取集合{n1,n2,n3}中的任何一个数目。 如果无法继续取球&#xff0c;则游戏结束。 此时&#xff0c;持有奇数个球的一方获胜。 如果两人都是奇数&#xff0c;则为平局。 假设双方都采用最聪明的取法…

MySQL修改字符集

MySQL数据库修改字符集,介绍一下修改的方法 1&#xff09;系统工具iconv #file filename #mysqldump --default-character-setutf8 >20180523xxx.sql #file 20180523xxx.sql #iconv -t utf8mb4 -c 20180523xxx.sql>20180523xxxutf8mb4.sql #file 20180523xxxutf8mb4.sql…

Teams Bot开发系列:Bot验证

我们今天来说一下authentication&#xff0c;authentication一直是一个复杂的问题。bot里的authentication也不简单。我们先来看一个概念&#xff1a;Bot Framework Token Service&#xff0c;根据官方定义&#xff0c;这个token service主要是&#xff1a; Facilitating the u…

堆排序

目录 一、定义二、算法分析三、代码地址一、定义 1.1 堆 ​ 此处的堆&#xff0c;指数据结构中的堆。而不是内存中的那种内存堆&#xff0c;内存堆是基于数据结构的一种实现。堆的数据结构是一棵完全二叉树&#xff0c;它有如下特点&#xff1a;&#xff08;具体参考下文链接&a…

Teams Bot开发系列:Middleware

middleware是目前一些framework比较流行的概念&#xff0c;通常一个开发框架需要提供一些可扩展可定制化的功能。所以middleware这种pattern就很实用。 熟悉asp.net core的开发可能第一个想到的就是asp.net core的middleware&#xff0c;如下图&#xff1a; 当一个http reques…

如何获取租户中所有的Team

大家在使用Graph API开发Teams App的时候&#xff0c;有时候会需要获取某个租户Tenant的所有team&#xff0c;在写这篇文章的时候Graph API并没有提供这么一个功能&#xff0c;没有一个类似于”GET /teams”的api。 在Micorsoft Graph官方文档的已知问题中&#xff0c;也提到了…

mysql常用快速查询修改操作

mysql常用快速查询修改操作 一、查找并修改非innodb引擎为innodb引擎 # 通用操作 mysql> select concat(alter table ,table_schema,.,table_name, engineinnodb;) from information_schema.tables where table_schema not in (information_schema,mysql,performance_schem…

ElasticSearch教程——自定义分词器(转学习使用)

一、分词器 Elasticsearch中&#xff0c;内置了很多分词器&#xff08;analyzers&#xff09;&#xff0c;例如standard&#xff08;标准分词器&#xff09;、english&#xff08;英文分词&#xff09;和chinese&#xff08;中文分词&#xff09;&#xff0c;默认是standard. s…

使用Azure Serverless来开发Teams App

Azure Function可以说比较早期的一个serverless服务&#xff0c;随着这些年云服务的大行其道&#xff0c;Serverless在概念越来越火&#xff0c;什么叫serverless&#xff1f; Serverless computing (or serverless for short), is an execution model where the cloud provide…

Angular之RouterModule的forRoot与forChild

Angular 提供了一种方式来把服务提供商从模块中分离出来&#xff0c;以便模块既可以带着 providers 被根模块导入&#xff0c;也可以不带 providers 被子模块导入。 区别&#xff1a; forRoot creates a module that contains all the directives, the given routes, and the r…

关于 someone could be eavesdropping on you right now (man-in-the-middle attack) ssh的解决办法

关于 someone could be eavesdropping on you right now (man-in-the-middle attack) ssh的解决办法 记录工作中遇到的问题 someone could be eavesdropping on you right now (man-in-the-middle attack) ssh  由于远程机器或者重组或者更新了ssh server导致本地记录的验证信…

使用AzureFunction开发最简单的Teams Outgoing Webhook

上篇文章讲了teams app的serverless架构&#xff0c;这篇主要讲如何真正使用Azure Function来开发一个最最简单的Teams Outgoing Webhook。 我们先登入azure的portal&#xff0c;创建一个azure function。我这里创建了一个名字叫outgoing-webhook的azure function。完成后如下…

Java 基础 之 标识符

www.verejava.com/?id1699254… /* 标识符的命名规则: 1. 是以字母&#xff0c;数字&#xff0c;下滑线_和美元符号$ 组成 2. 不能以数字开头 3. 区分大小写 4. 不能是java的保留关键字 5. 最好是见名思意 */ public class Identifier {public static void main(String[] args…