Esempio n. 1
0
 protected string BuildRequest(Intent intent, bool isNewSession          = true,
                               IntentRequest.DialogStateEnum dialogState = IntentRequest.DialogStateEnum.STARTED)
 {
     return(RequestJson
            .Replace("<isNew>", isNewSession.ToString().ToLower())
            .Replace("<intent>", JsonConvert.SerializeObject(intent, SerializerSettings))
            .Replace("<dialogState>", ((int)dialogState).ToString()));
 }
 public abstract Task <ISpeechletResponseBuilder> HandleIntentAsync(Intent intent, IntentRequest.DialogStateEnum dialogState, Session session);
        public async override Task <ISpeechletResponseBuilder> HandleIntentAsync(Intent intent, IntentRequest.DialogStateEnum dialogState, Session session)
        {
            var slot    = intent.Slots[SlotNames.SampleSlot1];
            var noValue = string.IsNullOrEmpty(slot.Value);

            if (noValue && session.IsNew)
            {
                await logHelper.Log($"New request, asking for details");

                return(responseBuilder
                       .Say("Something in particular?")
                       .KeepSession());
            }

            var confirmed = intent.ConfirmationStatus.ToBool();

            if (confirmed == null)
            {
                await logHelper.Log($"Request, asking to confirm");

                return(responseBuilder.DialogConfirmIntent(intent, noValue ? "You requested anything. Correct?" : null));
            }

            var logMessage = (bool)confirmed ? "User rejected request" : "User confirmed request";
            await logHelper.Log(logMessage);

            var speech = (bool)confirmed ?
                         (noValue ?
                          "Thanks. We will contact you soon" :
                          $"Thanks. We will contact you soon about {slot.Value}") :
                         "What was your request?";

            return(responseBuilder.Say(speech));
        }
Esempio n. 4
0
        public async override Task <ISpeechletResponseBuilder> HandleIntentAsync(Intent intent, IntentRequest.DialogStateEnum dialogState, Session session)
        {
            var slot    = intent.Slots[SlotNames.SampleSlot1];
            var noValue = string.IsNullOrEmpty(slot.Value);

            if (!session.IsNew && !noValue)
            {
                await logHelper.Log($"Details: {slot.Value}");

                return(responseBuilder.Say("Thanks. Need something else?"));
            }
            return(await base.HandleIntentAsync(intent, dialogState, session));
        }
Esempio n. 5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="json"></param>
        /// <returns></returns>
        public static SpeechletRequestEnvelope FromJson(JObject json)
        {
            if (json["version"] != null && json["version"].Value <string>() != Sdk.VERSION)
            {
                throw new SpeechletException("Request must conform to 1.0 schema.");
            }

            SpeechletRequest request;
            var requestJson      = json.Value <JObject>("request");
            var requestTypeParts = requestJson?.Value <string>("type")?.Split('.');

            if (requestTypeParts == null)
            {
                throw new ArgumentException("json");
            }

            var requestType    = requestTypeParts[0];
            var requestSubType = requestTypeParts.Length > 1 ? requestTypeParts[1] : null;

            var requestId = requestJson?.Value <string>("requestId");
            var timestamp = DateTimeHelpers.FromAlexaTimestamp(requestJson);
            var locale    = requestJson?.Value <string>("locale");

            switch (requestType)
            {
            case "LaunchRequest":
                request = new LaunchRequest(requestId, timestamp, locale);
                break;

            case "IntentRequest":
                IntentRequest.DialogStateEnum dialogState = IntentRequest.DialogStateEnum.NONE;
                Enum.TryParse(requestJson.Value <string>("dialogState"), out dialogState);
                var intent = Intent.FromJson(requestJson.Value <JObject>("intent"));
                request = new IntentRequest(requestId, timestamp, locale, intent, dialogState);
                break;

            case "SessionStartedRequest":
                request = new SessionStartedRequest(requestId, timestamp, locale);
                break;

            case "SessionEndedRequest":
                SessionEndedRequest.ReasonEnum reason = SessionEndedRequest.ReasonEnum.NONE;
                Enum.TryParse(requestJson.Value <string>("reason"), out reason);
                request = new SessionEndedRequest(requestId, timestamp, locale, reason);
                break;

            case "AudioPlayer":
                var token                = requestJson?.Value <string>("token");
                var offset               = requestJson?.Value <long>("offsetInMilliseconds") ?? 0;
                var playbackError        = Error.FromJson(requestJson?.Value <JObject>("error"));
                var currentPlaybackState = PlaybackState.FromJson(requestJson?.Value <JObject>("currentPlaybackState"));
                switch (requestSubType)
                {
                case "PlaybackFailed":
                    request = new AudioPlayerPlaybackFailedRequest(requestId, timestamp, locale, requestSubType, token, playbackError, currentPlaybackState);
                    break;

                default:
                    request = new AudioPlayerRequest(requestId, timestamp, locale, requestSubType, token, offset);
                    break;
                }
                break;

            case "PlaybackController":
                request = new PlaybackControllerRequest(requestId, timestamp, locale, requestSubType);
                break;

            case "Display":
                var listItemToken = requestJson?.Value <string>("token");
                request = new DisplayRequest(requestId, timestamp, locale, requestSubType, listItemToken);
                break;

            case "System":
                switch (requestSubType)
                {
                case "ExceptionEncountered":
                    var error = Error.FromJson(requestJson?.Value <JObject>("error"));
                    var cause = Cause.FromJson(requestJson?.Value <JObject>("cause"));
                    request = new SystemExceptionEncounteredRequest(requestId, timestamp, locale, requestSubType, error, cause);
                    break;

                default:
                    throw new ArgumentException("json");
                }
                break;

            default:
                throw new ArgumentException("json");
            }

            return(new SpeechletRequestEnvelope {
                Request = request,
                Session = Session.FromJson(json.Value <JObject>("session")),
                Version = json.Value <string>("version"),
                Context = Context.FromJson(json.Value <JObject>("context"))
            });
        }
        public async override Task <ISpeechletResponseBuilder> HandleIntentAsync(Intent intent, IntentRequest.DialogStateEnum dialogState, Session session)
        {
            var slot    = intent.Slots[SlotNames.SampleSlot1];
            var noValue = string.IsNullOrEmpty(slot.Value);

            if (!noValue)
            {
                await logHelper.Log($"User asked about slot1: {slot.Value}");

                return(responseBuilder.Say($"Slot1 is {slot.Value}"));
            }

            slot    = intent.Slots[SlotNames.SampleSlot2];
            noValue = string.IsNullOrEmpty(slot.Value);
            if (!noValue)
            {
                await logHelper.Log($"User asked about slot2: {slot.Value}");

                return(responseBuilder.Say($"Slot2 is {slot.Value}"));
            }
            slot    = intent.Slots[SlotNames.SampleSlot3];
            noValue = string.IsNullOrEmpty(slot.Value);
            if (!noValue)
            {
                await logHelper.Log($"User asked about slot3: {slot.Value}");

                var confirmed = slot.ConfirmationStatus.ToBool();
                if (confirmed == null)
                {
                    await logHelper.Log($"Slot3, asking to confirm");

                    var speech = dialogState != IntentRequest.DialogStateEnum.IN_PROGRESS ? $"Slot3 {slot.Value}. Correct?" : null;
                    return(responseBuilder.DialogConfirmSlot(slot.Name, intent, speech));
                }
                var action = (bool)confirmed ? "confirmed" : "rejected";
                return(responseBuilder.Say($"Slot3 {action} {slot.Value}"));
            }
            return(responseBuilder.Say("Sorry, what do you mean?").KeepSession());
        }
        private static SpeechletRequest RequestFromJson(JObject json)
        {
            SpeechletRequest request;
            var requestTypeParts = json?.Value <string>("type")?.Split('.');

            if (requestTypeParts == null)
            {
                throw new ArgumentException("json");
            }

            var requestType    = requestTypeParts[0];
            var requestSubType = requestTypeParts.Length > 1 ? requestTypeParts[1] : null;

            var requestId = json.Value <string>("requestId");
            var timestamp = DateTimeHelpers.FromAlexaTimestamp(json);
            var locale    = json.Value <string>("locale");

            switch (requestType)
            {
            case "LaunchRequest":
                request = new LaunchRequest(requestId, timestamp, locale);
                break;

            case "IntentRequest":
                IntentRequest.DialogStateEnum dialogState = IntentRequest.DialogStateEnum.NONE;
                Enum.TryParse(json.Value <string>("dialogState"), out dialogState);
                var intent = Intent.FromJson(json.Value <JObject>("intent"));
                request = new IntentRequest(requestId, timestamp, locale, intent, dialogState);
                break;

            case "SessionStartedRequest":
                request = new SessionStartedRequest(requestId, timestamp, locale);
                break;

            case "SessionEndedRequest":
                SessionEndedRequest.ReasonEnum reason = SessionEndedRequest.ReasonEnum.NONE;
                Enum.TryParse(json.Value <string>("reason"), out reason);
                var sessionError = Error.FromJson(json.Value <JObject>("error"));
                request = new SessionEndedRequest(requestId, timestamp, locale, reason, sessionError);
                break;

            case "AudioPlayer":
                var token                = json.Value <string>("token");
                var offset               = json.Value <long?>("offsetInMilliseconds");
                var playbackError        = Error.FromJson(json.Value <JObject>("error"));
                var currentPlaybackState = PlaybackState.FromJson(json.Value <JObject>("currentPlaybackState"));
                switch (requestSubType)
                {
                case "PlaybackFailed":
                    request = new AudioPlayerPlaybackFailedRequest(requestId, timestamp, locale, requestSubType, token, playbackError, currentPlaybackState);
                    break;

                default:
                    request = new AudioPlayerRequest(requestId, timestamp, locale, requestSubType, token, offset);
                    break;
                }
                break;

            case "PlaybackController":
                request = new PlaybackControllerRequest(requestId, timestamp, locale, requestSubType);
                break;

            case "Display":
                var listItemToken = json.Value <string>("token");
                request = new DisplayRequest(requestId, timestamp, locale, requestSubType, listItemToken);
                break;

            case "System":
                switch (requestSubType)
                {
                case "ExceptionEncountered":
                    var systemError = Error.FromJson(json.Value <JObject>("error"));
                    var cause       = Cause.FromJson(json.Value <JObject>("cause"));
                    request = new SystemExceptionEncounteredRequest(requestId, timestamp, locale, requestSubType, systemError, cause);
                    break;

                default:
                    throw new ArgumentException("json");
                }
                break;

            default:
                throw new ArgumentException("json");
            }

            return(request);
        }
Esempio n. 8
0
        public async override Task <ISpeechletResponseBuilder> HandleIntentAsync(Intent intent, IntentRequest.DialogStateEnum dialogState, Session session)
        {
            await logHelper.Log($"Something unrecognized sayd");

            var index = GetIntAttribute(session, HelpIndexAttribute);

            SetIntAttribute(session, HelpIndexAttribute, (index + 1) / HelpResponces.Length);
            return(responseBuilder.Say(HelpResponces[index]).KeepSession());
        }