private async Task <ISpeechletResponse> HandleStandardRequestAsync(SpeechletRequest request, Session session, Context context) { if (session != null) { // Do session management prior to calling OnSessionStarted and OnIntentAsync // to allow dev to change session values if behavior is not desired DoSessionManagement(request as IntentRequest, session); if (session.IsNew) { var sessionStartedRequest = new SessionStartedRequest(request); (speechlet as ISpeechletWithContext)?.OnSessionStarted(sessionStartedRequest, session, context); await(speechlet as ISpeechletWithContextAsync)?.OnSessionStartedAsync(sessionStartedRequest, session, context); (speechlet as ISpeechlet)?.OnSessionStarted(sessionStartedRequest, session); await(speechlet as ISpeechletAsync)?.OnSessionStartedAsync(sessionStartedRequest, session); } } // process launch request if (request is LaunchRequest) { return((speechlet as ISpeechletWithContext)?.OnLaunch(request as LaunchRequest, session, context) ?? await(speechlet as ISpeechletWithContextAsync)?.OnLaunchAsync(request as LaunchRequest, session, context) ?? (speechlet as ISpeechlet)?.OnLaunch(request as LaunchRequest, session) ?? await(speechlet as ISpeechletAsync)?.OnLaunchAsync(request as LaunchRequest, session)); } // process intent request else if (request is IntentRequest) { return((speechlet as ISpeechletWithContext)?.OnIntent(request as IntentRequest, session, context) ?? await(speechlet as ISpeechletWithContextAsync)?.OnIntentAsync(request as IntentRequest, session, context) ?? (speechlet as ISpeechlet)?.OnIntent(request as IntentRequest, session) ?? await(speechlet as ISpeechletAsync)?.OnIntentAsync(request as IntentRequest, session)); } // process session ended request else if (request is SessionEndedRequest) { (speechlet as ISpeechletWithContext)?.OnSessionEnded(request as SessionEndedRequest, session, context); await(speechlet as ISpeechletWithContextAsync)?.OnSessionEndedAsync(request as SessionEndedRequest, session, context); (speechlet as ISpeechlet)?.OnSessionEnded(request as SessionEndedRequest, session); await(speechlet as ISpeechletAsync)?.OnSessionEndedAsync(request as SessionEndedRequest, session); } return(null); }
/// <summary> /// /// </summary> /// <param name="json"></param> /// <returns></returns> public static SpeechletRequestEnvelope FromJson(JObject json) { if (json["version"] == null || json["session"] == null || json["request"] == null) { throw new SpeechletException("Request does not conform to schema"); } if (json.Value<string>("version") != Sdk.VERSION) { // will still attempt to parse request content but might be useful to log a warning } SpeechletRequest request; JObject requestJson = json.Value<JObject>("request"); string requestType = requestJson.Value<string>("type"); string requestId = requestJson.Value<string>("requestId"); DateTime timestamp = requestJson.Value<DateTime>("timestamp"); switch (requestType) { case "LaunchRequest": request = new LaunchRequest(requestId, timestamp); break; case "IntentRequest": request = new IntentRequest(requestId, timestamp, Intent.FromJson(requestJson.Value<JObject>("intent"))); break; case "SessionStartedRequest": request = new SessionStartedRequest(requestId, timestamp); break; case "SessionEndedRequest": SessionEndedRequest.ReasonEnum reason; Enum.TryParse<SessionEndedRequest.ReasonEnum>(requestJson.Value<string>("reason"), out reason); request = new SessionEndedRequest(requestId, timestamp, reason); break; default: throw new ArgumentException("json"); } return new SpeechletRequestEnvelope { Request = request, Session = Session.FromJson(json.Value<JObject>("session")), Version = json.Value<string>("version") }; }
/// <summary> /// /// </summary> /// <param name="json"></param> /// <returns></returns> public static SpeechletRequestEnvelope FromJson(JObject json) { if (json["version"] != null && json.Value<string>("version") != Sdk.VERSION) { throw new SpeechletException("Request must conform to 1.0 schema."); } SpeechletRequest request; JObject requestJson = json.Value<JObject>("request"); string requestType = requestJson.Value<string>("type"); string requestId = requestJson.Value<string>("requestId"); DateTime timestamp = requestJson.Value<DateTime>("timestamp"); switch (requestType) { case "LaunchRequest": request = new LaunchRequest(requestId, timestamp); break; case "IntentRequest": request = new IntentRequest(requestId, timestamp, Intent.FromJson(requestJson.Value<JObject>("intent"))); break; case "SessionStartedRequest": request = new SessionStartedRequest(requestId, timestamp); break; case "SessionEndedRequest": SessionEndedRequest.ReasonEnum reason; Enum.TryParse<SessionEndedRequest.ReasonEnum>(requestJson.Value<string>("reason"), out reason); request = new SessionEndedRequest(requestId, timestamp, reason); break; default: throw new SpeechletException("Unable to determine Request Type."); } return new SpeechletRequestEnvelope { Request = request, Session = Session.FromJson(json.Value<JObject>("session")), Version = json.Value<string>("version") }; }
public abstract void OnSessionStarted(SessionStartedRequest sessionStartedRequest, Session session);
public async Task OnSessionStartedAsync(SessionStartedRequest sessionStartedRequest, Session session) { speechlet.OnSessionStarted(sessionStartedRequest, session); }
public abstract Task OnSessionStartedAsync(SessionStartedRequest sessionStartedRequest, Session session);
public override void OnSessionStarted(SessionStartedRequest request, Session session) { Log.Info("OnSessionStarted requestId={0}, sessionId={1}", request.RequestId, session.SessionId); }
public override void OnSessionStarted(SessionStartedRequest request, Session session) { }
public override void OnSessionStarted(SessionStartedRequest request, Session session) { Console.WriteLine("OnSessionStarted requestId={0}, sessionId={1}", request.RequestId, session.SessionId); }