public override SpeechletResponse OnAudioIntent(AudioPlayerRequest audioRequest, Session session, Context context) { // This Sample has no Audio-Intent# switch (audioRequest.Type) { case RequestTypeEnum.AudioPlayer_PlaybackFailed: var request = audioRequest as AudioPlayerRequest_PlaybackFailed; log.Error(request.Error.Message); break; case RequestTypeEnum.AudioPlayer_PlaybackFinished: case RequestTypeEnum.AudioPlayer_PlaybackNearlyFinished: case RequestTypeEnum.AudioPlayer_PlaybackStarted: case RequestTypeEnum.AudioPlayer_PlaybackStopped: case RequestTypeEnum.PlaybackController_NextCommandIssued: case RequestTypeEnum.PlaybackController_PauseCommandIssued: case RequestTypeEnum.PlaybackController_PlayCommandIssued: case RequestTypeEnum.PlaybackController_PreviousCommandIssued: default: break; } return(null); }
// handle the enqueuing of the next track in a multi-track album, which can occur after Alexa informs your // service (this service) that the current track has begun. public override async Task <SpeechletResponse> OnAudioPlayerAsync(AudioPlayerRequest audioPlayerRequest, Context context) { var httpClient = new HttpClient(); return(await Groove.Music.EnqueueGrooveMusic(context, httpClient, "ENQUEUE")); }
/// <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"); string token = requestJson.Value <string>("token"); long offset = requestJson.Value <long>("offsetInMilliseconds"); string type = requestJson.Value <string>("type"); 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: if (requestType.StartsWith("PlaybackController") || requestType.StartsWith("AudioPlayer")) { request = new AudioPlayerRequest(requestId, timestamp, token, offset, type); } else if (requestType == "System.ExceptionEncountered") { request = null; } else { throw new ArgumentException("json"); } break; } 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 abstract AudioPlayerResponse OnAudioPlayer(AudioPlayerRequest audioRequest, Context context);
/// <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": string intentName = ""; intentName = requestJson.Value <JObject>("intent").Value <string>("name"); if (intentName == "AMAZON.NextIntent") { request = new AudioIntentRequest(requestId, timestamp, Intent.FromJson(requestJson.Value <JObject>("intent"))); return(new SpeechletRequestEnvelope { Request = request, Version = json.Value <string>("version"), Context = Context.FromJson(json.Value <JObject>("context")) }); } 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; case "AudioPlayer.PlaybackNearlyFinished": request = new AudioPlayerRequest(requestId, timestamp); break; default: System.Diagnostics.Debug.WriteLine("Unhandled requestType" + requestType); throw new ArgumentException("json"); } if (requestType == "AudioPlayer.PlaybackNearlyFinished") { return(new SpeechletRequestEnvelope { Request = request, Version = json.Value <string>("version"), Context = Context.FromJson(json.Value <JObject>("context")) }); } return(new SpeechletRequestEnvelope { Request = request, Session = Session.FromJson(json.Value <JObject>("session")), Version = json.Value <string>("version") }); }
public abstract SpeechletResponse OnAudioIntent(AudioPlayerRequest audioRequest, Session session, Context context);
/// <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 Task <AudioPlayerResponse> OnAudioPlayerAsync(AudioPlayerRequest audioRequest, Context context) { throw new NotImplementedException(); }
public override SpeechletResponse OnAudioIntent(AudioPlayerRequest audioRequest, Context context) { throw new NotImplementedException(); }
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); }
public async Task HandleRequest() { await RequestProcessHelper.ProcessRequest("AudioPlayerRequestHandler.HandleRequest()", "Audio Player Request", async() => { AudioPlayerRequest request = Core.Request.GetRequest().Request as AudioPlayerRequest; List <MediaItem> mediaItems = MediaItems.GetMediaItems(); MediaItem currentMediaItem = mediaItems.Find(m => m.Title.Contains(request.Token)); switch (Core.Request.GetSubRequestType()) { // handle playback started case AlexaRequestType.PlaybackStarted: Core.Response.ClearAudioPlayer(); break; // handle playback stopped case AlexaRequestType.PlaybackStopped: Core.State.UserState.Token = request.Token; Core.State.UserState.EnqueuedToken = request.EnqueuedToken; Core.State.UserState.OffsetInMS = Convert.ToInt32(request.OffsetInMilliseconds); break; // handle playback nearly finished case AlexaRequestType.PlaybackNearlyFinished: if (!request.HasEnqueuedItem) { var currentPlay = request.Token; int index = mediaItems.IndexOf(mediaItems.Where(m => m.Title == request.Token).FirstOrDefault()); if (index == -1) { index++; } if (index == MediaItems.GetMediaItems().Count) { index = 0; } index = index == 0 ? 0 : index + 1; Core.State.UserState.Token = request.Token; Core.State.UserState.EnqueuedToken = mediaItems[index].Title; Core.Response.AddAudioPlayer(PlayBehavior.Enqueue, mediaItems[index].AudioSource, Core.State.UserState.EnqueuedToken, Core.State.UserState.Token, 0); } break; // handle playback finished case AlexaRequestType.PlaybackFinished: if (Core.State.UserState.EnqueuedToken != null) { int index = mediaItems.IndexOf(mediaItems.Where(m => m.Title == Core.State.UserState.EnqueuedToken).FirstOrDefault()); Core.State.UserState.Index = index; Core.State.UserState.Token = mediaItems[index].Title; Core.Response.AddAudioPlayer(PlayBehavior.ReplaceAll, mediaItems[index].AudioSource, Core.State.UserState.Token); } else { Core.Response.ClearAudioPlayer(); } break; // handle playback failed case AlexaRequestType.PlaybackFailed: Core.State.UserState.Index = 0; Core.State.UserState.Stage = Stage.Menu; Core.State.UserState.Token = mediaItems.FirstOrDefault().Title; Core.Response.AddAudioPlayer(PlayBehavior.ReplaceAll, mediaItems.FirstOrDefault().AudioSource, Core.State.UserState.Token); break; // handle unknown request default: break; } }); }