无法将机器人链接到机器人框架仿真器

时间:2018-07-05 08:17:23

标签: c# azure botframework chatbot

这是我尝试将机器人加载到bot Framework Emulator中时的当前屏幕:enter image description here

这是我在机器人设置中输入的内容:enter image description here

但是由于某种原因,我的bot框架模拟器仍然为空。 我也尝试将端点URL设置为http://localhost:3979/api/messages,但是没有运气。我试图在Visual Studio的本地运行它。

对此有任何帮助,深表感谢!

2 个答案:

答案 0 :(得分:3)

L。完整,如果您遵循instructions from the Azure portal to create a QnA bot from a template,则需要稍微调整一下代码以使其在本地运行,然后在模拟器中运行。

使用模板创建漫游器(听起来好像已经完成)之后,在ABS中,转到 Build (在Bot Management下)> “下载zip文件” ,您将在本地获得项目的副本。

如果您查看模板Bot代码,则该代码可在Azure中使用,因为总而言之,它是从Azure门户内的“应用程序设置”中访问您的QnA凭据,但是在本地,您需要将凭据放在。配置文件。

最终,我们现在要做的就是将您的QnA凭据插入项目的.config文件中,因为下载zip时不会自动将其下载到代码中。

下面,我仅使用可以在Azure门户中找到的QnA Template bot(创建资源> AI +机器学习> Web应用程序Bot,其中Bot模板为“问答”)

  1. 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>
    
  2. 在对话框中(截至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.");
                }

            }
  1. 在由您的根调用的子对话框(例如,BasicQnAMakerDialog)中,请确保也将所有需要QnA密钥的内容替换为ConfigurationManager.AppSettings [“ KeyName”] 。 li>

例如在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)

您可以采取的解决方案之一是:

  1. 在Visual Studio的 Solution Explorer 中右键单击您的项目。

  2. 单击属性。

  3. 转到调试标签。向下滚动一点,您将看到 Web服务器设置。。检查URL并将其设置为新端口。例如,如果它是:http://localhost:3798更改为http://localhost:3979,反之亦然。更改端口号可能会解决您的问题。按 Ctrl + S 保存。

  4. 构建解决方案并重新运行项目,而无需进行调试(Ctrl + F5)。

  5. 打开您的Bot Framework仿真器,然后输入在上面的步骤3中提到的URL。

注意:这并不意味着它将100%正常工作,但这是我遇到的解决方案之一。我遇到了同样的问题,并且以相同的方式解决了它。

希望这会有所帮助。