セッション

セッションを使用すると、インスタンス内でコンテキストをシームレスに作成および永続化できます。インスタンスは多数のセッションを持つことができ、1(インスタンス)対多数(セッション)の関係になります。セッションはVonage Cloud Runtimeを使用するときに作成されます。 プロバイダー をSDKから呼び出します。その後、インスタンスを呼び出すとセッションが復元され、以前のコンテキストにアクセスできるようになります。

セッションの作成

セッションは createSession 関数である:

const session = vcr.createSession();

デフォルトでは、セッションのTTLは7日だが、これは カスタムTTL での createSession 関数である。

新しいセッションは、プロバイダーや州へのアクセスに使用できる:

const session = vcr.createSession();
const voice = new Voice(session);
const state = new State(session);

で関数を呼び出す。 voice または state オブジェクトがこのセッションに関連付けられます。これはVonage Cloud RuntimeがリクエストにセッションIDのヘッダーを設定することで行われます。

カスタムTTLによるセッションの作成

カスタムTTLでセッションを作成するには、TTLを秒単位で createSession 関数である:

const session = vcr.createSession(3600);

上記は1時間のセッションを作成する。

グローバル・セッション

グローバル・セッションは、コンテキストを保持しない場合にプロバイダーを作成するのに便利です。グローバル・セッションは getGlobalSession 関数である:

const session = vcr.getGlobalSession();

セッションの修復

後で使用するためにセッションを保存し、セッションIDからセッションを復元することができる:

const session = vcr.getSessionById('sessionID');

アプリケーションに後続のリクエストが入ってきた場合、既存のセッションをリストアするには getSessionFromRequest 関数である:

app.post('/onMessage', async (req, res, next) => {
    const session = vcr.getSessionFromRequest(req);
    ...
});

getSessionFromRequest はリクエストのヘッダーを探す:

'x-neru-sessionid': '44092039-fa65-41a6-a9ce-97a7d1274b96',

次に、リクエストヘッダのセッションIDを使う、 getSessionFromRequest を呼び出す。 getSessionById.これによって、セッションやセッション内のイベントに関連して、コードを推論することができる。

これにより、セッションのステート・オブジェクトがこのセッションしか認識していないことを確認できるので、ステート操作が簡単になる。

セッションの復元例

デモンストレーションとして、同一ユーザーからの電話着信とテキストメッセージ間のコンテキストを伝送するVonage Cloud Runtimeアプリケーションの例を示します:

app.post('/onCall', async (req, res, next) => {
    const session = vcr.createSession();
    const voice = new Voice(session);
    const messages = new Messages(session);

    await voice.onVapiEvent({ vapiUUID: req.body.uuid, callback: "onEvent" }).execute();
    await messages.onMessage(
        'onMessage',
        {type: 'sms', number: req.body.from },
        vonageNumber
    ).execute();

    res.json([
        {
            action: 'talk',
            text: 'Say some words, then text this number for a transcript',
        },
        {
          "action": "input",
          "type": ["speech"]
        }
    ]);
});

について onCall ルートは、アプリケーションに着信があったときに呼び出される。新しいセッションが作成され、発信元番号からの着信SMSメッセージと、通話からの音声イ ベントのリスナーがセットアップされる。

Vonage Cloud Runtimeプラットフォームは、以下の設定に従って、Vonageアプリケーションに着信するRTC、音声、メッセージのWebhookを受信します。 vcr app configure.これらのWebhookのリスナーがいる場合、受信したWebhookがリスナーのフィルター(例:送信元番号)を満たしていれば、アプリケーションに送信されます。

リスナーはセッションでセットアップされるので、リスナーのフィルタを満たすリクエストはすべて x-neru-sessionid セット。

app.post('/onEvent', async (req, res, next) => {
    if (req.body.speech != null) {
        const session = vcr.getSessionFromRequest(req);
        const state = new State(session);
        await state.set('text', req.body.speech.results[0].text);
    } else {
        console.log(req.body)
    }
    res.sendStatus(200);
});

の中で onEvent ルートを使用してセッションを復元している。 getSessionFromRequest.このセッションのステートは、電話の音声読み上げ結果を保存するために使用される。ステートはこのセッションにローカルなので、ステートに識別子を使う必要がないことに注意してください。

app.post('/onMessage', async (req, res, next) => {
    const session = vcr.getSessionFromRequest(req);
    const messages = new Messages(session);
    const state = new State(session);
    const text = await state.get('text');
   
    await messages.send({
        message_type: "text",
        to: req.body.from,
        from: vonageNumber.number,
        channel: vonageNumber.type,
        text: text
    }).execute();

    res.sendStatus(200);
});

最後に、ユーザーが着信テキストを送信し、通話記録を要求する。 onMessage元のセッションが復元され、そのセッションの状態が保持される。