2016-11-01 5 views
0

heroku에 노드 프로젝트를 배포하십시오. Heroku Scheduler를 사용하면 일부 스케줄링 코드가 실행되는 것처럼 보이지만 Twilio SMS 호출은 아무런 효과가 없습니다. 이 코드는 스케줄러 외부에서 작동합니다.Twilio, Heroku 스케줄러 및 노드를 사용하여 예약 된 텍스트 메시지 보내기 - 아무 일도 일어나지 않습니다.

#!/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

Twilio 개발자 전도사 여기.

Twilio API에 대한 HTTP 요청이 완료되기 전에 프로세스를 종료한다는 Yoni의 답변이 맞다고 생각합니다. 그러나 약속은 시원하지만, 나는이 일을하기 위해 모든 여분의 코드가 필요하다고 생각하지 않는다. 대신 콜백을 받으면 프로세스를 종료 할 수 있습니다.

이 시도 :

#!/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(); 
    }); 
}; 
+0

네, philnash의 대답은 더 간단합니다. –

+0

끝내 주셔서 감사합니다! –

1

는 Heroku가 스케줄러에 의해 스케줄 당신의 일회성 다이노이 종료 될 수 있도록 당신이 약간의 비동기 처리 로직을 누락 될 수 있습니다 나에게 보인다 :

는 Heroku가 스케줄러에서 실행되는 scheduler.js 코드 sayHello()가 완료되기 전에 (process.exit()를 통해).

합니다 ( q library 사용)를 같은 것을 함께, 코드를 promisifying보십시오 :

#!/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(); 
}); 
+0

멋진 감사합니다! –