Пример #1
0
        public SkillResponse HandleSkillRequest([FromBody] SkillRequest request)
        {
            // Quick security check
            _processor.ValidateRequest(request);

            // Validate we can handle this request
            var requestType = _processor.GetRequestType(request, _logger);

            if (requestType == null)
            {
                throw new InvalidOperationException("Unsupported request");
            }

            // Hand off to game to do magic
            var session   = new AlexaSession(request.Session);
            var arguments = _processor.GetArguments(request, _logger);
            var game      = new ReindeerGame(session, _logger, _questionFactory);

            try
            {
                var response = game.Execute(requestType.Value, arguments);
                return(_responseFactory.CreateSkillResponse(response));
            }
            catch (Exception e)
            {
                _logger.LogLine("Exception processing game: " + e);
                throw;
            }
        }
Пример #2
0
        public void TestAttributesProperty()
        {
            string       requestJson  = GetAttributesJson();
            AlexaSession alexaSession = JsonConvert.DeserializeObject <AlexaSession>(requestJson);

            Assert.Equal(2, alexaSession.Attributes.Count);
        }
Пример #3
0
        /// <summary>
        /// A simple function that takes a string and does a ToUpper
        /// </summary>
        /// <param name="input"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public SkillResponse FunctionHandler(SkillRequest input, ILambdaContext context)
        {
            var logger = new LambdaLogger(context.Logger);

            // Quick security check
            RequestProcessor.ValidateRequest(input);

            // Validate we can handle this request
            var requestType = RequestProcessor.GetRequestType(input, logger);

            if (requestType == null)
            {
                throw new InvalidOperationException("Unsupported request");
            }

            // Hand off to game to do magic
            var session   = new AlexaSession(input.Session);
            var arguments = RequestProcessor.GetArguments(input, logger);
            var game      = new ReindeerGame(session, logger, QuestionFactory);

            try
            {
                var response = game.Execute(requestType.Value, arguments);
                return(ResponseFactory.CreateSkillResponse(response));
            }
            catch (Exception e)
            {
                context.Logger.LogLine("Exception processing game: " + e);
                throw;
            }
        }
        public void GetObjectReturnsSelectedQuestion()
        {
            var session  = new AlexaSession(_testSession);
            var question = session.GetObject <SelectedQuestion>("CurrentQuestion");

            question.ShouldBeEquivalentTo(SampleQuestion);
        }
Пример #5
0
        public void TestSessionIdProperty(string sessionId)
        {
            string requestJson = GetSessionIdTestJson(sessionId);

            try
            {
                AlexaSession alexaSession = JsonConvert.DeserializeObject <AlexaSession>(requestJson);
                Assert.Equal(ValidSessionId, sessionId);
                Assert.Equal(ValidSessionId, alexaSession.SessionId);
            }
            catch (JsonSerializationException)
            {
                Assert.NotEqual(ValidSessionId, sessionId);
            }
        }
Пример #6
0
        public override AlexaResponse HandleCanFulfillIntentRequest(AlexaCanFulfillIntentRequest canFulfillIntentRequest, AlexaContext context, AlexaSession session)
        {
            AlexaResponse         alexaResponse = new AlexaResponse();
            PlainTextOutputSpeech plainText     = new PlainTextOutputSpeech
            {
                Text = "AlexaCanFulfillIntentRequest"
            };
            AlexaResponseData responseData = new AlexaResponseData
            {
                OutputSpeech = plainText
            };

            alexaResponse.Response = responseData;
            return(alexaResponse);
        }
Пример #7
0
 public override void HandleSessionEndedRequest(AlexaSessionEndedRequest sessionEndedRequest, AlexaContext context, AlexaSession session)
 {
     // No impl
 }
        public void GetObjectReturnsQuestionIndices()
        {
            var session = new AlexaSession(_testSession);

            session.GetObject <int[]>("QuestionIndices").ShouldAllBeEquivalentTo(SampleQuestionIndices);
        }
        public void GetObjectReturnsScore()
        {
            var session = new AlexaSession(_testSession);

            session.GetObject <int>("Score").Should().Be(1);
        }
Пример #10
0
        private SkillResponse medicalDataIntent(ApplicationUser user, Fulfillment fulfillment, AlexaSession session)
        {
            //Update skill-specific fulfillment info
            fulfillment.Note     = "User requested Medical Data Update";
            fulfillment.Category = FulfillmentCategory.Safety;
            fulfillment.Status   = FulfillmentStatus.Fulfilled;

            user.AlexaSessions.Add(session);
            user.Fulfillments.Add(fulfillment);
            _context.SaveChanges();

            var medicalResponse            = new Alexa.NET.Response.SsmlOutputSpeech();
            MedicalSensorData medicalData  = user.MedicalSensorData.Last();
            string            healthString = "";

            if (medicalData != null)
            {
                if (medicalData.health == true)
                {
                    healthString         = "You are healthy!";
                    medicalResponse.Ssml = "<speak>" + healthString + "</speak>";
                }
                else
                {
                    healthString         = "You aren't healthy.";
                    medicalResponse.Ssml = "<speak>" + healthString + "</speak>";
                }

                return(ResponseBuilder.Tell(medicalResponse));
            }
            else
            {
                medicalResponse.Ssml = "<speak>" + "An error occured, please try again." + "</speak>";
            }
            return(ResponseBuilder.Tell(medicalResponse));
        }
Пример #11
0
        //TODO: Use Alexa.NET.Middleware to verify requests come from Amazon
        public SkillResponse ProcessRequest(SkillRequest _skillRequest)
        {
            ApplicationUser user;
            var             intentRequest = _skillRequest.Request as IntentRequest;
            var             speech        = new Alexa.NET.Response.SsmlOutputSpeech();
            var             response      = new SkillResponse();

            //Get User which triggered request
            //var queryResult = _userManager.Users
            //  .Single(b => b.AlexaID == _skillRequest.Session.User.UserId);
            var queryResult = _userManager.Users;

            var queryuser = queryResult.Single(b => b.AlexaID == _skillRequest.Session.User.UserId);

            user = _context.Users.Include(ApplicationUser => ApplicationUser.AlexaSessions)
                   .Include(ApplicationUser => ApplicationUser.MedicalSensorData)
                   .Include(ApplicationUser => ApplicationUser.Fulfillments)
                   .Single(u => u.Id == queryuser.Id);

            if (user != null)
            {
                //Generate fulfillment record
                Fulfillment fulfillment = new Fulfillment()
                {
                    DeviceID  = _skillRequest.Context.System.Device.DeviceID,
                    Timestamp = _skillRequest.Request.Timestamp,
                    Source    = FulfillmentSource.Alexa
                };

                //Generate Alexa Intent History
                AlexaSession newSession = new AlexaSession()
                {
                    ApplicationUser = user,
                    Type            = _skillRequest.Request.Type,
                    RequestId       = _skillRequest.Request.RequestId,
                    Locale          = _skillRequest.Request.Locale,
                    Timestamp       = _skillRequest.Request.Timestamp,
                    ApiAccessToken  = _skillRequest.Context.System.ApiAccessToken,
                    ApiEndpoint     = _skillRequest.Context.System.ApiEndpoint,
                    UserId          = _skillRequest.Session.User.UserId,
                    DeviceID        = _skillRequest.Context.System.Device.DeviceID,
                    Fulfillment     = fulfillment
                };

                switch (intentRequest.Intent.Name)
                {
                case "sendalert":
                    return(safetyIntent(user, fulfillment, newSession));

                case "displayMedicalSummaryIntent":
                    return(medicalDataIntent(user, fulfillment, newSession));

                case "requestRide":
                    return(requestRideIntent(intentRequest.Intent.Slots, user, fulfillment, newSession));

                default:
                    var defaultResponse = new Alexa.NET.Response.SsmlOutputSpeech();
                    defaultResponse.Ssml          = "<speak>An error occured, please try again.</speak>";
                    response                      = ResponseBuilder.Tell(defaultResponse);
                    newSession.Fulfillment.Status = FulfillmentStatus.Unfulfilled;
                    return(response);
                }
            }
            else
            {
                speech.Ssml = "<speak>Please try again. Error 1</speak>";
                response    = ResponseBuilder.Tell(speech);
            }
            return(response);
        }
Пример #12
0
        private SkillResponse safetyIntent(ApplicationUser user, Fulfillment fulfillment, AlexaSession session)
        {
            sendsafetyAlert(user);
            //Update skill-specific fulfillment info
            fulfillment.Note     = "Alert sent to Emergency Contact";
            fulfillment.Type     = FulfillmentType.High;
            fulfillment.Category = FulfillmentCategory.Safety;
            fulfillment.Status   = FulfillmentStatus.Fulfilled;

            user.AlexaSessions.Add(session);
            user.Fulfillments.Add(fulfillment);
            _context.SaveChanges();

            //Generate Alexa request
            var safetyResponse = new Alexa.NET.Response.SsmlOutputSpeech();

            safetyResponse.Ssml = "<speak>I have sent an alert to your emergency contact.</speak>";
            return(ResponseBuilder.Tell(safetyResponse));
        }
Пример #13
0
        private SkillResponse requestRideIntent(Dictionary <string, Alexa.NET.Request.Slot> slots, ApplicationUser user, Fulfillment fulfillment, AlexaSession session)
        {
            Slot daySlot  = slots["day"];
            Slot timeSlot = slots["time"];

            fulfillment.Note     = "Ride requested. " + daySlot.Value + " " + timeSlot.Value;
            fulfillment.Type     = FulfillmentType.Medium;
            fulfillment.Category = FulfillmentCategory.Community;
            fulfillment.Status   = FulfillmentStatus.Unfulfilled;

            user.AlexaSessions.Add(session);
            user.Fulfillments.Add(fulfillment);
            _context.SaveChanges();

            //Generate Alexa request
            var safetyResponse = new Alexa.NET.Response.SsmlOutputSpeech();

            safetyResponse.Ssml = "<speak>I have entered a fulfillment request for a ride. You should receive a confirmation in the next 24 hours for your ride"
                                  + " on " + daySlot.Value + " " + timeSlot.Value + "</speak>";
            return(ResponseBuilder.Tell(safetyResponse));
        }
 /// <summary>
 /// Function to handle Alexa can fullfill intent requests.
 /// </summary>
 /// <param name="canFulfillIntentRequest">The alexa can fulfill intent request.</param>
 /// <param name="context">Context of the Alexa execution.</param>
 /// <param name="session">Current Alexa session.</param>
 /// <returns>The Alexa response.</returns>
 public virtual AlexaResponse HandleCanFulfillIntentRequest(
     AlexaCanFulfillIntentRequest canFulfillIntentRequest,
     AlexaContext context,
     AlexaSession session)
 => throw new NotImplementedException("HandleCanFulfillIntentRequest not yet implemented.");
 /// <summary>
 /// Function to handle Alexa session ended requests.
 /// </summary>
 /// <param name="sessionEndedRequest">The alexa session ended request.</param>
 /// <param name="context">Context of the Alexa execution.</param>
 /// <param name="session">Current Alexa session.</param>
 public virtual void HandleSessionEndedRequest(
     AlexaSessionEndedRequest sessionEndedRequest,
     AlexaContext context,
     AlexaSession session)
 => throw new NotImplementedException("HandleSessionEndedRequest not yet implemented.");
 /// <summary>
 /// Function to handle Alexa launch requests.
 /// </summary>
 /// <param name="launchRequest">The alexa launch request information.</param>
 /// <param name="context">Context of the Alexa execution.</param>
 /// <param name="session">Current Alexa session.</param>
 /// <returns>The Alexa response.</returns>
 public virtual AlexaResponse HandleLaunchRequest(
     AlexaLaunchRequest launchRequest,
     AlexaContext context,
     AlexaSession session)
 => throw new NotImplementedException("HandleLaunchRequest not yet implemented.");