スケジューラ・プロバイダー

Scheduler プロバイダを使用すると、将来の指定された時間に実行する関数をスケジュールしたり、間隔に基づいて繰り返し実行したりすることができます。また クロン を表現している。

仕組み

を呼び出すと startAt 関数を使用すると、Vonage Cloud Runtimeプラットフォームは提供された詳細でジョブを作成します。あなたがIDを提供した場合はそれが使用され、そうでない場合はあなたのために生成されます。このIDは必要に応じて cancel 関数である。

Schedulerプロバイダーは、最低1分の精度で動作します。例えば、10:01に開始するようスケジュールされたジョブは、その分以内、10:01:00から10:01:59の間に開始されます。

ジョブの呼び出し時間に達すると、アプリケーションは指定したコールバックにリクエストを受け取ります。30秒以内にこのリクエストに200ステータスで応答しなければ、リクエストは再試行されます。リクエストは放棄される前に5回再試行されます。

スケジューラーからの各リクエストは、リクエストのヘッダーにハッシュを持つ。 X-Neru-Scheduler-RequestHash.このハッシュを使うことで、アプリケーションが200ステータスで応答できなかった場合に備えて、スケジューラーからのリクエストを確実に処理することができます。

機能

  • startAt - これにより、指定した時間後にアプリケーションが呼び出されるように、あるいは指定した間隔で繰り返し呼び出されるようにスケジューリングすることができる。コード・スニペット これ.
  • cancel - これにより、スケジュールされたコールバックをスケジュールIDを使ってキャンセルすることができます。コードスニペット これ.
  • get - これは、スケジュールIDを使用して既存のスケジュールされたジョブを取得することができます。コードスニペット これ.
  • list - これにより、既存のすべてのスケジュールされたジョブのIDを取得することができます。コードスニペット これ.

注: を使用する。 vcr.verifyAuth 方法 を使用して、コールバックがCloud Runtime Platformから発信されていることを検証します。

スケジューラ・プロバイダの初期化

スケジューラ・プロバイダーを使用するには、セッションを使用してプロバイダーのインスタンスを作成する必要があります:

const session = vcr.createSession();
const scheduler = new Scheduler(session);

Vonage Cloud RuntimeからSchedulerプロバイダを経由してアプリケーションに行われるアプリケーションのアプリケーションリクエストは、スケジュールされたコールバックをセットアップしたセッションからのセッション情報を含みます。 getSessionFromRequest を使ってセッションオブジェクトを作成します。

ユースケース

例えば、Schedulerプロバイダーを使って、着信メッセージの5分後に1回限りのリマインダー・テキストを送信する:

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

5分経過後 textReminder ルートはペイロードとともに呼び出される:

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

Schedulerプロバイダーは、CRONを使用して、定義されたルートを呼び出す間隔を定義することもサポートしています。今回のコードでは、1日の間、毎時10分過ぎに定義されたルートをトリガーします:

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