private ConverseRequest CreateNewRequest()
        {
            // initial request is the config this then gets followed by all out audio

            var converseRequest = new ConverseRequest();

            var audioIn = new AudioInConfig()
            {
                Encoding        = AudioInConfig.Types.Encoding.Linear16,
                SampleRateHertz = Const.SampleRateHz
            };

            var audioOut = new AudioOutConfig()
            {
                Encoding         = AudioOutConfig.Types.Encoding.Linear16,
                SampleRateHertz  = Const.SampleRateHz,
                VolumePercentage = 75
            };

            ConverseState state = new ConverseState()
            {
                ConversationState = ByteString.Empty
            };

            converseRequest.Config = new ConverseConfig()
            {
                AudioInConfig = audioIn, AudioOutConfig = audioOut, ConverseState = state
            };

            return(converseRequest);
        }
예제 #2
0
        private static async Task Run(string question)
        {
            Stopwatch stopWatch = new Stopwatch();

            stopWatch.Start();
            var almeClient = new AlmeClient(new Uri("https://askjenn.alaskaair.com/"));

            // Setup the request
            ConverseRequest req = new ConverseRequest();

            req.channel    = "Console";
            req.origin     = "Typed";
            req.parameters = new ConverseRequestParameters();
            req.question   = question;

            // Call the Converse endpoint
            var res = await almeClient.ConverseAsync(req);

            stopWatch.Stop();

            // Write the response out to the console
            Console.WriteLine(res.text);

            Console.WriteLine();
            Console.WriteLine(string.Format("Time to Answer: {0}", stopWatch.Elapsed));
            Console.WriteLine(JsonConvert.SerializeObject(res));
        }
예제 #3
0
        private static WitContext GetForecast(ConverseRequest request, ConverseResponse response)
        {
            var context  = request.Context;
            var entities = request.Entities;

            var loc = FirstEntityValue(entities, "location");

            if (loc != null)
            {
                context["forecast"] = "sunny";
                if (context.ContainsKey("missingLocation"))
                {
                    context.Remove("missingLocation");
                }
            }
            else
            {
                context["missingLocation"] = true;
                if (context.ContainsKey("forecast"))
                {
                    context.Remove("forecast");
                }
            }
            return(context);
        }
예제 #4
0
        private static WitContext Merge(ConverseRequest request, ConverseResponse response)
        {
            var context  = request.Context;
            var entities = request.Entities;

            if (context.ContainsKey("joke"))
            {
                context.Remove("joke");
            }

            var category = FirstEntityValue(entities, "category");

            if (category != null)
            {
                context["cat"] = category;
            }

            var sentiment = FirstEntityValue(entities, "sentiment");

            if (sentiment != null)
            {
                context["ack"] = (sentiment.Equals("positive")) ? "Glad you liked it." : "Hmm.";
            }
            else if (context.ContainsKey("ack"))
            {
                context.Remove("ack");
            }
            return(context);
        }
 private async Task WriteAudioIn(byte[] buffer)
 {
     OnDebug?.Invoke("Write Audio " + buffer.Length, true);
     var request = new ConverseRequest()
     {
         AudioIn = ByteString.CopyFrom(buffer)
     };
     await _requestStream.WriteAsync(request);
 }
예제 #6
0
        private static WitContext SelectJoke(ConverseRequest request, ConverseResponse response)
        {
            var context = request.Context;

            var jokes = allJokes[context["cat"] || "default"];

            Shuffle(jokes);
            context["joke"] = jokes[0];
            return(context);
        }
예제 #7
0
        private async Task <SpeechletResponse> BuildAskJennResponseAsync(Intent intent, Session session)
        {
            var almeClient = new AlmeClient(new Uri("https://askjenn.alaskaair.com/"));

            // Setup the request
            ConverseRequest req = new ConverseRequest();

            req.channel    = "Console";
            req.origin     = "Typed";
            req.parameters = new ConverseRequestParameters();

            Slot question = intent.Slots["Question"];

            Logger.Info($"Question={question.Value.ToString()}");
            req.question = question.Value.ToString();

            // Call the Converse endpoint
            var res = await almeClient.ConverseAsync(req);

            return(BuildSpeechletResponse(intent.Name, res.text, false));
        }
예제 #8
0
        public async Task <ConverseResponse> ConverseAsync(ConverseRequest req)
        {
            ConverseResponse res = null;

            using (var client = new HttpClient())
            {
                client.BaseAddress = this.hostUri;
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

                var content = JsonConvert.SerializeObject(req);

                // HTTP POST
                HttpResponseMessage response = await client.PostAsync("AlmeApi/api/Conversation/converse", new StringContent(content, Encoding.UTF8, "application/json"));

                if (response.IsSuccessStatusCode)
                {
                    string data = await response.Content.ReadAsStringAsync();

                    res = JsonConvert.DeserializeObject <ConverseResponse>(data);
                }
            }
            return(res);
        }
예제 #9
0
        BotResponse _RunActions(string sessionId, int currentRequest,
                                string message, BotResponse response, int maxSteps = 5, bool verbose = true)
        {
            if (maxSteps <= 0)
            {
                throw new WitException("Max steps reached, stopping.");
            }

            var json = Converse(sessionId, message, response.Context, verbose);

            if (json.Type == null)
            {
                throw new WitException("Couldn\'t find type in Wit response");
            }

            if (currentRequest != sessions[sessionId])
            {
                return(response);
            }

            // backwards-compatibility with API version 20160516
            if (json.Type == "merge")
            {
                json.Type   = "action";
                json.Action = "merge";
            }

            if (json.Type == "error")
            {
                throw new Exception("Oops, I don\'t know what to do.");
            }

            if (json.Type == "stop")
            {
                return(response);
            }

            var request = new ConverseRequest();

            request.SessionId = sessionId;
            request.Context   = response.Context;
            request.Message   = message;
            request.Entities  = json.Entities;

            switch (json.Type)
            {
            case "msg":
                ThrowIfActionMissing("send");

                var converseResponse = new ConverseResponse();
                converseResponse.Msg          = json.Msg;
                converseResponse.QuickReplies = json.QuickReplies;

                // SDK is able to handle multiple bot responses at the same time
                response.Messages.Add(converseResponse.Msg);

                actions["send"](request, converseResponse);
                // actions["send"](request);
                break;

            case "action":
                var action = json.Action;
                ThrowIfActionMissing(action);
                response.Context = actions[action](request, null);
                // context = this.actions[action](request);
                if (response.Context == null)
                {
                    Console.WriteLine("missing context - did you forget to return it?");
                    response.Context = new WitContext();
                }

                break;

            default:
                throw new WitException($"unknown type:  {json.Type}");
            }

            if (currentRequest != sessions[sessionId])
            {
                return(response);
            }

            return(_RunActions(sessionId, currentRequest, null, response, maxSteps - 1, verbose));
        }
예제 #10
0
        WitContext TellTheTime(ConverseRequest request, ConverseResponse response)
        {
            request.Context.Add("currentTime", DateTime.Now.ToShortTimeString());

            return request.Context;
        }
예제 #11
0
        //public void Converse(string msg)
        //{
        //    var res = _witClient.Converse(_sessionId, msg, new WitContext());
        //}

        WitContext Send(ConverseRequest request, ConverseResponse response)
        {
            Console.WriteLine(request.Message);

            return request.Context;
        }
예제 #12
0
 private static WitContext Send(ConverseRequest request, ConverseResponse response)
 {
     Console.WriteLine(response.Msg);
     return(request.Context);
 }
예제 #13
0
 private static WitContext Send(ConverseRequest request, ConverseResponse response)
 {
     // Do something with the Context
     Console.WriteLine("Yay, got Wit.ai context: " + request.Context);
     return(request.Context);
 }