Teams Bot App Manifest 文件解析

这篇文章我们继续以 Hello World Bot 这个 sample 来讲一下 manifest template。

实际上在 Teams app 开发的时候,有 manifest 的概念,manifest 是用来说明这个 teams app 的一些基本信息和配置信息,比如 app 的名字,app有哪些能力,app 的bot id是多少。具体的 manifest 的 schema 可以参考这个官方文档 Manifest schema reference - Teams | Microsoft Learn ,我会在以后的文章里详细介绍 manifest 的每一块每一个细节。

但是传统的 Teams app 开发里没有 manifest template 的概念,这个template 是 Teams Toolkit 里的概念。为什么需要一个 template 呢?因为我们一般的开发流程和开发周期需要几个环境,比如开发环境,测试环境,UAT环境,生产环境。在不同的环境里,我们会有不同的 app 设置,比如 bot id 是不同的,可能这些环境共用一个M365 tenant,但为了区分会使用不同的 app 名字,比如开发环境的叫 MyBot-dev,在uat环境的可能叫 MyBot-uat,所以需要有不同的 manifest 文件,但是这些 manifest 文件里又有很多部分会很相似。

所以 Teams Toolkit 为了解决这个问题,加入了 manifest template 的概念,我们来看一下 template 文件 manifest.template.json 里面是怎么写的。

{"$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.14/MicrosoftTeams.schema.json","manifestVersion": "1.14","version": "1.0.0","id": "","packageName": "com.microsoft.teams.extension","developer": {"name": "Teams App, Inc.","websiteUrl": "https://www.example.com","privacyUrl": "https://www.example.com/privacy","termsOfUseUrl": "https://www.example.com/termsofuse"},"icons": {"color": "resources/color.png","outline": "resources/outline.png"},"name": {"short": "","full": ""},"description": {"short": "Short description of ","full": "Full description of "},...
}

我们可以看到文件里面使用了 来表明一个 placeholder,这些 placeholder 又分为两大类,分别是 和 ``,他们实际上是对应了 .fx 目录里的两类文件。

对于 local 环境,有对应的 config.local.json 和 state.local.json 文件,state 文件是在运行后自己生成的。我们来看一下 config.local.json 文件的内容。

{"$schema": "https://aka.ms/teamsfx-env-config-schema","description": "You can customize the TeamsFx config .....","manifest": {"appName": {"short": "HelloWorldBot-local-debug","full": "Full name for HelloWorldBot-local-debug"}}
}

回到前面的一个 placeholder ``,对照上面的 config 文件内容,我们可以知道,这个placeholder,将被值 HelloWorldBot-local-debug 所替换。我们找到替换后的生成的最终 manifest 文件: /build/appPackage/manifest.local.json

...
"name": {"short": "HelloWorldBot-local-debug","full": "Full name for HelloWorldBot-local-debug"
},
"description": {"short": "Short description of HelloWorldBot-local-debug","full": "Full description of HelloWorldBot-local-debug"
},
...

state 的 placeholder 也类似,我们可以在 state.xxx.json 里找到对应的值。不同的是,state 文件是 teams toolkit自动生成的,所以如果我们自己需要增加一些不同环境不同的配置,我们要使用 config,而不是 state。

好,我们来改一个试试看,打开 manifest.template.json 文件,把 websiteUrl 改成如下的placeholder ``

    "developer": {"name": "Teams App, Inc.","websiteUrl": "","privacyUrl": "https://www.example.com/privacy","termsOfUseUrl": "https://www.example.com/termsofuse"},

然后我们在 config.local.json 文件中加入 website。

{..."manifest": {"appName": {...},"website": "https://mysite-local.com"}
}

然后我们在dev环境的 config.dev.json 文件中加入对应的 website。

{..."manifest": {"appName": {...},"website": "https://mysite-dev.com"}
}

运行一下我们的app,这样 Teams Toolkit 会重新生成一个 manifest json 文件。打开新生成的 /build/appPackage/manifest.local.json,可以看到 website 就是我们在 config.local.json 里配置的。

...
"developer": {"websiteUrl": "https://mysite-local.com",....
},
...

前面我们讲了好几个文件,可能有点晕,我们用一张图来总结。

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

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

相关文章

[Dart] Flutter开发中的几个常用函数

几个Flutter开发中的常用函数 /** 返回当前时间戳 */static int currentTimeMillis() {return new DateTime.now().millisecondsSinceEpoch;}/** 复制到剪粘板 */static copyToClipboard(final String text) {if (text null) return;Clipboard.setData(new ClipboardData(text…

Cordova入门系列(三)Cordova插件调用 转发 https://www.cnblogs.com/lishuxue/p/6018416.html...

Cordova入门系列(三)Cordova插件调用 版权声明:本文为博主原创文章,转载请注明出处 上一章我们介绍了cordova android项目是如何运行的,这一章我们介绍cordova的核心内容,插件的调用。演示一个例子&#xf…

clojure with postgres

主要关注访问pg。不关心其他db 1 clojure.java.jdbc https://github.com/clojure/java.jdbchttp://clojure-doc.org/articles/ecosystem/java_jdbc/reusing_connections.html这个最广,需要配合不同DB[org.clojure/java.jdbc "0.7.9"] [org.postgresql/pos…

lua入门

https://en.blog.nic.cz/2015/08/12/embedding-luajit-in-30-minutes-or-so/

shell脚本传可选参数 getopts 和 getopt的方法

写了一个shell脚本,需要向shell脚本中传参数供脚本使用,达到的效果是传的参数可以是可选参数 下面是一个常规化的shell脚本: echo "执行的文件名为: $0";echo "第一个参数名为: $1";echo "第二个参数名为: $2"…

Teams Tab App 代码深入浅出 - 配置页面

上一篇文章我们使用Teams Toolkit 来创建、运行 tab app。这篇文章我们深入来分析看一下tab app 的代码。 先打开代码目录,可以看到在 src 目录下有入口文件 index.tsx,然后在 components 目录下有更多的一些 tsx 文件,tsx 是 typescript的一…

labelme标注的json文件数据转成coco数据集格式(可处理目标框和实例分割)

这里主要是搬运一下能找到的 labelme标注的json文件数据转成coco数据集格式(可处理目标框和实例分割)的代码,以供需要时参考和提供相关帮助。 1、官方labelme实现 如下是labelme官方网址,提供了源代码,以及相关使用方…

EpSON TM-82II驱动在POS系统上面安装问题处理

按照品牌名称,在网上下载的安装包为apstmt82.rar 下面讲解一下,如何的解决爱普生打印机在POS机器上面的安装问题,这个算是一个比较奇特的故障问题,不像其它的新北冰洋(SN3C)的U80_U80II,SeNor的…

打印图片的属性和实现另存图片功能以及使用numpy

上一篇我们已经学了如何读取图片的功能了以及和opencv的环境搭建了,今天接着来学习,哈哈哈,今天刚好五一,也没闲着,继续学习。 1、 首先我们来实现打印出图片的一些属性功能, 先来看一段代码: 1…

Ubuntu 18.04下命令安装VMware Tools

2019独角兽企业重金招聘Python工程师标准>>> sudo apt-get upgrade sudo apt-get install open-vm-tools-desktop -y sudo reboot 转载于:https://my.oschina.net/u/574036/blog/1829455

phpstorm PHP language level无法选择

phpstorm PHP7新特性一直提示红色波浪线,应该是没有设置PHP 版本,但是打开PHPstorm---preference--lannguage&frameworks--PHP , 发现PHP language level 无法选择PHP7.2 ,查看旁边的提示信息说是同步了composer 的原因&#…

Qfile

打开方式: 1 void AddStudents::write_to_file(QString src){2 QFile file("stu.txt");3 if (!file.open(QIODevice::Append | QIODevice::Text)){4 QMessageBox::critical(this,"打开文件错误","确认");5 r…

多层装饰器、带参数装饰器

# 带参数的装饰器 # import time # FLAGE False # 加个标志位,使全部的装饰器可以失效或有效 # def timmer_out(flag): # def timmer(func): # def inner(*args,**kwargs): # if flag: # start time.time() # …

IDEA svn 菜单不见了,解决方法

2019独角兽企业重金招聘Python工程师标准>>> 参考地址: http://www.cnblogs.com/signheart/p/193448a98f92bd0cc064dbd772dd9f48.html,我是第二种方法解决的! 转载于:https://my.oschina.net/liuchangng/blog/1829679

苏宁易购:Hadoop失宠前提是出现更强替代品

在笔者持续调研国内Hadoop生态系统生存现状的同时,KDnuggets发布的2018年数据科学和机器学习工具调查报告再次将“Hadoop失宠”言论复活。报告一出,“Hadoop被抛弃”几个字瞬时成为各大标题党的最爱,充斥在不同的新闻平台。这些报告和数据是否…

VS2017生成一个简单的DLL文件 和 LIB文件——C语言

下面我们将用两种不同的姿势来用VS2017生成dll文件(动态库文件)和lib文件(静态库文件),这里以C语言为例,用最简单的例子,来让读者了解如何生成dll文件(动态库文件) 生成动…

Hive数据类型及文本文件数据编码

本文参考Apache官网,更多内容请参考:https://cwiki.apache.org/confluence/display/Hive/LanguageManualTypes 1. 数值型 类型支持范围TINYINT1-byte signed integer, from -128 to 127SMALLINT2-byte signed integer, from -32,768 to 32,767INT/INTEGE…

Python绘图Turtle库详解

转载:https://blog.csdn.net/zengxiantao1994/article/details/76588580 Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令…

(待完成)qbxt2019.05 总结2 - 数位DP

数位 DP 严格来说其实并不是 DP……它只是个单纯的计数问题 但是怎么说呢……现在大家似乎都把数位 DP 叫这个名字,所以……我们还是……叫它 DP 额什么是数位 DP 呢? 一句话概括——一类求在 K 进制下m满足条件的数的数量有多少个的算法 常见的问题形式…

mac使用brew update无反应解决办法

为什么80%的码农都做不了架构师?>>> mac系统中使用brew作为包管理工具,类似centos中的yum,ubuntu中的apt-get,在使用brew update的使用,有时候会长时间无反应,或者中途断开连接,这是…