如何使用无头商务平台进行营销活动?
已发表: 2022-04-18什么是无头商务平台?
无头电子商务平台或基于 API 的平台 - 前端(或“头部”)已被解耦或完全移除,只留下后端的软件。
支撑这些平台的架构概念始于 CMS 世界。 通过分层,企业希望在更新和更新的营销渠道上更快地交付内容的道路上与障碍作斗争 - 智能手机扮演着首要角色。
使用传统的 CMS 软件,开发人员面临的低级问题:
- 设计受到遗留框架的限制,仅提供预定义的一组体验;
- 小的前端更改可能需要更改数据库和后端代码,增加测试时间,从而增加任务的总成本;
- 后端代码的更改可能会导致前端出现意外错误;
随着时间的推移积累并转化为业务的手刹:
- 很少或没有个性化空间;
- 关于为什么小的软件更改需要很长时间才能完成的困惑和相互误解;
- 新的营销渠道尚未开发或绕过来得太晚的低优先级软件。
因此,“API-first”、“API-based”或“headless CMS”蓬勃发展。 但这很快扩展到其他数字领域,包括电子商务和营销。
如果这是您第一次遇到无头平台,您可能会发现我的上一篇文章很有趣:了解基于 API 的平台。 此外,Paul 在他的 Headless eCommerce 简介中展示了一些使用基于 API 的工具构建的应用程序的真实示例。
无头平台——在 1 天内从一个想法到生产就绪的 POC
让我们检查一下我们是否真的可以如此快速地构建灵活的软件。 我们将重新制定当今顶级品牌使用的营销策略。 简而言之,它将:
- 地理定位客户。
- 为他们分配个性化的折扣券。
- 通过推送通知提供唯一的优惠券代码。

不难想象,像 Uber 这样的公司一定在这个软件上投入了十几个开发人员月甚至更多。
看似最简单的任务——分配一个随机折扣码——却充满了警告。 我学到了很多东西,因为我们的团队已经为此工作了 3 年。 不断增长的新极端案例的数量和管理开销甚至可能会烧掉看起来像一个简单系统的东西。
幸运的是,无头平台可以帮助我们。
我们将使用三个对开发人员友好的 SaaS 平台来创建一个可行的解决方案:
- 雷达 - 地理定位 API
- Voucherify - 促销管理 API
- Braze - 通知 API
让我们看看我们如何将它们融合在一起,通过无头方法提供真正个性化的促销活动,让您的客户惊叹不已。
注意:以下解决方案假设您在 Radar、Voucherify 和 Braze 上有一个活动帐户。 此外,所有这些都应使用您的客户数据库填充,包括可用于唯一标识一个人的字段。
使用雷达检测客户进入您所在位置的时刻 - 无头地理定位
雷达背后的概念很简单。 该平台使用 3 种上下文类型对应用程序进行地理定位:
- 地理围栏 - Radar 以比原生 iOS 或 Android 地理围栏更强大而自豪,跨平台支持无限地理围栏、多边形地理围栏和停止检测。 这是因为所有地理围栏和事件生成都发生在服务器端。
- 地点 - Radar 可以识别大量地点列表,因为它使用 Facebook 数据库。 最酷的事情是您可以使用内置类别(例如,主要机场)或连锁店(例如星巴克)。
- 洞察力——他们的定位引擎还可以学习如何估计用户进入/离开家和办公室。
当 Radar 检测到您的用户访问或离开该地点时,它可以让您使用 webhook 通知您的应用程序。
作为开发人员,您需要做的就是使用其中一种软件开发工具包(iOS、Android、Web)来验证、配置和微调跟踪选项——例如,如果您想在后台或前台进行跟踪。
让我们看看 Radar 无头平台的实际应用吧!
1. 设置您的帐户
转到radar.io并注册一个帐户,然后使用测试API密钥来初始化Radar小部件,如下所示:
{{代码}}
<script src="https://js.radar.io/v1.0.0/radar.min.js" 完整性="sha384-TFQktvQ2F2ST3MCcepqaOHqwc36jDy7r/gAj7dOvU6VXtJ4m4Dj2hByxZ59d4MjK" crossorigin="anonymous"></script>
<script type="text/javascript">
Radar.initialize("YOUR_KEY");
</script>{{ENDCODE}}
2.跟踪用户
最后一步是验证跟踪是否有效。 为此,我们将使用trackOnce方法,如果 Radar 检测到位置发生任何变化,则会调用该方法。
让我们运行代码,看看 Radar 提供了哪些信息(记得在浏览器中允许位置跟踪):
{{代码}}
Radar.trackOnce(function(status, location, user, events) { console.log({ status, location, user, events });});
{{ENDCODE}}
输出:
{{代码}}
事件:[] (0)
位置:坐标{纬度:50.25462479999998,经度:19.061743829999994,高度:null,精度:165,altitudeAccuracy:null,...}
状态:“成功”
用户:{userAgent:“Mozilla/5.0(Macintosh;Intel Mac OS X 10_14_4)Ap…(KHTML,如 Gecko)版本/12.1 Safari/605.1.15”,ip:“93.179.216.18”,locationAccuracy:165,deviceType: “网络”,停止:真的,……}
{{ENDCODE}}
好的 - 雷达找到了我们的藏身之处。 但是没有上下文,它不知道如何处理这些信息。 让我们研究一下雷达的情报。
我们将为您签到的地点命名 - 通常(在 Radar 中也是如此)此位置上下文称为地理围栏。 以下是如何执行此操作:
- 转到地理围栏创建者。
- 选择相应的来源类型,我将选择 Place 并输入我的公司作为查询。
- 结果,雷达查找地理坐标并建议地理围栏边界。

- 如果该位置适合您,请使用 CREATE 确认地理围栏。
现在,让我们刷新页面并观察控制台。 雷达现在向我们发送一些事件:
{{代码}}
{
"createdAt":"2019-04-16T16:08:49.645Z",
“活”:假,
"type":"user.entered_geofence",
“地点”:{
“坐标”:[
19.062212,
50.254927099999996
],
“类型”:“点”
},
“定位精度”:20,
“信心”:3,
"actualCreatedAt":"2019-04-16T16:08:49.645Z",
“用户”:{
"_id":"5cb5f2ba36581b002a3534ca",
"userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36",
“deviceId”:“a96ec0db-969c-4a77-996c-361a0530660a”
},
“地理围栏”:{
"_id":"5cb5f7d3a60e95002b009ebd",
“描述”:“相对”,
“类型”:“圆圈”,
“几何半径”:100,
“几何中心”:{
“类型”:“点”,
“坐标”:[
19.062346299999945,
50.25495069999999
]
}
},
“_id”:“5cb5fe117cd3430025b9ee0d”
}
{{ENDCODE}}
它似乎明白我们已经进入了我们新创建的地理围栏。 当我们坐在同一个地方时,后续的刷新不应该带来任何新的事件。 但是当我们改变位置时,雷达也会检测到它。
要对其进行测试,请拿起您的机器,走出地理围栏区域,然后再次登录,或者...您可以使用 Chrome 工具中的传感器。

通过选择任何足够远的地方来伪造您的位置并再次刷新页面。 现在雷达显示user.exited_geofence
您可以使用方便的雷达仪表板实时跟踪所有注册和未注册用户的地理定位事件:

通过无头消息通知外部应用程序
所以 Radar 的跟踪现在理解了我们的位置上下文。 但是为了在我们的场景中使用它,Radar 必须与外界共享它。 它在很多方面都是如此。 其中之一是使用 webhook。
Webhook是一个 API 概念,它为应用程序提供了一种向其他应用程序提供实时信息的方法。
根据帮助跨多个系统收集和交换客户数据的平台 Segment 的说法,webhook 的流行度正在快速增长。

典型的 webhook 实现使应用程序的用户能够:
- 通知外部系统(或多个系统)
- 使用 API 调用
- 特定事件发生的那一刻。
有了这样的机制,应用用户不需要频繁轮询数据来捕捉实时变化。
向外部 API 发送请求只是流程的一方面。 要完成 webhook 循环,接收客户端必须成功使用它。
在 HTTP 世界中,这通常意味着以 2** 状态响应。 如果没有,webhook 引擎将稍后重试(重试策略取决于定义的策略作者)。
在我们的例子中,当我们将位置更改到提供的端点时,Radar 会发送我们看到的事件负载。 让我们添加一个以查看运行中的 webhook。
- 转到集成。
- 选择测试环境和单一事件交付。
- 提供要通知的端点。 您在这里有几个选择。 你可以:
- 在您的机器上分拆一个简单的 Web 服务器并使用 ngrok 引导流量,
- 使用故障立即部署您的端点,
- 使用其中一个在线 webhook 捕获器,例如:webhook.site 或 requestbin
- 将您的唯一 URL 粘贴到表单并确认。

- 单击 ACTIONS 列中的 Test 以触发您的第一个事件。 如果设置正确,您应该会看到如下图所示的 webhook 有效负载:

到现在为止还挺好。 结果很有希望,是吗? 通过一些复制粘贴和一段 JavaScript 代码,我们已经涵盖了我们用例的地理定位部分。 在当前阶段,Radar 无法识别用户,只能使用存储在 cookie 中的设备 ID。 为了使它更健壮,让我们用电子邮件来识别用户。 使用 Radar 的 SDK,它是单行的:
{{代码}}
Radar.setUserId(“[email protected]”);
{{ENDCODE}}
您可以立即在仪表板中看到新 ID:

因此,现在我们需要解决个人折扣要求 - 唯一优惠券代码。
连接 Radar 和 Voucherify 无头促销引擎
与 Radar 类似,Voucherify 及其 API 为您提供了灵活的优惠券功能,而您从头开始所产生的成本只是您的一小部分。
我们很快就会了解到,它支持其他促销活动,例如折扣、推荐或忠诚度计划,这些活动可以通过任何当前的未来营销渠道提供。
要使用 Voucherify 个性化功能,您需要先导入用户数据并保持同步。
Voucherify 将客户数据存储在客户对象中,客户对象可以根据个人属性、位置和 Voucherify 交互历史进行分组。

假设您已经将测试客户导入 Voucherify,现在我们将了解如何在不使用代码的情况下将其位置与 Radar 同步。
Zapier——网络的粘合剂
想象一下,如果所有公开 webhook 的平台都列在一个目录中,并且具有统一的结构并能够像块一样连接它们 - 遇见 Zapier。
Zapier 连接了 1000 多个网络应用程序,并允许它们在后台协同工作。

每个 Zap 都以您的一个应用程序中的一个事件触发开始,该事件启动您的工作流程。 以下是 Zapier 文档中的一些示例:
- 通过将新的 RSS 项目作为帖子发送到 Facebook 来自动化您的社交媒体展示;
- 通过将新的 Trello 卡片复制到 Evernote 来保持项目井井有条;
- 通过将 Typeform 中的表单回复者添加到 MailChimp 的邮件列表中,与潜在客户保持联系;
- 通过通知 Slack 中的频道即将发生的 Google 日历活动,确保您的团队不会错过任何会议;
- …还有很多!
您现在可能会问:“Zapier 可以帮助我们吗?”。 是的,它可以! 让我们使用一些 Zaps 来更新 Voucherify 的地理位置更改。
- 单击制作 Zap 并选择 Webhooks。
- 使用此选项,Zapier 可以创建一个端点(类似于 webhook.site),我们可以使用它来使用来自 Radar 的 webhook。 为此,请选择 Catch Hook。
- 下一个视图将为您提供一个端点 URL,它将替换 Radar webhook 设置中的旧 URL。

- 将链接粘贴到 Radar 并再次启动测试。 如果 Radar 使用绿色闪烁条确认新端点,请转到 Zapier 中的下一步。
- 在下一个屏幕上,您应该注意到测试请求的有效负载

- 确认表格,Zap 的第一步 - 触发器 - 已准备就绪。
现在我们需要将消费的消息投入工作。 要完成 Zap,我们至少需要一个动作(您可以用一个 Zap 链接多个平台)。
- 从 Action explorer 中选择 Voucherify。 注意 Voucherify Zap 可以“通过邀请”获得,这里是获取它的链接。

- 选择更新客户选项并进入设置模板表单。
- 这是一个关键部分。 在此表单上,Zapier 允许您将输入映射到输出。 编辑器既强大又直观。 它有一个智能搜索字段,允许您通过键和值浏览传入的 JSON。 您还可以轻松地将两个或多个输入字段连接到一个输出字段中。
在我们的例子中,我们只想通过 source_id 识别客户,并根据事件更新自定义字段“rspectiveHQ”,因此映射如下所示:
凭证:源 ID - 雷达:用户 ID
凭证:元数据 -> rspectiveHQ - 雷达:事件类型

- 跳过测试并填写表格 - ZAP 已开启并等待!
我们配置了 Radar 的 webhook 并设置了 Voucherify Zap。 让我们测试一下整个管道是否正常工作。 转到我们的网络应用程序并尝试再次更改位置以通知雷达的探测器。
以下是应该遵循的内容:
- 雷达跟踪 2 个事件,用户外出和进入地理围栏。
- Zapier 相应地捕获了 2 个 webhook。
- Voucherify 跟踪客户资料更新。



Zapier 不止于此。 当您查看工作流配置的选项时,您会注意到允许您构建相当复杂的流程的齿轮。 条件、过滤器或延迟等辅助步骤将有助于处理和消化输入数据并相应地格式化输出。

如果您在其中一个步骤中需要更大的灵活性,您甚至可以编写自定义代码(在 JavaScript 和 Python 中)——我是否已经告诉过您可以链接一系列触发-动作对?
让 Zapier 快速入门文档有机会了解它是哪种节省时间的方法。
通过无头促销引擎为地理定位用户生成独特的优惠券
Voucherify 的基本功能之一是根据客户的个人资料实时个性化折扣。 这是可能的,因为动态细分可以监控客户属性和他们放入购物车的内容,并根据一些业务规则触发操作。
在我们的例子中,我们将构建一个段来检查我们的自定义字段 (rspectiveHQ),如果客户已进入地理围栏,该字段反过来会存储信息。 我们可以通过 Voucherify API 的单个端点来实现它,但最快的方法就是使用仪表板。
转到客户并打开细分创建者。 现在使用相应的元数据字段过滤掉客户,如下图所示:

确认过滤器,点击重新加载,您将看到与该细分市场匹配的所有客户。 您可以“要求”您的测试用户离开地理围栏并重新加载分段以查看集成是否按预期工作。


如果您所看到的反映了现实,请保存该片段。
下一步是使用有关位置的信息来调整折扣。
但在我们深入探讨之前,我希望您先停下来分析一下到目前为止我们在不编写单个后端代码的情况下取得了多少成就。 同时,我们还没有关闭我们的解决方案以进行更改,因为 Radar 和 Voucherify 都公开了丰富的 API 和无头架构,您可以在需要时随时插入。
最后一步是设置一个分发,它将:
- 发送唯一的优惠券代码
- 给检测到的客户
- 使用预定义的频道
首先,让我们为每个用户生成一个唯一的促销代码。 让它成为 10% 的折扣。 转到活动创建者,选择批量代码选项并按照您将定义的步骤操作:
- 折扣的类型和金额,
- 大体时间,
- 代码模式,包括长度、前缀、后缀和字符集,
- 初始代码数量,
- 和其他细节。
创建者的第四阶段——验证规则——特别有趣。 在这里,您可以定义谁以及在什么条件下可以兑换代码。 请记住,我们只想将兑换仅限于访问过我们地理围栏的客户。 我们将使用我们的细分来完成这一步。

该工具为您提供了更多过滤选项。 如果您碰巧从事客户获取或保留活动,您可能需要查看验证规则参考,因为它可以为您节省大量代码行。
当 Voucherify 完成批量生成时,您应该会看到它们被列出:

我们有细分和促销代码,现在让我们将其插入我们的营销外呼渠道!
您可以使用 Voucherify API 和 webhook 来实现它,但有一种更快的方法 - 满足发行版。
此功能允许您检测进入(或离开)细分市场的新客户,为他们分配唯一的优惠券代码,并通过电子邮件、短信、推送通知、实时聊天或社交媒体广告将其发送出去。 此外,可视化编辑器可帮助您创建个性化的促销文案。

每个频道都有自己特定的消息模板,让我们看看它如何查找推送通知。 但要继续,我们需要注册一个 Braze 帐户并使用 API 密钥将其与 Voucherify 连接。
使用 Braze 通过推送通知发送促销代码
Braze(前身为 AppBoy)是移动营销工具的领导者之一。 我们将只使用他们的一小部分功能,因此我建议查看他们的文档以找到我们关于他们的报价的更多信息。
我们场景的配置需要 3 个步骤:
- 创建推送通知活动;
- 将优惠券代码从 Voucherify 发送到 Braze;
- 在我们的应用程序中配置网络推送通知。
推送通知活动
与 Voucherify 类似,Braze 可以根据客户属性的实时变化触发一些操作。 在这种特殊情况下,我们在 Voucherify 中创建的分发将设置一个自定义字段,其中填充来自批量代码活动的唯一代码。
我们将定义 Braze 活动以检测此更改并向客户登录的应用程序实例触发推送通知。
- 打开管理应用组以定义应用上下文。
- 选择一个 Web 应用程序以获取 API 公钥。

- 现在您可以转到活动并创建一个新的推送通知活动。
- 撰写包含优惠券代码 {{custom_attribute.${coupon}}} 的消息,选择测试选项卡并使用将测试发送给我自己。 如果您允许网络通知,您应该会注意到一条消息在右上角滑动。

- 测试消息上的优惠券代码将为空,因为我们尚未将此自定义属性添加到任何用户。 让我们保存活动的草稿并使用代码手动创建一个测试用户。
沿线创建一个简单的 CSV 文件:
{{代码}}
external_id,优惠券
[email protected], xyz
{{ENDCODE}}
并去用户导入上传它。

- 现在我们已经检查了测试数据和“覆盖收件人属性...”选项,我们可以看到变量被替换。
- 在交付选项卡中,将交付类型更改为基于操作的类型,然后选择更改自定义属性值触发器,如下图所示:

- 在下一步中将“所有用户”注册到活动中,其他设置保持不变。 准备好后,点击右下角的 Launch Campaign。
为 Braze 提供优惠券代码
那是我们应该将 Voucherify 插入 Braze 的时刻。 幸运的是,Voucherify 通过原生集成支持 Braze。 连接这两个营销平台剩下的唯一事情就是去集成,选择 Braze,并提供 API 端点和密钥。

现在您可以重新打开我们的发行版草稿并完成最后一步。 提供 Voucherify 分配唯一代码及其值的自定义字段的名称:

并将其设置为实时。 从现在开始,每次 Radar 检测到地理围栏事件并因此更新客户群时,Voucherify 都会为该客户分配优惠券代码并将其发布在 Braze 的用户配置文件中。
Braze 活动将检测到新的字段更改并尝试发送网络通知。
接收推送通知
我们快要到了! 完成促销链的最后一步是让推送通知流入我们的应用程序。
像往常一样,在无头平台的情况下,不需要手动实现它。 Braze 作为真正的开发者优先平台,为 Web 提供开源 SDK。
要启动并运行它,您需要粘贴一个简短的片段并用公共 API 密钥填充它。
{{代码}}
<script type="text/javascript">
常量 test_user = {
first_name : "迈克",
姓氏:“Sedzielewski”,
电子邮件:“[email protected]”
}
+function(a,p,P,b,y){appboy={};appboyQueue=[];for(var
s="初始化销毁getDeviceId toggleAppboyLogging setLogger
openSession changeUser requestImmediateDataFlush requestFeedRefresh
subscribeToFeedUpdates requestContentCardsRefresh
subscribeToContentCardsUpdates logCardImpressions logCardClick
logCardDismissal logFeedDisplayed logContentCardsDisplayed
logInAppMessageImpression logInAppMessageClick
logInAppMessageButtonClick logInAppMessageHtmlClick
subscribeToNewInAppMessages removeSubscription
removeAllSubscriptions logCustomEvent logPurchase isPushSupported
isPushBlocked isPushGranted isPushPermissionGranted
registerAppboyPushMessages unregisterAppboyPushMessages
submitFeedback trackLocation stopWebTracking resumeWebTracking
擦除数据 ab ab.DeviceProperties ab.User ab.User.Genders
ab.User.NotificationSubscriptionTypes ab.User.prototype.getUserId
ab.User.prototype.setFirstName ab.User.prototype.setLastName
ab.User.prototype.setEmail ab.User.prototype.setGender
ab.User.prototype.setDateOfBirth ab.User.prototype.setCountry
ab.User.prototype.setHomeCity ab.User.prototype.setLanguage
ab.User.prototype.setEmailNotificationSubscriptionType
ab.User.prototype.setPushNotificationSubscriptionType
ab.User.prototype.setPhoneNumber ab.User.prototype.setAvatarImageUrl
ab.User.prototype.setLastKnownLocation
ab.User.prototype.setUserAttribute
ab.User.prototype.setCustomUserAttribute
ab.User.prototype.addToCustomAttributeArray
ab.User.prototype.removeFromCustomAttributeArray
ab.User.prototype.incrementCustomUserAttribute
ab.User.prototype.addAlias
ab.User.prototype.setCustomLocationAttribute
ab.InAppMessage ab.InAppMessage.SlideFrom ab.InAppMessage.ClickAction
ab.InAppMessage.DismissType ab.InAppMessage.OpenTarget
ab.InAppMessage.ImageStyle ab.InAppMessage.TextAlignment
ab.InAppMessage.Orientation ab.InAppMessage.CropType
ab.InAppMessage.prototype.subscribeToClickedEvent
ab.InAppMessage.prototype.subscribeToDismissedEvent
ab.InAppMessage.prototype.removeSubscription
ab.InAppMessage.prototype.removeAllSubscriptions
ab.InAppMessage.Button
ab.InAppMessage.Button.prototype.subscribeToClickedEvent
ab.InAppMessage.Button.prototype.removeSubscription
ab.InAppMessage.Button.prototype.removeAllSubscriptions
ab.SlideUpMessage ab.ModalMessage ab.FullScreenMessage
ab.HtmlMessage ab.ControlMessage ab.Feed
ab.Feed.prototype.getUnreadCardCount ab.ContentCards
ab.ContentCards.prototype.getUnviewedCardCount ab.Card
ab.ClassicCard ab.CaptionedImage ab.Banner ab.ControlCard
ab.WindowUtils 显示 display.automaticallyShowNewInAppMessages
display.showInAppMessage display.showFeed display.destroyFeed
display.toggleFeed display.showContentCards display.hideContentCards
display.toggleContentCards sharedLib".split("
"),i=0;i<s.length;i++){for(var
m=s[i],k=appboy,l=m.split("."),j=0;j<l.length-1;j++)k=k[l[j]];k[l[ j]
]=(new Function("返回函数
"+m.replace(/\./g,"_")+"(){appboyQueue.push(arguments); 返回
true}"))()}appboy.getUser=function(){return new
appboy.ab.User};appboy.getCachedFeed=function(){return new
appboy.ab.Feed};appboy.getCachedContentCards=function(){return new
appboy.ab.ContentCards};(y=p.createElement(P)).type='text/javascript
';y.src='https://js.appboycdn.com/web-sdk/2.3/appboy.min.js';y.async
=1;(b=p.getElementsByTagName(P)[0]).parentNode.insertBefore(y,b)}(wi
窗口,文档,'脚本');
appboy.initialize('YOUR_KEY', {baseUrl:
"https://sdk.iad-03.braze.com/api/v3"});
appboy.toggleAppboyLogging();
appboy.registerAppboyPushMessages()
appboy.changeUser("[email protected]");
appboy.display.automaticallyShowNewInAppMessages();
appboy.openSession();
</脚本>
{{ENDCODE}}
并注册一个 service-worker.js:
{{代码}}
self.importScripts('https://js.appboycdn.com/web-sdk/2.3/service-worker.js');
{{ENDCODE}}
到位后,在“添加个人用户”输入中使用“text@example”用户运行另一个测试。 您的应用应该会收到带有“xyz”促销代码的通知。
现在,让我们测试一下,当您更改优惠券字段时,活动是否会触发推送消息。
首先,确保您的广告系列处于活动状态并且网络应用程序已启动。 其次,下载 Braze Postman 合集,打开 User Data 目录,选择 User Track - Attributes Example。 (如果你不了解 Postman,你可以在这里赶上)
将端点 URL 更改为您分配给的那个,在我的例子中是:https://rest.iad-03.braze.com/
请求有效载荷:
{{代码}}{
"api_key":"YOUR_KEY",
“属性”:[
{
"external_id":"[email protected]",
“优惠券”:“123”
}
]
} {{ENDCODE}}
发送请求并期待另一条带有更新优惠券代码的消息。
测试所有无头构建块
为确保工作流程符合我们的要求,只需打开您的应用程序并使用传感器“定位”到不同的地方,然后返回地理围栏。 几秒钟后,您应该会在屏幕上看到个性化通知!
现在,用户可以获取他们的代码并将其放入由 Voucherify 在后端验证的优惠券框中。
让我们在这里总结一下无头平台的胜利:
- 在一个小时左右的时间里,我们为一个相当复杂的业务场景提供了一个可行的解决方案。
- 代码库超级简短——这意味着更少的维护开销。
- 尽管我们对解决方案没有 100% 的控制权,但由于 API 访问,它仍然可以定制。
- 缺乏完全所有权与供应商团队的支持和更好的工具质量相平衡。
- 使用像 Zapier 这样的 webhook 和工具,您可以立即连接和交织各个部门和系统。
使用多个 SaaS 供应商时需要注意的一件事是后备。 有时平台已关闭,您需要指示您的系统如何做出反应——例如,如何存储和排队操作。 然而,对开发人员友好的平台公开了可用于监控其 API 可用性并及时做出反应的接口。
另一方面,对于 POC 阶段的应用程序来说,超级健壮的回退毕竟不是必需的。
无头方法如何帮助我?
简而言之,通过学习如何利用无头平台以降低成本快速构建有价值的东西,您将在就业市场上变得更有价值。
当今的竞争优势不是编程语言或框架。 这通常是完全不同的——这就是企业如何使用可用的工具以尽可能少的代码来解决他们的问题。 换句话说,这些东西比掌握一个或多个给定的技术堆栈更重要:
- 知道如何缩短上市时间;
- 降低维护成本技术概述;
- 能够减少对单个技术的依赖;
- 支持上述三项的当前技术概述。
去哪里寻找更多的无头商务平台?
一个很好的起点可以是这个列表:
促销活动
- 凭单
- 礼品比特
- 沃沙尔
目录和库存
- 雷康比
- 频道
- 结晶
大车
- 截图车
- 狡猾的
支付
- 条纹
- 到期的
- 正方形
消息传递
- 层
- 推杆
- 酒吧
预订和活动
- 时间套件
- 入口
船运
- 七宝
- 船云
- 高球
一般的
- 松紧带
- 截图车
- 莫尔廷
- 订单云
- 商务工具
但是,如果您想超越无头电子商务,我建议您访问 https://www.programmableweb.com 并深入研究。开始研究的另一种方法是浏览 Zapier 集成。
还有一个是去 Postman API 网络。
资源:
故障演示源代码
