使用Twilio,Heroku Scheduler和Node发送预定的文本消息 - 没有任何事情发生

时间:2016-11-01 03:46:20

标签: node.js heroku twilio scheduler

在heroku上部署了一个节点项目。使用Heroku Scheduler一些调度代码似乎运行但Twilio SMS调用什么都不做。此代码在调度程序之外工作。

这是从Heroku Scheduler运行的scheduler.js代码:

#!/usr/bin/env node

var config = require('../config');
var client = require('twilio')(config.accountSid, config.authToken);

function sayHello() {
  console.log('Helloxxxx');
  sendSms('+13476979750', 'from Scheduler');
  console.log('goodbye-xxxx');
}
sayHello();
process.exit();

function sendSms(to, message) {
  client.messages.create({
    body: message,
    to: to,
    from: config.sendingNumber
  }, function(err, data) {
    if (err) {
      console.error('Could not send message');
      console.error(err);
    } else {
      console.error('SMS');
    }
  });
};

2 个答案:

答案 0 :(得分:2)

Twilio开发者传道者在这里。

我相信Yoni的答案是正确的,因为在完成对Twilio API的HTTP请求之前,您正在退出该流程。然而,虽然承诺很酷,但我认为你不需要所有额外的代码才能使这项工作成功。相反,您可以在收到回调后退出流程。

试试这个:

#!/usr/bin/env node

var config = require('../config');
var client = require('twilio')(config.accountSid, config.authToken);

function sayHello() {
  console.log('Helloxxxx');
  sendSms('+13476979750', 'from Scheduler');
  console.log('goodbye-xxxx');
}
sayHello();

function sendSms(to, message) {
  client.messages.create({
    body: message,
    to: to,
    from: config.sendingNumber
  }, function(err, data) {
    if (err) {
      console.error('Could not send message');
      console.error(err);
    } else {
      console.error('SMS');
    }
    process.exit();
  });
};

答案 1 :(得分:1)

在我看来,你可能会遗漏一些异步处理逻辑,因此Heroku调度程序安排的一次性dyno在sayHello()有机会完成之前退出(通过process.exit())。

尝试使用类似的内容(使用q library)宣传您的代码:

#!/usr/bin/env node

var config = require('../config');
var client = require('twilio')(config.accountSid, config.authToken);
var Q = require('q');

function sayHello() {
   console.log('Helloxxxx');
   return sendSms('+13476979750', 'from Scheduler')
       .then(function(){
            return console.log('goodbye-xxxx');
       })  
}


function sendSms(to, message) {
    var deferred = Q.defer();
    client.messages.create({
         body: message,
         to: to,
         from: config.sendingNumber
    }, function(err, data) {
       if (err) {
           console.error('Could not send message');
           console.error(err);
           deferred.reject(err);
       } else {
           console.log('SMS');
           deferred.resolve();
       }
    });
    return deferred.promise();
};

sayHello()
    .then(function(){
        console.log('Exiting...')
        process.exit();
});