听听个性化播客和音频新闻定时到您的优步骑行

0.
听听个性化播客和音频新闻定时到您的优步骑行

斯坦利元



OTTO无线电通过策划个性化的音频故事播放列表来改变您收听无线电话的方式。您可以通过推动按钮,获取您自己的首页新闻,并发现您将喜欢的播客 - 所有这些都是如此。现在它比以往任何时候都更容易,因为优步骑手在他们上方与我们的优步之旅经历API集成时保持最新。

为了激活旅行体验,只需连接两个应用程序,下次请求使用优步骑行,新闻故事和播客的播放列表将在您的旅行中完全定时在您的奥托收音机中等待您。没有更浪费的通勤和令人沮丧的交通拥堵。没有更多地搜索随机上读取的东西。Otto Radio转变您在进入学习的机会上花费的时间,被娱乐,并留在最关心的事情。

Otto Radio是一个令人尖锐的例子,可以利用Uber旅行体验API来通过给用户个性化播客和新闻来区分他们的产品。

-克里斯·萨德,产品负责人,Uber开发人员平台

Otto Radio如何了解您喜欢的内容?

奥托无线电工艺通过分析大量数据 - 无论是否通过您的兴趣选择明确表达,无论是如何通过您的兴趣选择,或通过将您的内容与您享受类似品味的内容匹配的内容,隐含地通过您的兴趣选择来实现真正的数据。它还认为您的旅行模式全天,因此可以准备适当的故事,以涵盖您的旅行时间。由于Otto Radio的发布,用户订婚一直非常强大,每个用户每天调整到Otto Radio,平均每天40分钟。

将奥托电台经验带到优步

整合始于天然产品故事 - 利用OTTO收音机的内容策策能力来丰富在优步游乐设施中花费的数十亿分钟。奥托收音机的价值主张提供个性化音频新闻和播客随着Uber旅行体验API提供的丰富上下文,如目的地,拾取位置,旅行时间和Uberpool状态,如果适用,进一步增强了按钮。通过关闭循环来向流式传输广播提供速度请求,优步的旅行体验API提高了Otto Radio的能力,以便在GO上的更多人提供富有成效,教育和娱乐音频。

实施细节

奥托利用了多个方面旅行体验API.但是,通过Webhooks促进了核心集成。任何时候有一个新的超级旅行,或旅行状态更改,奥托服务器会将HTTPS发布到Webhook。一旦此请求进入,我们使用“/请求/当前”端点获取有关当前状态的完整数据,并提醒客户端的更改。

[注意:在本文的末尾,使用Express.js Server有基本处理Uber Webhook调用的示例代码。]

那说,到目前为止,Webhook只能让我们。我们的Webhook如果UBER旅行状态发生变化(例如,来自没有旅行处理请求,或从司机到达在旅行中),但要真正聪明,奥托必须跟上整个优步骑行。意外的流量,绕道驾驶Uberpool乘客,或目的地的变化都会影响奥托经验,并通过单独收听Webhook来遗漏。要在单个状态的中间捕获更改,OTTO服务器会设置CRON作业,以便在用户处于活动之旅时每分钟轮询一次“/请求/当前”端点。这使我们能够相应地捕捉到ETA的任何更改,并相应地定制用户的体验。

一旦我们的服务器检测到值得注意的事件,将发送到包含相关数据的客户端的静默推送通知。OTTO客户端有两个角色为旅行体验 - 计算正确的eta,并向用户显示正确的信息。客户端是任务计算ETA,以便它可以与设备的时钟同步,以及减少服务器上的一些负担。要计算ETA,我们利用“/请求/当前”,“/估计/时间”和“/估计/价格”端点的组合,具体取决于当前的行程状态。例如,在处理阶段,我们使用“/请求/时间”端点来获取驾驶员到达时的ETA,但“请求/价格”端点以获得整个旅程的ETA。另一方面,虽然旅行正在进行中,我们可以直接从'/请求/当前'端点获得ETA。

这种融合的目标是将你的优步骑行的每一分钟骑入有娱乐活动和随时了解的机会,并且旅行经验的丰富性API可以实现这一目标。无论您是通勤的战士还是外国城市的游客,Otto Radio都可以在您的旅程带走您的旅程中拥有个性化的无线电体验。

下载奥托电台并将您的下一个优步放在“奥托”飞行员上。

// 从https://github.com/shernshiou/node -uber.var uber =要求('node-puber');
//内部util文件var uberutil =要求('./ uberutil.js');
module.exports = function(app) { // uber webhook app.post(‘/uber/statuschanged’, function(req, res) { if (!req.body.event_type || req.body.event_type !== ‘all_trips.status_changed’) {
//不是来自当前版本的API,Safe to Ignore Res.Status(200).send();返回;}
if(!req.body.meta ||!req.body.meta.user_id){//没有user_id res.status(200).send();返回;}
var uberid = req.body.meta.user_id;
//内部函数获取Uber用户的访问令牌//您需要自己构建此Aconemy veruerubertoken = uberutil.getubertoken(Uberid);
var uberclient = new优步({client_id:'',//在client_secret中填写它们:''',//使用server_token:''',//适当的值Access_Token:UseruberToken});
//获取完全旅行数据uberclient.requests.getCurrent(函数(错误,结果){if(错误){//返回500将重新发送到webhook resftres.status(500).send();返回;返回;}
//发送推送通知//您需要自己实现Uberutil.sendpush(结果);res.status(200).send();});});};

要将未来从Uber开发人员团队获取更新,跟随我们的出版物或者在推特上关注我们

注释