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")
            };
        }
Exemplo n.º 4
0
 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 abstract Task OnSessionStartedAsync(SessionStartedRequest sessionStartedRequest, Session session);
Exemplo n.º 8
0
 public abstract void OnSessionStarted(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);
 }