Scheduler-Anbieter
Mit dem Scheduler-Anbieter können Sie Funktionen so planen, dass sie zu einem bestimmten Zeitpunkt in der Zukunft ausgeführt werden oder in einem bestimmten Intervall wiederkehren. Er unterstützt auch die Planung von Operationen mit CRON Ausdrücke.
Wie es funktioniert
Wenn Sie die startAt auf dem Scheduler erstellt die Vonage Cloud Runtime Plattform einen Job mit den von Ihnen angegebenen Details. Wenn Sie eine ID angegeben haben, wird diese verwendet, andernfalls wird eine für Sie generiert. Mit dieser ID können Sie den Job bei Bedarf mit der Funktion cancel Funktion.
Der Scheduler-Anbieter arbeitet mit einer Mindestgenauigkeit von einer Minute. Zum Beispiel wird ein Job, der um 10:01 Uhr beginnen soll, innerhalb dieser Minute zwischen 10:01:00 und 10:01:59 beginnen.
Wenn die Aufrufzeit des Auftrags erreicht ist, erhält Ihre Anwendung eine Anfrage an den von Ihnen angegebenen Callback. Sie haben 30 Sekunden Zeit, um auf diese Anfrage mit einem 200-Status zu antworten, andernfalls wird die Anfrage erneut versucht. Die Anfragen werden 5 Mal wiederholt, bevor sie abgebrochen werden.
Jede Anfrage des Schedulers hat einen Hash in der Kopfzeile der Anfrage unter X-Neru-Scheduler-RequestHash. Mit diesem Hash können Sie sicherstellen, dass eingehende Scheduler-Anfragen bearbeitet werden, falls Ihre Anwendung nicht rechtzeitig mit einem 200-Status antworten konnte.
Funktionen
startAt- können Sie Ihre Anwendung so planen, dass sie in der Zukunft nach einer bestimmten Zeit oder wiederholt in einem bestimmten Intervall aufgerufen wird. Siehe das Codeschnipsel hier.cancel- können Sie einen bestehenden geplanten Rückruf unter Verwendung der Zeitplan-ID abbrechen. Siehe das Codeschnipsel hier.get- können Sie einen vorhandenen geplanten Auftrag anhand der Zeitplan-ID abrufen. Siehe das Codeschnipsel hier.list- können Sie die IDs für alle vorhandenen geplanten Aufträge abrufen. Siehe das Codeschnipsel hier.
Anmerkung: Verwenden Sie die vcr.verifyAuth Methode um zu verifizieren, dass die Rückrufe von der Cloud Runtime Platform stammen.
Initialisierung des Scheduler-Providers
Um den Scheduler Provider zu verwenden, müssen Sie eine Instanz des Providers mit Hilfe einer Sitzung erstellen:
const session = vcr.createSession();
const scheduler = new Scheduler(session);
Anfragen, die von Vonage Cloud Runtime an Ihre Anwendung über den Scheduler-Provider gestellt werden, enthalten die Sitzungsinformationen der Sitzung, die den geplanten Rückruf eingerichtet hat, d. h. Sie können auf den Status der ursprünglichen Sitzung über getSessionFromRequest um ein Sitzungsobjekt zu erstellen.
Anwendungsfall
Zum Beispiel, um den Scheduler-Anbieter zu verwenden, um eine einmalige Erinnerungsnachricht in fünf Minuten nach einer eingehenden Nachricht zu senden:
app.post('/onMessage', async (req, res, next) => {
try {
const session = vcr.createSession();
const scheduler = new Scheduler(session);
const reminderTime = new Date(new Date().setMinutes(new Date().getMinutes() + 5)).toISOString();
await scheduler.startAt({
startAt: reminderTime,
callback: 'textReminder',
payload: {
from: req.body.from,
}
});
} catch (error) {
next(error);
}
});
Nach Ablauf von fünf Minuten wird die textReminder Route wird mit der Nutzlast aufgerufen:
app.post('/textReminder', async (req, res, next) => {
try {
const session = vcr.createSession();
const messaging = new Messages(session);
const from = req.body.from;
const to = { type: "sms", number: from };
const vonageNumber = { type: "sms", number: "447000000000" };
await messaging.sendText(
vonageNumber,
to,
`Reminder from Vonage!`
);
res.sendStatus(200);
} catch (error) {
next(error);
}
});
Der Scheduler-Anbieter unterstützt auch die Verwendung von CRON, um das Intervall festzulegen, in dem er die definierte Route aufruft. Dieses Mal löst der Code die definierte Route alle 10 Minuten nach der vollen Stunde für einen Tag aus:
app.post('/onMessage', async (req, res, next) => {
try {
const session = vcr.createSession();
const scheduler = new Scheduler(session);
const nowDate = new Date();
const endDate = new Date();
endDate.setDate(endDate.getDate() + 1);
await scheduler.startAt({
startAt: nowDate.toISOString(),
callback: 'textReminder',
interval: {
cron: '10 * * * *',
until: {
date: endDate.toISOString(),
maxInvocations: 24
}
},
payload: {
from: req.body.from,
}
});
} catch (error) {
next(error);
}
});