这是我尝试将机器人加载到bot Framework Emulator中时的当前屏幕:
但是由于某种原因,我的bot框架模拟器仍然为空。 我也尝试将端点URL设置为http://localhost:3979/api/messages,但是没有运气。我试图在Visual Studio的本地运行它。
对此有任何帮助,深表感谢!
答案 0 :(得分:3)
使用模板创建漫游器(听起来好像已经完成)之后,在ABS中,转到 Build (在Bot Management下)> “下载zip文件” ,您将在本地获得项目的副本。
如果您查看模板Bot代码,则该代码可在Azure中使用,因为总而言之,它是从Azure门户内的“应用程序设置”中访问您的QnA凭据,但是在本地,您需要将凭据放在。配置文件。
最终,我们现在要做的就是将您的QnA凭据插入项目的.config文件中,因为下载zip时不会自动将其下载到代码中。
下面,我仅使用可以在Azure门户中找到的QnA Template bot(创建资源> AI +机器学习> Web应用程序Bot,其中Bot模板为“问答”)
在 Web.config 中添加AzureWebJobsStorage(如果使用),QnAAuthKey,QnAKnowledgebaseId和QnAEndpointHostName的键值对 您自己的凭据值可以在Azure门户的应用程序设置下找到
<appSettings>
<!-- update these with your Microsoft App Id and your Microsoft App Password-->
<add key="MicrosoftAppId" value="" />
<add key="MicrosoftAppPassword" value="" />
<add key="AzureWebJobsStorage" value="DefaultEndpointsProtocol=https...."/>
<add key="QnAAuthKey" value="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" />
<add key="QnAKnowledgebaseId" value="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" />
<add key="QnAEndpointHostName" value="https://YOURQNA.azurewebsites.net/qnamaker" />
<add key="QnASubscriptionKey" value="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" />
</appSettings>
在对话框中(截至7/5/18的QnA模板具有名为BasicQnAMakerDialog.cs的默认对话框文件),代替了 Utils (模板中的默认设置),我们将使用 ConfigurationManager.AppSettings [“ KeyName”] 访问您刚刚放置在Web.config中的值: 在下面,您可以看到我已更改QnA模板中的变量(注释掉)以使用ConfigurationManager.AppSettings检索值。根据您自己的应用程序所需的逻辑,您可能还必须在if语句中编辑变量。
在“根对话框”中
private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result)
{
var message = await result as Activity;
// OLD
//var qnaAuthKey = GetSetting("QnAAuthKey");
//var qnaKBId = Utils.GetAppSetting("QnAKnowledgebaseId");
//var endpointHostName = Utils.GetAppSetting("QnAEndpointHostName");
// NEW
var qnaAuthKey = ConfigurationManager.AppSettings["QnAAuthKey"];
var qnaKBId = ConfigurationManager.AppSettings["QnAKnowledgebaseId"];
var endpointHostName = ConfigurationManager.AppSettings["QnAEndpointHostName"];
// QnA Subscription Key and KnowledgeBase Id null verification
if (!string.IsNullOrEmpty(qnaAuthKey) && !string.IsNullOrEmpty(qnaKBId))
{
// Forward to the appropriate Dialog based on whether the endpoint hostname is present
if (string.IsNullOrEmpty(endpointHostName))
await context.Forward(new BasicQnAMakerPreviewDialog(), AfterAnswerAsync, message, CancellationToken.None);
else
await context.Forward(new BasicQnAMakerDialog(), AfterAnswerAsync, message, CancellationToken.None);
}
else
{
await context.PostAsync("Please set QnAKnowledgebaseId, QnAAuthKey and QnAEndpointHostName (if applicable) in App Settings. Learn how to get them at https://aka.ms/qnaabssetup.");
}
}
例如在BasicQnAMakerDialog中:
[Serializable]
public class BasicQnAMakerDialog : QnAMakerDialog
{
static readonly string qnaAuthKey = ConfigurationManager.AppSettings["QnAAuthKey"];
static readonly string qnaKBId = ConfigurationManager.AppSettings["QnAKnowledgebaseId"];
static readonly string endpointHostName = ConfigurationManager.AppSettings["QnAEndpointHostName"];
public BasicQnAMakerDialog() : base(new QnAMakerService(
new QnAMakerAttribute
(
qnaAuthKey,
qnaKBId,
"No good match in FAQ.",
0.5,
1,
endpointHostName
)))
{
}
}
答案 1 :(得分:0)
您可以采取的解决方案之一是:
在Visual Studio的 Solution Explorer 中右键单击您的项目。
单击属性。
转到调试标签。向下滚动一点,您将看到 Web服务器设置。。检查URL并将其设置为新端口。例如,如果它是:http://localhost:3798更改为http://localhost:3979,反之亦然。更改端口号可能会解决您的问题。按 Ctrl + S 保存。
构建解决方案并重新运行项目,而无需进行调试(Ctrl + F5)。
打开您的Bot Framework仿真器,然后输入在上面的步骤3中提到的URL。
注意:这并不意味着它将100%正常工作,但这是我遇到的解决方案之一。我遇到了同样的问题,并且以相同的方式解决了它。
希望这会有所帮助。