创建到 Twilio 函数的 HTTP POST(发送 SMS)

Posted

技术标签:

【中文标题】创建到 Twilio 函数的 HTTP POST(发送 SMS)【英文标题】:Create a HTTP POST to Twilio Functions (send SMS) 【发布时间】:2019-06-23 05:50:10 【问题描述】:

我创建了一个 Twilio 函数,我想用它来将我的会员推荐链接发送给通过我的频道访问的应用程序的订阅者。

它适用于静态到/从号码,但是我想让“to”字段成为一个动态变量,当 Zapier 检测到我的 Mailchimp 邮件列表的新订阅者时,可以通过 HTTP/Webhook POST 进行操作并将他们的电话号码作为变量传递。

我也不清楚我需要做些什么来验证正在发布 POST 的客户端(Zapier),因为我不希望该功能向世界开放使用,如果可以就此分享任何见解,那将是真诚的感谢 - 我是一个非常缺乏经验的程序员,想要快速学习!

@philnash - 感谢您的建议,慢慢实施!

非常感谢!

exports.handler = function(context, event, callback) 
  const appCodes = ['code1', 'code2', 'code3', 'code4']
  var smsBody = refCode ();

function refCode () 
    return appCodes[Math.floor((Math.random() * appCodes.length))];
;
  
  context.getTwilioClient().messages.create(
    to: '+11112223333', // How do I make this dynamic from HTTP/Zapier Webhook POST???
    from: '+1444555666',
    body: `Get the App: $smsBody`
  ).then(msg => 
    callback(null, msg.sid);
  ).catch(err => callback(err));

【问题讨论】:

【参考方案1】:

这里是 Twilio 开发者宣传员。

我认为 Zapier webhook 正在发送详细信息,包括电话号码,作为 POST 请求的正文。

请求正文中的所有参数都出现在传递给您的处理程序的event 对象上。您可能想要运行一个测试,打印出event 对象的内容以查看您通过了什么。你可以这样做:

exports.handler = function(context, event, callback) 
  for (let key in event) 
    console.log(`$key: $event[key]`);
  
  // ... rest of the function

然后,当您确定存储数字的参数时,您可以在调用中使用它来创建消息。

让我知道这是否有帮助。

【讨论】:

我真的可以把它放在我的 twilio 函数代码中吗?还是我必须在独立的 node.js 应用程序中运行它? 我无法确定将其实际放置在何处才能使其正常工作! 哦,我只是把它放在你的 Twilio 函数的顶部,在处理函数中。我将编辑答案以使其更清楚。 谢谢菲尔,我再试一次!一旦我实现了这个代码,我发布它并在我的浏览器中刷新 URL 以尝试查看输出 - 会让你知道我是如何去@philnash 当我在“运行时应用程序超时”函数中运行它时,当我从浏览器调用它时,我不断收到此错误消息 - 我实际上是在独立函数中使用上面相同的代码,所以我可以查看有哪些参数可用。【参考方案2】:

试试这个:

exports.handler = function(context, event, callback) 
  for (let key in event) 
    console.log(`$key: $event[key]`);
  
  // ... rest of the function
  callback(null, 'complete');
;

【讨论】:

感谢您的建议,当我刷新函数的 URL 时,它只会在网页上返回“完成”,但它消除了超时错误! console.log 真的会在网页上显示输出吗?【参考方案3】:

感谢大家的意见,非常感谢!我可以用以下代码解决这个问题:

exports.handler = function(context, event, callback) 
  const appCodes = ['code1', 'code2', 'code3', 'code4']
  var smsBody = refCode ();
  var subNum = event.primaryPhone || 'There is no subscriber number'; // primaryPhone sent via HTTP post to twilio function

function refCode () 
    return appCodes[Math.floor((Math.random() * appCodes.length))];
;

  context.getTwilioClient().messages.create(
    to: `$subNum`, // parameters & values recieved from HTTP POST are available within the twilio functions "event" context
    from: '+1444555666',
    body: `Get the App: $smsBody`
  ).then(msg => 
    callback(null, msg.sid);
  ).catch(err => callback(err));

【讨论】:

以上是关于创建到 Twilio 函数的 HTTP POST(发送 SMS)的主要内容,如果未能解决你的问题,请参考以下文章

Twilio 函数单独工作,但当我在 Studio Flows 中使用它们时它们无法正常工作

如何在 AFNetworking 的帮助下发出 Twilio api Post 请求?

无法让 Twilio 应用程序与 ngrok 一起正常工作

如何在呼叫任何人之前创建 Twilio 会议?

iOS http POST 使用 Alamofire

Heroku 需要 40 分钟来执行来自 Twilio 的发布请求