Programador Proveedor
El proveedor «Scheduler» te permite programar funciones para que se ejecuten en un momento concreto en el futuro o de forma periódica según un intervalo. También permite programar operaciones mediante CRON expresiones.
Cómo funciona
Cuando llamas al startAt en el programador, la plataforma de Vonage Cloud Runtime crea un trabajo con los detalles que proporcionaste. Si proporcionaste un ID, se utilizará ese; de lo contrario, se generará uno para ti. Esta ID es la forma en que puedes cancelar el trabajo si es necesario usando la función cancel función.
El proveedor del Planificador funciona con una precisión mínima de un minuto. Por ejemplo, un trabajo programado para empezar a las 10:01 empezará dentro de ese minuto, entre las 10:01:00 y las 10:01:59.
Cuando se alcance el tiempo de invocación del trabajo, tu aplicación recibirá una petición a la callback que hayas especificado. Tendrás 30 segundos para responder a esta petición con un estado 200, de lo contrario la petición será reintentada. Las peticiones se reintentan 5 veces antes de ser abandonadas.
Cada solicitud del planificador tiene un hash en la cabecera de la solicitud bajo X-Neru-Scheduler-RequestHash. Con este hash, puedes asegurarte de gestionar las solicitudes entrantes del programador en caso de que tu aplicación no haya podido responder con un código de estado 200 a tiempo.
Funciones
startAt- esto le permite programar su aplicación para que sea llamada en el futuro después de un tiempo especificado, o repetidamente en un intervalo dado. Vea el fragmento de código aquí.cancel- esto le permite cancelar una llamada de retorno programada existente utilizando el ID de programación. Vea el fragmento de código aquí.get- esto le permite recuperar un trabajo programado existente utilizando el ID de programación. Vea el fragmento de código aquí.list- esto le permite recuperar los ID de todos los trabajos programados existentes. Véase el fragmento de código aquí.
Nota: Utiliza el vcr.verifyAuth método para comprobar que las llamadas de retorno proceden de la Cloud Runtime Platform.
Inicialización del proveedor del programador
Para utilizar el Proveedor del Programador es necesario crear una instancia del proveedor utilizando una sesión:
const session = vcr.createSession();
const scheduler = new Scheduler(session);
Las solicitudes enviadas desde Vonage Cloud Runtime a tu aplicación a través del proveedor del programador de tareas contendrán la información de la sesión en la que se configuró la devolución de llamada programada, lo que significa que puedes acceder al estado de la sesión de origen utilizando getSessionFromRequest para crear un objeto de sesión.
Caso práctico
Por ejemplo, para utilizar el proveedor «Scheduler» con el fin de enviar un mensaje de texto de recordatorio único cinco minutos después de recibir un mensaje:
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);
}
});
Transcurridos cinco minutos, el textReminder con la carga útil:
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);
}
});
El proveedor Scheduler también soporta el uso de CRON para definir el intervalo en el que llama a la ruta definida. En esta ocasión, el código activa la ruta definida cada 10 minutos pasada la hora durante un día:
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);
}
});