如何向Twilio短信广告系列添加自定义属性(附代码)

312 阅读6分钟

这篇文章介绍了如何在短信中添加自定义属性(又称元数据)。这使你的团队能够接收到发送给你的客户的短信活动的数据,记录活动,以及更多下面的例子是用Twilio的Node.js辅助库编写的。

自定义属性提供了一个系统来对各种数字营销和功能活动进行分类。如果你想在个性化方面做得更花哨,元数据还可以跟踪单个测试中的变体。即使在可编程的SMS终端上没有正式的元数据参数,我们仍然可以为活动经理添加属性来跟踪客户分析。而且,真的,有人的老板第三次要求提供消费者趋势报告了。

基本上,技术专家想了解哪些功能有效,哪些功能失败。如果你通过短信或语音开展数字营销活动(或者是Jira任务的幸运接受者,以增加这一功能),你会想读读这个。

解决方案

为了证明如何以及为什么要给短信添加自定义属性,让我们来看看一个例子。一家名为Night Owl Caffeine的咖啡馆全年都在为他们的品牌进行一般的促销活动,但他们想跟踪一个单一的季节性活动的表现。在10月,他们将向忠诚度计划中的客户发送短信,以获得南瓜香咖啡的25%的折扣(哇,多么省钱)。他们的平台是建立在Twilio可编程消息上的,他们计划通过使用一个活动ID来区分每个促销短信活动。这就把客户按电话号码映射到他们的数据仓库或CRM中收到的短信促销活动。

目前,Twilio可编程短信发送端点上没有可用的自定义属性或元数据字段来跟踪活动ID。然而,我们可以在创建消息发布请求中的可选状态回调参数中附加一个带有活动ID的查询字符串。

下面是用Twilio Node.js辅助库编写的一些示例代码,以实现这一点。假设dynamicCampaignVariable ,而不是作为一个静态变量被分配。Twilio客户端被用来创建一个带有标准的tofrommessage 体参数的SMS消息。第四个参数statusCallback 是可选的,但对于我们的活动追踪用例是必要的。活动ID作为一个查询字符串附加到状态回调URL中:

// Assume the campaign variable is coming from
// a dynamic source, such as a CRM or database
let dynamicCampaignVariable = 22;

// Twilio's node helper library to sends an SMS message
// we can add the campaign variable to the statusCallback
twilioClient.messages.create({
 to: process.env.MY_PHONE_NUMBER,
 from: process.env.TWILIO_PHONE_NUMBER,
 body: 'Stop by your local Night Owl Caffeine cafe today for 25% off a pumpkin spice latte!',
 statusCallback: `https://${process.env.NGROK_HTTPS_URL}/sms-status-callback?campaign_id=${dynamicCampaignVariable}`,
})
.then(message => {
 console.log('Message sent: ', message);
})
.catch(err => {
 console.log('Message failed to send: ', err);
});

POST端点statusCallback POST端点是用node和express写的。每次用上述Twilio客户端发送短信时(以及每次Twilio从运营商那里收到短信状态收据时),这个端点都会被点击。该dynamicCampaignVariable 被附加到请求中的查询字符串:

// StatusCallback endpoint
app.post('/sms-status-callback', (req, res) => {
 const smsStatus = req.body.SmsStatus.toLowerCase();
 console.log('SMS statusCallback endpoint hit. Status: ', smsStatus);

 // If the status is 'delivered' log the data, log the data
 if (smsStatus === 'delivered') {
   // Get metadata from the query string
   // Send it to a database, do whatever you gotta do!
   console.log('Metadata from delivered SMS: ', req.query);
 }
});

在这个端点内,所有关于短信的信息都可以得到,包括活动ID。Twilio会在每次从我们的Supernetwork更新短信状态时点击这个端点,Supernetwork直接与运营商的交付收据挂钩。我们建议在将其记录到你的数据库或CRM之前检查 "已交付 "状态,以避免添加重复的记录或失败的信息。在Twilio代码中直接记录活动,发送短信并提供交付状态收据,比建立一个自定义跟踪器要简单得多。

添加活动ID只是向SMS消息添加元数据的一个例子!可以添加各种自定义属性:客户被添加到的受众桶,活动的友好名称,如 "pumpkin_spice_coupon_takeover" - 这取决于你。

敏感信息的声明。我们建议你不要把敏感信息放在查询字符串中。没有密码,没有PII,没有PHI。活动ID,用于标记和记录的一般属性,以及最喜欢的汤都可以。

教程

好了,这是一个简单的指南,让上述代码例子在你自己的机器上运行。这就是先决条件成为必要条件的地方。

第1步 - 创建一个Twilio账户并购买一个电话号码

第2步 - 安装并运行ngrok

前往ngrok网站;下载并安装ngrok。这是一个免费程序,可以创建一个安全的HTTPS连接。

接下来,在8080端口运行ngrok,以获得一个安全的HTTPS连接。Twilio产品只能在安全连接下工作,所以我们用ngrok创建一个隧道到我们的localhost端口,并安全地将其暴露在互联网上。这是在开发环境(比如你自己的电脑)中测试时需要的,但在产品部署中,你会使用你自己的域名和SSL证书。在你的终端运行以下命令:

$ ngrok http 8080

第3步 - 获取Repo

让ngrok运行。在一个新的终端窗口中,克隆这个Github资源库。这个应用包含Twilio Node辅助库模板,用于从Twilio号码向你的手机号码发送短信,以及用于状态回调POST端点的Express服务器。克隆和设置这个存储库的命令如下所示:

$ git clone git@github.com:kristajg/twilio-custom-attributes.git
$ cd twilio-custom-attributes
$ npm i

按照应用程序中的README指示。在.env文件中添加你的Twilio账户凭证、Twilio电话号码和你的E.164格式的电话号码。将ngrok HTTPS URL添加到index.js中的状态回调端点。

第4步 - 运行Clone Repo并惊叹于Metadata

用下面的命令运行该应用程序:

$ npm run dev

现在观察一下,在你收到从你的Twilio手机号码发出的超酷的短信后,从控制台日志中出现活动ID。假设一切顺利,并且运营商确实发送了状态收据,statusCallback 端点将被击中两次:一次是初始发送(已发送),另一次是完成交付(已交付)。在交付状态下,我们抓取元数据,并可以在我们的数据库或CRM中记录这一点。很好!

结论和语音的额外解决方案

现在你知道如何在SMS活动中用元数据跟踪活动了。但为什么只限于短信呢?你可以通过使用相同的statusCallback技术,对通过可编程语音API发出的电话做同样的事情。TwiML和SIP也可以传递自定义信息。所有的元数据!