Teams
文章平均质量分 72
Tony.X
这个作者很懒,什么都没留下…
展开
-
TeamsApp升级之路 - 大用户并发抽奖的性能分析和数据库优化
大用户并发抽奖的性能分析和数据库优化原创 2023-01-22 14:08:23 · 14476 阅读 · 0 评论 -
Teams app 的 SSO 机制
我们来继续我们的 Teams sample 之旅,上一个讲了 Tab app,那我们这里再深入一步,看一下如何使用 sso 机制。原创 2022-11-29 17:30:41 · 12987 阅读 · 0 评论 -
Teams Tab App 的 manifest 分析
上一篇文章我们深入来分析了 tab app 的代码,这篇文章我们研究一下 manifest原创 2022-11-27 09:19:15 · 11126 阅读 · 0 评论 -
Teams Tab App 代码深入浅出 - 配置页面
深入来分析看一下tab app 的代码原创 2022-11-19 08:08:01 · 11938 阅读 · 0 评论 -
Teams Bot App Manifest 文件解析
teams toolkit 的 manifest template原创 2022-10-07 17:45:57 · 10232 阅读 · 0 评论 -
Teams Bot App 用户互动
adaptive card 在 Teams 里的互动原创 2022-10-03 17:32:53 · 11450 阅读 · 0 评论 -
Teams Bot App 代码解析
Teams Bot App 代码解析原创 2022-09-25 21:21:37 · 10453 阅读 · 1 评论 -
Teams Bot App 初探
Teams bot app原创 2022-09-24 13:29:05 · 10454 阅读 · 1 评论 -
Teams Toolkit 之 Incoming Webhook
深入 incoming webhook代码原创 2022-09-19 13:20:56 · 11420 阅读 · 0 评论 -
入门 Teams Toolkit
学习使用 teams toolkit原创 2022-09-18 09:54:07 · 10359 阅读 · 0 评论 -
使用环境变量来配置 Teams App 的 manifest
上篇文章我们介绍了 Teams 的 Developer Portal,今天我想分享一个dev portal里一个比较实用的功能。这个功能在之前的 App Studio 里没有。这个功能叫 Environment variables。当我们真实开发一个 teams app的时候,肯定有自己的开发环境,测试环境,和生产环境,比如一旦一个app发布到 teams store之后,开发人员再继续开发第二个版本的时候肯定不能徐印象生产环境了。需要有一个用于开发测试的测试app。测试app的manifest里很多设原创 2022-03-13 20:06:56 · 4896 阅读 · 0 评论 -
Teams Developer Portal介绍
在去年的 Build2021 大会上讲到的 Teams Developer Portal 已经上线一段时间了,我这几天玩了一下,发现比之前的 app studio 强大了很多,所以赶快写篇文章和大家分享。Developer Portal 有两种访问的方式,一个是网页版,一个是在 Teams 里直接使用,功能基本都一样,我这里就以 Teams app 版本来做一个介绍。登入打开 Teams,在 Teams 里搜索 Developer Portal,点击 Add。安装完后,就可以在 Teams原创 2022-03-12 19:56:09 · 5349 阅读 · 0 评论 -
Teams Meeting App的 task 弹出框
前几篇文章我们介绍了 Teams Meeting App 的各种类型和如何从无到有的使用 net6 和 c# 来开发一个 Teams Meeting app,那今天我们开始讨论一些 meeting app 的高级互动: task 弹出框。我们先来快速修改一下之前的代码,看看什么是 task 弹出框。打开MainPage.cshtml文件,加入如下代码:<body style="background: white">... <button onclick="add()..原创 2021-12-30 06:14:37 · 7603 阅读 · 0 评论 -
如何获取 Teams Meeting 的上下文信息
我们上一篇文章讲了如果使用 net6 和 c# 来快速开发一个最简单的 teams meeting app。为了让大家比较容易理解,上个sample非常简单,简单到没有什么功能,那我们现在就来慢慢扩展这个app的功能:看看如何获取 meeting 的上下文。打开上个sample中的MainPage.cshtml文件,使用如下代码:@page "/MainPage"<!DOCTYPE html><html lang="en"><head> &l..原创 2021-12-27 11:22:04 · 7911 阅读 · 0 评论 -
开发第一个Meeting App
今天我们来看一下如何使用c# net6 来开发一个 teams的 meeting app。首先先确保本地安装了最新版本的 net6。创建一个目录,然后在目录下输入下面的命令行,让 dotnet 来生成一个初步的asp.net core 代码框架。dotnet new razor代码框架生成如下的目录和文件,我们可以删除不需要的文件:Error.cshtml.cs,Error.cshtml,Index.cshtml,Index.cshtml.cs,Privacy.cshtml和Priv...原创 2021-12-26 19:22:21 · 7733 阅读 · 0 评论 -
Teams 的 Meeting App
Teams 的 Meeting App 已经正式推出了一段时间,相应的文档也已经较为完善了,我接下来会写一系列的文章,来介绍如何开发一个自己的Meeting app。这篇文章作为这个系列的第一篇,将介绍 meeting app 是如何被使用的,有哪些可以扩展的点。那我们先来看一下它如何被安装和使用,我们先创建一个会议。创建完成后,点开会议进行编辑。在最上面的一排 tab 页的最后有一个加号,我们通过点击这个加号来为这个会议添加 meeting app。点击加号后就会显示如下界面,是一些支持 me原创 2021-12-16 18:16:14 · 9056 阅读 · 0 评论 -
在Teams app代码中enable nullable
昨天讲了一下如何把代码升级到 net6,今天我优化了好几个小时更新代码,enable了nullable。c#的nullable我一直非常喜欢,它可以帮助开发人员,让开发人员去思考,哪些地方需要可以为null,哪些地方不需要。它并不是万能的灵丹妙药,但是它的确可以大大的提高代码质量。我自己通过在LuckyDraw里enable了nullable,从而发现了好几个潜在的bug。现在一些其他语言,比如typescript也有类似功能,所以我觉得这个会是以后开发语言的一种趋势。这篇文章我来分享一下我遇到的一原创 2021-12-14 17:42:15 · 5323 阅读 · 0 评论 -
Teams App如何选择用户
当我们在开发app的时候,很多时候需要选择一个用户,比如我们开发一个审批的app,就要选择审批人,所以这个app就需要实现选择人的界面,而且需要获取完整的用户列表,但是要获取完整的用户列表又需要app拥有较高的权限。通常企业的IT部门不太愿意把这种权限给到app。不过,好在Teams已经为我们考虑到这点,Teams提供了一个很好用的功能:People Picker。我们先来看一下代码:const peoplePickerInputs: PeoplePickerInputs = { ... };原创 2021-10-06 17:27:43 · 6605 阅读 · 0 评论 -
Teams App 扫描二维码
上篇文章我们讲了如何在app的manifest里设置设备的权限,这篇文章我们来实际操作开发一个可以扫描二维码的teams app。首先,我们先到app studio里,创建一个teams app,然后创建tab,重要的一点是,我们确保manifest.json里含有这么一段:{ "$schema": "https://developer.microsoft.com/json-schemas/teams/v1.10/MicrosoftTeams.schema.json", "manifest原创 2021-09-22 07:02:46 · 6978 阅读 · 0 评论 -
Teams App自定义
当我们开发的 app 被企业安装后,有些企业挺希望能做一些自定义,如果把app的图标改的更加符合企业风格一点,或者把app的名字改成让本企业员工更容易理解一些,或者把app界面的主题色改成个企业风格更加搭配一些,或者对于隐私协议进行一些修改。Teams作为一个为全球企业提供服务的平台,它当然也为平台上的 app 考虑到这些。这篇文章,我主要介绍如何配置。首先,我们需要到Developer Portal for Teams: https://dev.teams.microsoft.com/,使用账号.原创 2021-07-25 16:12:46 · 5944 阅读 · 0 评论 -
Teams App 如何使用设备的能力
我们以前讲到过,Teams有很多中可以扩展的方面,其中有一种是Tab,开发者可以开发一个web page/app,然后以tab的方式嵌入到teams里面。除了基本的功能,这种tab也可以使用teams客户端设备所带的一些能力,比如:摄像头 麦克风 相册 扫二维码 地理位置有些这些能力,我们开发的tab就能完成更多更有趣的功能。这篇文章我们就来看看如何获取这些能力。首先,每个teams app有一个manifest.json来描述app的一些基本信息,同样,我们需要在manifest里声原创 2021-07-24 08:25:15 · 5886 阅读 · 0 评论 -
Teams数据统计 - 聊天消息
前两篇文章介绍了如何对用户的在线状态和通话记录进行数据统计。这篇文章我们来看看如何统计用户的聊天消息。在介绍具体 api 如何调用前,我们可以先看一下 Teams 里对于 Message 的层级结构,在 Teams 里,message有两种,一种是 Team 的 Channel 的 message,一种是对一对聊天或者群聊里的 message。他们的层级设计是不同的。Channel 里的消息它的层次结构如下:Team -> Channel -> Message -> Re原创 2021-07-20 19:56:52 · 9175 阅读 · 2 评论 -
Teams数据统计 - 通话记录
上篇文章介绍了如何获取用户的在线状态,这篇文章我们记录介绍如何统计用户通话记录。首先,Teams为了安全,它要求 app 要有CallRecords.Read.All权限。然后就可以通过这个api来获取 call record。GET /communications/callRecords/{id}这个接口会返回类似如下的数据:{ "@odata.context": "https://graph.microsoft.com/beta/$metadata#communicat..原创 2021-07-13 19:14:52 · 8531 阅读 · 2 评论 -
发送ActivityFeed的隐藏功能
前两篇文章介绍了如何发送 activity notification,这篇文章主要介绍两个隐藏功能,实际上所谓的隐藏功能是指大家在阅读官方文档是会忽略的两个点,但是实际上也是很实用的两个功能点。text 类型的 topic之前文章中提到我们的 activity notification 支持三种类型,他们分别的url是:POST https://graph.microsoft.com/beta/chats/{chat-id}/sendActivityNotificationPOST http原创 2021-06-16 20:25:20 · 5908 阅读 · 0 评论 -
发送不同类型的ActivityFeed
上一篇文章讲到了如何使用最新的Graph API来给一个用户发送一个简单的 Activity Feed。我们这篇文章来详细讲一下发送三种不同类型的消息。发送 Chat 相关的 Activity NotificationAPI 为POST https://graph.microsoft.com/beta/chats/{chat-id}/sendActivityNotificationhttp请求的内容为:{ "topic": { "source": "entityU.原创 2021-06-13 08:51:47 · 5420 阅读 · 0 评论 -
给Teams消息附加图片的三种方式
Teams消息支持三种不同的方式来添加图片,这篇文章我们来一起看一下这三种方式。Inline图片var imagePath = Path.Combine(Environment.CurrentDirectory, "abc.png");var imageData = Convert.ToBase64String(File.ReadAllBytes(imagePath));var image = new Attachment{ Name = @"Resources\abc.png",原创 2021-05-19 12:28:40 · 12481 阅读 · 0 评论 -
主动给团队或用户安装Teams App
在写这篇文章的时候,这个新功能还处在 Public Review,这意味着可能(很小的可能性)这里写的方法在正式发布前还会有一些改动。之前有一些做teams app开发的朋友问过我,能不能主动给一个team或者一个用户安装一个指定的app,之前做不到,但现在可以了,方法如下:权限先要确保你的app有TeamsAppInstallation.ReadWriteSelfForUser.All和TeamsAppInstallation.ReadWriteSelfForTeam.All,从名字我们可...原创 2021-05-10 18:14:43 · 7188 阅读 · 0 评论 -
如何在 Apple Silicon (M1) 上开发 Teams App
apple 在几个月前发布了自家的芯片 M1,由于将多核cpu,多核gpu,神经网络运算,内存和其他一切处理部件高度整合在一起,大大提高数据传输速度。发布后好评如潮,我也没有忍住,入手了一台最低配的mac air m1。目前 M1 还是有很多软件不能很好支持,当然,这个无法阻挡我在上面的开发。我给大家分享一下我在apple silicon上开发的过程。首先,到写这篇文章的时候还有很多开发软件不支持跑在M1上,我们来看看当前的状态。Docker正式发布版本不原生支持 apple silicon,p原创 2021-01-04 09:31:52 · 2274 阅读 · 0 评论 -
Teams AppId, InstallationId 和 ExternalId 的区别
大家如果看teams的 graph api 开发文档,可能会把 app id, installation id 和 external id 搞混,我自己一开始的时候就有点被搞晕了,再加上app manifest里面的 id 和 bot id,基本就彻底晕掉了。那我们今天这篇文章就来讲讲这几种 id 。首先当我们开发一个 team app 的时候,都需要编写一个 manifest json 文件,在这个文件里就有必须要指定一个 id,还有一个 bot id,bot id就是你创建的 microsoft原创 2021-01-03 07:00:57 · 3690 阅读 · 0 评论 -
迁移聊天记录到Teams
有一些朋友问我teams是否支持将其他平台/系统里的聊天记录迁移某个channel里,答案是肯定的,teams团队在去年年中的时候就提供了这个功能。这个功能是通过graph api来完成的,我们今天就来看看如何迁移聊天记录到teams里。首先,我们需要确保我们的app有了一个teams的权限:Teamwork.Migrate.All,然后确保下面调用的api都是在beta版本下。创建一个team需要注意的是这个team的creation mode是一个特殊的值:migration。如下:PO原创 2021-01-02 09:07:19 · 6127 阅读 · 0 评论 -
LuckyDraw app使用CosmosDB的成本分析
我在以前的博客里说过我的LuckyDraw app在数据存储方面使用的是 Azure Table Storage,当时选择这个的原因是成本考虑,因为它实在是便宜,对于我这种个人开发维护的免费的teams app来说,成本是一个很重要的考量点。当然,我也为这个运营成本的节省,付出了很多开发成本。因为针对Table Storage,在代码开发,业务逻辑处理,开源库的支持度等方面,比传统的数据库复杂很多。最简单的一个例子是,当需要保存一个大的json的时候,在SQL,我们可以简单的使用nvarchar(max原创 2021-01-01 16:04:01 · 1908 阅读 · 0 评论 -
使用Azure轻松实现Teams App的全球合规性
我在之前的一篇博客里面讲了合规性对于我们Teams app是非常重要的,因为office365平台就是面向全世界用户的,我们开发的teams app一旦发布后,立刻就会有各国各地区的用户来进行安装使用,所以符合用户所在地区的要求是非常重要的。很多读者来信问合规性这么难做,而且不同地区的要求可能是相互冲突的,有没有什么好的方法或者是平台来方便开发者呢。实际上大家正在使用的Azure就是一个非常好的平台,他自己本身已经符合了各个地区的合规性要求,见下图:微软白皮书当我们把我们开发的teams原创 2020-12-06 07:05:33 · 2665 阅读 · 0 评论 -
使用AzureFunction开发最简单的Teams Outgoing Webhook
上篇文章讲了teams app的serverless架构,这篇主要讲如何真正使用Azure Function来开发一个最最简单的Teams Outgoing Webhook。我们先登入azure的portal,创建一个azure function。我这里创建了一个名字叫outgoing-webhook的azure function。完成后如下图,记住这个azure function的URL,我这里是https://outgoing-webhook.azurewebsites.net在左边菜单里.原创 2020-11-15 07:40:59 · 3421 阅读 · 0 评论 -
使用Azure Serverless来开发Teams App
Azure Function可以说比较早期的一个serverless服务,随着这些年云服务的大行其道,Serverless在概念越来越火,什么叫serverless?Serverless computing (or serverless for short), is an execution model where the cloud provider is responsible for executing a piece of code by dynamically allocating the原创 2020-11-14 19:26:40 · 2687 阅读 · 0 评论 -
如何获取租户中所有的Team
大家在使用Graph API开发Teams App的时候,有时候会需要获取某个租户Tenant的所有team,在写这篇文章的时候Graph API并没有提供这么一个功能,没有一个类似于”GET /teams”的api。在Micorsoft Graph官方文档的已知问题中,也提到了目前不支持这么一个api。https://docs.microsoft.com/en-us/graph/known-issues?view=graph-rest-beta#get-teams-is-not-supported原创 2020-10-18 12:22:09 · 2112 阅读 · 0 评论 -
Teams Bot开发系列:Middleware
middleware是目前一些framework比较流行的概念,通常一个开发框架需要提供一些可扩展可定制化的功能。所以middleware这种pattern就很实用。熟悉asp.net core的开发可能第一个想到的就是asp.net core的middleware,如下图:当一个http request进入到处理的pipeline后,先被一个个middleware嵌套的执行,完成后在一个个推出。如果我们需要一些定制化功能,比如想把每个request要做一个统计记录,那开发可以自己写个middl原创 2020-10-17 11:49:32 · 3378 阅读 · 0 评论 -
Teams Bot开发系列:Bot验证
我们今天来说一下authentication,authentication一直是一个复杂的问题。bot里的authentication也不简单。我们先来看一个概念:Bot Framework Token Service,根据官方定义,这个token service主要是:Facilitating the use of the OAuth protocol with a wide variety of external services. Securely storing tokens for a p原创 2020-10-10 15:25:28 · 3957 阅读 · 0 评论 -
Teams Bot开发系列:Teams的Activity处理
上一篇文章讲了activity处理的流程,我们bot的核心处理逻辑放在ActivityHandler的子类里,通过重载OnMessageActivityAsync()方法来实现。这篇文章我来讲一下对于Teams的bot来说,整个处理的逻辑会有哪些不同点。通过之前的文章,大家应该已经知道,Teams bot是Azure bot service支持的众多bot聊天平台里的一种channel(注意:这里的channel指bot service里的channel,和Teams里的channel是完全不同的概原创 2020-10-05 14:02:28 · 3813 阅读 · 0 评论 -
Teams Bot开发系列:Activity处理流程
上篇文章介绍了什么是Activity,Turn,TurnContext和BotAdapter,这篇文章我们看看这些东西是如何窜起来的,他们是如何处理用户发给bot的消息的。我们以一个最简单的bot,echo bot为例子,所谓的echo bot就是用户发什么消息,它就照样回复一条消息。为了简单起见,大家可以先安装VS2019的一个扩展插件BotBuilderVSIX.vsix template,然后创建一个NET core 3.1的Echo bot。可以看到这个模板为什么创建了一个项目,我.原创 2020-09-13 17:45:57 · 3200 阅读 · 0 评论 -
Teams Bot开发系列:Activity和Turn
这篇文章我们来说一下Activity和Turn这两个bot framework中最重要的两个概念,同时也介绍一下TurnContext和BotAdapterActivity一个activity是聊天双方的一个信息载体,它可以是一条消息,也可以是一个动作。比如用户给bot发送一条文字消息,这就是一个activity,bot给用户回复一张图片,那这是另一个activity。Activity是bot framework里最重要的概念,让我们来一起看一下c# sdk里对activity的定义。真实感受一原创 2020-09-06 15:55:03 · 3527 阅读 · 0 评论