VS Code部署Teams webhook到Azure Functions

点击上方蓝字

关注我们

(本文阅读时间:6分钟)

Microsoft Teams这款产品对于我们来说已经很熟悉了,作为开发者,我们也可以通过官方的一些开发模式来build我们自己的Teams应用。

今天快速跟大家分享一下,如何在VS Code中部署Azure Function(Azure Serverless的一种解决方案),并将其作为Teams的webhook地址。

微软MVP实验室研究员

1f2d1aa0e3ee6fe84d1e62799a9cfeac.png

09272d813bb10569ae326212f6412fbb.png

张坤

微软最有价值专家(MVP)。目前技术方向是 .NET,微服务,Microsoft Azure及Microsoft Teams应用开发。

68d119c47b8aa6cae56c72ecf924c7c8.png

准备环境

3d0a8ed6b097c6e83b20be4dd9011c0a.png

1. 准备Azure Account和Microsoft Teams账号

2. VS Code

1) 下载安装

2) 为VS Code安装Azure的Extension

3. Microsoft Teams (客户端或Web版都可以)

4. 下载代码:

  • 地址:https://github.com/paul-cheung/outgoing-web-hook-sample

新建项目

91563fa17f7213327700bca3126a6581.png

1. 根据Extension的选项登录Azure Account,选择subscription。

2. VS Code打开下载的代码(或自己创建),Azure的Extension就会识别到。

90bf11104b742ca39fcca74e0109fca5.png

3. 查看项目内容。这里就是简单的api function,接受Activity请求模型(微软的Bot Framework),并标记了function的trigger类型是httptrigger,认证级别也是匿名的,这样在call这个api的时候就不需要提供token了。当然实际情况是需要有token验证的,这里不多介绍。

0e501ab6087c00bd7fdc46c8301728b5.png

部署项目

e7cf1deb14a0978cbb6bfd0b8e55eb18.png

1.build项目,点击Deploy to Function App,一路操作。

86e0284f1386535f4fd0b2f4ff39c073.png

2. 选择对应的subscription 

3374a325629ef0fdb3001eed94af66ae.png

3.  选择deploy到已有的function app还是新建,根据自己需要。我这里直接覆盖已有的。

7ea7ff09f1dd0b4e7c49e765975df7b8.png

如果是新建的话,会提示输入名称,这里正常输入名称就行,如:

85c5987cdedb9e5c56f7865c09a822f1.png

4.  选择Location。需要指定我们的app部署到哪个region。

135dcbe4440bfe462ac99b56b73fc780.png

5. 等待部署。

72a90d6fe9314be891f815c8df57b141.png

fb784d104118a82832e160e933d3f0b7.png

ad04167047995f50ac1b6f76b81e6079.png

或者看output的Log 

9eada782364927d692376e9feba5efe7.png

提示相关resource已经创建好,部署完成。

检查部署情况

17324f920757c13cc755b5dc9556e7ba.png

我们登录Azure Portal检查一下部署情况。

可以看到URL一栏,就是我们OutgoingWebhook的地址。 

f818db867177638814a8341e79c9702e.png

配置Teams里的Webhook

5aefdc9562a6362fd8fdc1e9aa841b69.png

上面已经将服务部署在Azure Functions上,接下来打开Teams进行Webhook配置。

1.首先登入账号到Teams,定位到team的app标签页:

f6d4d4633f1c699ea47e127b26e671c3.png

2.点击Create an outgoing webhook,填写名称和Callback URL。 

11cf1e57096ddc7a9cdcc1727c6eb539.png

Callback URL来自这里: 

0922e4e81c66d950cdb8de68e2537e66.png

3.创建webhook完会提示保存token(妥善保存就行,我们这里暂时不用它,略过认证部分) 

fe191b0ea90a7a8d54811a5b7f1eddac.png

验证效果

d540a96186222da01614422888886356.png

以上已经成功创建了outgoing webhook,并且这个hook是调用到azure function的。现在测试一下效果。

1. 我们再到team的channel里给它发消息(at它) 

29f81d67ea80852e893dc116d71a537d.png

2. 随便发个什么消息,然后会得到回复 

65d0f2211fddb2f383175533143d263a.png

总结

7a65060ae0f7ffc3d38a5abee671f277.png

在Teams App的开发过程中,我们经常会使用ngrok来做反向代理/内网穿透,这里就提供了另一种途径,可以将我们写好的bot代码一键部署到cloud端,也是有助于提高我们的开发效率。

使用serverless的azure实现来简化我们的部署,当然还有其它的service可以达到同样的目的,这里算是抛砖引玉,大家可以多尝试其他好方法。感谢阅读。

相关链接:

  • https://docs.microsoft.com/en-us/azure/azure-functions/functions-overview

  • https://www.microsoft.com/en-sg/microsoft-teams/download-app

微软最有价值专家(MVP)

9ab5628675ee6060bac313e6a48c3330.png

微软最有价值专家是微软公司授予第三方技术专业人士的一个全球奖项。29年来,世界各地的技术社区领导者,因其在线上和线下的技术社区中分享专业知识和经验而获得此奖项。

MVP 是经过严格挑选的专家团队,他们代表着技术最精湛且最具智慧的人,是对社区投入极大的热情并乐于助人的专家。MVP 致力于通过演讲、论坛问答、创建网站、撰写博客、分享视频、开源项目、组织会议等方式来帮助他人,并最大程度地帮助微软技术社区用户使用 Microsoft 技术。
更多详情请登录官方网站:
https://mvp.microsoft.com/zh-cn

f03d9f8e3d93a0c4424b647765c9f151.png

谢谢你读完了本文!欢迎在评论区留言分享你的想法,并且转发到朋友圈

如果你对本文青睐有加,想要转载到自己的平台,请在后台回复「转载」与我们取得联系!

23641ed21b266b6258f24af84268242b.png

长按识别二维码

关注微软中国MSDN

31216dbb0fd3b8e4e7291a8bcff17a43.gif

Azure Functions 简介 

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

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

相关文章

记一次TCP连接异常故障解决

为什么80%的码农都做不了架构师?>>> 一.情况表现为 1.在公司内网对站点的http访问: linux主机出现故障:curl以及抓包分析,发现服务端不响应linux客户端的请求,无法建立TCP连接,浏览器返回“无法…

【转】基于 Android NDK 的学习之旅-----数据传输(引用数据类型)

原文网址:http://www.cnblogs.com/luxiaofeng54/archive/2011/08/20/2147086.html 基于 Android NDK 的学习之旅-----数据传输二(引用数据类型)(附源码) 基于 Android NDK 的学习之旅-----数据传输(引用数据类型) 接着…

微软官方pe工具_微软官方下载工具

二、进入官网下载百度搜索“win10下载”进入微软官网win10下载地址,点击“立即下载工具”开始下载;三、运行软件下载完成后,右键以“管理员身份”打开,点击“接受”。四、选择用途选择第一个升级自己的电脑;选择第二个…

编程之美3——N!末尾有多少个0

因为n!是一个非常大的数,所以不能通过常规的方法,求出n!的值之后,再判断它的末尾有多少个0.这里的关键就是,n!的末尾有多少个0,取决于n!中,质因数 5 的个数。如:12!479001600 ,其…

Git之添加公钥之后git clone ****提示sign_and_send_pubkey: signing failed: agent refused operation

1 问题 在GitlLab上面添加了公钥之后,然后执行git clone *****提示下面的错误 sign_and_send_pubkey: signing failed: agent refused operation 2 解决办法 执行下面2个命令即可 eval "$(ssh-agent -s)" ssh-add ssh-agent是一种控制用来保存公钥身份验证所使…

mysql老是自动停止_ecs云服务器 mysql经常自动停止挂掉重启问题分析

我的ecs服务器为1g内存的配置,在部署了nginx,mysql,redis,node服务后跑起项目来,(mysql使用默认配置),每过几天便发现了经常会出现数据库自动停止挂掉,然后几分钟后重启的现象,与此同时ecs无法登陆,当然,网站也是无法访…

C#遍历指定文件夹中的所有文件

C#遍历指定文件夹中的所有文件 DirectoryInfo TheFolder=new DirectoryInfo(folderFullName); //遍历文件夹 foreach(DirectoryInfo NextFolder in TheFolder.GetDirectories()) this.listBox1.Items.Add(NextFolder.Name); //遍历文件 foreach(FileInfo NextFile in TheFo…

Task.Factory.StartNewTResult 和 Task.RunTResult 到底有什么区别?

前言这不是和《Task.Factory.StartNew 和 Task.Run 到底有什么区别?》一样吗,怎么又写一篇?起先我也是这么觉得的,但实际发现并非如此。实现代码查看这 2 个方法的内部实现,其内部实现逻辑其实是一样的,只是…

大数据服务社会的一个有益实践

自从有了微信,很多人的生活习惯就发生了不同以往的变化。比如,早上起床后的第一件事,可能就是把积压的未读微信信息快速浏览一遍,该发的发、该转的转。笔者虽离开工作岗位,却依然总有时间不够用的感觉,所以…

python pysnmp使用

SNMP标准引入一组ASN.1语言元素,称之为SMI(Structure of Management Information)。由SMI描述的相互关联的被管对象(Managed Objects)组成MIB(Management Information Base)模块。核心MIB中经常…

Git之checkout到别的分支提示Your local changes to the following files would be overwritten by checkout:

1 问题 在我自己的分支,然后切换到主分支,提示错误如下 Your local changes to the following files would be overwritten by checkout:****file****file 2 解决办法 先把这些文件进行add操作,然后再进行commit,就可以了, git add filegit commit -m commit message 然后你…

javaweb连接不上mysql怎么办_java web应用连接mysql会突然connection连接失败

tomcat6.0mysql5.1项目:java web项目问题:原本项目运行了好几天了,一直没发现问题,突然今天报数据库连接异常,进入看日志发现### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransien…

【遥感物候】C#遥感数据GIMMS 3G NDVI头文件批量生成器(几何校正)

长时间序列全球NDVI数据GIMMS 3g(点击下载),原数据无投影,格式为VI3g,IE浏览器下载的为.txt格式。GIS软件无法直接打开,Envi 5可以打开。 ENVI中点击File->Open File as->Binary会弹出填写元数据的窗口,填写基本信息: Envi5.1中打开二进制(Binary)数据是,需要…

Kuzzle,一种内部部署的文档后端

Kuzzle是一种可以内部部署或是在云中运行的文档后端。在近期的CES 2017上,提供该平台的公司公布了其企业版解决方案。 Kuzzle用NoSQL仓库对文档做持久保存,支持基于模式的或是无模式的文档。Kuzzle提供CRUD API,并使用了Elasticsearch提供高级…

分享一个基于.NET6包含DDD,ES,CQRS等概念的开源项目

当你在学习DDD、CQRS或时间溯源时,除了大量的学习资源(比如书籍和文章)之外,你还接触到了许多概念,这些资源只是在讨论理论问题。这很好,我们知道他们在说什么,但我们如何在一个真正的项目中使用…

React Native之通过createStackNavigator实现携带参数的页面与页面之间的跳转

1 实现的功能 在网上看React Native文档,我特码就想实现一个页面到另外一个页面的跳转,然后另外一个页面怎么获取参数,特么没找到一个说清楚的,要么太复杂,要么说了不理解,下面是我自己写的一个App.js文件,实现一个Home页面跳到另外Details页面,并且携带了参数怎么在Details页…

google浏览器插件 开发 获取页面指定数据_程序员必备的4款Chrome插件,编程神器...

一直有粉丝留言,想要大侠推荐几款程序员使用的插件,大侠特意去问了隔壁的程序员哥哥,终于被我问出了这4款编程神器!这4款插件不仅仅是提高效率那么简单哦,还可以让你的Chrome浏览器变得高端大气,一起来看看…

强制类型转换问题

在c中,当把一个表示范围更大的类型的数值a赋值给一个表示范围更小的类型时,会自动进行强制类型转换,转化为范围表示更大的类型。 转换的规律是,这里假定较小的类型表示的数值的个数为n。转化后的值为a模n后的余数。 对于整型数a&a…

MATLAB多元非线性回归

解释变量:商品价格(x1)人均月收入(x2),被解释变量:商品需求量(y),进行二元回归分析,并进行检验 商品价格(元/件) 月收入(元) 需求(件) 89 …

媒体应用大数据,先解决三大难题

在大数据时代,互联网是骨骼,大数据则是血液。大数据的核心在于数据,具有海量、高频、在线、实时等特点,但是对于传统媒体来说,在运用大数据的过程中,存在着数据资源不足、数据平台欠缺和缺乏有竞争力的数据…