从模板部署和运行 bot 框架 v4.4+ 有效,但使用 fork 和源代码控制部署和运行不起作用
Posted
技术标签:
【中文标题】从模板部署和运行 bot 框架 v4.4+ 有效,但使用 fork 和源代码控制部署和运行不起作用【英文标题】:Deploying and running bot framework v4.4+ from template works but deploying and running using fork and source control doesn't work 【发布时间】:2019-09-26 13:54:42 【问题描述】:总结
我正在尝试部署最新的Microsoft Virtual Assistant code。在文档中,他们describe a process 使用Visual Studio template 部署和运行机器人。文档中描述的整个过程效果很好。
但是,我不喜欢使用模板。我不想泄露微软的 Git 历史。此外,此部署需要经受住时间的考验,我想让它尽可能简单地合并来自 Microsoft 的更新。
在Microsoft's repo 内部,有一个subdirectory 包含C# 虚拟助手template 和一个sample of the code as if it were deployed by the template。
保存 Git 历史记录、拉取新提交等的方法。
我将描述我的解决方案,它可以让我保留 Microsoft 的 Git 历史记录,轻松提取他们的最新提交,并且仍然为我提供了一个合理大小的项目来处理我的客户的机器人部署(Microsoft AI 存储库很大并且包含很多东西我不想在我的机器人部署中)。我正在处理的结果分支/项目与我在 Visual Studio 中从模板创建时获得的解决方案/项目非常相似(见下文,看起来相同)。
-
我forkedMicrosoft's entire GitHub repo。
我设置了一个本地 Git 存储库,将 Microsoft 的存储库和我的 fork 作为远程存储库。
我使用 Git 子树,如 Stack Overflow post 中所述,将 repo 过滤到仅 Virtual Assistant C# sample code。我创建了一个branch for this subtree。
我将子树分支复制到了开发分支中,我打算在其中进行所有自定义开发。
我可以在 Microsoft 的上游远程和新创建的子树分支上使用 master 来不断地将来自 Microsoft 的新提交拉入我的个人开发分支。
这里有一些伪代码大致介绍了整个过程。
$ git checkout upstream/master
Switched to branch upstream/master
Your branch is up to date with 'r_microsoft/master'.
$ git subtree split --prefix=templates/Virtual-Assistant-Template/csharp/sample --onto upstream/virtual-assistant-csharp -b upstream/virtual-assistant-csharp
$ git checkout upstream/virtual-assistant-csharp
$ git checkout -b eric/develop
Switched to branch 'eric/develop'
Your branch is up to date with 'r_eric/develop'.
$ git rebase upstream/virtual-assistant-csharp
Current branch eric/develop is up to date.
部署和运行机器人
使用这个子树而不是从模板创建的解决方案,我按照directions 进行部署和运行机器人。 Microsoft 有一个separate Markdown page for the deployment(链接以防您想查看)。
部署似乎运行成功。我用xxx
替换了敏感信息。
PS C:\Users\eric\bot\VirtualAssistantSample> .\Deployment\Scripts\deploy.ps1 -name "personal-bot-test-using-git" -location "westus" -luisAuthoringKey "xxx" -luisAuthoringRegion "westus" -resourceGroup "personal-bot-test-using-git" -appId "xxx" -appPassword "xxx"
> Creating resource group ...
> Deploying Azure services (this could take a while)...
> Updating appsettings.json ...
> Deploying cognitive models ...
> Initializing dispatch model ...
> Parsing general LU file ...
> Deploying general LUIS app ...
> Adding general app to dispatch model ...
> Parsing chitchat LU file ...
> Deploying chitchat QnA kb ...
> Adding chitchat kb to dispatch model ...
> Parsing faq LU file ...
> Deploying faq QnA kb ...
> Adding faq kb to dispatch model ...
> Creating dispatch model...
> Done.
我完全按照他们的步骤做所有事情(除了不使用模板)。当我构建时,没有错误。运行机器人没有任何错误。
这是我使用Microsoft's Bot Emulator 连接(替换敏感值)。
但是,当我测试机器人时,没有骰子。它不显示欢迎消息。
而且通讯不起作用。
.
这是 POST 400 directline.postActivity 所说的内容。
"error":
"code": "ServiceError",
"message": "Refresh access token failed with status code: 401"
另一方面,如果我执行所有相同的步骤,除了从模板创建的项目/解决方案开始,它就可以工作。
.
附加上下文
我使用 Visual Studio 2019 和 2017 以及最新的 NuGet 包尝试了整个过程。似乎没有任何区别。 根据我启动项目的方法,没有 .sln 文件。所以我使用 .csproj 文件打开项目。使用机器人模板,它创建了一个 .sln 文件,我可以用它来打开整个东西。无论我是使用 .sln 还是 .csproj 打开从模板部署的项目,它都能正常工作。 我使用WinMerge 比较了机器人的目录(源代码的子树与模板创建的子树)。我看不出有什么显着差异(当然我无法挖掘 .dll 文件的内容)。 编辑 ~ 创建后 8 小时。即使使用模板创建的机器人似乎也不再起作用了?【问题讨论】:
【参考方案1】:@EricHansen 和我在his related GitHub Issue 中讨论过这个问题。由于这些信息可能对其他人有价值,因此我将在此处包含“答案”:
401 几乎总是由不匹配的MicrosoftAppId
/MicrosoftAppPassword
引起的。确保它们在所有这些位置都匹配:
appsettings.json
/.env
/.bot
,随便吧
The App Registration
打开模拟器时使用的那个
如果这不起作用,请关注Authentication Troubleshooting Guide
您还应确保所有软件包都是最新的,包括:
NuGet/npm 包 来自BotBuilder-Tools Repo EmulatorOP 解决方案很可能与此有关:
我确实遇到了一些密码字符串的问题。 The README 指出,包含
@
的密码存在问题。我知道我已经 但是,在使用另一个密码时遇到了问题(我不记得是什么 特殊字符给了它问题)。我猜这是 问题。我最好的猜测是,要么是特殊字符的问题 在密码、模拟器缓存 id/pass 以某种意想不到的方式或 IIS 以某种方式表达缓存 id/pass。通常,如果我要切换机器人 使用相同的端点并遇到麻烦,我重新启动这些端点并 它通常有效。
【讨论】:
以上是关于从模板部署和运行 bot 框架 v4.4+ 有效,但使用 fork 和源代码控制部署和运行不起作用的主要内容,如果未能解决你的问题,请参考以下文章
MS BOT框架(自适应卡):如何从directline发送值(Stepcontext.Value)?