private async Task WritePodcastPlaybackAsync(PodcastPlaybackInfo playback) { var response = await _dynamoClient.PutItemAsync(_dynamoTable, new Dictionary <string, AttributeValue> { ["Key"] = new AttributeValue { S = UserIdToResumeRecordKey(playback.UserId) }, ["Value"] = new AttributeValue { S = JsonConvert.SerializeObject(playback) }, ["When"] = new AttributeValue { S = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss") } }); }
private async Task <SkillResponse> BuildResumePodcastResponseAsync(PodcastPlaybackInfo playback) { if (playback == null) { return(BuildSpeechResponse(PROMPT_CANNOT_RESUME + PROMPT_HELP_QUESTION, shouldEndSession: false)); } var list = await GetPodcastsAsync(); var item = list.FirstOrDefault(p => p.Token == playback.Token); if (item == null) { return(BuildSpeechResponse(PROMPT_PODCAST_NOT_AVAILBLE + PROMPT_HELP_QUESTION, shouldEndSession: false)); } try { var prompt = $"Continue playing podcast entitled: \"{item.Title}\""; var result = new SkillResponse { Version = "1.0", Response = new ResponseBody { OutputSpeech = new PlainTextOutputSpeech { Text = prompt }, ShouldEndSession = true } }; result.Response.Directives.Add(new AudioPlayerPlayDirective() { PlayBehavior = PlayBehavior.ReplaceAll, AudioItem = new AudioItem { Stream = new AudioItemStream { Url = item.Url, Token = item.Token, OffsetInMilliseconds = playback.OffsetInMilliseconds } } }); return(result); } catch (Exception e) { LambdaLogger.Log($"*** ERROR: unable to parse podcast (token='{playback.Token}', offset={playback.OffsetInMillisecondsText}) ({e})"); return(BuildSpeechResponse(PROMPT_ERROR_PODCAST)); } }