Skip to main content

.STAGE

Mit dem StageManagerService (RAGAI.STAGE) kannst du deinen Bot in verschiedene Zustände (Stages) aufteilen. Jede Stage kann eigene Skills aktivieren, JavaScript-Code beim Betreten und Verlassen ausführen und optional eine Footer-Anzeige steuern. Stages eignen sich hervorragend für mehrstufige Dialoge, Quiz-Szenarien oder geführte Abläufe.

StageDefinition

Jede Stage wird durch ein StageDefinition-Objekt beschrieben:

EigenschaftTypBeschreibung
titlestringAnzeigename der Stage.
namestringEindeutiger technischer Name der Stage.
hiddenboolean (optional)Wenn true, wird die Stage in der sichtbaren Liste ausgeblendet.
skillsstring[]Liste der Skill-IDs, die in dieser Stage aktiv sein sollen.
forceSkillsboolean (optional)Wenn true, werden die Skills erzwungen (forciert) statt nur aktiviert.
footerbooleanGibt an, ob ein Footer in dieser Stage angezeigt werden soll.
enterFn() => Promise<void> (optional)Async-Funktion, die beim Betreten der Stage ausgeführt wird.
exitFn() => Promise<void> (optional)Async-Funktion, die beim Verlassen der Stage ausgeführt wird.
sortFloatnumberSortierwert zur Bestimmung der Reihenfolge der Stages.

Properties

currentStage

Gibt die aktuell aktive Stage zurück.

const stage = RAGAI.STAGE.currentStage;
console.log(stage.name); // z. B. 'Einleitung'

beforeStageChange

Ein EventEmitter, der vor einem Stage-Wechsel ausgelöst wird. Du kannst damit Aktionen ausführen, bevor der Wechsel stattfindet.

RAGAI.STAGE.beforeStageChange.subscribe((event) => {
console.log('Stage wird gewechselt von:', event);
});

afterStageChange

Ein EventEmitter, der nach einem Stage-Wechsel ausgelöst wird. Nutze ihn, um auf den abgeschlossenen Wechsel zu reagieren.

RAGAI.STAGE.afterStageChange.subscribe((event) => {
console.log('Stage wurde gewechselt zu:', event);
});

stageEnter

Ein EventEmitter, der beim Betreten einer Stage ausgelöst wird.

RAGAI.STAGE.stageEnter.subscribe((stage) => {
console.log('Stage betreten:', stage.name);
});

stageExit

Ein EventEmitter, der beim Verlassen einer Stage ausgelöst wird.

RAGAI.STAGE.stageExit.subscribe((stage) => {
console.log('Stage verlassen:', stage.name);
});

allStages

Gibt ein Array aller registrierten Stages zurück – inklusive versteckter Stages.

const stages = RAGAI.STAGE.allStages;
console.log(stages); // [{ name: 'Start', ... }, { name: 'Ende', ... }]

visibleStages

Gibt ein Array aller sichtbaren (nicht versteckten) Stages zurück.

const sichtbar = RAGAI.STAGE.visibleStages;
console.log(sichtbar.length); // Anzahl sichtbarer Stages

Methoden

.add(name, stage)

Fügt eine neue Stage hinzu. Der erste Parameter ist der Name, der zweite ein partielles StageDefinition-Objekt mit den gewünschten Eigenschaften.

RAGAI.STAGE.add('Einleitung', {
skills: ['skill-begruessung', 'skill-hilfe'],
footer: true,
sortFloat: 1,
enterFn: async () => {
console.log('Willkommen in der Einleitung!');
},
exitFn: async () => {
console.log('Einleitung verlassen.');
}
});

Du kannst auch eine minimale Stage ohne Optionen erstellen:

RAGAI.STAGE.add('Start', {
skills: [],
footer: false,
sortFloat: 0
});

.remove(name)

Entfernt eine registrierte Stage anhand ihres Namens.

RAGAI.STAGE.remove('Einleitung');

.hide(name)

Verbirgt eine Stage, sodass sie nicht mehr in visibleStages aufgeführt wird. Die Stage bleibt aber registriert und kann weiterhin direkt angesteuert werden.

RAGAI.STAGE.hide('Geheim');

.show(name)

Macht eine zuvor versteckte Stage wieder sichtbar.

RAGAI.STAGE.show('Geheim');

.goTo(value)

Wechselt zur angegebenen Stage – entweder per Index (Zahl) oder per Name (String). Die exitFn der aktuellen Stage und die enterFn der Ziel-Stage werden dabei ausgeführt.

// Per Name
await RAGAI.STAGE.goTo('Einleitung');

// Per Index
await RAGAI.STAGE.goTo(0);

.goToName(name)

Wechselt zur Stage mit dem angegebenen Namen. Funktioniert wie goTo() mit einem String-Argument.

await RAGAI.STAGE.goToName('Quiz');

.goToIndex(index)

Wechselt zur Stage an der angegebenen Array-Position (0-basiert).

await RAGAI.STAGE.goToIndex(2); // Wechselt zur dritten Stage

.goToRandom(possibleNames?)

Wechselt zu einer zufällig ausgewählten Stage. Optional kannst du ein Array mit erlaubten Stage-Namen übergeben, aus dem zufällig gewählt wird. Ohne Parameter wird aus allen verfügbaren Stages gewählt.

// Zufällig aus allen Stages
await RAGAI.STAGE.goToRandom();

// Zufällig aus bestimmten Stages
await RAGAI.STAGE.goToRandom(['Quiz-1', 'Quiz-2', 'Quiz-3']);

.next()

Wechselt zur nächsten Stage in der Reihenfolge (relativ zur aktuellen Stage).

await RAGAI.STAGE.next();

.prev()

Wechselt zur vorherigen Stage in der Reihenfolge (relativ zur aktuellen Stage).

await RAGAI.STAGE.prev();

.restore()

Stellt die zuletzt verwendete Stage wieder her. Das ist nützlich, wenn du nach einem Ausflug in eine andere Stage zur vorherigen zurückkehren möchtest.

await RAGAI.STAGE.restore();

.list(includeHidden?)

Gibt ein Array mit den Namen aller registrierten Stages zurück. Mit includeHidden = true werden auch versteckte Stages aufgelistet.

// Nur sichtbare Stages
const namen = RAGAI.STAGE.list();
console.log(namen); // ['Start', 'Quiz', 'Ende']

// Alle Stages inklusive versteckter
const alle = RAGAI.STAGE.list(true);
console.log(alle); // ['Start', 'Quiz', 'Geheim', 'Ende']

Beispiel: Mehrstufiger Quiz-Bot

// Stages definieren
RAGAI.STAGE.add('Begrüßung', {
skills: ['skill-willkommen'],
footer: true,
sortFloat: 0,
enterFn: async () => {
await RAGAI.SCORE.reset();
}
});

RAGAI.STAGE.add('Frage-1', {
skills: ['skill-frage-1'],
footer: false,
sortFloat: 1
});

RAGAI.STAGE.add('Frage-2', {
skills: ['skill-frage-2'],
footer: false,
sortFloat: 2
});

RAGAI.STAGE.add('Ergebnis', {
skills: ['skill-ergebnis'],
footer: true,
sortFloat: 3,
enterFn: async () => {
const punkte = RAGAI.SCORE.get();
console.log('Erreichte Punkte:', punkte);
}
});

// Stage-Wechsel überwachen
RAGAI.STAGE.afterStageChange.subscribe((stage) => {
console.log('Aktuelle Stage:', stage);
});

// Zur ersten Stage wechseln
await RAGAI.STAGE.goToName('Begrüßung');