Office Assistant
Office Assistant — Briefe, Angebote, Rechnungen, Protokolle aus dem Chat
Section titled “Office Assistant — Briefe, Angebote, Rechnungen, Protokolle aus dem Chat”Office Assistant ist dein universeller Büro-Helfer im Tenant. Sag im Chat was du brauchst — “Schreib einen Brief an Frau Berger”, “Angebot für 3 Tage Beratung à 800 €”, “Hier das Foto, mach mir ein Angebot für die Dachsanierung”, “Protokoll von der heutigen Besprechung” — und du bekommst ein fertiges PDF im Firmendesign zurück. Quotes wandeln sich mit einem Tool-Call in Rechnungen, Statuswechsel vergeben automatisch Angebots- und Rechnungsnummern, und die Dokumente landen direkt in deinem verbundenen ERP.
Was die App macht
Section titled “Was die App macht”Vier Dokumenten-Typen aus einem Chat-Surface:
- Angebote (
quote) — strukturiert, mit Line-Items, Preisen, Gültigkeit, Status-Lifecycle (draft → sent → accepted/rejected). Angebotsnummern werden beisentautomatisch vergeben. - Rechnungen (
invoice) — gleiche Struktur wie Quotes plus Fälligkeit, Zahlungsstatus (draft → sent → paid). Quote → Invoice ist ein Single-Tool-Call (business_convert_quote_to_invoice). - Briefe (
letter) — formloser Text-Output mit Anschreiben- Layout, Empfänger-Block, Unterschrift. Template-basiert, keine Positionen. - Meeting-Protokolle (
minutes) — Teilnehmer + Tagesordnung + Beschlüsse als strukturiertes PDF.
Vier weitere Dinge die der Agent kann:
- Foto/Skizze → Angebot — schick dem Office Assistant ein Foto
oder eine handschriftliche Skizze einer Bauarbeit; er erkennt
Positionen + Maße (
damage_analyze_photos), schlägt Preise aus deiner Preisliste vor (business_lookup_price) und baut daraus ein Angebot. - PDF-Render + Versand channel-agnostisch — das fertige PDF wird
im aktuellen Kanal ausgeliefert (WhatsApp-Dokument, FileCard im
Web-Chat, oder direkt als Anhang an
send_message_to <email>). - ERP-Direktabfragen — wenn dein ERP (Odoo / Business Central / Lexoffice) verbunden ist, kannst du auch direkt nach Daten im ERP fragen (“Welche Rechnungen sind in BC noch offen?”). Sichtbar sind nur die Tools des tatsächlich verbundenen ERPs.
- Document Templates editierbar — die vier Default-Templates
liegen in docs.linkworld.ai-deinem
/user/document-templates-Editor. Section-Reihenfolge, Konditions- Text, Footer, Briefkopf — alles editierbar ohne Code.
Erste Schritte
Section titled “Erste Schritte”-
Office Assistant aktivieren vom Marketplace. Keine M365-/ Telefon-/Cloud-Connections nötig zum reinen Start — du kannst sofort Briefe + Angebote im Chat erzeugen und als PDF herunterladen. Die vier Default-Templates (letter, invoice, minutes, quote) werden bei der Aktivierung in dein Tenant-Workspace kopiert.
-
Brand-Config setzen unter
/user/brand: Firmenname, Adresse, Logo, Default-Farben. Das ist was im PDF-Briefkopf + Footer erscheint. Brand-Config gilt tenant-weit — Office Assistant, alle anderen Apps und der PDF-Renderer teilen sich dieselbe Konfig. Ohne Brand-Config rendern die PDFs mit den Platform-Defaults. -
(Optional) ERP verbinden unter
/user/integrationsfür Direktabfragen + automatisches Persistieren:- Odoo — URL, DB-Name, Login (per User) oder Shared-Mode (ein Service-User für alle Tenant-User).
- Business Central — OAuth-Connection via Microsoft.
- Lexoffice — API-Key.
Ohne ERP-Connection bleiben Quotes/Invoices in
linkworld_business_documents(Tenant-DB) und sind via App-UI + PDF abrufbar; mit Connection werden sie zusätzlich im ERP angelegt. -
(Optional) Preisliste hinterlegen — im rechten Chrome-Panel der App auf den Settings-Tab klicken, dann auf Preisliste. Pro Position: Beschreibung, Einheit (m², lfm, Stk, Std), typischer Preis. Der Agent ruft
business_lookup_pricefür jede Position OHNE expliziten User-Preis auf und nutzt deinenprice_typical— keine halluzinierten Preise aus LLM-Trainingsdaten. Wenn du in einem Handwerks-Gewerk arbeitest, bietet die Preisliste-Tab beim ersten Öffnen einen Starter-Katalog je Gewerk an. -
(Optional) Templates anpassen —
/user/document-templatesöffnet den Template-Editor: Section-Reihenfolge ändern, Konditions-Texte umschreiben, eigene Markdown-Blöcke einfügen. Die Defaults sind deutsche B2B-Standards (Sehr geehrte Damen und Herren, 14 Tage Zahlungsziel, 20% USt), aber alles ist editierbar.
Tag-für-Tag-Nutzung
Section titled “Tag-für-Tag-Nutzung”Quote / Invoice mit eigenen Positionen
Section titled “Quote / Invoice mit eigenen Positionen”Der häufigste Flow. Diktier dem Office Assistant die Positionen im Chat:
“Angebot für Müller GmbH: 3 Tage Beratung à 800 €, 1 Workshop 1.500 €. Fällig in 14 Tagen.”
Der Agent ruft:
business_create_document(doc_type='quote', client_data={name: 'Müller GmbH', ...}, lines=[...], subject, due_date)→ document_idbusiness_render_pdf(document_id)→ file_iddeliver_file(file_id, caption='Angebot ANG-...')— du bekommst das PDF im Chat
Wenn du explizite Preise nennst, nimmt er die wörtlich. Nennst du
keine, ruft er business_lookup_price(query=<description>) und
nimmt deinen price_typical aus der Preisliste. Findet er nichts,
sagt er ehrlich “kein Referenzpreis vorliegt — soll ich die
Leistung zur Preisliste hinzufügen?” — er rät nicht.
Wenn du “schick’s ab” sagst, läuft business_transition_document(id, 'sent') und vergibt die Angebotsnummer (ANG-2026-0042). Bei
“Kunde hat akzeptiert” → accepted. Quote → Invoice:
business_convert_quote_to_invoice(quote_id) macht eine neue
Draft-Rechnung mit denselben Positionen.
Foto/Skizze → Handwerker-Angebot
Section titled “Foto/Skizze → Handwerker-Angebot”Schick ein Foto einer Baustelle oder eine handschriftliche Skizze mit Maßen plus einer kurzen Nachricht:
“Angebot für die Familie Hofer: Dachsanierung Süd-Seite, Material
- Arbeit. Foto anbei.”
Der Agent läuft die Pflicht-Reihenfolge:
damage_analyze_photos(file_ids=[...])— erkennt Positionen (Dachfläche m², Dämmung, Ziegel, Gerüst…) + extrahiert Maße aus der Skizze.- Für JEDE identifizierte Position:
business_lookup_priceaus deiner Preisliste. business_create_document(doc_type='quote', client_data, lines)→ document_idbusiness_render_pdf+deliver_file— PDF im Chat.
Bei Skizzen mit Maßen (3.5 m × 2 m) leitet er die Mengen ab (7 m²). Wenn Kunden-Adressdaten fehlen, lässt er die Felder leer — der Draft bleibt editierbar.
Wann NICHT dieser Flow: Versicherungs-/Schadens-Kontexte (Foto eines konkreten Wasser-/Brand-/Sturm-Schadens, Gutachten) laufen über den Sachverständigen-Agent, nicht über Office Assistant.
Brief / Meeting-Protokoll
Section titled “Brief / Meeting-Protokoll”Formloser Text-Output ohne Positionen:
“Schreib einen Brief an Frau Berger, Kündigung zum Quartalsende mit Bezug auf §2 des Mietvertrags.”
“Protokoll von der heutigen Besprechung: Teilnehmer A, B, C. Beschluss: X. Nächster Termin: …”
Der Agent ruft:
render_document(slug='letter'|'minutes', data={...})— Template mit deinen Werten gefüllt, PDF erzeugtdeliver_file(file_id, caption='Brief an Frau Berger')
Die Templates kennen die Placeholders ({{recipient_name}},
{{subject}}, {{body}} etc.). Wenn ein Pflicht-Placeholder fehlt,
fragt er gezielt nach — kein Raten.
Bestehendes Dokument zeigen / schicken
Section titled “Bestehendes Dokument zeigen / schicken”“Zeig mir das Angebot für Müller”
→ business_list_documents(search='Müller') → wenn eindeutig:
business_render_pdf + deliver_file. Wenn mehrdeutig: kurze
Rückfrage (“Drei Treffer: ANG-2026-0042, ANG-2026-0058, ANG-2025-
0117 — welches?”).
“Schick die Rechnung an [email protected]”
→ business_render_pdf + send_message_to(recipient='buchhaltung@...', subject='Ihre Rechnung RE-...', body='...', attachments=[file_id]).
Security-Gate triggert einen Approval-Request auf WhatsApp bevor
die Mail wirklich rausgeht — du bestätigst, dann erst sendet er.
Dashboard & Detail-View
Section titled “Dashboard & Detail-View”Das App-UI (/apps/office-assistant) zeigt:
- List-View — Tabs für Angebote / Rechnungen / Briefe / Protokolle, KPI-Karten oben (offene Quotes, fällige Rechnungen), Tabelle der letzten Dokumente mit Filter + Suche.
- Detail-View — pro Dokument: Header-Card (Empfänger, Datum, Zahlungsziel, Notizen) editierbar, Line-Items add/edit/remove mit live-Summen, Status-Transitions (sent / accepted / paid / rejected / cancelled), Quote → Invoice Button, PDF-Render mit inline-Preview + Download, Delete-Confirm.
Deep-Link überlebt Reload (M3.13 Welle 1 B) — Detail-Page-URL funktioniert auch nach Browser-Neustart.
Cross-App-Integration
Section titled “Cross-App-Integration”Inbox Manager (OFFER_REQUEST-Pfad): wenn der Inbox Manager eine
eingehende Mail als OFFER_REQUEST klassifiziert, ruft er bilateral
Office Assistant:
POST /documents— Quote-Draft mit Line-Items aus dem Mail- Content (plusdrawings.analyzefalls ein technisches PDF/DXF als Anhang dranhängt)POST /documents/{id}/render-pdf— PDF rendernPOST /documents/{id}/transition(new_status='sent') wenn der User das Reply-Draft freigibt — dann vergibt Office Assistant die Angebotsnummer
Die bilateral Cross-App-Wire wird beim Activate von Inbox Manager auto-approved — keine manuelle Workspace-Control-Freigabe nötig.
ERP-Routing: wenn ein ERP verbunden ist, schreibt
business_create_document zusätzlich ins ERP (Odoo:
account.move, Business Central: salesInvoices, Lexoffice:
/invoices). Die external_id wird im LinkWorld-Document
gespeichert, damit Quotes/Invoices nicht doppelt entstehen.
Was du erwarten kannst
Section titled “Was du erwarten kannst”- PDFs im Firmendesign — Brand-Config unter
/user/brandbestimmt Logo, Briefkopf, Footer, Default-Farben. Templates sind unter/user/document-templateseditierbar (Section-Reihenfolge, Konditions-Texte, eigene Markdown-Blöcke). - Keine halluzinierten Preise —
business_lookup_priceist Pflicht-Tool für jede Position OHNE expliziten User-Preis. Findet sich nichts in der Preisliste, sagt der Agent es ehrlich statt Trainingsdaten-Preise zu raten. - Angebots-/Rechnungsnummern beim Transition — bei
drafthat das Dokument noch keine Nummer.business_transition_document(..., 'sent')ist der Punkt an dem die Nummer vergeben wird (sequenziell pro Tenant, gap-free). Das verhindert Lücken in der Nummern- Sequenz wenn ein Draft verworfen wird. - Channel-Native Auslieferung —
deliver_filewählt das richtige Transport: WhatsApp-Document im WhatsApp-Chat, FileCard im Web- Chat, Email-Attachment wenn der Channel Email ist. Du musst den Channel nicht selbst angeben. - ERP ist optional — ohne verbundenes ERP liegen Quotes/Invoices
in der LinkWorld-Tenant-DB (
linkworld_business_documents) und sind voll funktional (UI, PDF, Status-Lifecycle). ERP-Connection fügt nur die zusätzliche Persistierung dort dazu. - Tenant-Isolation — Dokumente, Clients, Preisliste, Templates sind alle Tenant-scoped. Kein anderer Tenant auf derselben Instanz sieht deine Daten.
- Memory pro Thread — wenn du im selben Chat-Thread gerade ein
Dokument angelegt hast, merkt sich der Agent die
document_idund Folge-Befehle (“zeig’s nochmal”, “schick’s ab”, “mach daraus eine Rechnung”) nutzen IMMER diese ID. Keine Duplikate.
Troubleshooting
Section titled “Troubleshooting”“Das PDF hat das falsche Logo / falsche Adresse” — Brand-Config
prüfen unter /user/brand. Ohne Brand-Config rendern PDFs mit den
Platform-Defaults. Logo-Upload braucht PNG mit transparentem
Hintergrund (max. 2 MB).
“Der Agent hat einen Preis halluziniert” — die betroffene
Position fehlt in deiner Preisliste. Rechtes Chrome-Panel → Settings-
Tab → Preisliste → Position hinzufügen (Beschreibung, Einheit,
typischer Preis). Bei der nächsten Anfrage findet
business_lookup_price den Eintrag und nutzt ihn statt zu raten.
“Die Angebotsnummer fehlt im PDF” — Status ist noch draft. Bei
draft hat das Dokument bewusst keine Nummer (damit die Sequenz
gap-free bleibt). Sag “schick’s ab” oder klick im Detail-View auf
Status → Sent — dann vergibt der Tool-Call die Nummer und re-rendert
das PDF.
“Das Dokument ist nicht im ERP gelandet” — entweder ERP nicht
verbunden (→ /user/integrations), oder die ERP-Connection-Test-
Route gibt einen Fehler (→ ERP-Logs check). Office Assistant
schreibt das Dokument trotzdem in die LinkWorld-DB; sobald die ERP-
Connection wieder läuft, kannst du via “synchronisiere offene
Dokumente ins ERP” einen Backfill-Run anstoßen.
“Foto-Analyse erkennt die Positionen nicht” — damage_analyze_photos
braucht ein ausreichend scharfes Foto + (idealerweise) Maße-
Annotationen direkt im Bild oder in der Nachricht. Bei reinen Innen-
Foto ohne Maße fragt der Agent gezielt nach (“Welche Fläche hat der
Raum?”). Skizzen klappen am besten mit klaren Linien + Maß-Zahlen in
Metern.
“Bei mehreren ERPs zeigt er die falschen Tools” — pro Tenant ist nur EIN ERP aktiv. Wenn du Odoo + Lexoffice gleichzeitig connected hast, gewinnt das in Settings als “primary” markierte. Die anderen Tools sind dem Agent dann gar nicht sichtbar — kein Risiko von Cross-ERP-Schreibvorgängen.
“Quote → Invoice zeigt ‘transition not allowed’” — die Quote
muss vorher auf sent oder accepted sein. Aus draft direkt zu
einer Rechnung konvertieren ist gesperrt (würde eine
Angebotsnummern-Lücke erzeugen). Erst business_transition_document
auf sent, dann konvertieren.
“Der Agent fragt jedes Mal nach der Empfänger-Adresse” — wenn du
denselben Client häufig nutzt, leg ihn einmal via
business_create_client an (oder Detail-View → Client picker). Beim
nächsten Angebot reicht “für Müller GmbH” — Office Assistant
findet den Client und übernimmt alle Adressfelder.
“Das Daily-Heartbeat-Logo blinkt nicht” — Office Assistant hat keinen Heartbeat. Die App ist reaktiv: sie wird aktiv wenn du im Chat etwas anforderst oder Inbox Manager via Cross-App-Call ein OFFER_REQUEST übergibt. Wenn nichts läuft, ist das die korrekte Idle-State.
Reference
Section titled “Reference”This section is auto-generated from the app’s manifest. It updates whenever the app publishes a new version.
Required scopes
Section titled “Required scopes”document.draftdocument.renderfiles.readfiles.writefiles.sharemail.readmail.sendwhatsapp.sendvision.analyzeerp.readerp.write