Programador Proveedor

El proveedor Programador permite programar funciones para que se ejecuten en un momento determinado en el futuro, o para que se repitan en función de un intervalo. También permite programar operaciones utilizando CRON expresiones.

Cómo funciona

Cuando llame 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. Usando este hash puedes asegurarte de manejar las peticiones entrantes del planificador en caso de que tu aplicación no haya podido responder con un 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 verificar que las devoluciones de llamada se originan en Cloud Runtime Platform.

Inicialización del proveedor del planificador

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 realizadas desde Vonage Cloud Runtime a tu aplicación a través del proveedor Scheduler contendrán la información de sesión de la sesión que estableció 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 Programador para enviar un texto recordatorio puntual en cinco minutos después de un mensaje entrante:

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);
    }
});