簡體   English   中英

az bot create 命令失敗,請求正文中的參數“schemaTransformationVersion”設置為“0.0”- 為什么會發生這種情況? 怎么修?

[英]az bot create command failing with parameter "schemaTransformationVersion" set to "0.0" in request body - why is this occurring? How to fix?

我正在嘗試讓命令az bot create在 docker 容器內運行。 更具體地說,這是完整的命令:

az bot create `
    --app-type $appType `
    --appid $appInfo.AppId `
    --name $botName `
    --resource-group $resourceGroupName `
    --endpoint $messagingEndpoint `
    --sku $sku

其中$appType等於"MultiTenant" $appInfo.AppId來自在有效的應用程序注冊及其 object id 上使用命令Get-AzADApplication $botName設置為"TestingScriptBot" $resourceGroupName設置為有效資源組的名稱; $messagingEndpoint設置為有效的 url; $sku設置為"FO"

但是,我在 docker 容器中收到一個相當奇怪的錯誤:

(InvalidBotData) Bot is not valid. Errors: The schema transformation version is not supported.  See https://docs.microsoft.com/azure/bot-service/bot-service-resources-bot-framework-faq?view=azure-bot-service-4.0 for detailed requirements.
Code: InvalidBotData
Message: Bot is not valid. Errors: The schema transformation version is not supported.  See https://docs.microsoft.com/azure/bot-service/bot-service-resources-bot-framework-faq?view=azure-bot-service-4.0 for detailed requirements.

此外,在上述命令中啟用--debug標志時,我注意到請求正文中的以下參數“ schemaTransformationVersion"設置為"0.0"

cli.azure.cli.core.sdk.policies: Request body:
cli.azure.cli.core.sdk.policies: {"location": "global", "sku": {"name": "F0"}, "kind": "azurebot", "properties": {"displayName": "AutomationTestingScriptBot", "iconUrl": "", "endpoint": <working_endpoint>, "msaAppType": "MultiTenant", "msaAppId": <working_app_id>, "isCmekEnabled": false, "publicNetworkAccess": "Enabled", "isStreamingSupported": false, "schemaTransformationVersion": "0.0"}}

但是,當我在本地運行相同的命令時,此參數甚至不在請求正文中。 az bot create命令甚至不允許我更改此參數 - 所以我有點不知所措。 我也嘗試過使用不同版本的 Azure CLI 重新構建容器(從2.38.0到最新版本的2.43.0 )並且發生相同的行為。

因為我最初認為這是模塊版本問題,所以我嘗試使用不同版本的 Powershell 和 Azure CLI 重新構建容器。 此外,我也嘗試過不同版本的 Python。

我還嘗試使用租戶 ID 登錄到每個相應的客戶端(Powershell 和 Azure CLI),因為我有一個共享令牌/刷新令牌警告 - 但這似乎也沒有幫助。

無論我嘗試什么,都會發生同樣的錯誤。

直到最近,此命令在 docker 容器內為我工作 - 上周五 (12/2/22) 是我重建容器並開始此行為的時間。

所以我真的不明白為什么這個參數突然出現在這個命令的請求體中並且我目前不知道如何修復它。 我認為這可能是模塊版本問題,但在試用了不同版本的 Azure CLI 並更新了容器內的軟件之后,我不太確定這種行為是如何/為什么發生的,以及我需要做什么來修復它。

** 以下是我擁有的所有版本/包:**

docker 容器使用以下版本運行: Alpine Linux v3.16

我正在運行最新版本的 Powershell: 7.3.0

我正在運行最新版本的 Azure CLI:

{               
  "azure-cli": "2.43.0",
  "azure-cli-core": "2.43.0",
  "azure-cli-telemetry": "1.0.8",
  "extensions": {}
}

我通過Install-Module -name Az安裝了最新版本的Az模塊,通過Install-Module -Name Az.BotService了最新版本的Az.BotService模塊。

我安裝了 libffi 和 OpenSSL 版本1.1.1s

我安裝了 Python 版本3.10.8

這是我一直在測試的 powershell 腳本:

$appInfo = Get-AzADApplication -ObjectId <valid_obj_id>

$appType = "MultiTenant"
$botName = "TestingScriptBot"
$resourceGroupName = <valid_resource_group_name>
$messagingEndpoint = <valid_endpoint>
$sku = "F0"

az bot create `
    --app-type $appType `
    --appid $appInfo.AppId `
    --name $botName `
    --resource-group $resourceGroupName `
    --endpoint $messagingEndpoint `
    --sku $sku `
    --debug

我在本地和 docker 容器內部運行相同的腳本,並將命令與啟用的--debug標志進行比較,並從兩個輸出的文本比較中,我看到的兩個主要區別是:

  1. 請求主體內的“ schemaTransformationVersion"參數設置為"0.0" - 但僅當命令在 docker 容器內運行時 - 當命令在本地運行時,此參數不在命令的請求主體中
  2. docker 容器在使用az bot create命令發出請求之前使用 auth 令牌,而 local 使用刷新令牌 - 雖然我不懷疑這是導致問題的原因,因為這發生在過去命令在內部運行時docker 容器給我

如果需要任何進一步的信息,請告訴我。

進一步研究后,我找到了一個可行的替代解決方案。 誠然,我不喜歡這個解決方案,因為它感覺有點像 hack,但我認為它可以堅持下去,直到我可以進一步深入了解az bot create命令出了什么問題。

在做了更多研究之后,我想我可能知道這個問題,或者這是我注意到的另一個不同之處。 為本地運行此命令時的 api 版本如下: 2021-05-01-preview 另一方面,運行此命令時的 docker 容器 api-version 是2022-06-15-preview

因此,我將az rest命令與與本地相同的請求 url(包括 api 版本)一起使用,並使用與本地相同的主體。 結果,機器人創建對我有用。 這確實讓我避免了az bot create命令的失敗。 這是我測試過的腳本,它允許我使用az bot create做我想做的事:

$body = '{\"location\": \"global\", \"sku\": {\"name\": \"F0\"}, \"kind\": \"azurebot\", \"properties\": {\"displayName\": \"TestingScriptBot\", \"endpoint\": \"<valid_endpoint>\", \"msaAppType\": \"MultiTenant\", \"msaAppId\": \"<valid_app_id>\", \"isCmekEnabled\": false, \"publicNetworkAccess\": \"Enabled\", \"isStreamingSupported\": false}}'

$uri = "/subscriptions/<subscription_id>/resourceGroups/<resoure_group_name>/providers/Microsoft.BotService/botServices/<bot_name>?api-version=2021-05-01-preview"

az rest --uri $uri `
    --method put `
    --body $body `
    --debug

請注意,您可能需要根據您使用的操作系統調整您的 json 主體。 這個特定的身體在我的 macOS 上工作。 為了讓它在 docker 容器中工作,我刪除了轉義字符( json 正文中每個雙引號之前的\ )。

但是,我不認為使用az rest是解決問題的好方法,並且仍然希望深入了解為什么az bot create命令在 docker 容器內對我來說失敗。

我現在的猜測是請求 url 中的 api 版本差異可能是包含“schemaTransformationVersion”參數並且具有無效值的原因,特別是因為我無法控制此命令中的值。

有誰知道是否有辦法更改 api 的哪個版本用於 Azure CLI 命令? 因為如果可能的話,我想用較舊的 api 版本測試az bot create命令,而不是僅僅模仿我希望通過az rest進行的調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM