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; } }
public void TestAttributesProperty() { string requestJson = GetAttributesJson(); AlexaSession alexaSession = JsonConvert.DeserializeObject <AlexaSession>(requestJson); Assert.Equal(2, alexaSession.Attributes.Count); }
/// <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); }
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); } }
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); }
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); }
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)); }
//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); }
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)); }
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.");