热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用AzureFunction开发最简单的TeamsBot

之前我有一篇文章讲了如何在azurefunction上开发最简单的outgoingwebhook,收到一些反馈,建议我介绍一下如果在azurefunction上开发teamsbot

之前我有一篇文章讲了如何在azure function上开发最简单的outgoing webhook,收到一些反馈,建议我介绍一下如果在azure function上开发teams bot,那这篇文章就来讲一下如何用function来快速开发bot。

我们先创建一个azure function资源,然后创建一个由http触发的Function。具体步骤和上次outgoing webhook的步骤类似,我就不再重复。

BotFunction

为了调试方便,我这里允许匿名访问这个function。

BotFunction

创建完function后,我们就可以输入下面的代码:

#r "Newtonsoft.Json"
using System;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Microsoft.Bot.Connector;
using Microsoft.Bot.Connector.Authentication;
using Microsoft.Bot.Schema;
public static async Task Run(HttpRequest req, ILogger log)
{
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
log.LogInformation(requestBody);
var activity = JsonConvert.DeserializeObject(requestBody);
var reply = activity.CreateReply("Echo: " + activity.Text);
log.LogInformation(JsonConvert.SerializeObject(reply));
MicrosoftAppCredentials.TrustServiceUrl(activity.ServiceUrl, DateTime.UtcNow.AddDays(7));
var botId = "2a820a1c-1111-2222-3333-e8864ad6ff54"; // your bot id
var botPassword = Environment.GetEnvironmentVariable("BotPassword"); // your bot password
var cOnnector= new ConnectorClient(new Uri(activity.ServiceUrl), botId, botPassword);
connector.Conversations.SendToConversationAsync(reply);
return new OkResult();
}

上面的代码先从http请求的request body里反序列化出 Activity 对象。

var activity = JsonConvert.DeserializeObject(requestBody);

然后从这个activity对象,创建出回复的消息。

var reply = activity.CreateReply("Echo: " + activity.Text);

接着,创建 connector 对象,然后用这个对象来发送回复的消息:

var cOnnector= new ConnectorClient(new Uri(activity.ServiceUrl), botId, botPassword);
connector.Conversations.SendToConversationAsync(reply);

在发送回复消息之前,我们需要trust teams的serive url。

MicrosoftAppCredentials.TrustServiceUrl(activity.ServiceUrl, DateTime.UtcNow.AddDays(7));

当我们保存上面的代码的时候,azure function 就会自动进行编译,但是编译失败,原因是 Microsoft.Bot.* 命名空间找不到,因为我们还没有引用对应的库。我们进入 App Service Editor (目前还是preview版本),在我们的function的目录下创建一个 function.proj 文件。

BotFunction

BotFunction

function.proj 文件内容如下:



netstandard2.0






回到function后,重新执行,就可以成功编译执行了。

完成了function后,我们就可以和普通的bot一样的在teams里创建一个bot app,然后填入azure function的url,就可以测试我们的bot了。 :D



推荐阅读
  • 本文讨论了在ASP中创建RazorFunctions.cshtml文件时出现的问题,即ASP.global_asax不存在于命名空间ASP中。文章提供了解决该问题的代码示例,并详细解释了代码中涉及的关键概念,如HttpContext、Request和RouteData等。通过阅读本文,读者可以了解如何解决该问题并理解相关的ASP概念。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 本文总结了在开发中使用gulp时的一些技巧,包括如何使用gulp.dest自动创建目录、如何使用gulp.src复制具名路径的文件以及保留文件夹路径的方法等。同时介绍了使用base选项和通配符来保留文件夹路径的技巧,并提到了解决带文件夹的复制问题的方法,即使用gulp-flatten插件。 ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • React项目中运用React技巧解决实际问题的总结
    本文总结了在React项目中如何运用React技巧解决一些实际问题,包括取消请求和页面卸载的关联,利用useEffect和AbortController等技术实现请求的取消。文章中的代码是简化后的例子,但思想是相通的。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • ***byte(字节)根据长度转成kb(千字节)和mb(兆字节)**parambytes*return*publicstaticStringbytes2kb(longbytes){ ... [详细]
  • 本文介绍了ASP.NET Core MVC的入门及基础使用教程,根据微软的文档学习,建议阅读英文文档以便更好理解,微软的工具化使用方便且开发速度快。通过vs2017新建项目,可以创建一个基础的ASP.NET网站,也可以实现动态网站开发。ASP.NET MVC框架及其工具简化了开发过程,包括建立业务的数据模型和控制器等步骤。 ... [详细]
  • 本文整理了Java中java.lang.NoSuchMethodError.getMessage()方法的一些代码示例,展示了NoSuchMethodErr ... [详细]
  • 本文介绍了解决java开源项目apache commons email简单使用报错的方法,包括使用正确的JAR包和正确的代码配置,以及相关参数的设置。详细介绍了如何使用apache commons email发送邮件。 ... [详细]
  • 在开发中,有时候一个业务上要求的原子操作不仅仅包括数据库,还可能涉及外部接口或者消息队列。此时,传统的数据库事务无法满足需求。本文介绍了Java中如何利用java.lang.Runtime.addShutdownHook方法来保证业务线程的完整性。通过添加钩子,在程序退出时触发钩子,可以执行一些操作,如循环检查某个线程的状态,直到业务线程正常退出,再结束钩子程序。例子程序展示了如何利用钩子来保证业务线程的完整性。 ... [详细]
author-avatar
徐成奕_98743
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有