[英]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
標志進行比較,並從兩個輸出的文本比較中,我看到的兩個主要區別是:
schemaTransformationVersion"
參數設置為"0.0"
- 但僅當命令在 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.