Sitzungen
Mit Sitzungen können Sie innerhalb Ihrer Instanz nahtlos einen Kontext erstellen und aufrechterhalten. Ihre Instanz kann viele Sitzungen haben, eine Beziehung von einer (Instanz) zu vielen (Sitzungen). Sitzungen werden erstellt, wenn Sie eine Vonage Cloud Runtime verwenden möchten Anbieter aus dem SDK. Dann können die Sitzungen bei späteren Aufrufen Ihrer Instanz wiederhergestellt werden, um auf den vorherigen Kontext zuzugreifen.
Erstellen einer Sitzung
Sitzungen können durch den Aufruf der Funktion createSession Funktion:
const session = vcr.createSession();
Standardmäßig haben Sitzungen eine TTL von 7 Tagen, aber dies kann durch Angabe einer benutzerdefinierte TTL im createSession Funktion.
Die neue Sitzung kann für den Zugang zu Anbietern und Status verwendet werden:
const session = vcr.createSession();
const voice = new Voice(session);
const state = new State(session);
Der Aufruf von Funktionen auf der voice oder state Objekt wird nun mit dieser Sitzung verknüpft. Dies geschieht, indem Vonage Cloud Runtime bei Anfragen einen Header mit der Sitzungs-ID setzt.
Erstellen einer Sitzung mit einer benutzerdefinierten TTL
Um eine Sitzung mit einer benutzerdefinierten TTL zu erstellen, können Sie eine TTL in Sekunden für die Option createSession Funktion:
const session = vcr.createSession(3600);
Auf diese Weise wird eine Sitzung mit einer Dauer von 1 Stunde erstellt.
Die Global Session
Die globale Sitzung ist nützlich für die Erstellung von Anbietern, wenn Sie den Kontext nicht beibehalten wollen. Sie können die globale Sitzung mit der Funktion getGlobalSession Funktion:
const session = vcr.getGlobalSession();
Sitzung Wiederherstellung
Sie können eine Sitzung für eine spätere Verwendung speichern und sie dann anhand einer Sitzungs-ID wiederherstellen:
const session = vcr.getSessionById('sessionID');
Wenn Sie spätere Anfragen an Ihre Anwendung haben, können Sie eine bestehende Sitzung wiederherstellen, indem Sie die getSessionFromRequest Funktion:
app.post('/onMessage', async (req, res, next) => {
const session = vcr.getSessionFromRequest(req);
...
});
getSessionFromRequest sucht in der Anfrage nach einer Kopfzeile:
'x-neru-sessionid': '44092039-fa65-41a6-a9ce-97a7d1274b96',
Dann wird die Sitzungs-ID in der Kopfzeile der Anfrage verwendet, getSessionFromRequest wird intern aufgerufen getSessionById. Dies ermöglicht es Ihnen, Ihren Code in Bezug auf eine Sitzung und Ereignisse in einer Sitzung zu betrachten.
Dies vereinfacht Zustandsoperationen, da Sie sicher sein können, dass das Zustandsobjekt der Sitzung nur diese Sitzung kennt.
Beispiel für die Wiederherstellung einer Sitzung
Zur Veranschaulichung sehen Sie hier ein Beispiel für eine Vonage Cloud Runtime-Anwendung, die den Kontext zwischen einem eingehenden Telefonanruf und einer Textnachricht desselben Benutzers übermittelt:
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"]
}
]);
});
Die onCall Route wird aufgerufen, wenn ein Anruf bei der Anwendung eingeht. Es wird eine neue Sitzung erstellt, die dazu dient, einen Listener für eingehende SMS-Nachrichten von der anrufenden Nummer sowie für Sprachereignisse des Anrufs einzurichten.
Die Vonage Cloud Runtime-Plattform empfängt eingehende RTC-, Sprach- und Nachrichten-Webhooks für Ihre Vonage-Anwendung gemäß der Konfiguration durch vcr app configure. Wenn Sie einen Listener für diese Webhooks haben, werden sie an Ihre Anwendung gesendet, wenn der eingehende Webhook die Filter des Listeners erfüllt, z. B. die Absendernummer.
Da die Listener mit einer Sitzung eingerichtet werden, werden alle Anfragen, die den Filtern des Listeners entsprechen, an Ihre Anwendung auf der Route gesendet, die mit der Option x-neru-sessionid gesetzt.
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);
});
In der onEvent Route wird eine Sitzung wiederhergestellt, indem man getSessionFromRequest. Der Status dieser Sitzung wird verwendet, um die Sprachtextergebnisse des Telefonats zu speichern. Beachten Sie, dass es nicht notwendig war, irgendeine Form von Bezeichner für den Status zu verwenden, da der Status lokal für diese Sitzung ist, die die gleiche Sitzung ist, die beim Anruf des Benutzers erstellt wurde.
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);
});
Sobald der Nutzer eine eingehende SMS sendet, um die Abschrift seines Anrufs in onMessagewird die ursprüngliche Sitzung wiederhergestellt, in der der Status gespeichert ist.