在上一篇文章中,我们一步步从无到有在Microsoft Teams中开发了一个简单的Outgoing Webhook,并和我们本地的Web API应用程序产生交互,总结起来的步骤大概如下:

  • 导航到“团队” Tab页, 选中需要建立的Channel, 选中“应用”这个Tab,点击最下方的“创建传出webhook”
  • 开发传出webhook的后端服务
  • 配置ngrok进行请求转发
  • Team中发送消息,后端程序响应消息

这篇文章我们一起来看看如何使用dotnet的模板来快速开发一个带安全验证机制的Outgoing Webhook

1. 运行ngrok,记下转发的地址

2. 在teams里新建一个app,这次记下security token

具体的创建步骤见第一篇文章

3. 安装dotnet的模板

因为Teams的模板默认没有安装,所以我们需要在dotnet里添加模板

c:\demo> dotnet new -i MicrosoftTeams.Templates

4. 使用模板创建Teams Outgoing Webhook项目

运行以下命令来在当前目录下创建工程

c:\demo> dotnet new teamswebhook

使用VS code打开这个目录,找到appsettings.cs文件,修改配置节点TeamsAppSecurityToken, 填入我们创建Webhook时生成的security token

{"Logging": {"LogLevel": {"Default": "Warning"}},"AllowedHosts": "*","TeamsAppSecurityToken": "aDpHmzCh+z9r57niKFCew1AeI6tGjway5TfACZC7L88="
}

5. 运行程序

c:\demo> dotnet run

返回到Teams的对话框中,我们发送一条消息,观察Teams的消息返回

注意到消息正常返回,且提示我们尝试输入hero 或者 thumbnail,那我们根据提示,分别发送hero和thumbnail

上面的整个过程就是我们基于Microsoft Teams的模板创建的整个可交互的Outgoing Webhook的应用,下面我们来分析下整个的代码结构:

首先,看到Services中定义的接口ITeamsAuthProvider.cs

public interface ITeamsAuthProvider
{/// <summary>/// Validates the specified authentication header value./// </summary>/// <param name="request">The HTTP request message.</param>/// <returns>/// Response containing result of validation./// </returns>TeamsAuthResponse Validate(HttpRequest request);
}

其中的Validate方法用于对请求的授权认证,TeamsAuthProvider.cs继承ITeamsAuthProvider,实现了Validate 的认证授权逻辑。这个验证用来确保这个请求是从微软Teams的服务器发过来的,而不是其他恶意的程序发送的请求,从而确保的请求的发起源是受信任的。

接着看下MessagesController中,GetMessage这个Action,首先实现对请求授权的判断,

var authResult = _teamsAuth.Validate(this.Request);
if (!authResult.AuthSuccessful)
{return new Activity(){Text = "You are not authorized to call into this end point."};
}

重点我们看下下面这段代码,

Attachment attachment = null;
if (activity.Text.Contains("hero", StringComparison.InvariantCultureIgnoreCase))
{var card = CreateSampleHeroCard();attachment = new Attachment(){ContentType = HeroCard.ContentType,Content = card};
}
else if (activity.Text.Contains("thumbnail", StringComparison.InvariantCultureIgnoreCase))
{var card = CreateSampleThumbnailCard();attachment = new Attachment(){ContentType = ThumbnailCard.ContentType,Content = card};
}

从上面的代码中看到,我们在Teams中发送hero或者thumbnail时,会看到响应的消息是一个带有图片的消息回复,具体的这种图片消息, 我们可以简单理解为是一种图片附件的形式,我们来分析其中hero图片附件的代码:

private HeroCard CreateSampleHeroCard()
{return new HeroCard(){Title = "Superhero",Subtitle = "An incredible hero",Text = "Microsoft Teams",Images = new List<CardImage>(){new CardImage(){Url = "https://github.com/tony-xia/microsoft-teams-templates/raw/master/images/cbd_after_sunset.jpg"}},Buttons = new List<CardAction>(){new CardAction(){Type = "openUrl",Title = "Visit",Value = "http://www.microsoft.com"}}};
}

可以比较清楚的看到,一些标题Title和显示问题Text, 其中Image作为显示图片URL, 这里的Buttons是这一种行为,当我们点击时,跳转到对应设置的网站,点击可以看到跳转到微软的官网。

可以看到使用dotnet template来创建outgooing webhook项目方便快速,而且使用了card,使得返回的消息格式非常丰富。

使用dotnet template快速开发Microsoft Teams Outgoing Web Hook相关推荐

  1. Microsoft Teams的Outgoing Webhook开发入门

    Microsoft Teams的应用程序有几种形式: Tabs Bots Connectors Messaging extensions Activity feed integrations Outg ...

  2. 重磅!微软发布新一代 Teams 开发工具 —— Teams Toolkit!不止VS Code extension!

    今天凌晨(北京时间 2021 年 5 月 26 日),在一年一度的 Build 大会上,微软正式发布了新一代的 Teams 开发工具 -- Teams Toolkit. 截止到 2021 年 4 月份 ...

  3. JEECG 3.6 自定义表单版本发布,智能快速开发平台

    JEECG 3.6(智能快速开发平台) 自定义表单版本发布 平台介绍: JEECG(J2EE Code Generation),一款基于代码生成器的JAVA快速开发平台,集成强大代码生成器和在线开发机 ...

  4. JEECG Framework 3.5.2 (快速开发平台) ACE版本发布

    平台介绍: JEECG(J2EE Code Generation),一款基于代码生成器的JAVA快速开发平台,集成强大代码生成器和在线开发机制,在线报表配置机制. ------------------ ...

  5. 开发指南专题一: JEECG微云快速开发平台前言

    JEECG微云快速开发平台-前言 1. 前言 1.1. 技术背景 随着WEB UI 框架(EasyUI/Jquery UI/Ext/DWZ)等的逐渐成熟,系统界面逐渐实现统一化,代码生成器也可以生成统 ...

  6. springmvc+activiti 完美整合- 流程在线设计+代码生成器+UI快速开发库,提高一半的开发效率

    JEECG(J2EE Code Generation) 是一款基于代码生成器的智能开发平台,采用代码生成+手工MERGE半智能开发模式, 可以帮助解决Java项目60%的重复工作,让开发更多关注业务逻 ...

  7. JEECG V3.0版本 (工作流在线定义+UI快速开发库+代码生成器) 全新架构技术,漂亮的界面+智能代码生成+智能工作流

    简要说明 JEECG V3.0版本推翻原有SSH2架构,采用SpringMVC+Hibernate+Spring jdbc基础架构, 采用面向声明的开发模式,基于泛型方式编写极少代码即可实现复杂的数据 ...

  8. JEECG V3.0 版本(jbpm5 工作流自定义+WEB UI快速开发库+代码生成器) spring mvc +hibernate

    简要说明 JEECG V3.0版本推翻了原有SSH2架构,采用SpringMVC+Hibernate+Spring jdbc基础架构, 采用面向声明的开发模式,基于泛型方式编写极少代码即可实现复杂的数 ...

  9. openjweb1.8 java web应用快速开发平台产品白皮书

    因图片较多,需要图片请到资源中下载,不需要资源分.           OpenJWeb(1.8) Java Web应用快速开发平台   产品白皮书               编者:OpenJWeb ...

最新文章

  1. 双边滤波+ 通俗自己理解
  2. zookeeper集群自动启动脚本
  3. 安装redis并开启_如何安装Redis,以及对Redis配置文件的更改和测试
  4. chapter8.1、面向对象
  5. 未来5年中国企业信息化格局
  6. 强烈推荐SQL Prompt 3.8,并发布SQL Prompt 3.8 ,SQL Refator 的xxx
  7. 2022年Java秋招面试必看的 | 微服务面试题
  8. STM8L开发环境配置
  9. 绩效考核管理方案文档
  10. 【实践与问题解决30】苹果手机如何取消使用切换控制时候弹出的重要通知
  11. 关于“堆栈”的含义及理解
  12. BLE4.0广播连接过程的底层剖析
  13. 2014中国高中排行榜发布 华中师大一附中居首
  14. tecplot云图——数据文本格式2
  15. python石头剪刀布游戏代码输入格式随机数种子设置为0_Python模拟石头剪刀
  16. 设备描述符请求失败解决
  17. 提取 Office 2016 工具栏图标
  18. 《沙漠自然教育项目全纪实》发布 圣牧有机让绿色的种子种进更多孩子心里
  19. 使用 scoped-slot 去设置缩略图模版,成功上传图片之后回显,在进行编辑,保存成功,但是报错
  20. 量子计算机院士,厚积薄发!中科院院士宣布重要消息,又一技术世界领域领先全球...

热门文章

  1. 哎!又要过年了,程序员最怕问到什么?
  2. CSS实现垂直居中的5种方法
  3. list 排序_十个必知的排序算法|Python实例系列
  4. mysql 数据库事务处理_Mysql事务处理问题 - mysql数据库栏目 - 自学php
  5. tfpose与openpose区别_人体姿态识别--Openpose+Tensorflow
  6. skysat重访周期_重访小恶梦
  7. Vue、React 之间如何实现代码移植?
  8. SparkSQL 之 Shuffle Join 内核原理及应用深度剖析-Spark商业源码实战
  9. [SDOI2015]约数个数和
  10. Nginx服务状态的监控