船舶越快,风险越来越少。获得优化的推出,为开发人员提供免费功能标志。 建立免费账户

优化开发人员

使用node.js和优化构建和测试Messenger Bot



我们来谈谈聊天吧。我与聊天互动的互动,就像数百万其他人一样 Smarterchild. 在AOL Instant Messenger,在2000年代初。 Smarterchild提前一睹了自动机器人可以向现实世界互动提供的潜力。然而,就个人而言,它觉得在互联网技术的存在危机时代中期的新颖性。

快进至今,我们可以看到,智能手机的扩散,具有开放API的通讯平台(Twilio,Messenger,Slack,WhatsApp等)以及人工智能的进步已经从互联网新奇到企业必需品毕业了聊天。

随着更多地区的潜力达到更多的客户,聊天波特提供了极大地改善客户与企业互动的潜力。 研究 从2016年发现,用户每个月都花费了85%的时间,只需5个移动应用程序。最近的Facebook 宣布 它的信使平台超过了每月有13亿用户的用户,展示稳定的用户增长并显示出巨大的覆盖范围。尽管有机会,但创造了成功的Chatbot,最易于深入了解最佳聊天体验。

作为公司等公司 klm., eBay., 和 TD Ameritrade. 将他们的数字体验与Messenger这样的平台来说,了解工作是至关重要的,在您的开发周期中,用户将如何与您的机器人互动。

进入 优化完整的堆栈。优化的完整堆栈SDK允许产品开发团队在所有渠道上进行实验和推出功能,包括聊天栏。为了更好地理解,公司如何真正实验到处都是,我的同事Martijn Beijk和我合作地建立了我们自己的Facebook Messenger Bot并优化。

建立我们的Messenger Bot

对于我们的机器人,我们模拟了一个推荐功能,类似于 eBay.的Messenger Bot。对于我们的实验,我们想知道是否会推荐一个产品或多个产品。

我们在NodeJS和Express中构建了机器人,部分原因是节点的并发性适用于处理大量请求的应用程序以及易于设置。或者,我们可以使用诸如Python +烧瓶或Ruby + Sinatra等另一种语言/框架来轻松完成相同的功能。

首先,我们创建了一个优化的完整堆栈项目,并实现了 优化节点SDK. 进入我们的节点快递应用程序。

 

接下来,我们在我们的应用程序中配置了优化的SDK,以使用帮助函数来抓取优化 数据文件 并初始化优化客户端:

const 选择 = 要求('Optimizely-Server-SDK'),
DefaulTerrorHandler. = 要求('Optimizely-server-sdk / lib / plugins / error_handler'),
defaultlogger. = 要求('Optimizely-Server-SDK / lib / plugins / logger'),
rp. = 要求('request-promise');
模块.出口.initializeClient. = (URL.) => {
选项 = {Uri.: URL., 杰森: 真的};
//从CDN抓住数据文件
initializepromise. = 新的 承诺((解决, 拒绝)=>{
rp.(选项).然后((数据文件) => {
安慰.日志('使用Datafile初始化优化客户端:', 数据文件);
opollyclient. = 选择.createInstance.({
数据文件: 数据文件,
ErrorHandler.: DefaulTerrorHandler.,
记录器: defaultlogger..createLogger.()
});
解决(opollyclient.);
});
});
返回 initializepromise.;
};

对于生产用例,您还可以通过优化的方式获取数据文件 休息API. 并杠杆 优化的Webhooks. 将SDK与您在Optimizely接口中的更改保持同步。

在我们的Chatbot应用程序中实例化

使用帮助程序函数初始化优化设置,然后在我们的服务器启动时,我们可以轻松地实例化优化的完整堆栈客户端,以便我们可以开始使用SDK运行实验。

optly_url. = `//cdn.wqfugm.icu/json/$ {过程.env..project_id.}.JSON`,
优化Clientob.;
优化.initializeClient.(optly_url.).然后((客户)=>{
安慰.日志('惯性承诺决心');
优化的话 = 客户;
});

完成后,我们建立了终点,以接受来自Facebook的传入事件–例如,当用户将我们的机器人发送消息或从Messenger中获取动作时。

//邮寄端点从Facebook接收请求
应用程序.邮政('/webhook/', (, res.) => {
Messaging_Events. = .身体.入口[0].消息传递
为了 (i = 0; i < Messaging_Events..长度; i++) {
事件 = .身体.入口[0].消息传递[i];
//检查事件是否是消息
如果 (事件.信息 && 事件.信息.文本) {
文本 = 事件.信息.文本
安慰.日志('her\ s 什么 用户 , 文本);
继续
}
// Check to see if the event was a postback for a Facebook event – //developers.facebook.com/docs/messenger-platform/reference/webhook-events/messaging_postbacks/
安慰.日志('嘿 曾是 a 回拨!)
继续
}
}
res..sendstatus.(204);
});

Facebook帮助函数

我们还创建了一些辅助函数来处理将消息发送回Facebook和用户。

//发送Messenger模板消息
功能 sendgenericmessage.(发件人, 数据) {
Messageata. = 数据;
要求({
URL.: '//graph.facebook.com/v2.6/me/messages',
QS.: {Access_Token.:令牌},
方法: 'POST',
杰森: {
接受者: {ID:发件人},
信息: Messageata.,
}
}, 功能(错误, 回复, 身体) {
如果 (错误) {
安慰.日志('错误发送消息:', 错误)
} 别的 如果 (回复.身体.错误) {
安慰.日志('Error: ', 回复.身体.错误)
}
})
}

优化创建实验

现在我们已经完成了我们的机器人,我们可以建立我们的实验。对于这种简单的用例,我们只需要两个变体来测试单一产品与多个产品推荐。我们还希望为此实验定义我们的指标。在这种情况下,我们简单地跟踪了用户单击购买项目以及生成的相关收入。但是,由于用户还可以单击BOT链接到我们的网站。  

如果我们想,我们还可以跟踪在Messenger之外发生的事件,例如新帐户创作,产品或网站上的产品或您的移动应用程序购买。我们可以使用完整的堆栈轻松完成此操作 JavaScript SDK.跟踪这些事件。我们想要做的关键是共享相同的 数据文件 在我们的NodeJS服务器代码和JavaScript客户端代码之间,以便我们可以同步。

在节点中实施实验

最后,我们建立了我们想要测试的新功能。在这里,我们添加了一个检查用户是否要求使用硬编码产品数据建议产品的建议书以及如何推荐产品的逻辑。

如果 (事件.信息 && 事件.信息.文本) {
文本 = 事件.信息.文本
如果 (文本.到loftcase.().包括('recommend')) {
//生成随机用户ID
var. 用户身份 = uuid.();
//从样本产品/响应中创建一个产品数组
var. 类别 = 目的.钥匙(rec.产品);
var. 随机的number. = 数学.地面(数学.随机的() * 类别.长度);
//选择随机类别以响应
var. 类别 = 类别[随机的number.];
//使用第9行定义的全局激活函数
var. 优化的争夺 = 优化的话.启用('product_recs', 用户身份);
//获取来自样本响应JSON的样本响应响应+变异
var. Respolatedata. = rec.产品[类别][优化的争夺];
var. 产品 = Respolatedata..依恋.有效载荷.元素;
//将生成的用户标识添加到用于跟踪的产品,如果用户点击购买
优化的争夺 ===. "single_project" ? 助手.adduserid.(用户身份, 产品) : 助手.adduseridsingleprod.(用户身份, 产品);
//发送Chatbot响应
sendgenericmessage.(发件人, Respolatedata.);
继续
}
如果 (事件.回拨) {
//用户点击时触发"Buy Now"
var. 有效载荷Response. = 杰森.解析(事件.回拨.有效载荷);
//从有效载荷抓取userid
var. 用户身份 = 有效载荷Response..用户;
//构建收据
var. 收据 = 助手.buildreceipt.(有效载荷Response.);
//跟踪事件以优化
opollyclient..追踪('purchased', 用户身份, {}, {收入:收据.依恋.有效载荷.概括.总成本 * 100});
//发送收据
sendgenericmessage.(发件人, 收据);
继续
}

我们设置了一个规则来解析Facebook的传入请求,以检测“推荐”单词。如果有人向寻找建议的邮件发送了邮件,我们将激活他们的实验,并返回一个产品或三种不同的产品。

Messenger Bot行动!

 

就像我们创造了两种不同的变体,了解我们的Chatbot如何应对建议,并且能够跟踪每种变体的有效性和转换。

这只是一个简化的例子,即如何实现完整的堆栈,并应用于在实验过程中聊天时的新频道。产品团队建筑聊天也可以使用完整的堆栈来提高客户体验,以更高级的对话算法,更好的消息时机发送,甚至允许实时代理从机器人控制。用完整堆栈的Chatbots试验开辟了团队的可能性,以建立更好的经历并推动更多的客户忠诚度。

想在行动中看到我们的演示吗?去 //m.me/atticandbutton/ 并通过Messenger询问推荐!

附加链接:

 

andreas bloomquist.

关于Andreas Bloomquist:

Andreas一直在优化两年多。他建立了演示应用程序,以帮助客户更好地了解如何充分利用优化。

优化X.