Zum Hauptinhalt springen

Übung — Ein Echo-Bot und dann der Assistent

Was du in dieser Übung baust: Zuerst einen Echo-Bot in einem Messenger deiner Wahl — die kleinste mögliche Anbindung, an der du Eingang und Ausgang unabhängig von jeder Logik prüfst. Danach schließt du den Assistenten aus Kurs 7 an denselben Messenger an.

Wähle einen der drei Messenger aus den Einheiten 3 bis 5. Die Schritte sind für alle gleich, nur die Kanal-Bausteine unterscheiden sich.


Teil 1 — Der Echo-Bot​

Aufbau​

[ Webhook ] → [ übersetzen ] → [ echo ] → [ Ausgang des Messengers ]

Schritt 1 — Eingang und Ausgang​

Richte den Messenger nach der jeweiligen Einheit ein, bis einschließlich des Schritts „Antworten senden“. Für Teams gehört der Agent teams_ziel_merken mit dazu.

Schritt 2 — Der Echo-Agent​

Ein JavaScript Agent echo zwischen Übersetzung und Ausgang:

Agent.receive = function() {
var p = this.incomingMessage().payload || {};
var o = {};
for (var k in p) { if (p.hasOwnProperty(k) && k !== 'rows') { o[k] = p[k]; } }
o.antwort_text = '🔁 ' + String(p.text || '') + String.fromCharCode(10) +
'_von ' + String(p.absender_name || p.absender_id) + ' · Kanal ' + p.kanal + ' · Nachricht ' + p.nachricht_id + '_';
this.createMessage(o);
};

Der Echo-Bot zeigt dir nicht nur, dass beide Richtungen funktionieren, sondern auch, was im Einheitsformat ankommt.

Schritt 3 — Testen​

#TestErwartung
1„Hallo“ schreibenEcho mit deinem Namen und der Nachrichten-ID
2Nachricht mit Umlauten und Emoji: „Grüße 👋“Echo unverändert — sonst stimmt die Zeichenkodierung nicht (bei Nextcloud: Signaturfehler 401)
3Nachricht mit Anführungszeichen: Er sagte "ja"Echo unverändert
4Lange Nachricht (mehrere Absätze)Echo mit Zeilenumbrüchen
5Nur Nextcloud/Teams: Bot in einer Gruppe erwähnenEcho ohne die Erwähnung im Text
Test 3 schlägt fehl — die Antwort kommt nicht an

Ein Anführungszeichen im Text zerstört das JSON im Post Agent, wenn der Text an einer Stelle ohne Maskierung eingesetzt wird. Prüfe im Log des Post Agents, wie der Body tatsächlich aussieht. Bei Synology Chat wird das JSON im JavaScript Agent mit JSON.stringify gebaut — dort ist es automatisch korrekt maskiert.


Teil 2 — Den Assistenten anschließen​

Jetzt ersetzt du den Echo-Agent durch den Assistenten aus Kurs 7.

Schritt 1 — Den Eingang anschließen​

Im Assistenten-Workflow kam die Nachricht bisher aus einheitsformat (dem Web-Formular). Lege dort einen Receiver Agent an und verbinde ihn mit kontext_laden. Im Kanal-Workflow schickst du die übersetzte Nachricht über einen Source Agent dorthin.

Ergänze in der Übersetzung des Messengers das Feld text_sql, das der Router für SQL-Abfragen erwartet:

    text_sql: (function(s) { s = s.split("'").join('’').slice(0, 1000); return s.trim() ? s : '-'; })(text),

Wenn du Übung 2 aus Kurs 7 gemacht hast, ergänze ebenso muster und muster_sql mit der Funktion muster().

Schritt 2 — Den Ausgang anschließen​

Der Rückkanal des Assistenten endete bisher in der Human Task anzeige. Ersetze sie durch einen Switch Agent ausgang_waehlen:

EmpfängerBedingung
Source zum Kanal-Workflow deines Messengers'{{ kanal }}' == 'nextcloud' (bzw. synology, teams)
anzeige (Human Task)'{{ kanal }}' == 'web'

Damit funktionieren Web-Formular und Messenger parallel — praktisch zum Testen.

Schritt 3 — Berechtigte Nutzer eintragen​

Der Router kennt bisher nur deinen Web-Absender. Trage dich mit deiner ID im Messenger ein — die ID siehst du im Echo aus Teil 1:

{"sql": "INSERT INTO assistent_nutzer VALUES ('nextcloud', 'deine.id', 'Dein Name', 'admin', 1)"}

Schritt 4 — Testen​

#Nachricht im MessengerErwartung
1hilfeListe der Fähigkeiten, als Antwort auf deine Nachricht
2notiz: Messenger-Anbindung fertig„📝 Notiert …“
3Was hatte ich zur Anbindung notiert?die Notiz aus Test 2
4Lösch alle meine Notizen → jaBestätigungsfrage, dann Löschung
5Eine Person, die nicht in assistent_nutzer steht, schreibt dem BotAblehnung
Der Assistent antwortet zweimal auf dieselbe Nachricht

Der Doppelschutz greift nicht. Prüfe, ob nachricht_id bei beiden Zustellungen gleich ist — sie muss aus der ID des Messengers stammen, nicht aus einem Zeitstempel. Im Web-Formular aus Kurs 7 war ein Zeitstempel richtig, im Messenger nicht.

Antworten erscheinen im falschen Chat

Die unterhaltung_id geht auf dem Weg durch einen Skill verloren oder wird überschrieben. Jeder Skill muss kanal, unterhaltung_id und antwort_auf unverändert an den Rückkanal geben (Kurs 7, Einheit 4).

Was du gebaut hast​

Dein Assistent ist jetzt dort erreichbar, wo die Menschen ohnehin arbeiten. Und weil Eingang und Ausgang sauber getrennt sind, ist der nächste Messenger nur noch ein weiterer kleiner Kanal-Workflow — der Assistent selbst bleibt unverändert.