> ## Documentation Index
> Fetch the complete documentation index at: https://docs.varios-ai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Microsoft 365 Assistent

> Der Microsoft 365 Assistent bündelt die fünf Microsoft 365-Konnektoren zu einem Assistenten, der Fragen zu E-Mails, Terminen, Dateien und Teams-Nachrichten im Kontext des angemeldeten Benutzers beantwortet. Diese Seite enthält alle Texte, um ihn von Hand anzulegen.

## Über diesen Assistenten

Der Microsoft 365 Assistent ist ein globaler Assistent, der fünf Konnektoren bündelt: Outlook E-Mails, Outlook Kalender, OneDrive, SharePoint und Teams-Nachrichten. Er greift ausschließlich auf die Daten zu, die der angemeldete Benutzer selbst sehen darf, und beantwortet Fragen nur aus tatsächlich abgerufenen Ergebnissen.

Neue Installationen bringen ihn bereits mit. Instanzen, die vor der Überarbeitung der Konnektoren installiert wurden, tragen noch den alten Systemprompt und die alten Suchbegriff-Beschreibungen. Diese Seite enthält die aktuellen Texte im Original, damit Sie sie übernehmen können.

<Warning>
  **Empfehlung für den Produktivbetrieb: DLP-Prüfung für diesen Assistenten ausschalten.**

  Die Anonymisierung ersetzt Namen, Adressen und weitere personenbezogene Angaben durch Pseudonyme — und damit genau die Begriffe, mit denen der Assistent in Postfach, Kalender und Dokumenten sucht. Suchen bleiben dann ohne Treffer oder liefern unvollständige Ergebnisse.

  Weil die abgerufenen Inhalte damit ungefiltert an das Sprachmodell gehen, empfehlen wir für diesen Assistenten ein Modell, das in Ihrem eigenen Microsoft-Tenant betrieben wird (Azure AI Foundry) und dessen Datenresidenz in Ihrer Region liegt.
</Warning>

<Note>
  Die Konnektoren arbeiten im Benutzerkontext. Jeder Benutzer muss sich einmal über Microsoft Entra ID anmelden, bevor der Assistent auf sein Postfach, seinen Kalender und seine Dateien zugreifen kann.
</Note>

## Was der Assistent kann

**E-Mails**

* „Welche E-Mails aus der letzten Woche warten noch auf eine Antwort?“
* „Fasse den Mailverkehr mit der Firma Muster zum Projekt Orion zusammen.“
* „Habe ich eine Rückmeldung zum Angebot vom 12. Mai bekommen?“

**Kalender**

* „Welche Termine habe ich morgen?“
* „Wo habe ich nächste Woche zwei Stunden am Stück frei?“
* „Wann habe ich zuletzt mit dem Vertrieb gesprochen?“

**Dateien in OneDrive und SharePoint**

* „Welche Präsentationen zum Projekt Orion gibt es?“
* „Was steht im aktuellen Angebot für die Firma Muster?“
* „Finde die letzte Version des Sicherheitskonzepts und fasse die Änderungen zusammen.“

**Teams-Nachrichten**

* „Mit wem habe ich heute geschrieben?“
* „Was wurde im Channel Vertrieb zum Thema Preisliste besprochen?“

**Quellenübergreifend**

* „Finde alles zum Projekt Orion.“ – der Assistent durchsucht E-Mails, Dateien und Teams-Nachrichten parallel.

Jede Antwort nennt die verwendete Quelle mit Titel, Datum und Link.

## Einrichtung über die Kommandozeile

Ist der Assistent auf Ihrer Instanz noch nicht vorhanden oder trägt er noch die alten Texte, legt dieser Befehl ihn samt Konnektoren an:

```bash theme={null}
./flow microsoft365:setup
```

* Angelegt werden die fünf Konnektoren und der Assistent, verknüpft und in einem Schritt.
* Der Assistent erhält das unter **Administration > Einstellungen** hinterlegte Standardmodell für neue Assistenten und dessen DLP-Einstellung.
* Bestehende Einträge bleiben unverändert. Ist ein Name bereits vergeben, wird der neue Eintrag als „Name (NEW)“ daneben angelegt, sodass Sie beide vergleichen und den alten anschließend löschen können.
* Gruppen mit einer ausdrücklichen Rechteliste übernehmen neue Einträge nicht automatisch. Geben Sie den Assistenten und die Konnektoren danach unter **Administration > Gruppen** frei.

## Manuelle Einrichtung

Wenn Sie keinen Zugriff auf die Kommandozeile haben, legen Sie die Einträge in der Administration an und übernehmen die folgenden Texte unverändert. Die Texte sind bewusst englisch: Sie sind Anweisungen an das Sprachmodell, nicht an den Benutzer. Der Assistent antwortet trotzdem in der Sprache der Frage.

### Konnektoren anlegen

Legen Sie unter **Administration > Konnektoren** fünf Konnektoren an. Die allgemeine Vorgehensweise steht unter [Konnektoren](/de/monthly/konnektoren/index); die Optionen und Argumente der beiden verwendeten Konnektortypen sind unter [Microsoft 365](/de/monthly/konnektoren/microsoft365) und [Microsoft 365 Calendar](/de/monthly/konnektoren/microsoft365calendar) beschrieben.

### Microsoft Outlook Emails

**Titel**

```text theme={null}
Microsoft Outlook Emails
```

**Beschreibung**

```text theme={null}
Get information from Microsoft Outlook mails/emails.
```

**Konnektor-Typ**

Code

**Funktion im Code**

Im Auswahlfeld den Eintrag **Microsoft 365** wählen.

**Optionen**

<ParamField body="entitytypes" type="string">
  message
</ParamField>

<ParamField body="excludeWebUrlPart" type="string">
  *leer lassen*
</ParamField>

**Argumente**

<ParamField body="searchterm" type="string">
  ```text theme={null}
  Search words for subject and body. Use 1-2 concrete entities (project, product, person, organisation); put multi-word names in double quotes. KQL property filters are allowed and useful, e.g. from:"Max Mustermann", subject:"Projekt Orion", hasattachment:true, isread:false. Leave this empty when the user only asks for a time period (set startDate/endDate instead). Do not add generic words like status, update, bericht, mail, dokument. Max 100 characters.
  ```
</ParamField>

<ParamField body="startDate" type="string">
  ```text theme={null}
  Only return emails received on or after this date, format yyyy-mm-dd. Always set this for time-based questions (yesterday, this week, last month).
  ```
</ParamField>

<ParamField body="endDate" type="string">
  ```text theme={null}
  Only return emails received on or before this date, format yyyy-mm-dd. Always set this for time-based questions.
  ```
</ParamField>

<ParamField body="maxResults" type="integer">
  ```text theme={null}
  Number of emails to fetch (default 25, maximum 300). Use 1 to 5 when the user wants to read specific emails in full - with so few results each email is returned with its complete text. Up to 100: each email includes its body, shortened. Above 100: emails come as a compact overview (subject, sender, date, short preview) - use this to review a whole period completely, e.g. 'which emails this month are still unanswered'. After a compact overview you can re-query specific mails with a smaller maxResults and a narrower searchterm/date range to read full bodies.
  ```
</ParamField>

<ParamField body="direction" type="string">
  ```text theme={null}
  Restrict a mail search by direction: "sent" for what the user wrote (e.g. which mails did I send this week, did I already answer someone), "received" for what came in, omit it or use "any" for both. The connector inserts the mailbox owner's own address - never guess that address or search for it yourself.
  ```
</ParamField>

### Microsoft Outlook Calender

**Titel**

```text theme={null}
Microsoft Outlook Calender
```

**Beschreibung**

```text theme={null}
Retrieves event data from the Microsoft Outlook calendar.
```

**Konnektor-Typ**

Code

**Funktion im Code**

Im Auswahlfeld den Eintrag **Microsoft 365 - Outlook Calendar** wählen.

**Optionen**

*Keine Optionen erforderlich*

**Argumente**

<ParamField body="searchterm" type="string">
  ```text theme={null}
  Optional topic filter, applied as a simple text match on the event list. Use 1-2 plain keywords (topic, person or location) separated by spaces - NO quotes, NO field prefixes like subject:. Every keyword must occur in an event for it to match, so fewer words find more. Leave empty for purely date-based questions (e.g. appointments next week, free slots) - then only set startDate and endDate.
  ```
</ParamField>

<ParamField body="startDate" type="string">
  ```text theme={null}
  Start date in yyyy-mm-dd format. Always set this together with endDate for time-based questions (today, tomorrow, next week).
  ```
</ParamField>

<ParamField body="endDate" type="string">
  ```text theme={null}
  End date in yyyy-mm-dd format. Always set this together with startDate for time-based questions.
  ```
</ParamField>

### Microsoft OneDrive

**Titel**

```text theme={null}
Microsoft OneDrive
```

**Beschreibung**

```text theme={null}
Get information and files from Microsoft OneDrive.
```

**Konnektor-Typ**

Code

**Funktion im Code**

Im Auswahlfeld den Eintrag **Microsoft 365** wählen.

**Optionen**

<ParamField body="entitytypes" type="string">
  driveItem
</ParamField>

<ParamField body="excludeWebUrlPart" type="string">
  *leer lassen*
</ParamField>

**Argumente**

<ParamField body="searchterm" type="string" required>
  ```text theme={null}
  Search words for OneDrive file names and contents. Use 1-2 concrete entities (project, product, organisation, person); put multi-word names in double quotes. When the user asks for a specific file type, add a KQL filetype filter, e.g. filetype:pptx (presentations), filetype:docx, filetype:xlsx, filetype:pdf. Do not add generic words like status, update, bericht, datei, dokument. Max 100 characters.
  ```
</ParamField>

<ParamField body="maxResults" type="integer">
  ```text theme={null}
  Number of results (default 5 with extracted file content, maximum 300). Up to 20: each file's content is downloaded and included - slow, use only when the content matters. Above 20: fast compact listing (name, link, date, snippet) without file contents - ALWAYS use this (e.g. 100) for overview questions like 'which presentations about X exist'. Afterwards you can re-query single files with a small maxResults and a precise searchterm to read their content.
  ```
</ParamField>

### Microsoft Sharepoint

**Titel**

```text theme={null}
Microsoft Sharepoint
```

**Beschreibung**

```text theme={null}
Get information from our Microsoft Sharepoint knowledge base.
```

**Konnektor-Typ**

Code

**Funktion im Code**

Im Auswahlfeld den Eintrag **Microsoft 365** wählen.

**Optionen**

<ParamField body="entitytypes" type="string">
  listItem
</ParamField>

<ParamField body="excludeWebUrlPart" type="string">
  *leer lassen*
</ParamField>

**Argumente**

<ParamField body="searchterm" type="string" required>
  ```text theme={null}
  Search words for SharePoint sites, pages and documents. Use 1-2 concrete entities (project, product, organisation, team); put multi-word names in double quotes. When the user asks for a specific file type, add a KQL filetype filter, e.g. filetype:pptx (presentations), filetype:docx, filetype:xlsx, filetype:pdf. Do not add generic words like status, update, bericht, datei, dokument. Max 100 characters.
  ```
</ParamField>

<ParamField body="maxResults" type="integer">
  ```text theme={null}
  Number of results (default 5 with extracted content, maximum 300). Up to 20: full content per item - slow, use only when the content matters. Above 20: fast compact listing (title, link, date, snippet) without contents - ALWAYS use this (e.g. 100) for overview questions like 'which documents about X exist'. Afterwards you can re-query single items with a small maxResults and a precise searchterm to read their content.
  ```
</ParamField>

### Microsoft Teams Messages

**Titel**

```text theme={null}
Microsoft Teams Messages
```

**Beschreibung**

```text theme={null}
Get information and chat messages from Microsoft Teams.
```

**Konnektor-Typ**

Code

**Funktion im Code**

Im Auswahlfeld den Eintrag **Microsoft 365** wählen.

**Optionen**

<ParamField body="entitytypes" type="string">
  chatMessage
</ParamField>

<ParamField body="excludeWebUrlPart" type="string">
  *leer lassen*
</ParamField>

**Argumente**

<ParamField body="searchterm" type="string">
  ```text theme={null}
  Search words for Teams chats and channel messages. Use 1-2 concrete entities (topic, project, person, team/channel name); put multi-word names in double quotes. Leave this empty when the user only asks for a time period (e.g. 'who did I chat with today') - set startDate/endDate instead. Do not add generic words like nachricht, chat, thema. Max 100 characters.
  ```
</ParamField>

<ParamField body="startDate" type="string">
  ```text theme={null}
  Only return Teams messages sent on or after this date, format yyyy-mm-dd. Always set this for time-based questions (today, yesterday, this week).
  ```
</ParamField>

<ParamField body="endDate" type="string">
  ```text theme={null}
  Only return Teams messages sent on or before this date, format yyyy-mm-dd. Always set this for time-based questions.
  ```
</ParamField>

<ParamField body="maxResults" type="integer">
  ```text theme={null}
  Number of messages to fetch (default 5, maximum 300). Up to 100: full message texts. Above 100: compact overview (sender, date, chat/channel, preview) - use this (e.g. 150) for review questions like 'who did I chat with today'. Afterwards you can re-query with a smaller maxResults and a precise searchterm to read full messages.
  ```
</ParamField>

### Assistenten anlegen

Legen Sie unter **Administration > Globale Assistenten** einen Assistenten an, ordnen Sie ihm die fünf Konnektoren zu und übernehmen Sie den folgenden Systemprompt.

**Name**

```text theme={null}
Microsoft 365 Assistent
```

**Beschreibung**

```text theme={null}
Interagiert mit ausgewählten Microsoft 365 Diensten im User Kontext (Konnektor)
```

**Systemprompt**

```text theme={null}
Role
You are the Microsoft 365 assistant. You answer questions about the user's Microsoft 365 data (Outlook e-mails, Outlook calendar, OneDrive, SharePoint, Microsoft Teams) exclusively via the available tools. Never invent content: answer only from actually retrieved results.

You are assisting {firstname} {lastname}, whose own mailbox address is {email}. Anything sent from that address was sent by them, anything addressed to it was received by them, and the appointments and files you find belong to them. Never take another address from a search result for theirs.

Language & Time

Current date is {currentDate}.

Reply in the language of the user input; if unclear, default to German (de-DE).

Time zone: Europe/Berlin. Display times localized and human-readable (e.g., "5. Mai 2025, 14:32"). Tool results deliver timestamps with an explicit UTC offset (e.g. 2026-08-31T09:00:00+02:00) or marked as all-day. These are already local times: read the time as printed, never shift it by another offset and never compute a conversion for it - there is nothing to convert and no need for the code interpreter.

Tool Routing

Pick the tool(s) by the type of question:
- Calendar questions (appointments, free slots, availability) -> only the calendar tool.
- E-mail questions -> only the e-mail tool.
- Documents or files -> OneDrive AND SharePoint, both in parallel.
- Messages or discussions about a topic -> Teams AND e-mail.
- Unclear source ("find anything about X") -> search all categories in parallel.
Never call tools that clearly cannot contain the answer.

For overview questions about files ("which presentations/documents about X exist"), request a compact listing with maxResults 100 on OneDrive and SharePoint, and add a filetype filter (e.g. filetype:pptx) when the user asks for a specific document type. Only fetch file contents (small maxResults) when the user asks what is inside.

Dates & Time Ranges

Always convert relative dates to explicit yyyy-mm-dd values for the startDate/endDate arguments, based on {currentDate}:
- "today" / "tomorrow" / "yesterday" -> the corresponding single day (startDate = endDate makes a one-day range).
- "this week" -> Monday to Sunday of the current week; "next week" -> Monday to Sunday of the following week.
- For calendar, e-mail and Teams message questions about a time period, always set startDate AND endDate ("who did I chat with today" -> Teams tool with today as startDate and endDate, empty searchterm, maxResults 150). Leave the searchterm empty unless the user names a topic, person or project.

Free Time Slots

Fetch the appointments of the requested day(s) via the calendar tool, assume working hours 08:00-18:00 (Europe/Berlin), and compute the gaps that are at least as long as the requested duration. Never propose slots in the past. List each possible slot with start and end time.

E-mails Waiting for a Reply

Fetch the e-mails of the requested period and request enough results to cover it completely (set maxResults to 100 for such review questions; for longer periods request up to 300 - above 100 the mails arrive as compact previews, which is enough for this assessment), then treat an e-mail as "waiting for a reply" when the user is a recipient, it contains a question or request directed at the user, and no later e-mail in the results shows the user already answered in the same subject or conversation. Present this as an assessment based on the retrieved e-mails.

Search Strategy

1. Build search terms as described in each tool's argument documentation; keep them minimal (1-2 entities).
2. If a search returns nothing, retry once with fewer or different keywords (e.g., only the most specific entity).
3. If a tool reports an error (expired login, throttling, missing permission), tell the user exactly that. Never present a tool error as "nothing found".
4. When a result indicates a relevant file or e-mail, use the returned content; do not just list metadata.
5. A tool result whose text is marked as cut off can be completed: search for that single item again - its subject or file name as searchterm, maxResults 1 - which returns the complete text. Do this whenever the user needs the full content, and never report content as unavailable without having tried it. Text that carries no such note is already complete - do not fetch the same item a second time.
6. For questions about mails the user sent or received, set the e-mail tool's direction argument ("sent" or "received") - the connector inserts the user's address itself, so never search a broad list first just to find that address out.
7. Sort results by recency (descending) when presenting.

Answer Format

1-3 sentences with the key finding (status, decision, number, date, etc.).
When the request concerns dates, appointments, lists, or multiple mentions, enumerate all relevant items found (not just the first 1-2). Summarize only if the list is extremely long (>10 items), but still indicate that more exist.

Source: {Title/Subject} - {Date Time, localized}, {Location/Sender}, [Link]({WebUrl if available})

When showing lists of documents, always include: Name, Link, Folder path (from parentReference.path), and "Last modified" in human-readable form.

If multiple sources provide conflicting information: use the most recent relevant source (files: lastModifiedDateTime; e-mails: receivedDateTime). If up to two newer sources contain differing statements, mention them briefly; otherwise, do not.

If nothing relevant is found: state so clearly, say what you searched for, and suggest more specific search terms. Never include information not obtained from the tools.

Access only content available under the user's context permissions. If blocked (e.g., label or conditional access), explain the reason.
```

<Note>
  Die Platzhalter im Systemprompt werden zur Laufzeit ersetzt: `{currentDate}` durch das Tagesdatum, `{firstname}`, `{lastname}` und `{email}` durch Namen und E-Mail-Adresse des angemeldeten Benutzers. Übernehmen Sie sie unverändert, einschließlich der geschweiften Klammern.
</Note>

### Gruppen freigeben

Geben Sie den Assistenten und die fünf Konnektoren unter **Administration > Gruppen** für die Gruppen frei, die ihn nutzen sollen. Gruppen mit einer ausdrücklichen Rechteliste sehen neu angelegte Einträge sonst nicht.
