예제 #1
0
        public async Task StartChat(CancellationToken cancellationToken = default(CancellationToken))
        {
            RenderSettings();
            using (var dlGatewayProxy = new DirectLineGatewayProxy(new Uri(_gatewayUrl)))
            {
                var initActivity = GetInitActivity(new ChannelAccount(_fromId), _locale, GetChannelData(Configuration));

                var stopWatch = Stopwatch.StartNew();
                Console.WriteLine("Initializing...");
                var lastResponse = await dlGatewayProxy.InitAssistantAsync(initActivity, cancellationToken);

                ConsoleOut.WriteTiming("Total time:", stopWatch.ElapsedMilliseconds);

                while (true)
                {
                    ConsoleOut.WriteFlowerLine();
                    var utterance = await GetUtterance();

                    if (string.IsNullOrEmpty(utterance))
                    {
                        continue;
                    }

                    if (utterance.ToLower().Trim().StartsWith("quit"))
                    {
                        break;
                    }

                    Console.WriteLine($"Utterance: \"{utterance}\"");
                    stopWatch.Restart();
                    lastResponse = await HandleUtterance(lastResponse.ConversationId, utterance, lastResponse.Watermark, dlGatewayProxy, cancellationToken);

                    ConsoleOut.WriteTiming("Total time:", stopWatch.ElapsedMilliseconds);
                    Console.WriteLine();
                }
            }
        }
예제 #2
0
        private async Task <BotGatewayResponse> HandleUtterance(string conversationId, string utterance, string watermark, DirectLineGatewayProxy dlGatewayProxy, CancellationToken cancellationToken)
        {
            var activity     = BuildMessageActivity(new ChannelAccount(_fromId), utterance, _locale, GetChannelData(Configuration));
            var lastResponse = await SendActivityAsync(conversationId, watermark, dlGatewayProxy, cancellationToken, activity);

            var lastActivity = lastResponse.Activities[lastResponse.Activities.Count - 1];

            while (lastActivity.InputHint != InputHints.AcceptingInput && lastActivity.InputHint != InputHints.ExpectingInput)
            {
                RenderResponses(lastResponse.Activities);

                // Get next message until we get a new message
                Console.WriteLine("Getting next message...");
                var stopWatch    = Stopwatch.StartNew();
                var nextResponse = await dlGatewayProxy.GetNextMessageAsync(conversationId, lastResponse.Watermark, cancellationToken);

                var elapsedMilliseconds = stopWatch.ElapsedMilliseconds;
                Console.WriteLine("Done.");
                RenderResponse(nextResponse, elapsedMilliseconds);

                lastResponse = nextResponse;
                lastActivity = lastResponse.Activities[lastResponse.Activities.Count - 1];
            }

            RenderResponses(lastResponse.Activities);
            return(lastResponse);
        }
예제 #3
0
        private async Task <BotGatewayResponse> SendActivityAsync(string conversationId, string watermark, DirectLineGatewayProxy dlGatewayProxy, CancellationToken cancellationToken, Activity activity)
        {
            Console.WriteLine("Sending activity...");
            if (_renderOutgoingActivities)
            {
                ConsoleOut.RenderActivity(activity, ConsoleColor.Blue);
            }

            var stopWatch    = Stopwatch.StartNew();
            var lastResponse = await dlGatewayProxy.SendActivityAsync(conversationId, watermark, activity, cancellationToken);

            var clientRoundtripTime = stopWatch.ElapsedMilliseconds;

            Console.WriteLine("Done.");
            RenderResponse(lastResponse, clientRoundtripTime);
            return(lastResponse);
        }