Sesiones

Las sesiones le permiten crear y mantener el contexto dentro de su instancia sin problemas. Tu instancia puede tener muchas sesiones, una relación de una (instancia) a muchas (sesiones). Las sesiones se crean cuando quieres usar un Vonage Cloud Runtime proveedor del SDK. A continuación, las sesiones se pueden restaurar en llamadas posteriores a su instancia para acceder al contexto anterior.

Crear una sesión

Las sesiones pueden crearse llamando a la función createSession función:

const session = vcr.createSession();

Por defecto, las sesiones tienen un TTL de 7 días, pero esto se puede cambiar proporcionando un TTL personalizado en el createSession función.

La nueva sesión puede utilizarse para acceder a los proveedores y al Estado:

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

Llamada a funciones en el voice o state estará ahora asociado con esta sesión. Para ello, Vonage Cloud Runtime establece un encabezado en las solicitudes con el ID de sesión.

Creación de una sesión con un TTL personalizado

Para crear una sesión con un TTL personalizado, puede proporcionar un TTL en segundos al campo createSession función:

const session = vcr.createSession(3600);

Lo anterior creará una sesión que durará 1 hora.

La Sesión Global

La sesión global es útil para crear proveedores cuando no se conserva el contexto. Puede obtener la sesión global utilizando la función getGlobalSession función:

const session = vcr.getGlobalSession();

Sesión Restauración

Puede almacenar una sesión para utilizarla más tarde y, a continuación, restaurarla a partir de un ID de sesión:

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

Cuando reciba solicitudes posteriores en su aplicación, puede restaurar una sesión existente utilizando el botón getSessionFromRequest función:

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

getSessionFromRequest buscará una cabecera en la petición:

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

A continuación, utilizando el ID de sesión en el encabezado de la solicitud, getSessionFromRequest internamente llamará getSessionById. Esto le permite razonar sobre su código en relación con una sesión y los eventos de una sesión.

Esto simplifica las operaciones de estado, ya que puede estar seguro de que el objeto de estado de la sesión sólo conoce esta sesión.

Ejemplo de restauración de sesión

Para demostrarlo, aquí hay un ejemplo de una aplicación Vonage Cloud Runtime que lleva el contexto entre una llamada telefónica entrante y un mensaje de texto del mismo usuario:

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

En onCall se llama cuando hay una llamada entrante a la aplicación. Se crea una nueva sesión que se utiliza para configurar una escucha de los mensajes SMS entrantes del número que llama, así como de los eventos de voz de la llamada.

La plataforma Vonage Cloud Runtime recibe webhooks de RTC, voz y mensajes entrantes para tu aplicación de Vonage según lo configurado por vcr app configure. Si tiene un receptor para estos webhooks, se enviarán a su aplicación si el webhook entrante satisface los filtros del receptor, por ejemplo, el número de origen.

Dado que los escuchadores se configuran con una sesión, cualquier solicitud que satisfaga los filtros del escuchador se enviará a su aplicación en la ruta especificada con el parámetro x-neru-sessionid set.

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

En el onEvent ruta, se está restaurando una sesión mediante getSessionFromRequest. El estado de esa sesión se está utilizando para almacenar los resultados de voz a texto de la llamada telefónica. Observe que no hay necesidad de utilizar ningún tipo de identificador en el estado, ya que el estado es local a esta sesión, que es la misma sesión creada cuando el usuario llamó.

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

Por último, una vez que el usuario envía un texto entrante para solicitar la transcripción de su llamada en onMessagese restaura de nuevo la sesión original, que tiene el estado.