你想在用户的首选渠道上自动发现并与他们沟通吗?在这篇文章中,学习如何使用Sendgrid、可编程短信、可编程语音、细分功能和细分角色来衡量和个性化你的用户首选渠道。
为什么你想测量和定制你的用户的首选通信渠道?
在这篇博文中,你将学习如何向Segment发送事件,包括某人是否打开了Sendgrid的电子邮件,是否接听了Twilio发送的电话,或者是否回复了Twilio发送的短信等数据。
通过使用Segment函数在Segment中捕获这些事件,将计算出一个计算特征,以显示某人参与最多的渠道,并将其作为该用户的首选渠道。在未来发送通知时,应用程序将检查用户的首选渠道,以选择他们应该如何接收通知--文本、电子邮件或电话。如果首选渠道还不存在,通知将以随机计算的渠道发送,直到有足够的参与度来确定它是用户的首选渠道。
简而言之,这篇文章将告诉你如何根据客户过去的参与度,在客户的首选渠道上进行个性化的通知。
在你的客户的首选渠道上建立个性化的信息传递
一旦你设置好了一切,并创建了你的账户,我们就可以开始建立了。让我们走过你需要的所有步骤。
解决方案概述

设置你的Node服务器
首先,让我们来设置Node服务器。
使用终端创建一个新的目录,导航到你想要的项目的地方,并使用命令mkdir channel-optimization 。然后导航到根目录,使用命令touch index.js .env 创建两个文件。使用命令npm init 启动你的Node应用程序。最后,使用该命令安装以下库。npm install --save express twilio @sendgrid/mail analytics-node dotenv.
在你喜欢的代码编辑器中打开你的channel-optimization 文件夹。打开index.js ,复制并粘贴Github上的这段代码。
上面的代码使用Segment Profile API检查是否有一个用户的 "首选频道 "设置。如果有一个频道设置,那么通知就会在该频道上发送。如果没有,它将在短信、语音电话或电子邮件之间随机选择一个用户应该收到通知的渠道。此外,该代码将使用Twilio和Sendgrid的API,以电子邮件、短信或电话的形式发送通知。
接下来,打开你的.env 文件,复制并粘贴以下内容:
PORT=3000
TWILIO_ACCOUNT_SID=
TWILIO_AUTH_TOKEN=
SENDGRID_API_KEY=
SEGMENT_KEY=
PHONE_NUMBER=
EMAIL=
SGEMAIL=
SEGMENT_CALL_SOURCE_FUNCTION_URL=
SEGMENT_PERSONAS_SPACE_ID=
SEGMENT_PROFILE_API_TOKEN=
从Twilio控制台检索你的Twilio账户SID和Auth Token,并将它们作为值添加到TWILIO_ACCOUNT_SID 和TWILIO_AUTH_TOKEN 变量中。对Sendgrid和Segment做同样的事情,将你的Sendgrid API密钥添加到SENDGRID_API_KEY 变量中,将你的Segment密钥添加到SEGMENT_KEY 变量中。要检索你的Segment写入密钥,在Segment中创建一个 "Node.js "源,给它起个名字,比如 "通道优化",一旦通道被创建,Segment会向你显示写入密钥。更多细节请参见Segment的文档。对于PHONE_NUMBER 和EMAIL 变量,把电话号码和电子邮件地址放在你想接收本演示的Twilio通知的地方。
我们建议使用你的个人电子邮件地址和电话号码来查看它的运行情况。
接下来,将Sendgrid发送者的电子邮件地址添加到SGEMAIL ;这可以是你的个人电子邮件,或者如果你设置了域名认证,它可以是你的任何域名地址。
接下来,导航到你的Segment仪表板,进入 "角色",点击 "设置",最后进入 "API访问"。点击 "生成令牌",给它一个名字,如 "渠道优化应用程序"。
复制令牌,并将其粘贴在你的.env 文件中,用于SEGMENT_PROFILE_API_TOKEN 变量。回到你的Segment仪表盘的 "API访问 "下的 "角色",复制空间ID并粘贴到你的.env 文件中的SEGMENT_PERSONAS_SPACE_ID 变量。请看下面的截图,在那里可以找到你的Segment空间ID:

将SEGMENT_CALL_SOURCE_FUNCTION_URL 变量留空,我们将在设置好Segment工作空间后再来讨论。
设置你的Segment工作空间
如果你的账户尚未启用Segment功能和Personas高级版,你需要与销售成员交谈以获得访问权。
在接下来的部分,你将设置你的Segment工作空间。首先,我们将设置三个Segment函数来处理从Twilio传来的参与事件,比如 "回复短信 "和 "打开邮件"。
导航到 "连接>来源",然后点击 "创建新来源"。然后点击页面顶部的 "功能",然后点击 "+新功能",确保 "源 "是所选的功能类型。接下来,删除函数中的模板代码,添加以下代码来处理SMS事件:
/**
* Handle incoming HTTP request
*
* @param {FunctionRequest} request
* @param {FunctionSettings} settings
*/
async function onRequest(request, settings) {
// Get request body
let body = request.json();
// Confirm that the message was received successfully
if (body.SmsStatus != 'received') {
return;
}
// Grab user's phone number from the Twilio webhook
let from = body.From;
// Create Segment event payload
let event_payload = {
event: 'Notification Engaged',
anonymousId: from,
properties: { phone: from, channel: 'SMS' }
};
// Send Segment event
Segment.track(event_payload);
}
点击进入 "配置",给你的源命名为 "Twilio SMS"。
一旦你的函数被保存,在目录中点击它并选择'+连接源'。在你的功能被连接后,你会收到一个以"https://fn.segmentapis.com/?b="开头的webhook URL。在记事本中保存完整的URL,记住这是为你的SMS事件处理程序准备的;我们以后会用它来在Twilio控制台设置我们的Webhooks。
再重复相同的源函数设置两次,一次用于处理电子邮件事件,一次用于处理语音事件。对于你的邮件源功能,使用这段代码:
/**
* Handle incoming HTTP request
*
* @param {FunctionRequest} request
* @param {FunctionSettings} settings
*/
async function onRequest(request, settings) {
// Grab the request body
let body = request.json()[0];
// Confirm that this is an 'email open' event
if (body.event != 'open') {
return;
}
// Grab user's email from the Twilio webhook
let email = body.email;
// Create Segment event payload
let event_payload = {
event: 'Notification Engaged',
anonymousId: email,
properties: { email: email, channel: 'EMAIL' }
};
// Send Segment event
Segment.track(event_payload);
}
对于你的语音源功能,使用这段代码:
/**
* Handle incoming HTTP request
*
* @param {FunctionRequest} request
* @param {FunctionSettings} settings
*/
async function onRequest(request, settings) {
// Get request body
let body = request.json();
// Confirm that this is a "call answered" event
if (body.CallStatus != 'in-progress') {
return;
}
// Grab user's phone number from the Twilio webhook
let called = body.Called;
// Create Segment event payload
let event_payload = {
event: 'Notification Engaged',
anonymousId: called,
properties: { phone: called, channel: 'CALL' }
};
// Send Segment event
Segment.track(event_payload);
}
为了这个演示的目的,电子邮件源功能被简化为只处理Sendgrid的电子邮件打开。然而,如果你想修改你的设置,以适应任何或所有Sendgrid webhook事件,如点击和取消订阅,请使用Segment Sendgrid Source Function。
记得将这些功能命名为 "Twilio Email "和 "Twilio Voice",这样你就可以在目录中把它们区分开来--而且别忘了保存设置后收到的URL。
关于Segment Source Functions如何工作的更多信息和额外的截图,请参考这个文档。我们为每个源函数添加的代码将确保一旦Twilio或Sendgrid收到一个webhook事件,它将被推送到Segment,Segment将跟踪一个 "Notification Engaged "事件,然后记录用户参与的渠道。
导航到Twilio控制台,并导航到你的号码。选择你当前的号码或购买一个与短信和语音兼容的新号码。然后把你的Segment短信源功能的URL粘贴到传入信息的webhook中;这将确保当有人回应你的短信通知时,Twilio会把webhook事件发送到Segment,作为一个Segment事件进行追踪。

要设置语音呼叫应答事件,回到你的Node应用程序,导航到你的.env 文件,并粘贴语音段源功能URL作为变量SEGMENT_SOURCE_FUNCTION_URL 。在这里,我们正在使用可编程语音API的状态回调事件,当用户接听从你的Node应用程序发出的电话时,向Segment发送一个名为 "Notification Engaged "的事件。
打开你的Sendgrid仪表板,导航到 "设置>邮件设置",然后点击 "事件Webhook"。在HTTP Post URL下粘贴你的Segment Email Source Function URL,在Engagement data下只选择 "Opened"。这将确保当用户打开邮件时,一个名为 "Notification Engaged "的事件将被发送到Segment。

创建Segment Personas的计算特质
一旦你的参与度指标可以通过设置上述的webhooks从Twilio和Sendgrid发送到Segment,这些事件就可以用来在Segment中创建Personas计算特质。计算特征是在用户最频繁地使用该渠道时,你将能够为用户设置一个 "首选渠道"。
在我们能够在Segment中创建一个计算特征之前,你需要向Segment发送一些事件。通过在你的应用程序的根目录下使用终端命令node index.js ,开始运行你的Node应用程序。
你应该看到一个文本、电子邮件或电话进入你在.env 文件中设置的号码或电子邮件地址。接听电话,打开电子邮件,或发送确认文本,就会看到事件进入你在调试器中的Segment账户。虽然所有事件的名称都是 "Notification Engaged",但它们是由源函数分开的,源函数将告知计算特征用户的参与渠道。
重新启动你的服务器几次,向Segment发送更多的事件--至少这样做五次。一旦你完成了这些工作,导航到你的Segment仪表盘,然后导航到 "角色",然后 "计算特征",最后点击 "新计算特征"。选择 "最频繁",然后为 "事件名称 "选择 "通知参与","最小频率 "设置为3 。
你可以改变这个数字,但是为了这个演示的目的,让我们在计算用户最常使用的渠道--电子邮件、短信或电话--之前使用3 "通知参与 "事件。
一旦用户有一个首选渠道计算特征分配给他们,他们将在未来专门在该渠道上接收通知。例如,如果用户的首选渠道是 "电子邮件",那么你的Node应用程序将使用Personas Profile API检查Segment,并将渠道设置为 "电子邮件",而不是让渠道被随机挑选。此外,你可以在Segment账户内的Personas仪表盘上看到用户的计算特质是什么。
测试和排除你的首选客户通知渠道计算的故障
干得好--希望你现在已经有了一个可以计算用户首选通知渠道的应用程序。让我们再来看看你可以尝试的一些事情,并涵盖一些你可能遇到的问题。
为了获得更有趣的结果
重新启动你的Node应用服务器几次,直到你得到一个计算特质,然后尝试在你的Node应用中改变用户的名字和用户ID来创建额外的用户。
解决在Segment中看不到事件的问题
确保你的源函数设置正确,并将调用源函数URL添加到你的.env 文件中。确保Email Source Function URL被添加到你的Sendgrid仪表盘中作为事件webhook,SMS Source Function URL被添加到你的号码中作为Twilio仪表盘中的incoming message webhook。
你可以通过检查你的Segment仪表盘中的源功能调试器来仔细检查这些事件是否进来了。
解决没有收到短信、邮件或电话的问题:
- 确保你的Twilio号码和Sendgrid发送者的电子邮件被添加到你的
.env文件中。 - 确保你的号码和电子邮件都在你的
.env文件中。
更上一层楼:
- 创建一个Twilio Flex实例,并创建一个插件来读取用户的首选渠道,以便代理可以在该渠道上发送通知。
- 在Segment中设置一个分析目标,向你的分析工具发送转换事件,并衡量哪个渠道在你所有的用户中表现最好。
在用户计算的首选渠道上发送通知
祝贺你将Segment、Twilio和Sendgrid连接起来!有了这个演示应用程序,你可以通过跟踪用户参与的内容和分配Segment计算的特征,自动选择用户的首选渠道。这是一种强大的方式,可以使你与你的用户和客户在一对一的层面上进行个性化沟通。