动态内容页使用页面编写器API

交互API非常通用,可以以许多不同的方式利用它来解决许多不同的用例。

您是否曾经希望内部网上的页面与外部系统生成的内容自动更新(同步)?好吧,你很幸运!我们将使用交互页面编写器API来创建一个类似cronjob的同步来发布动态数据到交互。这可以用来创建一个动态内容用例的数组——关于一些常见的用例,请参见下面的列表。

常用用例

  • 游戏排行榜
  • 进度更新
  • 员工认可
  • 自动分析和预测发布
  • KPI的
  • 图表、图表和指标
  • 销售进展
  • 项目消耗和循环更新
  • 来自外部系统的数据转储包装在HTML中

教程

我们将为你提供。net Framework/Core c# (Restsharp)中实现同步所需的样板代码。当然,这可以转换为能够将内容推送到REST API端点的任何语言或系统。

应用程序流

  1. 获取交互实例的API域。
  2. 使用基本身份验证流程进行身份验证。
  3. 创建HTML内容(手动或使用另一个进程动态创建)
  4. 将生成的内容推到Page Composer API

1.寻找API域

Interact提供了一个简单的端点来获取关于您的内部网实例的详细信息。我们可以通过访问找到您的API域https://your-intranet.interactgo.com/info此表格以JSON格式列出以下资料:

  • API域(必选)
  • 身份验证模式
  • 租户GUID(必选)
  • 的名字
  • 市场API路径

我们需要的信息以粗体突出显示,使用它我们现在可以开始身份验证。

// apiDomain = "https://us-lb-api-01.interactgo.com/api";string tenantGuid = "0000000 -0000-0000-0000-000000000000";

2.API认证

在使用任何交互API时,您需要对大多数API调用进行身份验证。您可以在我们的网站上了解更多关于API认证的信息API文档.我们需要使用/令牌令牌端点以接收我们的持名令牌。

Interact使用OAuth 2.0密码持有者认证机制获取access_token它允许您使用API端点执行操作。

一旦我们有了代币,我们就可以继续内容生成。

身份验证

password-bearer身份验证需要用户名和密码进行身份验证。这可能是诱人的使用个人帐户来做这件事,但它可能会中断连接,如果用户曾经被取消激活(例如。离开公司。)交互会建议建立一个专用用户帐号在交互中,它只用于API连接(类似于服务帐户.)

字符串令牌= "";//替换为/token响应中的token

3.动态内容生成

现在是最重要的部分,内容生成,它可以由应用程序、脚本、服务或任何能够创建HTML内容的东西动态生成。HTML内容是交互页面的核心,因此它是动态页面更新的关键组件。交互页面API目前只支持HTML。

在下面的例子中(参见第50行),我们创建一个简单的提醒栏(div),它写出当前的日期和时间。这可以被高度复杂的内容所取代,包括HTML、CSS和JavaScript的组合。我们已经成功地在这些上传中嵌入了完整的React.js应用程序。

上次同步:{日期时间。现在}< / div >

自定义小部件库展示我们的一些内部作品/实验即将到来-请随时伸出手来看看艺术的可能。

4.更新内容

一旦我们的内容已经生成,我们现在可以推动它的交互页面Composer API。我们会用到页面编写器PUT端点。

样板

结合以上所有步骤,我们最终得到:

使用系统;使用Newtonsoft.Json;使用RestSharp;namespace PageComposerSync{静态类程序{静态void Main() {// API字符串apiDomain = "https://us-lb-api-01.interactgo.com/api";string tenantGuid = "0000000 -0000-0000-0000-000000000000";字符串令牌= "";//替换为/token响应//同步的目标页面ID int pageId = 2000;//创建RestClient var RestClient = new RestClient(apiDomain);//创建页面更新请求var Request = new RestRequest($"/ Page /{pageId}/composer", Method.PUT);请求。AddHeader("X-Tenant", tenantGuid); request.AddHeader("Authorization", $"Bearer {token}"); request.AddHeader("Content-Type", "application/json"); // Add request content - Page Composer PUT Schema (https://developer.interact-intranet.com/reference#pageidcomposer-1) var requestContent = new PageUpdateRequest(); /// Transition requestContent.Transition = new Transition { State = "published", Message = DateTime.Now.ToString() }; /// Page details - Tip: Use the Page Composer GET Endpoint to find all required meta information requestContent.Page = new Page() { ContentType = "html", TopSectionIds = new List() { 3141 }, // Required AuthorId = 2, // Required PublishAsId = null, AssetId = 1999, // Required Title = "Sync Page", // Required Summary = $"Sync Page Summary", // Required Content = new Content() { Html =(电子邮件保护)"
上次同步:{日期时间。现在}< / div >" // Dynamic content here }, CategoryIds = new List() { 3145 }, // Required Features = new Features { DefaultToFullWidth = false, AllowComments = false, IsKeyPage = false, Recommends = new Recommends { MaxContentAge = null, Show = false } }, PubStartDate = DateTime.Today, // Required PubEndDate = DateTime.Today.AddDays(7), // Required ReviewDate = DateTime.Today.AddDays(7), // Required TagIds = new List() { }, Keywords = new List() { } }; // Convert our page to JSON payload request.AddJsonBody(requestContent); // Execute the request var response = restClient.Execute(request); // response.Content -> /* { "ContentId": 1234, "VersionId": 1235, "Acknowledged": true } */ } } public class Transition { public string State { get; set; } public string Message { get; set; } } public class Content { public string Html { get; set; } } public class Recommends { public bool Show { get; set; } public object MaxContentAge { get; set; } } public class Features { public bool DefaultToFullWidth { get; set; } public bool AllowComments { get; set; } public bool IsKeyPage { get; set; } public Recommends Recommends { get; set; } } public class Page { public string ContentType { get; set; } public List TopSectionIds { get; set; } public int AuthorId { get; set; } public object PublishAsId { get; set; } public int AssetId { get; set; } public string Title { get; set; } public string Summary { get; set; } public Content Content { get; set; } public List CategoryIds { get; set; } public Features Features { get; set; } public DateTime PubStartDate { get; set; } public DateTime PubEndDate { get; set; } public DateTime ReviewDate { get; set; } public List TagIds { get; set; } public List Keywords { get; set; } } public class PageUpdateRequest { public Transition Transition { get; set; } public Page Page { get; set; } } }

这是用.NET Core 3.1Restsharp 106.10.1而且Newtonsoft。JSON 12.0.3

样式和CSS

样式和CSS可以内联包含在样式标签中。

 

Hello World!这是我的动态内容

它可以作为内联样式包含。

<表> < tr风格= "粗细:大胆“> < th >行< / th > < th >名称< / th > < / tr > < /表>

推荐:或者可以包含在自定义CSS在交互中设置全局存储表示和样式层。类中引用全局声明的样式自定义CSS在HTML中。

如。

自定义CSS

.table {background-color:透明;利润:0.5 em;} .header-row {font-weight:粗体;颜色:darkgrey;}

HTML上传

<表类= "表" > < tr类=“标题行”> < th >行< / th > < th >名称< / th > < / tr > < /表>

自动化

您可以扩展样板以适应需求,并构建或使用cronjob在适合您的数据需求的计划上进行调度。您的页面将动态更新,并在内部网中可见。


Baidu