发布 teamsApp

命名空间:microsoft.graph

应用 发布到 Microsoft Teams 应用目录。 具体而言,此 API 将应用发布到组织的目录 (租户应用目录) ;创建的资源的 distributionMethod 属性值 organization为 。

requiresReview 属性允许任何用户提交应用以供管理员审阅。 管理员可以通过此 API 或 Microsoft Teams 管理中心批准或拒绝这些应用。

此 API 可用于以下国家级云部署

全局服务 美国政府 L4 美国政府 L5 (DOD) 由世纪互联运营的中国

权限

为此 API 选择标记为最低特权的权限。 只有在应用需要它时,才使用更高的特权权限。 有关委派权限和应用程序权限的详细信息,请参阅权限类型。 要了解有关这些权限的详细信息,请参阅 权限参考

权限类型 最低特权权限 更高特权权限
委派(工作或学校帐户) AppCatalog.Submit AppCatalog.ReadWrite.All、Directory.ReadWrite.All
委派(个人 Microsoft 帐户) 不支持。 不支持。
应用程序 不支持。 不支持。

注意

  • Directory.ReadWrite.All 支持向后兼容权限。 建议更新解决方案,以使用上表中列出的替代权限,并避免今后使用这些权限。
  • AppCatalog.Submit 权限允许你仅提交应用以供审阅,而不能将其发布到目录。

HTTP 请求

POST /appCatalogs/teamsApps

若要发布需要评审的应用,请执行以下操作:

POST /appCatalogs/teamsApps?requiresReview={Boolean}

查询参数

属性 类型 说明
requiresReview 布尔值 此可选查询参数将触发应用评审过程。 具有管理员权限的用户无需触发评审即可提交应用。 如果用户希望在发布前请求评审,则必须将 requiresReview 设置为 true。 具有管理员权限的用户可以选择不设置 requiresReview 或将值设置为 false ,并且应用获得批准并立即发布。

请求标头

标头
Authorization 持有者 {token}。 必填。 详细了解 身份验证和授权
Content-Type application/zip。 必填。

请求正文

在请求正文中,包括 Teams zip 清单有效负载。 有关详细信息,请参阅 创建应用包

应用目录中的每个应用都必须具有唯一的清单 ID。

响应

如果成功,此方法将 200 OK 返回响应代码和 teamsApp 对象。 如果应用清单有任何验证错误,则请求将返回错误响应,其中包含有关架构错误的详细信息。

错误响应

如果发送上传包含缺失信息或错误的应用清单的请求,则会收到一条错误消息,其中包含内部错误代码 UnableToParseTeamsAppManifest。 内部错误的 details 属性包含错误代码和错误消息。 下表描述了可能会遇到的错误代码。


错误响应
错误代码 错误消息 说明
ActivityGroupIdFromActivitiesTypeValidation ActivityType 中的 ActivityGroupId 字段必须是 ActivityGroup 中 ID 字段的子集。 中的ActivityGroupIdActivityType字段不是应用清单中 字段ActivityGroupId子集。
ActivityTypesMustExistWithActivitiesGroupValidation 缺少活动类型时,清单不应包含活动组。 属性 ActivityGroup 可用,但 ActivityType 应用清单中缺少该属性。
ApiBasedComposeExtensionApiResponseRenderingTemplateFileNullOrEmpty 基于 API 的 compose 扩展必须在清单上定义 apiResponseRenderingTemplateFile。 基于 API 的撰写扩展未 apiResponseRenderingTemplateFile 在应用清单中定义 。
ApiBasedComposeExtensionApiSpecificationFileNullOrEmpty 基于 API 的 compose 扩展必须在清单上定义 apiSpecificationFile。 基于 API 的撰写扩展未 apiSpecificationFile 在应用清单中定义 。
ApiBasedComposeExtensionManifestCommandIdsNotIncludedInOperationIdsOnApiSpecficationFile 清单上的命令 ID 不包括在 API 规范文件中的操作 ID 中。 当应用清单中的 未包含在 Operation Ids API 规范文件中时Command Ids发生的错误。
ApiBasedComposeExtensionWithBotId 基于 API 的撰写扩展无法定义 botId。 基于 API 的撰写扩展已在 botId 应用清单中定义。
ApiBasedComposeExtensionWithCanUpdateConfiguration 基于 API 的撰写扩展无法在清单上定义 canUpdateConfiguration。 基于 API 的撰写扩展已在 canUpdateConfiguration 应用清单中定义。
ApiBasedComposeExtensionWithNoParameter 基于 API 的撰写扩展必须在清单上定义命令参数。 基于 API 的 compose 扩展未在应用清单中定义任何命令参数。
ApiSecretServiceAuthTypeComposeExtensionContainsMsftEntraConfiguration 具有 apiSecretServiceAuth authType 的基于 API 的 compose 扩展已定义 microsoftEntraConfiguration。 基于 API 的撰写扩展已在 microsoftEntraConfiguration 应用清单中定义。
ApiSecretServiceAuthTypeComposeExtensionContainsNoApiSecretRegistrationId 具有 apiSecretServiceAuth auth authType 的基于 API 的 compose 扩展未定义 apiSecretRegistrationId。 基于 API 的 compose 扩展,具有 apiSecretServiceAuth authType,未 apiSecretRegistrationId 在应用清单中定义。
ApiSecretServiceAuthTypeComposeExtensionContainsNoApiSecretServiceAuthConfiguration 具有 apiSecretServiceAuth authType 的基于 API 的 compose 扩展没有 apiSecretServiceConfiguration。 基于 API 的撰写扩展未在应用清单中设置为 supportsSingleSignOntrue
ApiSpecificationFileContainUnsupportedHttpMethod 基于 API 的 compose 扩展具有在 apiSpecificationFile 上定义的不支持 http 方法的服务器 URL。 目前仅支持 GET 和 POST。 基于 API 的撰写扩展在 中apiSpecificationFile定义了不支持http的方法。
ApiSpecificationFileParameterContainUnsupportedSchemaType 基于 API 的 compose 扩展在 apiSpecificationFile 上定义了不支持的参数架构类型。 不支持数组。 基于 API 的 compose 扩展具有 在 中 apiSpecificationFile定义的不支持的参数架构类型。
ApiSpecificationFileRequestBodyContainUnsupportedMediaType 基于 API 的撰写扩展在 apiSpecificationFile 上的请求正文中定义了不支持的媒体类型。 目前仅支持 application/json。 基于 API 的撰写扩展在 的请求正文中apiSpecificationFile定义了不支持media的类型。
ApiSpecificationFileRequestBodyContainUnsupportedSchemaType 基于 API 的 compose 扩展在 apiSpecificationFile 上的请求正文中定义了不支持的架构类型。 目前不支持数组。 基于 API 的 compose 扩展在 的请求正文中定义了不支持的 apiSpecificationFile架构类型。
ApiSpecificationFileRequestBodySchemaContainKeywords 基于 API 的撰写扩展具有关键字。 基于 API 的撰写扩展具有 在 中的请求正文中 apiSpecificationFile定义的关键字。
ApiSpecificationFileRequiredParameterContainUnsupportedLocation 基于 API 的 compose 扩展在 apiSpecificationFile {0}上定义了不支持的参数位置。 目前仅支持路径和查询。 基于 API 的 compose 扩展具有在 中 apiSpecificationFile定义的不支持的参数位置。
ApiSpecificationFileRequiredParameterOrPropertyNotDefinedOnManifest 基于 API 的撰写扩展具有清单上未定义的必需参数或属性 {0} 。 基于 API 的撰写扩展具有 required 参数,该参数未在应用清单中定义。
ApiSpecificationFileResponseContainUnsupportedMediaType 基于 API 的撰写扩展在 apiSpecificationFile 的响应中定义了不支持的媒体类型。 目前仅支持 application/json。 基于 API 的 compose 扩展在 中的响应中apiSpecificationFile定义了不支持media的类型。
ApiSpecificationFileServerUrlsContainHttp 基于 API 的 compose 扩展具有在 apiSpecificationFile 上定义的 http 协议的服务器 URL。 基于 API 的 compose 扩展具有包含 http 中的 apiSpecificationFile协议的服务器 URL。
ApiSpecificationFileServerUrlsContainInvalidUrl 基于 API 的撰写扩展具有在 apiSpecificationFile 上定义的无效 URL 的服务器 URL。 基于 API 的撰写扩展具有 invalid 在 中 apiSpecificationFile定义的 URL。
BotBasedComposeExtensionApiResponseRenderingTemplateFileExists 基于机器人的 compose 扩展无法定义 apiResponseRenderingTemplateFile。 基于机器人的 compose 扩展在应用清单中定义了属性 apiResponseRenderingTemplateFile
BotBasedComposeExtensionApiSpecificationFileExists 基于机器人的 compose 扩展无法定义 apiSpecificationFile。 基于机器人的 compose 扩展具有应用清单中定义的 API 规范文件。
BotBasedComposeExtensionBotIdNotGuid 基于机器人的撰写扩展必须具有 GUID botId。 基于机器人的撰写扩展 botId 不是 GUID。
BotIdIsNotGuid BotId 不是 Guid 值。 BotId应用清单中的值不是 GUID。
CommonAppIdIsNotGuid 字段“ID”不是清单中的 Guid。 appId不是 GUID。
CommonAppIdIsRequiredField 清单中缺少必填字段“ID”。 appId未提供 。
CommonManifestVersionIsRequiredField 清单“清单版本”中缺少必填字段。 未提供清单版本。
CommonSchemaUrlIsRequiredField 架构 URL 必须存在。 未提供架构。
DashboardCardBothIconNameAndUrlPresent 仪表板卡片图标不应同时包含图标名称和 URL。 仪表板卡片图标不能同时包含图标名称和 URL。
DashboardCardEntityIdsAreNotUnique 仪表板卡实体 ID 应是唯一的。 仪表板 卡返回的实体 ID 在清单中不唯一。
DeveloperNameIsRequiredField 清单中缺少必填字段“开发人员名称”。 未提供开发人员名称。
DeveloperNameLengthCheck 最大字符长度不得超过 32 个字符。 开发人员名称长度超过 32 个字符。
DeveloperPrivacyUrlIsRequiredField 清单中缺少必填字段“privacyUrl”。 privacyUrl应用清单中缺少 。
DeveloperPrivacyUrlMustBeHttps 隐私 URL 必须受到 HTTPS) (支持 URL 的安全。 开发人员隐私 URL 未使用 HTTPS。
DeveloperTermsOfUseUrlIsRequiredField 清单中缺少必填字段“termsOfUseUrl”。 清单中缺少 termsOfUseUrl
DeveloperTermsOfUseUrlMustBeHttps 使用条款 URL 必须是安全的支持 URL (HTTPS) 。 开发人员使用条款 URL 未使用 HTTPS。
DeveloperWebsiteUrlIsRequiredField 清单中缺少必填字段“websiteUrl”。 缺少开发人员网站 URL。
DeveloperWebsiteUrlMustBeHttps 网站 URL 必须受到 https) (支持 URL 的安全。 开发人员网站 URL 未使用 HTTPS。
FullDescriptionCannotBeEmpty 完整说明不能为空。 完整说明为空。
FullDescriptionLengthCheck 长描述的最大字符长度不得超过 4,000 个字符。 完整说明长度超过 4,000 个字符。
GroupChatForBotsLessThanV13 请将清单的版本升级到 V1.3,因为清单 v1.3 以后支持群聊机器人。 groupChat应用清单 1.3 及更低版本不支持机器人的范围。
GroupChatForConfigurableTabsLessThanV13 请将清单的版本升级到 V1.3,因为清单 v1.3 以后支持群组聊天可配置选项卡。 groupChat应用清单 1.3 及更低版本不支持可配置选项卡的范围。
InvalidColor32x32IconHeightAndWidth 颜色 32x32 图标应为 32x32,只有白色和透明。 颜色 32x32 图标没有正确的尺寸。
InvalidColorIconHeightAndWidth 颜色图标不符合所需的尺寸。 颜色图标的尺寸不正确。
InvalidOutlineIconHeightAndWidth 小图标应为 32x32,只有白色和透明。 大纲图标的尺寸不正确。
InvalidOutlineIconTransparency 大纲图标不透明。 是阿尔法 大纲图标包含既不透明也不为白色的像素,Alpha、R、G、B 值为 {0}、 {1}、 {2}和 {3}。
MsftEntraAuthTypeComposeExtensionContainsApiSecretServiceConfiguration 具有 microsoftEntra authType 的基于 API 的 compose 扩展定义了 apiSecretServiceConfiguration。 基于 API 的撰写扩展已在 apiSecretServiceConfiguration 清单中定义。
MsftEntraAuthTypeComposeExtensionContainsNoMsftEntraConfiguration 使用 microsoftEntra authType 的基于 API 的 compose 扩展未定义 microsoftEntraConfiguration。 基于 API 的撰写扩展未 microsoftEntraConfiguration 在应用清单中定义。
MsftEntraAuthTypeComposeExtensionResourceURLNotMatchServerURLOnApiSpec 清单上具有 microsoftEntra authType 资源 URL 的基于 API 的撰写扩展与 API 规范文件中的服务器 URL 不匹配。 应用清单中具有 microsoftEntra authType 资源 URL 的基于 API 的撰写扩展与 API 规范文件中的服务器 URL 不匹配。
MsftEntraAuthTypeComposeExtensionSupportsSingleSignOnFalse 使用 microsoftEntra authType 的基于 API 的 compose 扩展未将 supportsSingleSignOn 设置为 true。 基于 API 的 compose 扩展未在应用清单中将 supportsSingleSignOntrue 设置为 。
NoAuthTypeComposeExtensionContainsAuthConfiguration 没有 authType 的基于 API 的撰写扩展定义了与身份验证相关的配置。 具有 authType microsoftEntraConfigurationapiSecretServiceConfiguration 的基于 API 的撰写扩展未在应用清单中定义。
ParameterOnManifestNotDefinedOnApiSpecFile 基于 API 的撰写扩展具有未在 API 规范文件上定义的清单上的参数 {0} 。 应用清单中基于 API 的撰写扩展参数未在 API 规范文件中定义。
ReservedActivitiesValidation 清单不应包含保留的活动类型“systemDefault”。 活动 systemDefault 类型在应用清单中定义。
ReservedStaticTabNameShouldBeNull 不应指定保留选项卡“名称”属性。 指定了保留 staticTabs 名称属性。
SchemaError_AdditionalItems 架构不允许其他项。 应用清单文件未能 additionalItems 验证架构。
SchemaError_AdditionalProperties 尚未定义属性 {0} ,并且架构不允许其他属性。 应用清单文件未能 additionalProperties 验证架构。 此处表示 {0} 附加属性。
SchemaError_AllOf JSON 与“allOf”中的所有架构不匹配。 应用清单文件未能 allOf 验证架构。
SchemaError_AnyOf JSON 与“anyOf”中的任何架构都不匹配。 应用清单文件未能 anyOf 验证架构。
SchemaError_Const 值 {0} 与常量 {1}不匹配。 应用清单文件未能 const 验证架构。 此处表示 {0} 失败的值,并 {1} 表示正确的值。
SchemaError_ContentEncoding 字符串 {0} 不会针对内容编码 {1}进行验证。 应用清单文件未能 contentEncoding 验证架构。 此处表示 {0} 与内容编码不匹配的字符串,并 {1} 表示预期的内容编码。
SchemaError_Dependencies 属性 {0} 的依赖项失败。 缺少所需的密钥。 应用清单文件未能 dependencies 验证架构。 此处表示 {0} 失败的属性。
SchemaError_Else JSON 与“else”的架构不匹配。 应用清单文件未能 else 验证架构。
SchemaError_Enum 枚举中未定义值 {0} 。 应用清单文件未能 enum 验证架构。 此处, {0} 表示不在枚举中的值。
SchemaError_Format 字符串 {0} 不会针对格式 {1}进行验证。 应用清单文件未能 format 验证架构。 此处表示 {0} 不采用预期格式的字符串,并 {1} 表示预期格式。
SchemaError_Id 遇到重复的架构 ID {0} 。 应用清单文件未能 id 验证架构。 此处, {0} 表示 id 架构的 。
SchemaError_Maximum 整数 {0} 超过 的最大值 {1}。 应用清单文件未能 maximum 验证架构。 此处表示 {0} 超出最大限制的值,表示 {1} 最大限制。
SchemaError_MaximumItems 数组项计数 {0} 超过 的最大计数 {1}。 应用清单文件未能 maximumItems 验证架构。 此处表示 {0} 数组中的元素数,表示 {1} 允许的最大元素数。
SchemaError_MaximumLength 字符串 {0} 超过 的最大长度 {1}。 应用清单文件未能 maximumLength 验证架构。 此处, {0} 表示超过最大长度的字符串,表示 {1} 最大长度。
SchemaError_MaximumProperties 对象属性计数 {0} 超过 的最大计数 {1}。 应用清单文件未能 maximumProperties 验证架构。 此处表示 {0} 提供的属性数,表示 {1} 允许的最大属性数。
SchemaError_Minimum 整数 {0} 小于 的最小值 {1}。 应用清单文件未能 minimum 验证架构。 此处表示 {0} 超出最小限制的值,表示 {1} 最小限制。
SchemaError_MinimumItems 数组项计数 {0} 小于 的最小计数 {1}。 应用清单文件未能 minimumItems 验证架构。 此处表示 {0} 数组中的元素数,表示 {1} 允许的最小值。
SchemaError_MinimumLength 字符串 {0} 小于 的 {1}最小长度。 应用清单文件未能 minimumLength 验证架构。 此处, {0} 表示小于最小长度的字符串,并 {1} 表示最小值。
SchemaError_MinimumProperties 对象属性计数 {0} 小于 的最小计数 {1}。 应用清单文件未能 minimumProperties 验证架构。 此处表示 {0} 提供的属性数,表示 {1} 允许的最小属性。
SchemaError_Not JSON 对来自“not”的架构有效。 应用清单文件未能 not 验证架构。
SchemaError_OneOf JSON 对“oneOf”的多个架构有效。 应用清单文件未能 oneOf 验证架构。
SchemaError_Pattern 字符串 {0} 与正则表达式模式“”{1}不匹配。 应用清单文件未能 pattern 验证架构。 此处表示 {0} 与模式不匹配的值,并 {1} 表示预期的模式。
SchemaError_PatternProperties 无法使用正则表达式模式“”{0}测试属性名称。 应用清单文件未能 patternProperties 验证架构。 此处表示 {0} 属性的模式。
SchemaError_Required 对象中缺少必需的属性: {0}。 应用清单文件未能 required 验证架构。 此处表示 {0} 所需的属性。
SchemaError_Then JSON 与“then”的架构不匹配。 应用清单文件未能 then 验证架构。
SchemaError_Type 值 {0} 不是预期的类型 {1}。 应用清单文件未能 type 验证架构。 此处, {0} 表示不在预期类型中的字符串,并 {1} 表示预期的类型。
SchemaError_UniqueItems 数组包含不唯一的项。 应用清单文件未能 uniqueItems 验证架构。
SchemaError_Valid 架构始终无法通过验证。 应用清单文件未能 valid 验证架构。
Serialization_FileMissing 在应用包中找不到该文件 {0} 。 应用包中缺少预期的文件。
Serialization_FileNotValidJson 无法将文件分析为 JSON 对象。 提交的文件不符合有效的 JSON 格式。
Serialization_ManifestVersionPropertyMissing 该文件不包含“”{0}属性。 应用清单文件中缺少 manifestVersion 属性。 此处表示 {0}manifestVersion 属性的字符串。
Serialization_TrailingCommaInManifestJsonFile 清单 json 文件包含尾随逗号。 应用清单文件包含尾随逗号。
ServerUrlsMissingOnApiSpecificationFile 基于 API 的 compose 扩展没有在 apiSpecificationFile 上定义的服务器 URL。 发生的错误 基于 API 的 compose 扩展未在 中 apiSpecificationFile定义服务器 URL。
ShortDescriptionCannotBeEmpty 简短说明不能为空。 简短说明为空。
ShortDescriptionLengthCheck 短说明的最大字符长度不得超过 80 个字符。 简短说明长度超过 80 个字符。
ShortNameEqualsReservedName 应用的短名称不能为保留名称。 短名称是保留名称。
ShortNameIsRequiredField 应用的短名称不能为空。 短名称为空。
ShortNameLengthCheck 短名称的最大字符长度不得超过 30 个字符。 短名称超过 30 个字符。
UniqueActivityTypeInActivitiesValidation 清单不应包含重复的活动类型。 活动类型在应用清单中并不唯一。
UniqueIdInActivitiesGroupValidation 清单不应在活动组中包含重复 ID。 活动组 ID 在应用清单中不是唯一的。
VersionCannotBeEmpty 清单中缺少必填字段“version”。 缺少应用包版本。
VersionContainsOnlyNumbersDotSeparated 应用版本仅支持“#.#.#”格式的数字。 应用包中的版本与模式 #.#.#不匹配。
VersionHasMajorLessThan1 应用版本不应以“0”开头。 例如,0.0.1 或 0.1 不是有效的应用版本,1.0/1.5.1/1.0.0/2.5.0 是有效的应用版本。 在清单中对应用商店中的现有应用进行新更新时。 应用版本小于 1.0。 需要升级应用版本。 例如,如果应用商店中应用的当前版本为 1.0,并且你要提交更新进行验证,则应用版本必须高于 1.0。

示例

示例 1:将应用发布到应用目录

请求

以下示例显示了一个请求。

POST https://graph.microsoft.com/v1.0/appCatalogs/teamsApps
Content-type: application/zip

[Zip file containing a Teams app package]

有关如何创建 Microsoft Teams 应用程序 zip 文件的信息,请参阅 创建应用包

响应

以下示例显示了相应的响应。

HTTP/1.1 201 Created
Content-Type: application/json

{
  "id": "e3e29acb-8c79-412b-b746-e6c39ff4cd22",
  "externalId": "b5561ec9-8cab-4aa3-8aa2-d8d7172e4311",
  "displayName": "Test App",
  "distributionMethod": "organization"
}

示例 2:将新应用程序上传到组织的应用目录以供审阅

请求

以下示例显示了一个请求。

POST https://graph.microsoft.com/v1.0/appCatalogs/teamsApps?requiresReview=true
Content-type: application/zip

响应

以下示例显示了相应的响应。

HTTP/1.1 201 Created
Location: https://graph.microsoft.com/v1.0/appCatalogs/teamsApps/e3e29acb-8c79-412b-b746-e6c39ff4cd22

{
  "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#appCatalogs/teamsApps/$entity",
  "id": "e3e29acb-8c79-412b-b746-e6c39ff4cd22",
  "externalId": "b5561ec9-8cab-4aa3-8aa2-d8d7172e4311",
  "displayName": "Test App",
  "distributionMethod": "organization"
}

示例 3:批准或拒绝等待评审的应用

请求

以下示例显示了一个请求。

PATCH https://graph.microsoft.com/v1.0/appCatalogs/teamsApps/a761ad07-22ef-4a53-9feb-2837c8ad4a84/appDefinitions/YTc2MWFkMDctMjJlZi00YTUzLTlmZWItMjgzN2M4YWQ0YTg0IyMxLjEuOCMjU3VibWl0dGVk
Content-type: application/json
If-Match: InFtSStsNVJHVWdzWUJRU2ZVWGp4RWc9PSI=

{
  "publishingState":"published"
}

响应

以下示例显示了相应的响应。

HTTP/1.1 200 OK
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#appCatalogs/teamsApps('a761ad07-22ef-4a53-9feb-2837c8ad4a84')/appDefinitions/$entity",
    "id": "YTc2MWFkMDctMjJlZi00YTUzLTlmZWItMjgzN2M4YWQ0YTg0IyMxLjEuOCMjUHVibGlzaGVk",
    "teamsAppId": "a761ad07-22ef-4a53-9feb-2837c8ad4a84",
    "azureADAppId": null,
    "displayName": "Ducks",
    "version": "1.1.8",
    "requiredResourceSpecificApplicationPermissions": [],
    "publishingState": "published",
    "shortDescription": "quaerat quasi magnam. slight change. 5",
    "description": "Aliquid placeat animi debitis accusamus. Non perferendis ullam. Quis est consequuntur vitae provident. Sunt laudantium id aut. slight change 5",
    "lastModifiedDateTime": null,
    "createdBy": null
}

示例 4:将应用发布到应用目录,但应用清单中出现错误

请求

以下示例显示了一个请求。

POST https://graph.microsoft.com/v1.0/appCatalogs/teamsApps
Content-type: application/zip

[Zip file containing a Teams app package]

响应

以下示例显示了相应的响应。

HTTP/1.1 200 OK
Content-type: application/json

{
    "error": {
        "code": "BadRequest",
        "message": "name | Required properties are missing from object: [].; developer.websiteUrl | String \"hs://www.yo.com\" does not match regex pattern \"^[Hh][Tt][Tt][Pp][Ss]?://\".",
        "innerError": {
            "code": "UnableToParseTeamsAppManifest",
            "message": "name | Required properties are missing from object: [].; developer.websiteUrl | String \"hs://www.yo.com\" does not match regex pattern \"^[Hh][Tt][Tt][Pp][Ss]?://\".",
            "details": [
                {
                    "code": "SchemaError_Required",
                    "message": "Required properties are missing from object: [].",
                    "target": "name"
                },
                {
                    "code": "SchemaError_Pattern",
                    "message": "String \"hs://www.yo.com\" does not match regex pattern \"^[Hh][Tt][Tt][Pp][Ss]?://\".",
                    "target": "developer.websiteUrl"
                }
            ],
            "date": "2024-01-18T21:47:58",
            "request-id": "d1878136-bc88-421a-b342-c3d883db31a1",
            "client-request-id": "d1878136-bc88-421a-b342-c3d883db31a1"
        }
    }
}