Невозможно связать бота с эмулятором фреймворка бота - PullRequest
0 голосов
/ 05 июля 2018

Это мой текущий экран, когда я пытался загрузить своего бота в эмулятор бота Framework: enter image description here

И вот что я ввел в настройках для моего бота: enter image description here

Но по какой-то причине мой эмулятор ботового фреймворка остается пустым. Я также попытался установить URL-адрес конечной точки на http://localhost:3979/api/messages, но не повезло. Я пытаюсь запустить это локально из визуальной студии.

Любая помощь с этим очень ценится!

1 Ответ

0 голосов
/ 05 июля 2018

L. В полном объеме, если вы следовали инструкциям на портале Azure для создания бота QnA из шаблона , вам потребуется немного настроить код, чтобы он работал локально, и, в свою очередь, работать в эмуляторе.

После того, как вы создали своего бота, используя шаблон (что звучит так, как вы это сделали), в ABS перейдите к Build (в разделе «Управление ботами»)> " Скачайте zip-файл ", вы получите копию своего проекта локально.

Если вы посмотрите на шаблон Bot-кода, он работает в Azure, потому что, в итоге, он получает доступ к вашим учетным данным QnA в настройках вашего приложения на портале Azure, но локально вам нужно будет поместить учетные данные где-то, как ваше. файл конфигурации.

В конечном счете, теперь нам нужно подключить ваши учетные данные QnA в файл .config вашего проекта, поскольку он не загружается автоматически в код при загрузке zip-файла.

Ниже я просто использую бота QnA Template, который вы можете найти на портале Azure (Создать ресурс> AI + Машинное обучение> Бот веб-приложения с шаблоном бота «Вопрос и ответ»)

  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. В вашем диалоге (шаблон QnA по состоянию на 7/5/18 имеет файл диалога по умолчанию с именем BasicQnAMakerDialog.cs), вместо Utils (по умолчанию в шаблон), мы будем использовать ConfigurationManager.AppSettings ["KeyName"] для доступа к значениям, которые вы только что поместили в свой Web.config : Ниже вы можете видеть, что я изменил (закомментировал) переменные в шаблоне QnA для получения значений с помощью ConfigurationManager.AppSettings. Вам также может потребоваться изменить переменные в вашем операторе if, в зависимости от логики, необходимой вашему приложению.

In Root Dialog

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"] .

Например, в 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
            )))
        {

        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...