public async Task <(string, DialogFlowResponse.FulfillmentMessage, PayloadSettings)> Build(string longUrl, string domain, string emailAddress, OriginSources originSource, string sessionId) { _logger.LogInformation("ShortenUrlBuilder: Received request to shorten {LongUrl} to a {Domain} domain from {OriginSource}. SessionId: {SessionId}.", longUrl, domain, originSource, sessionId); #region Set Defaults var responseFulfillmentMessage = new DialogFlowResponse.FulfillmentMessage { Text = new DialogFlowResponse.Text() { Texts = new[] { $"Sorry, couldn't shorten {longUrl} to a {domain} domain." } } }; var responseFulfillmentText = $"Sorry, couldn't shorten {longUrl} to a {domain} domain."; var payloadBuilder = Payloads.DefaultPayload.Build(longUrl, domain); #endregion try { var shortenerMessage = await _urlShorteningService.Shorten(longUrl, domain, emailAddress, originSource, sessionId); responseFulfillmentText = shortenerMessage; responseFulfillmentMessage.Text = new DialogFlowResponse.Text() { Texts = new[] { responseFulfillmentText } }; payloadBuilder.Google = Payloads.GooglePayload.Build(responseFulfillmentText.RemoveLineEndings()); payloadBuilder.Facebook = Payloads.FacebookPayload.Build(responseFulfillmentText); } catch (Exception ex) { _logger.LogError("ShortenUrlBuilder: There was an error while trying to use the UrlShorteningService. Error: {@Error}", ex); } return(responseFulfillmentText, responseFulfillmentMessage, payloadBuilder); }
public async Task <(string, DialogFlowResponse.FulfillmentMessage, PayloadSettings)> Build(string searchTerm, string sessionId) { _logger.LogInformation("MarvelBuilder: Received request to search for {SearchTerm}. SessionId: {SessionId}.", searchTerm, sessionId); const string backupImage = "https://stanleebot.com/images/DialogFlow/MarvelCard.png"; #region Set Defaults var fulfillmentMessage = new DialogFlowResponse.FulfillmentMessage { Card = new DialogFlowResponse.Card() { Title = "Sorry", Subtitle = $"Couldn't find anything for {searchTerm}", ImageUri = backupImage, Buttons = new List <DialogFlowResponse.Button>() } }; var fulfillmentText = $"Couldn't find anything for {searchTerm}"; var payloadBuilder = Payloads.DefaultPayload.Build(searchTerm); #endregion try { var marvelGoogleCx = _appSettings.GoogleCustomSearch.MarvelCx; var marvelGsr = await _googleSearchService.GetResponse(searchTerm, marvelGoogleCx); if (marvelGsr.Items != null) { var firstGsrItem = marvelGsr.Items.ElementAt(0); var gsrMetaTags = firstGsrItem.PageMap.MetaTags.ElementAtOrDefault(0); if (gsrMetaTags != null) { _logger.LogInformation("MarvelBuilder: Beginning to build payload for {SearchTerm}. SessionId: {SessionId}.", searchTerm, sessionId); var title = CleanTitle(gsrMetaTags.OgTitle) ?? CleanTitle(firstGsrItem.Title) ?? searchTerm; var bio = gsrMetaTags.OgDescription.ToNullIfWhiteSpace() ?? firstGsrItem.Snippet.CleanString().ToNullIfWhiteSpace() ?? "Description unavailable at this time."; var imageUrl = firstGsrItem.PageMap.CseImage.ElementAtOrDefault(0)?.Src ?? backupImage; var webSite = gsrMetaTags.OgUrl.ToNullIfWhiteSpace() ?? firstGsrItem.Link.ToNullIfWhiteSpace() ?? "https://www.marvel.com/"; var responseCard = new DialogFlowResponse.Card { Title = title, Subtitle = bio, ImageUri = imageUrl, Buttons = new List <DialogFlowResponse.Button>() { new DialogFlowResponse.Button() { PostBack = webSite, Text = "Excelsior! Read more..." } } }; fulfillmentText = $"Excelsior! I found {title}! {bio}"; fulfillmentMessage.Card = responseCard; payloadBuilder.Google = Payloads.GooglePayload.Build(title, bio, imageUrl, webSite); payloadBuilder.Facebook = Payloads.FacebookPayload.Build(title, bio, imageUrl, webSite, FacebookPayloadSettings.ImageAspectRatioEnum.Horizontal, FacebookPayloadSettings.WebViewHeightRatioEnum.Full); _logger.LogInformation("MarvelBuilder: Payload built for {SearchTerm}. SessionId: {SessionId}.", searchTerm, sessionId); _logger.LogDebug("MarvelBuilder: PayloadBuilder: {@PayloadBuilder}. SessionId: {SessionId}.", payloadBuilder, sessionId); return(fulfillmentText, fulfillmentMessage, payloadBuilder); } _logger.LogError("MarvelBuilder: Metatags are null for {SearchTerm}. SessionId: {SessionId}.", searchTerm, sessionId); } else { _logger.LogError("MarvelBuilder: There are no items for {SearchTerm}. SessionId: {SessionId}.", searchTerm, sessionId); } } catch (Exception ex) { _logger.LogError(ex, "MarvelBuilder: Error during search request for {SearchTerm}. SessionId: {SessionId}.", searchTerm, sessionId); } _logger.LogDebug("MarvelBuilder: Default PayloadBuilder: {@PayloadBuilder}. SessionId: {SessionId}.", payloadBuilder, sessionId); return(fulfillmentText, fulfillmentMessage, payloadBuilder);