Proveedor estatal

El proveedor de estado te permite almacenar datos en la plataforma Vonage Cloud Runtime para que los utilicen las instancias de tu proyecto. El proveedor de estado tiene un almacén clave-valor en su raíz. Así como listas y mapas con varias operaciones que puedes realizar en ellos.

Funciones

Puede utilizar las siguientes operaciones para almacenar datos utilizando el proveedor de estado:

Inicialización del proveedor de estado

Para poder acceder al proveedor de estado desde una sesión:

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

Este estado está vinculado a la sesión pasada al inicializador de estado, por lo que puede ser referido como estado de sesión. Cuando la sesión alcance su TTL, se eliminará el estado almacenado.

En llamadas posteriores a su código, usted querrá asegurarse de que está utilizando la misma sesión para tener acceso a su estado. Puedes hacerlo inicializando tu instancia desde una petición entrante:

app.post("/onMessage", async (req, res, next) => {
  try {
    const session = vcr.getSessionFromRequest(req);
    const state = new State(session);

    // Handle incoming message
  } catch (error) {
    next(error);
  }
});

Estado de la Account

El estado de la cuenta se limita a tu cuenta de Vonage y está disponible entre todos tus proyectos y sus instancias.

const state = vcr.getAccountState();

Estado de la instancia

El estado de la instancia se asigna a su instancia y se elimina cuando se destruye la instancia. Esto permite compartir el contexto entre diferentes sesiones de la aplicación.

const state = vcr.getInstanceState();

Caso práctico

Por ejemplo, puede almacenar, recuperar y eliminar objetos en una sesión utilizando las operaciones clave-valor:

app.post("/key-value", async (req, res, next) => {
  try {
    const session = vcr.createSession();
    const state = new State(session);

    // store object
    await state.set("test_obj", { "foo": bar });

    // retrieve object
    const obj2 = await state.get("test_obj");

    // delete object
    await state.del("test_obj");

  } catch (error) {
    next(error);
  }
})

O puedes utilizar el estado de instancia, y las operaciones de tabla hash para persistir los datos entre sesiones:

app.post("/add-customer", async (req, res, next) => {
	try {
	  const instanceState = vcr.getInstanceState();
	  const customer = req.body;
	  await instanceState.mapSet("customers", { [customer.phone]: JSON.stringify(customer) });
    res.sendStatus(200);
	} catch (error) {
	  next(error);
	}
})

Se trata de almacenar la información de los clientes en una tabla con el número de teléfono del cliente como clave.

app.get("/on-phone-call", async (req, res, next) => {
	try {
	  const instanceState = vcr.getInstanceState();
	  const number = req.query.number;
	  const customer = await instanceState.mapGetValue("customers", number);
	  res.send(customer.name);
	} catch (error) {
	  next(error);
	}
})

Utilizando el número de cliente puede recuperar la información del cliente que se almacenó anteriormente.

curl --location --request POST '{INSTANCE_ENDPOINT}/add-customer' \ --header 'Content-Type: application/json' \ --data-raw '{ "id":"1", "name": "John", "phone": "101" }' curl --location --request GET '{INSTANCE_ENDPOINT}/on-phone-call?number=101'