2016-11-01 1 views
0

Lassen Sie ein Knotenprojekt auf heroku bereitstellen. Mit dem Heroku-Scheduler scheint ein Zeitplan-Code zu laufen, aber der Twilio SMS-Aufruf tut nichts. Dieser Code funktioniert außerhalb des Schedulers.Verwenden von Twilio, Heroku Scheduler und Node zum Senden von geplanten Textnachrichten - nichts passiert

Dies ist der scheduler.js-Code, der von Heroku Scheduler ausgeführt wird:

#!/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'); 
    } 
    }); 
}; 

Antwort

2

Twilio Entwickler Evangelist.

Ich glaube, Yonis Antwort ist richtig, dass Sie den Prozess beenden, bevor die HTTP-Anfrage an die Twilio-API abgeschlossen ist. Während Versprechen sind cool, ich glaube nicht, dass Sie all diesen zusätzlichen Code benötigen, nur um dies zu arbeiten. Stattdessen können Sie den Vorgang einfach beenden, sobald Sie den Rückruf erhalten haben.

Versuchen Sie folgendes:

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

Yup, philnashs Antwort ist einfacher und besser. –

+0

super danke! –

1

Scheint mir Sie einige async Verarbeitungslogik fehlt sein kann, so dass Ihre einmalige dyno von Heroku Scheduler geplant wird beendet (über process.exit()), bevor sayHello() abgeschlossen werden kann.

Versuchen Sie Ihren Code promisifying, damit so etwas wie (die q library verwenden): hier

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

genial Dank! –

Verwandte Themen