Bot Framework Emulator (v4) не работает - POST 202 - PullRequest
0 голосов
/ 16 мая 2018

Я недавно создал чат-бота, используя Microsoft Azure Cognitive Services и Bot Framework, используя в качестве основного инструмента QnA Maker.После нескольких недель разработки и даже публикации бота я решил перейти к следующим шагам и внести некоторые изменения и оптимизации, которые требуют, чтобы бот работал локально.Мне удалось загрузить исходный код с портала Azure в виде файла .zip, используя IDE Visual Studio 2017 и используя в качестве инструмента тестирования Bot Framework Emulator (V4).

Через некоторое время (и множество проблем)., решено в Ошибка эмулятора Azure Bot Framework - System.ArgumentNullException: значение не может быть пустым ), я наконец-то заставил код работать локально.Тем не менее, я не могу правильно общаться с ним с помощью Bot Framework Emulator.Кажется, он подключен, но каждый раз, когда я отправляю сообщение, я не получаю ответа, кроме POST 202 directline.postActivity, как показано на рисунке ниже:

Bot framework not working

В результате я не могу проверить своего бота в эмуляторе Bot Framework ... Может ли кто-нибудь помочь мне узнать, что происходит?Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Чтобы устранить эту проблему, вы можете установить точку останова в MessagesController , проверить, может ли она быть нажата, и отладить ваш код, чтобы проверить, может ли отправленное вами сообщение достичь вашего QnAMakerDialog .

enter image description here

загрузите исходный код с портала Azure в виде файла .zip, используя IDE Visual Studio 2017 и используя мой инструмент тестирования Bot Framework Emulator (V4).

Я создаю службу бота, используя шаблон вопросов и ответов (C #) на портале Azure, загружаю исходный код, затем изменяю код, запускаю и испытываю его на локальном хосте с помощью Bot Framework Emulator, который мне подходит. Вы можете сравнить мой код с вашим или протестировать мой код с вашей базой знаний QnA Maker, чтобы проверить, может ли он работать на вас.

[Serializable]
public class RootDialog : IDialog<object>
{
    public async Task StartAsync(IDialogContext context)
    {
        /* Wait until the first message is received from the conversation and call MessageReceviedAsync 
        *  to process that message. */
        context.Wait(this.MessageReceivedAsync);
    }

    private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result)
    {
        /* When MessageReceivedAsync is called, it's passed an IAwaitable<IMessageActivity>. To get the message,
            *  await the result. */
        var message = await result;

        var qnaAuthKey = GetSetting("QnAAuthKey");
        //var qnaKBId = Utils.GetAppSetting("QnAKnowledgebaseId");
        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.");
        }

    }

    private async Task AfterAnswerAsync(IDialogContext context, IAwaitable<IMessageActivity> result)
    {
        // wait for the next user message
        context.Wait(MessageReceivedAsync);
    }

    public static string GetSetting(string key)
    {
        //var value = Utils.GetAppSetting(key);
        var value = ConfigurationManager.AppSettings[key];

        if (String.IsNullOrEmpty(value) && key == "QnAAuthKey")
        {
            //value = Utils.GetAppSetting("QnASubscriptionKey"); // QnASubscriptionKey for backward compatibility with QnAMaker (Preview)
            value = ConfigurationManager.AppSettings["QnASubscriptionKey"];
        }
        return value;
    }
}

// Dialog for QnAMaker Preview service
[Serializable]
public class BasicQnAMakerPreviewDialog : QnAMakerDialog
{
    // Go to https://qnamaker.ai and feed data, train & publish your QnA Knowledgebase.
    // Parameters to QnAMakerService are:
    // Required: subscriptionKey, knowledgebaseId, 
    // Optional: defaultMessage, scoreThreshold[Range 0.0 – 1.0]
    public BasicQnAMakerPreviewDialog() : base(new QnAMakerService(new QnAMakerAttribute(RootDialog.GetSetting("QnAAuthKey"), ConfigurationManager.AppSettings["QnAKnowledgebaseId"], "No good match in FAQ.", 0.5)))
    { }
}

// Dialog for QnAMaker GA service
[Serializable]
public class BasicQnAMakerDialog : QnAMakerDialog
{
    // Go to https://qnamaker.ai and feed data, train & publish your QnA Knowledgebase.
    // Parameters to QnAMakerService are:
    // Required: qnaAuthKey, knowledgebaseId, endpointHostName
    // Optional: defaultMessage, scoreThreshold[Range 0.0 – 1.0]
    public BasicQnAMakerDialog() : base(new QnAMakerService(new QnAMakerAttribute(RootDialog.GetSetting("QnAAuthKey"), ConfigurationManager.AppSettings["QnAKnowledgebaseId"], "No good match in FAQ.", 0.5, 1, ConfigurationManager.AppSettings["QnAEndpointHostName"])))
    { }

}

Результат теста:

enter image description here

0 голосов
/ 16 мая 2018

Когда вы локально отлаживаете , попробуйте закомментировать хранилище таблиц Azure для части вашего кода, если вы этого еще не сделали.Это должно решить вашу проблему.

Или, если вы не хотите комментировать свои материалы, вы можете попробовать это:

// Basically you need to check the environment if(process.env.BotEnv === 'prod') { bot.set('storage', tableStorage); }

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