如何获取 Teams Meeting 的上下文信息

我们上一篇文章讲了如果使用 net6 和 c# 来快速开发一个最简单的 teams meeting app。为了让大家比较容易理解,上个sample非常简单,简单到没有什么功能,那我们现在就来慢慢扩展这个app的功能:看看如何获取 meeting 的上下文。

打开上个sample中的 MainPage.cshtml 文件,使用如下代码:

@page "/MainPage"<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Demo</title><link rel="stylesheet" href="/static/styles.css"><script src="https://statics.teams.cdn.office.net/sdk/v1.10.0/js/MicrosoftTeams.min.js"integrity="sha384-6oUzHUqESdbT3hNPDDZUa/OunUj5SoxuMXNek1Dwe6AmChzqc6EJhjVrJ93DY/Bv"crossorigin="anonymous"></script>
</head>
<body><h1>MainPage</h1><div id="meeting-context"></h1><script>microsoftTeams.initialize();microsoftTeams.getContext(function(context) {document.getElementById('meeting-context').innerText = JSON.stringify(context);});</script>
</body>
</html>

这段代码比较简单,首先加入了对 teams js sdk 的引用,版本为 1.10.0,然后调用了下面这个方法:

microsoftTeams.initialize();

这个是对sdk的初始化,由于我们这个页面是会嵌入到 teams 会议中的,所以 MainPage 页面需要和 Teams客户端本身建立一种联系。这个是一个必要步骤,如果不做这个,其他大多数函数都会失败。

然后我们就调用了 microsoftTeams.getContext(function(context) { ... });,这就是用来获取会议上下文的 api。在sdk里,这个方法的定义如下。https://github.com/DefinitelyTyped/DefinitelyTyped/blob/8bd26b379caa1f82a24aa1bb768d92fe9f30950b/types/microsoftteams/index.d.ts

function getContext(callback: (context: Context) => void): void;interface Context {groupId?: string | undefined;teamId?: string | undefined;teamName?: string | undefined;channelId?: string | undefined;channelName?: string | undefined;channelType?: ChannelType | undefined;entityId: string;subEntityId?: string | undefined;locale: string;osLocaleInfo?: LocaleInfo | undefined;upn?: string | undefined;tid?: string | undefined;theme?: string | undefined;isFullScreen?: boolean | undefined;teamType?: TeamType | undefined;teamSiteUrl?: string | undefined;teamSiteDomain?: string | undefined;teamSitePath?: string | undefined;hostTeamTenantId?: string | undefined;hostTeamGroupId?: string | undefined;channelRelativeUrl?: string | undefined;sessionId?: string | undefined;userTeamRole?: UserTeamRole | undefined;chatId?: string | undefined;loginHint?: string | undefined;userPrincipalName?: string | undefined;userObjectId?: string | undefined;isTeamArchived?: boolean | undefined;hostClientType?: HostClientType | undefined;frameContext?: FrameContexts | undefined;sharepoint?: any;tenantSKU?: string | undefined;userLicenseType?: string | undefined;parentMessageId?: string | undefined;ringId?: string | undefined;appSessionId?: string | undefined;isCallingAllowed?: boolean | undefined;isPSTNCallingAllowed?: boolean | undefined;meetingId?: string | undefined;defaultOneNoteSectionId?: string | undefined;isMultiWindow?: boolean | undefined;appIconPosition?: number | undefined;sourceOrigin?: string | undefined;userClickTime?: number | undefined;teamTemplateId?: string | undefined;userFileOpenPreference?: FileOpenPreference | undefined;
}

可以看到 Context 是一个有非常多属性的结构,我们不展开,我们先来看一下安装后我们得到的 context是什么,在我们上面的代码里,我们把拿到的 context 序列化成 json,然后打印在页面上。

我们安装 app 到一个会议中,然后就可以看到页面上显示了 context 的json数据。

get-context

我们来看一下这个json里含了什么有用的信息:

{"locale": "en-us","theme": "default","entityId": null,"subEntityId": "","isFullScreen": false,"sessionId": "91291367-f8f0-9a5e-d420-490d4eb8bc8d","chatId": "19:meeting_ODA1MjIzYzAtODNhYy00MjE0LWFmZmQtN2MxMTQ0ODdlMWQ2@thread.v2","meetingId": "MCMxOTptZWV0aW5nX09EQTFNakl6WXpBdE9ETmhZeTAwTWpFMExXRm1abVF0TjJNeE1UUTBPRGRsTVdRMkB0aHJlYWQudjIjMA==","parentMessageId": "","hostClientType": "desktop","tenantSKU": "enterprise","jsonTabUrl": "microsoft-teams-json-tab.azurewebsites.net","userLicenseType": "Unknown","appSessionId": "1be21c3a-e846-4bf8-90e3-dc3b01938d39","appLaunchId": "d30e788c-d424-40f5-9373-236345d64249","isMultiWindow": false,"appIconPosition": 23,"userClickTime": 1640572621827,"sourceOrigin": null,"userFileOpenPreference": "inline","osLocaleInfo": {"platform": "windows","regionalFormat": "en-us","longDate": "dddd, MMMM d, yyyy","shortDate": "M/d/yyyy","longTime": "h:mm:ss tt","shortTime": "h:mm tt"},"frameContext": "content","teamSiteDomain": "aabbcc365.sharepoint.com","teamSitePath": "","teamSiteUrl": "","ringId": "general","tid": "53213f63-c1e6-4416-bdab-da54fcb7b4b7","loginHint": "admin@aabbcc365.onmicrosoft.com","upn": "admin@aabbcc365.onmicrosoft.com","userPrincipalName": "admin@aabbcc365.onmicrosoft.com","userObjectId": "488e5982-c57c-4373-a4dd-67eab506d98d"
}

有这么一些信息我觉得比较有用:

  • locale 当前 Teams 客户端的语言
  • theme 当前 Teams 客户端的主题,比如是不是暗色主题,或者是高对比度主题
  • meetingId 当前会议的唯一id
  • hostClientType 当前 Teams 客户端的类型
    enum HostClientType {desktop = "desktop",web = "web",android = "android",ios = "ios",rigel = "rigel",surfaceHub = "surfaceHub"
    }
    
  • osLocaleInfo 当前 Teams 客户端的文化信息,比如日期格式之类的
  • tid 当前租户的id
  • userPrincipalName 用户名
  • userObjectId 当前用户的 Azure AD里的Object ID

我们有了这些信息后(特别是meeting id),后面很多 api 就比较容易调用了,我们将在后面的文章里再具体展开。

 

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

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

相关文章

php的运行流程

1、Zend引擎&#xff1a;Zend整体用纯C实现&#xff0c;是PHP的内核部分&#xff0c;他将PHP代码翻译&#xff08;词法、语法解析等一系列编译过程&#xff09;为可执行opcode的处理并实现相应的处理方法、实现了基本的数据结构&#xff08;如&#xff1a;hashtable、OO&#x…

内置方法

isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object):pass obj Foo() isinstance(obj, Foo) issubclass(sub, super)检查sub类是否是 super 类的派生类 class Foo(object):pass class Bar(Foo):pass issubclass…

会议中的Meeting App

接着我们上两篇博客文章&#xff0c;我们说了如何开发会议前和会议后的 meeting app&#xff0c;那如何开发一个会议中的 app 呢&#xff0c;实际上比较简单&#xff0c;我们只需要在 tab 的配置项中勾选下面这两个选项即可。 勾选后&#xff0c;我们安装app到我们的一个会议中…

0-2岁的app开发人员必读,Android开发APP前的准备事项

2019独角兽企业重金招聘Python工程师标准>>> 随着移动互联网的兴起&#xff0c;各行各业对移动应用的需求越来越大&#xff0c;从事APP开发的人也越来越多&#xff0c;APP开发行业可以说是方兴未艾。APP开发是比较复杂的事情&#xff0c;涉及产品、美工设计、服务器…

FixedThreadPool吞掉了异常

为了方便遍描述问题&#xff0c;如下是简化后的 public class RunException {public static void main(String[] args) { ExecutorService readerPool Executors.newFixedThreadPool(3); readerPool.submit(new Runnable() { public void run() { throw new RuntimeException(…

Teams Meeting App的 task 弹出框

前几篇文章我们介绍了 Teams Meeting App 的各种类型和如何从无到有的使用 net6 和 c# 来开发一个 Teams Meeting app&#xff0c;那今天我们开始讨论一些 meeting app 的高级互动&#xff1a; task 弹出框。我们先来快速修改一下之前的代码&#xff0c;看看什么是 task 弹出框…

react 学习

react官网地址&#xff1a;http://facebook.github.io/react/ webpack官网地址&#xff1a;http://webpack.js.org/ 英文 https://www.webpackjs.com/ 中文 参考资料&#xff1a; React 入门实例教程-阮一峰 webpack的学习 学习列表&#xff1a; 了解react的语法&#x…

如何获取Teams Meeting 详情

最近有一些朋友问我&#xff0c;有没有可能获取到会议的详情&#xff0c;我搜索了目前所有的 teams 文档&#xff0c;发现有一个api可以获取&#xff0c;不过在我写这篇文章的时候&#xff0c;这个 api 还在 preview 阶段&#xff0c;可能在正式发布前&#xff0c;还会有一些变…

C++ : 内联函数和引用变量

一.内联函数 内联函数和普通函数的使用方法没有本质区别&#xff0c;我们来看一个例子&#xff0c;下面展示了内联函数的使用方法&#xff1a; #include <iostream> using namespace std; //下面展示内联函数的使用 inline double square(double x) {return (x*x);} int…

Teams Meeting 实时事件通知

Microsoft Teams最近推出了很多新的功能和api&#xff0c;我们今天就来一起看一下 teams 会议的实时事件通知&#xff0c;我觉得有了这个功能&#xff0c;我们的app&#xff0c;我们的bot又可以有很多可以实现的场景了。 我们来看看如何在 c# 里处理会议开始和结束这两个事件。…

error记录 | 不能将参数 1 从“const char [5]”转换为“LPCTSTR

Windows使用两种字符集ANSI和UNICODE&#xff0c;前者就是通常使用的单字节方式&#xff0c;但这种方式处理象中文这样的双字节字符不方便&#xff0c;容易出现半个汉字的情况。而后者是双字节方式&#xff0c;方便处理双字节字符。Windows NT的所有与字符有关的函数都提供两…

JMM 学习笔记

并发编程的模型 并发编程需要解决的两个问题&#xff1a;线程之间如何同步&#xff0c;线程之间如何通信。 线程之间通信&#xff1a;共享内存&#xff0c;消息传递。 共享内存通过线程之间读-写程序的公共状态进行通信。消息传递要通过线程之间主动传递消息进行通信。 线程之间…

嵌套函数,匿名函数,高阶函数

目录 嵌套函数匿名函数高阶函数嵌套函数 就是在函数里再定义一个函数 # 1,函数内部可以在定义函数 # 2,函数要想执行&#xff0c;必须要先被调用 def name1():print(kk)def name2():print(vfx)name2() name1() 输出&#xff1a; kk vfx name2 现在他内部代码找输出&#xff0c;…

Teams Developer Portal介绍

在去年的 Build2021 大会上讲到的 Teams Developer Portal 已经上线一段时间了&#xff0c;我这几天玩了一下&#xff0c;发现比之前的 app studio 强大了很多&#xff0c;所以赶快写篇文章和大家分享。 Developer Portal 有两种访问的方式&#xff0c;一个是网页版&#xff0…

使用环境变量来配置 Teams App 的 manifest

上篇文章我们介绍了 Teams 的 Developer Portal&#xff0c;今天我想分享一个dev portal里一个比较实用的功能。这个功能在之前的 App Studio 里没有。这个功能叫 Environment variables。 当我们真实开发一个 teams app的时候&#xff0c;肯定有自己的开发环境&#xff0c;测…

[Unity优化]批处理03:静态批处理

[Unity优化]批处理03&#xff1a;静态批处理 原理&#xff1a; 运行时&#xff0c;把需要进行静态批处理的网格合并到一个新的网格中。虽然只进行一次合并操作&#xff0c;但是会占用更多的内存来存储合并后的网格&#xff0c;并且被静态批处理的物体无法移动旋转缩放 要使用静…

制造领域的人工智能技术

“AI将执行制造、质量控制、缩短设计时间、减少材料浪费、提高生产再利用率&#xff0c;执行预测性维护等等&#xff0c;尽管人工智能有望从根本上改变很多行业&#xff0c;但该技术非常适合制造业”Ng说。Andrew Ng是深度学习Google Brain项目的创始人兼斯坦福大学计算机科学兼…

如何获取一个会议的 transcripts

Teams 开发团队在过去半年里提供了很多的关于会议的 api&#xff0c;这让我们又有了很多的可以实现的功能和场景。今天我要介绍的是如何获取会议的 transcripts。 首先我们要知道的一个概念是&#xff1a;一个会议 meeting 可能有很多的 transcript&#xff0c;是一对多的关系…

JS获取IP地址

HTML代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><script src"https://unpkg.com/vue/dist/vue.js"></script></head><body><div id"vm&quo…

1小时玩爆趣头条自媒体平台,增粉实战操作分享

做自媒体的人最关注的就是每天自己账号的后台数据&#xff0c;因为数据决定当天的收益。因此只要每天能达到几十万的数据&#xff0c;相信对于做自媒体的朋友来说&#xff0c;一个月下来&#xff0c;最少也有1万以上的收入。目前&#xff0c;自媒体平台能赚钱的平台有很多&…