diff --git a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/JiboInteractionService.NewsFormatting.cs b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/JiboInteractionService.NewsFormatting.cs index 2203f22..4dcc2c6 100644 --- a/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/JiboInteractionService.NewsFormatting.cs +++ b/OpenJibo/src/Jibo.Cloud/dotnet/src/Jibo.Cloud.Application/Services/JiboInteractionService.NewsFormatting.cs @@ -14,7 +14,8 @@ public sealed partial class JiboInteractionService string? sourceName, IReadOnlyList? categories, int? headlineCount, - IReadOnlyDictionary? providerDiagnostics = null) + IReadOnlyDictionary? providerDiagnostics = null, + IReadOnlyList? headlines = null) { var speakableBriefing = NormalizeNewsSpeechText(spokenBriefing); var payload = new Dictionary(StringComparer.OrdinalIgnoreCase) @@ -25,6 +26,9 @@ public sealed partial class JiboInteractionService ["mim_type"] = "announcement", ["prompt_id"] = "NewsHeadline_AN_01", ["prompt_sub_category"] = "AN", + ["news_view_enabled"] = true, + ["news_view_kind"] = "newsBriefing", + ["news_view_mode"] = "provider", ["esml"] = $"{EscapeForEsml(speakableBriefing)}" }; @@ -35,6 +39,18 @@ public sealed partial class JiboInteractionService if (categories is { Count: > 0 }) payload["news_categories"] = categories.ToArray(); + if (headlines is { Count: > 0 }) + payload["news_headlines"] = headlines.Select(static headline => new Dictionary( + StringComparer.OrdinalIgnoreCase) + { + ["title"] = headline.Title, + ["summary"] = headline.Summary, + ["category"] = headline.Category, + ["sourceName"] = headline.SourceName, + ["url"] = headline.Url + }) + .ToArray(); + if (providerDiagnostics is not null) foreach (var (key, value) in providerDiagnostics) payload[key] = value; @@ -77,7 +93,8 @@ public sealed partial class JiboInteractionService "provider_success", preferredCategories, requestedHeadlineCount, - headlines.Length)); + headlines.Length), + headlines); } private static IReadOnlyDictionary BuildNewsProviderDiagnostics( diff --git a/OpenJibo/tests/Jibo.Cloud.Tests/WebSockets/JiboInteractionServiceTests.cs b/OpenJibo/tests/Jibo.Cloud.Tests/WebSockets/JiboInteractionServiceTests.cs index 57a0257..b0532ec 100644 --- a/OpenJibo/tests/Jibo.Cloud.Tests/WebSockets/JiboInteractionServiceTests.cs +++ b/OpenJibo/tests/Jibo.Cloud.Tests/WebSockets/JiboInteractionServiceTests.cs @@ -4192,6 +4192,8 @@ public sealed class JiboInteractionServiceTests Assert.Equal("provider_success", decision.SkillPayload["news_provider_status"]); Assert.Equal(3, decision.SkillPayload["news_provider_requested_headlines"]); Assert.Equal(2, decision.SkillPayload["news_provider_resolved_headlines"]); + Assert.NotNull(decision.SkillPayload["news_headlines"]); + Assert.IsType[]>(decision.SkillPayload["news_headlines"]); Assert.Contains("Local robotics team unveils weather-ready helper", decision.ReplyText, StringComparison.OrdinalIgnoreCase); Assert.NotNull(provider.LastRequest);