Bot Framework Direct Line работает только в отладчике - PullRequest
0 голосов
/ 26 июня 2018

У меня есть BOT, который использует QnA Maker и LUIS для ответа на часто задаваемые вопросы и запросы, и я пытаюсь внедрить прямую линию для другого BOT. Обычно, когда мой BOT не знает ответ, он отправляет пользовательское сообщение другому BOT, чтобы проверить, знает ли он ответ, и выводит результат. Прямая линия работает нормально, когда я перебираю код с помощью отладчика (GET-запрос отвечает отправленным мною сообщением и ответом из BOT). Однако, когда я просто запускаю код обычно, ответ содержит только сообщение, которое я отправил, а не ответ от другого BOT. Я думаю, что запрос GET заканчивается слишком быстро, чтобы BOT отвечал, когда код запускается вне отладчика, и я понятия не имею, как исправить или расширить запрос. Есть идеи?

Вот соответствующий код:

public class EdwardComponent
{
    public static async Task<string> TalkToEdward(string userInput, string conversationID, string streamURL)
    {
        var DirectLineURL = ConfigurationManager.AppSettings["DirectLineURL"];
        var BearerToken = ConfigurationManager.AppSettings["BearerToken"];
        var DirectLineURLConversationID = ConfigurationManager.AppSettings["DirectLineURLConversationID"];
        DirectLineURLConversationID = DirectLineURLConversationID.Replace("abc123", conversationID);

        var postclient = new RestClient(DirectLineURLConversationID);
        var postrequest = new RestRequest(Method.POST);
        postrequest.AddHeader("Authorization", BearerToken);
        postrequest.AddHeader("Content-Type", "application/json");
        postrequest.RequestFormat = DataFormat.Json;

        var idv = new { id = "user1" };
        postrequest.AddBody(new { type = "message", from = idv, text = userInput });
        var cancellationTokenSource = new CancellationTokenSource();

        var postresponse = postclient.ExecuteAsPost(postrequest, "POST");

        var getrequest = new RestRequest(Method.GET);
        getrequest.AddHeader("Authorization", BearerToken);
        var getresponse = await postclient.ExecuteGetTaskAsync(getrequest);

        string content = getresponse.Content.ToString();
        return content;
    }
}

}

Вот правильный сериализованный ответ от отладки:

Действие 0 - это отправленное сообщение, Действие 1 - ответ от BOT

Вот ответ при запуске вне отладчика:

Только действие 0 возвращено

1 Ответ

0 голосов
/ 27 июня 2018

Исправлено с помощью небольшой задержки и цикла, который продолжит делать запрос GET, пока бот не ответит.

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