Eerste uitgave: drie Copilot-handleidingen (Schoolgids-assistent, Ouderbrief-assistent, Toetsweekplanner)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Guido van Dijk
2026-09-21 13:48:45 +02:00
commit a9c9d2a3ae
57 changed files with 1444 additions and 0 deletions
+10
View File
@@ -0,0 +1,10 @@
# Gebouwde uitvoer: maak je met python3 build.py in elke map. De PDF's staan wel in git.
*.html
*.docx
!00-presentatie/project/slides/*.html
__pycache__/
.*-embed.html
# Lokaal gereedschap, niet voor de uitgave
_gereedschap/extract.py
NOTITIES-intern.md
Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

+7
View File
@@ -0,0 +1,7 @@
#!/usr/bin/env python3
"""Bouwt handleiding-copilot-schoolgids-assistent.html, .pdf en .docx. Gebruik: python3 build.py
Het echte werk staat in ../_gereedschap/build_handleiding.py (gedeeld door alle handleidingen)."""
import runpy, sys
from pathlib import Path
sys.argv = ["build_handleiding.py", str(Path(__file__).resolve().parent / "handleiding-copilot-schoolgids-assistent.md")]
runpy.run_path(str(Path(__file__).resolve().parent.parent / "_gereedschap" / "build_handleiding.py"), run_name="__main__")
@@ -0,0 +1,360 @@
<!--
VOOR DE BEWERKER
Handleiding 1 van de Copilot-reeks: de Schoolgids-assistent in de Agent Builder van Microsoft 365
Copilot. Beelden in beelden/, vastgelegd op 21 september 2026 (Microsoft 365 Copilot Chat, werkaccount
zonder Microsoft 365 Copilot-licentie, Nederlandse interface).
Omzetten naar HTML, PDF en Word: python3 build.py
(python-markdown, google-chrome en libreoffice; opmaak en logo in _gereedschap/build_handleiding.py)
Opmaakafspraken (zie ook README.md):
- Genummerde lijst = handelingen (klikken, kiezen)
- Tabel "Wat je intypt" = waarden voor formuliervelden
- Codeblok (```) = tekst die letterlijk overgetypt wordt (label "Intypen")
- Blockquote (>) = valkuil of tip (oranje kader)
- Blockquote die begint met **Zelf kiezen** = keuzemoment voor de deelnemer (groen kader)
Bestanden in deze map:
schoolgids-voorbeeldcollege.pdf de fictieve schoolgids (zelfde als in de Dify-reeks)
instructies.txt de volledige instructie van de agent, om te plakken
-->
# Bouwen in Microsoft 365 Copilot: de Schoolgids-assistent
**Handleiding 1 van de reeks Copilot-agents voor school**
LeX Consultancy B.V. · 21 september 2026
Je bouwt een agent in Microsoft 365 Copilot die vragen van ouders en leerlingen over de schoolregels beantwoordt. Geen code, geen aparte omgeving: alles gebeurt in het Copilot-venster dat je school waarschijnlijk al heeft. Aan het eind heb je een agent met een eigen naam, een instructie met de schoolgids erin, drie startvragen, en een deelknop waarmee je hem aan collega's geeft.
Deze handleiding is de tegenhanger van handleiding 2 uit de Dify-reeks (een agent met eigen kennisbank). Wie die kent, herkent alles; wie Dify nooit zag, kan hier gewoon beginnen.
Deze handleiding volgt Microsoft 365 Copilot zoals het er op 21 september 2026 uitziet, in een werkaccount met **Copilot Chat** (de laag die bij elke Microsoft 365-licentie zit) en zonder de betaalde Microsoft 365 Copilot-licentie. Microsoft verandert de schermen regelmatig: wijkt je scherm af, volg dan wat je ziet en niet wat hier staat.
**Zo lees je deze handleiding**
| Vorm | Betekenis |
| --- | --- |
| 1. 2. 3. | Wat je doet: klikken, kiezen, openen |
| **Vet** | Een knop, menu of veld zoals het op je scherm staat |
| Tabel *Wat je intypt* | Waarden die je in een formulierveld zet |
| Grijs kader *Intypen* | Tekst die je letterlijk overtypt of plakt |
| Oranje kader | Een valkuil die je anders zelf ontdekt |
| Groen kader *Zelf kiezen* | Een plek waar je ons voorbeeld kunt vervangen door je eigen materiaal, stijl of prompt |
> **Welke licentie heb je?** Linksonder in Copilot staat het bij je naam. Staat er **Copilot Chat (Basic)**, dan heb je de gratis laag: je kunt agents bouwen en delen, maar geen bestanden of SharePoint-mappen als kennis koppelen. Staat er **Microsoft 365 Copilot**, dan kun je in stap 4 wel bestanden en sites koppelen. Deze handleiding werkt in beide gevallen; waar het verschil uitmaakt, staat het erbij.
---
<!-- ontwerpkaart -->
## De ontwerpkaart van deze app
Voordat we gingen klikken, is deze kaart ingevuld (de lege kaart staat in de bijlage Ontwerpkaart van de Dify-reeks). Vul voor je eigen agent dezelfde vijf vakken in.
| 1. Voor wie | 2. Wat gaat erin |
| --- | --- |
| Een ouder die om 21:30 wil weten of zijn kind morgen met een ziekmelding naar de receptie moet of dat hij kan bellen. Heeft de schoolgids nooit gelezen. Of een leerling die wil weten wanneer hij een toets kan inhalen. | Eén vraag in gewone taal, in de chat. Geen formulier. |
| 3. Wat komt eruit | 4. Waar moet hij zich aan houden |
| --- | --- |
| Een antwoord van maximaal vijf zinnen in gewoon Nederlands, met het hoofdstuk van de schoolgids waar het uit komt. Of: "dat staat niet in de schoolgids, bel de receptie". | Alleen antwoorden uit de schoolgids (in de instructie); niets verzinnen; bij twijfel doorverwijzen; bij vragen over één leerling geen oordeel, maar de mentor. |
**5. Waaraan zie je dat het werkt**
| Test | Wat gaat erin | Wat moet eruit komen |
| --- | --- | --- |
| 1 | Mijn kind is ziek. Hoe en wanneer meld ik dat? | Voor 8.15 uur, ouderportaal of receptie, met verwijzing naar hoofdstuk 2 |
| 2 | Wanneer is de kerstvakantie? | "Dat staat niet in de schoolgids" en een verwijzing naar de receptie |
| 3 (de lastige) | Mijn zoon uit 2B heeft al twaalf uur gespijbeld. Wordt hij van school gestuurd? | Geen oordeel over die leerling; wel de regel uit de schoolgids en de mentor als aanspreekpunt |
<!-- /ontwerpkaart -->
## Lees dit eerst: wat mag en wat niet
Een schoolgids bevat geen persoonsgegevens, en een agent die eruit voorleest ook niet. Toch twee afspraken:
| Wat | Afspraak |
| --- | --- |
| Wat je in de instructie zet | Alleen tekst die openbaar mag zijn. De schoolgids staat toch al op de website. Geen klassenlijsten, geen namen van leerlingen, geen interne notities. |
| Wie de agent gebruikt | Een agent in Copilot is alleen bereikbaar voor mensen die in het Microsoft 365-tenant van de school zitten en de link of de rechten hebben. Ouders zitten daar meestal niet in. Deze agent is dus in de praktijk voor collega's en, als de school leerlingaccounts heeft, voor leerlingen. Voor ouders is dit een prototype om te laten zien wat kan. |
Verder geldt wat voor alle AI-tools op school geldt: Copilot Chat met een werkaccount valt onder de verwerkersovereenkomst van de school met Microsoft, en de chats worden niet gebruikt om modellen te trainen. Vraag bij twijfel de privacyfunctionaris.
---
## Voorbereiding
- Een werkaccount van school met Microsoft 365. Je logt in op **m365.cloud.microsoft** (of via de Copilot-app in Teams of Office).
- In het linkermenu staat een kopje **Agents** met daaronder **Nieuwe agent**. Zie je dat niet, dan heeft de beheerder van je school het maken van agents uitgezet; vraag het na bij ICT.
- De fictieve schoolgids `schoolgids-voorbeeldcollege.pdf` uit deze map, om te lezen. De tekst ervan staat al in `instructies.txt`; je hoeft niets over te typen.
> **Zelf kiezen: je eigen document.** Wil je meteen met eigen materiaal werken, kies dan een document waar collega's of leerlingen nu al vragen over stellen: het examenreglement, de studiewijzer van een vak, het protocol voor excursies. Voorwaarde in de gratis laag: de tekst moet in de instructie passen, en die mag 8.000 tekens lang zijn. Dat is ongeveer twee A4. Een langer document knip je terug tot de regels die echt gevraagd worden, of je neemt de betaalde route uit stap 4.
---
## Stap 1. Open de Agent Builder
1. Ga naar m365.cloud.microsoft en log in met je werkaccount. Je ziet het chatvenster van Copilot met links het menu.
![Het startscherm van Copilot, met links het kopje Agents](beelden/01-copilot-start.jpg)
2. Klik in het linkermenu op **Nieuwe agent**. De **Agent Builder** opent. Bovenaan kun je in gewone taal beschrijven wat je wilt; daaronder staan sjablonen en, onder **Mijn agents**, de agents die je al maakte.
![De Agent Builder: beschrijven, sjablonen, mijn agents](beelden/02-agent-builder-start.jpg)
3. Klik rechtsboven op **Overslaan**. Je gaat het formulier zelf invullen; dat is preciezer dan het via de chat laten doen.
![Het lege formulier Configureren](beelden/03-configureren-leeg.jpg)
> Je kunt de agent ook laten bouwen door met de Agent Builder te chatten ("Maak een agent die vragen over de schoolgids beantwoordt"). Dat werkt, maar je weet dan minder goed wat er in de instructie is gekomen, en die instructie is precies waar het om draait. In deze handleiding vul je alles zelf in. De chat links is later handig voor kleine aanpassingen ("maak de toon vriendelijker").
---
## Stap 2. Geef de agent een naam en een beschrijving
1. Klik op het potloodje achter **Nieuwe agent** en vervang de naam.
2. Klik op **Beschrijf je agent** en typ de beschrijving.
| Veld op het scherm | Wat je intypt |
| --- | --- |
| Naam | `Schoolgids-assistent` |
| Beschrijving | `Beantwoordt vragen van ouders en leerlingen over de schoolregels van Het Voorbeeldcollege, op basis van de schoolgids.` |
De beschrijving zien gebruikers boven het chatvenster en in de Agent Store. Zeg dus wat de agent doet en voor wie, niet hoe hij werkt.
---
## Stap 3. Schrijf de instructie
De instructie is het hart van de agent: wie hij is, hoe hij antwoordt, en in dit geval ook de kennis zelf. Omdat de gratis laag geen bestanden als kennis toelaat, zetten we de schoolgids in de instructie. Dat past: de schoolgids is 2.400 tekens, de instructie mag er 8.000 zijn.
1. Klik in het veld **Instructies**.
2. Plak de volledige tekst uit `instructies.txt`. Het begin ziet er zo uit:
```
Je bent de Schoolgids-assistent van Het Voorbeeldcollege. Je beantwoordt vragen van ouders en leerlingen over de schoolregels. Je gebruikt alleen de schoolgids hieronder. Staat het antwoord er niet in, dan zeg je dat en verwijs je naar de receptie (046-1234567) of de mentor. Je verzint geen regels, tijden of namen.
Zo antwoord je:
- Kort en concreet, in gewoon Nederlands (taalniveau B1). Ouders spreek je aan met u, leerlingen met je; kies op basis van de vraag.
- Noem het hoofdstuk van de schoolgids waar het antwoord staat, bijvoorbeeld (schoolgids, hoofdstuk 2).
- Bij een vraag over een individuele leerling (cijfers, verzuim, ondersteuning) geef je geen oordeel en verwijs je naar de mentor.
- Je vraagt niet naar namen van leerlingen en bewaart niets.
SCHOOLGIDS HET VOORBEELDCOLLEGE, schooljaar 2026-2027
1. Lestijden
De school hanteert een 50-minutenrooster. ...
```
Daarna volgen de zes hoofdstukken van de schoolgids, letterlijk. Onder het veld telt Copilot mee: **3.063/8.000**.
![Naam, beschrijving en het begin van de instructie](beelden/04-naam-en-instructies.jpg)
De instructie heeft drie delen, en die volgorde is niet toevallig:
- **Wie en waarvoor** (de eerste alinea): rol, doelgroep, en de belangrijkste regel: alleen de schoolgids, niets verzinnen, anders doorverwijzen.
- **Hoe je antwoordt** (de opsomming): lengte, taalniveau, aanspreekvorm, bronvermelding, en wat de agent niet doet.
- **De kennis** (de schoolgids): als platte tekst, met de hoofdstuknummers erin, zodat de agent ernaar kan verwijzen.
> Plak de schoolgids als gewone tekst, niet als tabel. De lestijdentabel uit de PDF is in `instructies.txt` omgezet naar één regel per lesuur ("Lesuur 1: 8.30-9.20."). Tabellen die je uit een PDF kopieert, komen vaak verhaspeld in het veld terecht; kijk het na.
> **Zelf kiezen: de toon.** "Ouders met u, leerlingen met je" is een keuze. Een school die iedereen tutoyeert, haalt die zin weg. Een school die de agent alleen voor personeel bedoelt, schrijft "Je spreekt collega's aan met je" en haalt de zin over ouders weg. Wat je ook kiest: zet het in de instructie, dan hoef je het niet in elke vraag te herhalen.
---
## Stap 4. Kijk wat er onder Kennis kan
Scroll naar **Kennis**. Hier koppel je bronnen die de agent mag raadplegen naast zijn instructie.
1. Klik op **Kennis toevoegen**. In de gratis laag verschijnt één veld: **Voer een koppeling in**.
![Kennis toevoegen: alleen een koppeling](beelden/05-kennis-koppeling.jpg)
Dat veld is voor het adres van een openbare website. Wat je hier invult, wordt geen kennisbank maar een **zoekgebied**: de agent zet dan **Webzoekopdracht** aan en beperkt het zoeken tot die site. Wij probeerden het adres van een PDF op een eigen server; Copilot maakte er de site van, en zocht daar via Bing. Werkt alleen als Bing die site kent.
![Een koppeling wordt een zoekgebied onder Webzoekopdracht](beelden/06-webzoekopdracht-site.jpg)
2. Voor deze agent voegen we niets toe. Heb je per ongeluk een koppeling toegevoegd, klik er dan op om hem te verwijderen en zet **Webzoekopdracht** uit.
3. Klik op het tandwiel rechts van Kennis. Je ziet de **Kennisinstellingen**: de agent mag documenten, grafieken en code maken en afbeeldingen genereren (beide standaard aan), en je kunt **Modelkennis ontmoedigen** (standaard uit).
![Kennisinstellingen: documenten maken, afbeeldingen maken, modelkennis ontmoedigen](beelden/07-kennis-instellingen.jpg)
4. Laat de instellingen staan en sluit het venster. **Modelkennis ontmoedigen** is de knop voor later: gaat de agent in stap 6 dingen vertellen die niet in de schoolgids staan, zet hem dan aan. In onze test was de regel "Je gebruikt alleen de schoolgids hieronder" in de instructie genoeg.
> **Webzoekopdracht uit.** Voor een schoolgids-agent wil je geen webresultaten: die halen regels van andere scholen binnen. Laat de schakelaar uit, tenzij je juist wilt dat de agent op een website van jou zoekt.
> **Zelf kiezen: kennis als je Microsoft 365 Copilot hebt.** Met de betaalde licentie staan onder Kennis meer opties: bestanden uploaden, een SharePoint-site of -map, een OneDrive-map, Teams-kanalen. Dan zet je de schoolgids niet in de instructie maar koppel je de PDF op SharePoint. Voordeel: de agent leest altijd de actuele versie, en de instructie blijft kort. De instructie verandert dan in: "Je gebruikt alleen de gekoppelde schoolgids." Alles in stap 3 blijft verder gelijk.
---
## Stap 5. Voeg startvragen toe
Onder **Voorgestelde prompts** staan drie rijen. Wat je hier invult, ziet de gebruiker als knoppen boven het chatvenster. Goede startvragen laten zien waar de agent voor is; dat scheelt een hoop "wat kun je?".
1. Vul de drie rijen in.
| Titel | Bericht |
| --- | --- |
| `Ziek melden` | `Mijn kind is ziek. Hoe en wanneer meld ik dat?` |
| `Toets gemist` | `Ik heb een toets gemist. Wanneer kan ik die inhalen?` |
| `Verlof aanvragen` | `Kan ik verlof aanvragen buiten de schoolvakanties?` |
![De drie startvragen](beelden/08-voorgestelde-prompts.jpg)
> Elke rij moet compleet zijn, titel én bericht. Zolang een rij half is ingevuld, blijft de knop **Maken** grijs zonder dat Copilot zegt waarom.
---
## Stap 6. Test in Voorbeeld
Rechtsboven staan twee tabbladen: **Configureren** (waar je nu bent) en **Voorbeeld**. In Voorbeeld praat je met de agent zoals hij nu is, zonder hem al op te slaan.
1. Klik op **Voorbeeld**. Je ziet de naam, de beschrijving en de drie startvragen.
![Voorbeeld: naam, beschrijving en startvragen](beelden/09-voorbeeld-leeg.jpg)
2. Klik op **Ziek melden**. De vraag komt in het invoerveld; klik op de verzendknop.
De agent antwoordt kort, met u, en met de hoofdstukverwijzing achter elke regel.
![Het eerste antwoord: voor 8.15 uur, ouderportaal of receptie, hoofdstuk 2](beelden/10-voorbeeld-antwoord.jpg)
3. Stel de twee lastige vragen uit de ontwerpkaart.
| Bericht | Wat je intypt |
| --- | --- |
| 2 | `Wanneer is de kerstvakantie?` |
| 3 | `Mijn zoon uit 2B heeft al twaalf uur gespijbeld. Wordt hij nu van school gestuurd?` |
Op de eerste zegt de agent dat de vakantiedata niet in de schoolgids staan en verwijst hij naar de receptie. Op de tweede geeft hij geen oordeel over die leerling, noemt hij wel de regel (na drie lesuren naar de mentor, bij zestien uur in vier weken naar de leerplichtambtenaar) en stuurt hij de ouder naar de mentor.
![Het hele testgesprek: uit de schoolgids, niet in de schoolgids, over één leerling](beelden/11-voorbeeld-gesprek.jpg)
Kijk hier goed naar. De agent doet drie verschillende dingen met drie soorten vragen, en alle drie komen uit één instructie. Dat is het werk: niet de knoppen, maar de zinnen in stap 3.
> Het antwoord verschijnt in Voorbeeld woord voor woord en dat duurt in Copilot Chat soms een halve minuut. Wacht tot de knoppen **Kopiëren** en duim omhoog/omlaag onder het antwoord staan voordat je de volgende vraag stelt.
> **Zelf kiezen: hoe streng.** Wil je dat de agent bij vragen over een leerling helemaal niets zegt, ook de regel niet, verander dan in de instructie "geef je geen oordeel en verwijs je naar de mentor" in "antwoord je alleen: neem hiervoor contact op met de mentor". Test opnieuw met vraag 3.
---
## Stap 7. Maak de agent en deel hem
1. Klik rechtsboven op **Maken**. Even later meldt Copilot: **Je agent is gemaakt**, en dat hij **privé** is: alleen jij ziet hem.
![De agent is gemaakt, privé](beelden/12-gemaakt.jpg)
2. Klik op **Delen** om te zien wat er kan. Je kunt namen of groepen toevoegen, de agent voor de hele organisatie openzetten, of een **Chatlink kopiëren**.
![Het deelvenster: namen, hele organisatie, chatlink](beelden/13-delen.jpg)
3. Voor nu: klik op **Annuleren**. Delen doe je pas als je de agent aan collega's wilt laten zien; de checklist aan het eind helpt daarbij.
4. Er is nu een derde tabblad, **Bijhouden**: het aantal sessies, gebruikers per dag en de gemiddelde gespreksduur van de laatste zeven dagen. Nog leeg, want je hebt hem net gemaakt.
![Bijhouden: sessies, gebruikers en duur](beelden/14-bijhouden.jpg)
5. Sluit de Agent Builder met het kruisje rechtsboven. De agent staat nu in het linkermenu onder **Agents**.
![De Schoolgids-assistent in het menu Agents](beelden/15-agent-in-menu.jpg)
> Na **Maken** heet de knop **Bijwerken**. Elke wijziging in Configureren wordt pas zichtbaar voor anderen als je daarop klikt. Tot die tijd werkt de gedeelde agent met de oude versie.
---
## Stap 8. Gebruik de agent
1. Klik in het linkermenu op **Schoolgids-assistent**. Je ziet de startvragen en "Gemaakt door" met jouw naam.
2. Stel een vraag.
| Bericht | Wat je intypt |
| --- | --- |
| 1 | `Mag ik mijn telefoon gebruiken in de pauze?` |
![De agent in gebruik: kort antwoord met hoofdstukverwijzing](beelden/16-agent-chat.jpg)
Zo ziet een collega de agent ook. Elk gesprek komt links bij **Chats** te staan, alleen voor degene die het voerde.
3. Klik op **Meer agents** om de **Agent Store** te zien: je eigen agents onder **Je agenten**, en de agents die Microsoft en de school beschikbaar stellen.
![De Agent Store met je eigen agents](beelden/17-agent-store.jpg)
> Staat je nieuwe agent nog niet onder Je agenten, ververs dan de pagina. De lijst loopt soms een paar minuten achter.
---
## Controleren of het gelukt is
- Onder **Agents** in het linkermenu staat **Schoolgids-assistent**
- De agent antwoordt op een vraag uit de schoolgids met een hoofdstukverwijzing
- Bij een vraag die niet in de schoolgids staat, zegt hij dat en verwijst hij naar de receptie
- Bij een vraag over één leerling geeft hij geen oordeel en verwijst hij naar de mentor
- **Webzoekopdracht** staat uit en onder Kennis staat niets
- Bij Delen staat de agent op privé (tot jij anders beslist)
## Als het misgaat
| Wat je ziet | Wat er aan de hand is |
| --- | --- |
| Geen **Nieuwe agent** in het linkermenu | De beheerder heeft agents maken uitgezet voor jouw account. Vraag ICT om de instelling "Agent Builder" in het Microsoft 365-beheercentrum |
| De knop **Maken** blijft grijs | Een van de startvragen is half ingevuld (titel zonder bericht of andersom), of de instructie is leeg |
| De agent geeft antwoorden die niet in de schoolgids staan | **Webzoekopdracht** staat aan, of de zin "Je verzint geen regels" ontbreekt. Helpt dat niet, zet dan **Modelkennis ontmoedigen** aan (stap 4) |
| De agent noemt geen hoofdstukken | De hoofdstuknummers zijn bij het plakken weggevallen, of de regel "Noem het hoofdstuk" ontbreekt |
| De lestijden kloppen niet | De tabel uit de PDF is verhaspeld geplakt. Gebruik de regels uit `instructies.txt` |
| Onder Kennis kun je geen bestand kiezen | Je hebt Copilot Chat zonder de Microsoft 365 Copilot-licentie. Zet de tekst in de instructie (stap 3) of vraag de licentie aan |
| Een koppeling onder Kennis "verdwijnt" naar Webzoekopdracht | Dat is wat een koppeling in de gratis laag doet: het wordt een zoekgebied, geen kennisbank |
| Collega's zien je wijziging niet | Je hebt na de wijziging niet op **Bijwerken** geklikt |
| Het antwoord komt heel langzaam | Normaal in Copilot Chat; wacht tot de knoppen onder het antwoord verschijnen |
---
## Copilot naast Dify
Wie de Dify-reeks kent, ziet de overeenkomsten en drie verschillen.
| | Dify (handleiding 2) | Copilot Agent Builder |
| --- | --- | --- |
| Instructie | Prompt in de app | Instructies, maximaal 8.000 tekens |
| Kennis | Kennisbank: bestand uploaden, knippen, zoeken | Gratis laag: in de instructie of een website; betaald: bestanden, SharePoint, OneDrive |
| Model | Zelf kiezen (gpt-5-mini, eigen sleutel) | Vast, van Microsoft; geen keuze, geen credits |
| Testen | Debug & Preview, met Used Knowledge | Voorbeeld, zonder inzicht in wat de agent gebruikte |
| Publiceren | Webapp-link voor iedereen | Delen binnen het tenant van de school |
| Logboek | Logs met elk gesprek | Bijhouden met tellingen, geen gesprekken |
De grootste praktische verschillen: Copilot zit in de omgeving die de school al heeft en valt onder de bestaande afspraken met Microsoft, maar je kunt de agent niet aan ouders geven zonder account en je ziet niet wat de agent precies gebruikte voor een antwoord. Dify geeft je die controle wel, maar is een extra omgeving met een eigen verwerkersovereenkomst.
---
## Maak hem van jou
De schoolgids is verzonnen, de assistent is een voorbeeld. Dit hoofdstuk helpt je de agent om te bouwen naar jouw document, jouw doelgroep en jouw toon. Van makkelijk naar moeilijk.
| Aanpassing | Waar | Moeilijkheid | Wat je ervoor terugkrijgt |
| --- | --- | --- | --- |
| Een ander document in de instructie | Stap 3, onder de kop met de kennis | makkelijk | Een agent over iets waar bij jou echt vragen over komen |
| Rol, toon en aanspreekvorm | Stap 3, eerste alinea en opsomming | makkelijk | Een assistent die klinkt als jouw school |
| Andere startvragen | Stap 5 | makkelijk | Gebruikers weten meteen wat ze kunnen vragen |
| Een tweede document (bijvoorbeeld het examenreglement) | Stap 3, onder de schoolgids, met een eigen kop | gemiddeld | Meer vragen goed beantwoord; let op de 8.000 tekens |
| Zoeken op de website van de school | Stap 4, koppeling naar de schoolwebsite, Webzoekopdracht aan | gemiddeld | Actuele informatie (vakanties, nieuws) zonder de instructie aan te passen; controleer of de antwoorden echt van jouw site komen |
| Bestanden en SharePoint als kennis | Stap 4, met Microsoft 365 Copilot-licentie | gemiddeld | Altijd de actuele versie, instructie blijft kort |
| Delen met een team of de hele school | Stap 7 | gemiddeld | Collega's vinden hem in hun eigen Copilot |
| Acties (een formulier invullen, een ticket aanmaken) | Copilot Studio, buiten deze handleiding | moeilijk | Een agent die iets doet in plaats van alleen antwoordt |
**Drie opdrachten**
1. **Jouw document, jouw vragen.** Zet een document van jouw school in de instructie. Schrijf vooraf vijf vragen op die gebruikers echt stellen, en één vraag waarvan je weet dat het antwoord er niet in staat. Test alle zes in Voorbeeld. Krijg je op de zesde een verzonnen antwoord, dan is je instructie nog niet streng genoeg.
2. **Twee doelgroepen, twee agents.** Maak een kopie van de agent voor leerlingen (je, kort, startvragen over toetsen en telefoons) en één voor ouders (u, iets uitgebreider, startvragen over ziek melden en verlof). Vergelijk de antwoorden op dezelfde vraag.
3. **Laat een collega hem slopen.** Deel de agent met één collega die de schoolgids goed kent en vraag om hem te betrappen op fouten. Elke fout is een zin in de instructie die ontbreekt of te vaag is. Pas één ding aan, klik op **Bijwerken**, en test opnieuw.
**Checklist voordat je deelt**
- [ ] De tekst in de instructie mag openbaar zijn en bevat geen gegevens van personen
- [ ] De tekst is de actuele versie, en er is één eigenaar die hem bijwerkt als het document verandert
- [ ] Webzoekopdracht staat uit, of alleen aan met de website van de school als zoekgebied
- [ ] Je hebt de drie testvragen uit de ontwerpkaart gesteld en de antwoorden klopten
- [ ] Je hebt besloten met wie je deelt: één team, of de hele organisatie
- [ ] Bij gebruik door leerlingen: de privacyfunctionaris weet ervan
---
## En verder
Je agent kan nu lezen en uitleggen. In handleiding 2 bouw je de **Ouderbrief-assistent**: een agent die niet uit een document voorleest, maar een tekst herschrijft volgens de schrijfregels van de school. In handleiding 3 laat je een agent rekenen en een Excel-bestand maken: de **Toetsweekplanner**.
+28
View File
@@ -0,0 +1,28 @@
Je bent de Schoolgids-assistent van Het Voorbeeldcollege. Je beantwoordt vragen van ouders en leerlingen over de schoolregels. Je gebruikt alleen de schoolgids hieronder. Staat het antwoord er niet in, dan zeg je dat en verwijs je naar de receptie (046-1234567) of de mentor. Je verzint geen regels, tijden of namen.
Zo antwoord je:
- Kort en concreet, in gewoon Nederlands (taalniveau B1). Ouders spreek je aan met u, leerlingen met je; kies op basis van de vraag.
- Noem het hoofdstuk van de schoolgids waar het antwoord staat, bijvoorbeeld (schoolgids, hoofdstuk 2).
- Bij een vraag over een individuele leerling (cijfers, verzuim, ondersteuning) geef je geen oordeel en verwijs je naar de mentor.
- Je vraagt niet naar namen van leerlingen en bewaart niets.
SCHOOLGIDS HET VOORBEELDCOLLEGE, schooljaar 2026-2027
1. Lestijden
De school hanteert een 50-minutenrooster. De eerste les begint om 8.30 uur, de laatste les eindigt uiterlijk om 16.10 uur. Op woensdag eindigen de lessen om 13.50 uur.
Lesuur 1: 8.30-9.20. Lesuur 2: 9.20-10.10. Pauze 10.10-10.30. Lesuur 3: 10.30-11.20. Lesuur 4: 11.20-12.10. Pauze 12.10-12.40. Lesuur 5: 12.40-13.30. Lesuur 6: 13.30-14.20. Pauze 14.20-14.30. Lesuur 7: 14.30-15.20. Lesuur 8: 15.20-16.10.
2. Ziek melden en verzuim
Is een leerling ziek, dan meldt een ouder of verzorger dit voor 8.15 uur via het ouderportaal of telefonisch bij de receptie op 046-1234567. Een ziekmelding geldt voor een dag; is de leerling de volgende dag nog ziek, dan is een nieuwe melding nodig. Ongeoorloofd verzuim wordt na drie lesuren gemeld bij de mentor. Bij zestien uur ongeoorloofd verzuim in vier weken is de school verplicht dit te melden bij de leerplichtambtenaar. Verlof buiten de schoolvakanties kan alleen worden aangevraagd bij de teamleider, minimaal zes weken van tevoren en met een schriftelijke motivering.
3. Huiswerk en toetsen
Huiswerk staat uiterlijk om 17.00 uur op de dag van de les in de digitale leeromgeving. Leerlingen in de onderbouw krijgen maximaal twee toetsen per dag en maximaal vijf toetsen per week. Een toets wordt minimaal vijf schooldagen van tevoren aangekondigd. Een gemiste toets wordt ingehaald op het vaste inhaalmoment: dinsdag het 8e lesuur. De leerling meldt zich hiervoor zelf aan bij de docent binnen twee schooldagen na terugkomst.
4. Telefoons en laptops
Telefoons gaan bij binnenkomst in het lokaal in de telefoontas en blijven daar tot het einde van de les. In de pauzes en de aula mag de telefoon gebruikt worden. Elke leerling neemt dagelijks een opgeladen laptop mee; op school zijn geen laders te leen.
5. Mentoraat en begeleiding
Elke klas heeft een mentor. De mentor is het eerste aanspreekpunt voor leerlingen en ouders. Voor vragen over dyslexie, faalangst of ondersteuning verwijst de mentor naar de ondersteuningscoördinator. Een gesprek met de ondersteuningscoördinator wordt altijd via de mentor aangevraagd.
6. Contact
Receptie: 046-1234567, bereikbaar op schooldagen van 8.00 tot 16.30 uur. E-mail: info@voorbeeldcollege.nl. Adres: Schoolstraat 1, 6100 AA Voorbeeldstad.
Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

+7
View File
@@ -0,0 +1,7 @@
#!/usr/bin/env python3
"""Bouwt handleiding-copilot-ouderbrief-assistent.html, .pdf en .docx. Gebruik: python3 build.py
Het echte werk staat in ../_gereedschap/build_handleiding.py (gedeeld door alle handleidingen)."""
import runpy, sys
from pathlib import Path
sys.argv = ["build_handleiding.py", str(Path(__file__).resolve().parent / "handleiding-copilot-ouderbrief-assistent.md")]
runpy.run_path(str(Path(__file__).resolve().parent.parent / "_gereedschap" / "build_handleiding.py"), run_name="__main__")
@@ -0,0 +1,253 @@
<!--
VOOR DE BEWERKER
Handleiding 2 van de Copilot-reeks: de Ouderbrief-assistent in de Agent Builder van Microsoft 365
Copilot. Beelden in beelden/, vastgelegd op 21 september 2026 (Microsoft 365 Copilot Chat, werkaccount
zonder Microsoft 365 Copilot-licentie, Nederlandse interface).
Omzetten naar HTML, PDF en Word: python3 build.py
(python-markdown, google-chrome en libreoffice; opmaak en logo in _gereedschap/build_handleiding.py)
Opmaakafspraken: zie handleiding 1 en README.md.
Bestanden in deze map:
schrijfwijzer-voorbeeldcollege.pdf de fictieve schrijfwijzer (zelfde als in de Dify-reeks)
instructies.txt de volledige instructie van de agent, om te plakken
-->
# Bouwen in Microsoft 365 Copilot: de Ouderbrief-assistent
**Handleiding 2 van de reeks Copilot-agents voor school**
LeX Consultancy B.V. · 21 september 2026
In handleiding 1 bouwde je een agent die uit een document voorleest. Nu bouw je er een die iets met een tekst doet: een mentor plakt een wollige conceptbrief, en de agent maakt er een brief van die ouders in een keer begrijpen, volgens de schrijfwijzer van de school. Dezelfde agent maakt van die brief ook een bericht voor de ouderapp of de website.
Dit is de tegenhanger van deel B uit handleiding 3 van de Dify-reeks (Dify voor schoolcommunicatie). De stappen in de Agent Builder ken je uit handleiding 1; hier staan ze korter. Nieuw is de instructie: geen kennis om uit te citeren, maar regels om toe te passen.
Deze handleiding volgt Microsoft 365 Copilot zoals het er op 21 september 2026 uitziet, in een werkaccount met Copilot Chat en zonder de betaalde Microsoft 365 Copilot-licentie. Wijkt je scherm af, volg dan wat je ziet.
**Zo lees je deze handleiding**
| Vorm | Betekenis |
| --- | --- |
| 1. 2. 3. | Wat je doet: klikken, kiezen, openen |
| **Vet** | Een knop, menu of veld zoals het op je scherm staat |
| Tabel *Wat je intypt* | Waarden die je in een formulierveld zet |
| Grijs kader *Intypen* | Tekst die je letterlijk overtypt of plakt |
| Oranje kader | Een valkuil die je anders zelf ontdekt |
| Groen kader *Zelf kiezen* | Een plek waar je ons voorbeeld kunt vervangen door je eigen materiaal, stijl of prompt |
---
<!-- ontwerpkaart -->
## De ontwerpkaart van deze app
| 1. Voor wie | 2. Wat gaat erin |
| --- | --- |
| Een mentor die om 16:00 nog een brief over de ouderavond moet versturen en drie wollige alinea's heeft staan. Wil dat de brief klinkt als de school, niet als hemzelf. | De conceptbrief of losse zinnen, geplakt in de chat. Als de klas of de gevraagde actie ontbreekt, vraagt de agent ernaar. |
| 3. Wat komt eruit | 4. Waar moet hij zich aan houden |
| --- | --- |
| Een herschreven brief met onderwerpregel, plus een lijstje "Wat ik heb veranderd" met per punt de regel uit de schrijfwijzer. Op verzoek dezelfde inhoud als bericht voor ouderapp, website of sociale media. | De schrijfwijzer (in de instructie): B1, u voor ouders, te vermijden woorden, opbouw, lengte per kanaal. Niets verzinnen: ontbrekende gegevens worden [INVULLEN]. Geen inleiding, geen compliment. |
**5. Waaraan zie je dat het werkt**
| Test | Wat gaat erin | Wat moet eruit komen |
| --- | --- | --- |
| 1 | De wollige brief over de ouderavond (stap 4) | Onderwerpregel, u, korte zinnen, "middels" en "z.s.m." weg, actie op een eigen regel, [INVULLEN] waar de naam van de afzender ontbreekt |
| 2 | "Maak van dezelfde brief een bericht voor de ouderapp" | Maximaal 80 woorden, een datum, een actie, geen inleiding |
| 3 (de lastige) | Een brief zonder datum en zonder klas | De agent vraagt eerst om de datum en de klas, of zet [INVULLEN] |
<!-- /ontwerpkaart -->
## Lees dit eerst: wat mag en wat niet
Een conceptbrief bevat soms meer dan je denkt: de naam van een leerling, een klas met een incident, een adres. Twee afspraken:
| Wat | Afspraak |
| --- | --- |
| Wat je plakt | Alleen de tekst van de brief, zonder namen van leerlingen. Staat er een naam in, vervang die door "uw kind" voordat je plakt. De agent vraagt er niet om en heeft hem niet nodig. |
| Wat je ermee doet | De agent maakt een concept. Jij leest het, vult de [INVULLEN]-plekken in en stuurt het zelf. Brieven aan een hele afdeling gaan volgens de schrijfwijzer eerst langs het team communicatie, ook als een agent ze schreef. |
Copilot Chat met een werkaccount valt onder de afspraken van de school met Microsoft; de gesprekken worden niet gebruikt om modellen te trainen. Voor concepten van brieven is dat in de meeste scholen voldoende. Bij twijfel: de privacyfunctionaris.
---
## Voorbereiding
- Handleiding 1 gedaan, of in elk geval weten waar **Nieuwe agent** en **Overslaan** zitten.
- De schrijfwijzer `schrijfwijzer-voorbeeldcollege.pdf` uit deze map om te lezen. De tekst staat al in `instructies.txt`.
> **Zelf kiezen: je eigen schrijfwijzer.** Heeft je school een schrijfwijzer, huisstijlgids of een lijstje "zo schrijven wij"? Zet die tekst in de instructie in plaats van de onze, onder dezelfde kop. Geen schrijfwijzer? Schrijf er zelf een van tien regels: aanspreekvorm, maximale lengte, drie woorden die je nooit meer wilt zien, en de vaste opbouw. Dat is genoeg om te beginnen; het lijstje groeit vanzelf bij elke brief die je nakijkt.
---
## Stap 1. Maak de agent en vul naam en beschrijving in
1. Klik in het linkermenu op **Nieuwe agent**, dan rechtsboven op **Overslaan**.
2. Vul naam en beschrijving in.
| Veld op het scherm | Wat je intypt |
| --- | --- |
| Naam | `Ouderbrief-assistent` |
| Beschrijving | `Herschrijft conceptbrieven en berichten voor ouders volgens de schrijfwijzer van Het Voorbeeldcollege: B1, kort, met een duidelijke actie.` |
---
## Stap 2. Schrijf de instructie
De instructie bestaat uit een werkwijze en daaronder de schrijfwijzer zelf. Samen 4.400 tekens; er is ruimte voor 8.000.
1. Klik in **Instructies** en plak de tekst uit `instructies.txt`. De werkwijze:
```
Je bent de Ouderbrief-assistent van Het Voorbeeldcollege. Docenten, mentoren en teamleiders plakken een conceptbrief of een paar losse zinnen, en jij maakt er een brief van die ouders in een keer begrijpen. Je werkt volgens de schrijfwijzer hieronder.
Werkwijze:
1. Pas de schrijfwijzer toe: taalniveau B1, u en je, te vermijden woorden, de opbouw van een ouderbrief en de lengte per kanaal.
2. Als niet duidelijk is voor wie de brief is (welke klas of afdeling) of wat de ouder moet doen, vraag dat dan eerst; ga niet gokken.
3. Geef eerst de herschreven brief, met onderwerpregel, en daarna onder het kopje "Wat ik heb veranderd" een lijstje van maximaal vijf punten, elk met de regel uit de schrijfwijzer die erbij hoort.
4. Verzin geen data, namen of afspraken die niet in de aangeleverde tekst staan. Ontbreekt iets wat een ouder moet weten, zet dan [INVULLEN] op die plek.
5. Vraagt iemand om een bericht voor de website, de ouderapp of sociale media, houd je dan aan de lengte en de regels van dat kanaal uit hoofdstuk 4.
6. Wees kort. Geen inleiding, geen compliment, geen afsluiting van jouw kant.
SCHRIJFWIJZER OUDERBRIEVEN EN NIEUWS, Het Voorbeeldcollege, team communicatie, schooljaar 2026-2027
1. Voor wie we schrijven
...
```
Daarna volgen de zeven hoofdstukken van de schrijfwijzer. De tabel "Liever niet / Wel" uit de PDF is in `instructies.txt` een lijstje geworden ("middels, ten behoeve van, inzake, omtrent: met, voor, over"); tabellen plakken slecht.
![Naam, beschrijving en de werkwijze in de instructie](beelden/01-naam-en-instructies.jpg)
Vergelijk deze instructie met die van handleiding 1. Daar stond: gebruik alleen dit, verzin niets. Hier staat: pas deze regels toe op wat je krijgt. Dat is het verschil tussen een agent die **weet** en een agent die **doet**. Punt 3 bepaalt de vorm van het antwoord, punt 4 houdt je uit de problemen, punt 5 maakt van een brievenschrijver ook een nieuwsschrijver.
> **Zelf kiezen: de werkwijze.** Wil je liever twee varianten (kort en uitgebreid)? Een versie in het Engels erbij voor anderstalige ouders? Alleen de brief, zonder "Wat ik heb veranderd"? Verander alleen punt 3 en test opnieuw. Punt 4 (niets verzinnen, [INVULLEN]) raden we aan om te laten staan.
2. Laat **Kennis** leeg en **Webzoekopdracht** uit. Een brievenschrijver hoeft niets op te zoeken.
---
## Stap 3. Voeg startvragen toe
Een startvraag mag eindigen op een dubbele punt: de gebruiker klikt erop, plakt zijn tekst erachter en verstuurt.
| Titel | Bericht |
| --- | --- |
| `Brief herschrijven` | `Herschrijf deze conceptbrief volgens de schrijfwijzer: ` |
| `Bericht voor de ouderapp` | `Maak van deze tekst een bericht voor de ouderapp: ` |
| `Brief nakijken` | `Kijk deze brief na op de schrijfwijzer en noem alleen wat er nog niet klopt: ` |
![De drie startvragen, elk eindigend op een dubbele punt](beelden/02-voorgestelde-prompts.jpg)
> De velden voor startvragen raken soms een titel kwijt als je snel doorklikt; Copilot zet er dan "Voeg een titel toe" onder in het rood en de knop **Maken** blijft grijs. Kijk de drie rijen na voordat je verder gaat.
---
## Stap 4. Test met een wollige brief
1. Klik op **Voorbeeld**.
![Voorbeeld met de drie startvragen](beelden/03-voorbeeld-leeg.jpg)
2. Klik op **Brief herschrijven** en plak achter de dubbele punt de brief hieronder. Verstuur.
```
Geachte ouder(s)/verzorger(s), Middels dit schrijven willen wij u informeren omtrent de ouderavond die in het kader van de studiekeuze zal plaatsvinden op donderdag 8 oktober a.s. om 19.30 uur in de aula. Tijdens deze avond zal door de decaan een toelichting worden gegeven op het keuzeproces. U wordt verzocht uw aanwezigheid z.s.m. door te geven d.m.v. het ouderportaal. Met vriendelijke groet, de directie
```
![De brief staat in het invoerveld](beelden/04-brief-geplakt.jpg)
Het antwoord komt langzaam, regel voor regel; in onze test duurde het ruim een minuut. Het resultaat:
![De herschreven brief met onderwerpregel, INVULLEN-plekken en "Wat ik heb veranderd"](beelden/05-antwoord-brief.jpg)
Let op vijf dingen:
- Er staat een **onderwerpregel** van vijf woorden: "Ouderavond studiekeuze 8 oktober".
- "Middels dit schrijven", "omtrent", "in het kader van", "z.s.m." en "d.m.v." zijn weg.
- De actie staat op een eigen regel, met een vraag: "Wilt u uiterlijk [INVULLEN] via het ouderportaal doorgeven of u aanwezig bent?" De agent verzon geen datum.
- De ondertekening is **[INVULLEN naam]** en **[INVULLEN functie]**: de schrijfwijzer verbiedt "de directie", en de agent kent de naam niet.
- Onder **Wat ik heb veranderd** staan vijf punten met de regel erbij.
3. Vraag dezelfde inhoud voor een ander kanaal.
| Bericht | Wat je intypt |
| --- | --- |
| 2 | `Maak van dezelfde brief een bericht voor de ouderapp.` |
![Het ouderapp-bericht: kort, een datum, een actie](beelden/06-antwoord-ouderapp.jpg)
Het bericht is 45 woorden, zonder aanhef en zonder inleiding: precies hoofdstuk 4 van de schrijfwijzer. En de [INVULLEN]-plekken blijven staan; de agent verzint ook hier niets.
> **Zelf kiezen: de lastige test.** Plak een brief zonder datum en zonder klas ("Volgende week is er een excursie, wilt u het formulier invullen?"). Volgens punt 2 van de werkwijze moet de agent eerst vragen om wat ontbreekt. Doet hij dat niet en vult hij [INVULLEN] in, dan is dat ook goed; verzint hij een datum, dan is punt 4 niet streng genoeg en zet je erbij: "Ook geen datum bij benadering."
---
## Stap 5. Maak de agent
1. Klik op **Maken**. De agent is privé tot je hem deelt.
![De agent is gemaakt](beelden/07-gemaakt.jpg)
2. Klik op **Chat starten** of sluit de Builder. De agent staat nu onder **Agents** in het linkermenu, naast de Schoolgids-assistent.
Delen doe je zoals in handleiding 1, stap 7: met een paar collega's, met een team, of met de hele organisatie. Voor deze agent ligt delen met alle mentoren voor de hand; doe dat pas na de checklist aan het eind.
---
## Controleren of het gelukt is
- De herschreven brief heeft een onderwerpregel en spreekt ouders aan met u
- Woorden uit de "liever niet"-lijst komen niet meer voor
- Elke ontbrekende datum, naam of functie staat als [INVULLEN] in de brief
- "Wat ik heb veranderd" noemt per punt de regel uit de schrijfwijzer
- Een ouderapp-bericht blijft onder de 80 woorden
- De agent begint niet met "Natuurlijk, hier is..." en eindigt niet met een compliment
## Als het misgaat
| Wat je ziet | Wat er aan de hand is |
| --- | --- |
| De agent verzint een datum of een naam | Punt 4 ontbreekt of is afgezwakt. Zet hem terug, en voeg toe: "Ook geen datum bij benadering" |
| De brief is nog steeds lang en formeel | De schrijfwijzer is niet meegeplakt, of alleen de werkwijze staat in de instructie. Tel: het veld moet rond de 4.400 tekens staan |
| "Wat ik heb veranderd" ontbreekt | Punt 3 ontbreekt, of de gebruiker vroeg alleen om nakijken (dan hoort het antwoord anders te zijn) |
| Het ouderapp-bericht is 150 woorden | Punt 5 ontbreekt, of hoofdstuk 4 van de schrijfwijzer is niet meegeplakt |
| Het antwoord begint met een inleiding | Punt 6 ontbreekt. Modellen zijn beleefd uit zichzelf; je moet het uitzetten |
| De knop **Maken** blijft grijs | Een startvraag mist een titel of een bericht (rood tekstje eronder) |
| Het antwoord komt tergend langzaam | Normaal in Copilot Chat op drukke momenten. Wacht tot **Kopiëren** onder het antwoord staat |
---
## Maak hem van jou
| Aanpassing | Waar | Moeilijkheid | Wat je ervoor terugkrijgt |
| --- | --- | --- | --- |
| Je eigen schrijfwijzer | Stap 2, onder de kop SCHRIJFWIJZER | makkelijk | Brieven die klinken als jouw school |
| Een vaste ondertekening | Stap 2, punt 3: "Onderteken met [naam], [functie]" of een vaste naam | makkelijk | Geen [INVULLEN] meer bij de afzender |
| Alleen nakijken, niet herschrijven | Stap 3, derde startvraag; of een aparte agent "Briefcontrole" | makkelijk | Een collega die zelf wil schrijven en alleen een tweede oog wil |
| Een Engelse versie erbij | Stap 2, punt 3: "Geef daaronder dezelfde brief in het Engels" | makkelijk | Anderstalige ouders bereikt zonder extra werk |
| Drie kanalen in een keer (website, ouderapp, sociale media) | Stap 2, nieuw punt: "Vraagt iemand om schoolnieuws, geef dan alle drie de versies" | gemiddeld | De nieuwsroute uit Dify-handleiding 3, in Copilot |
| De schrijfwijzer als bestand op SharePoint | Kennis, met Microsoft 365 Copilot-licentie | gemiddeld | Team communicatie beheert de schrijfwijzer op een plek, de agent leest altijd de laatste versie |
| Een brief in Word opleveren | Stap 2, punt 3: "Lever de brief ook als Word-bestand"; Kennisinstellingen, documenten maken staat aan | gemiddeld | Een bestand dat de mentor meteen kan versturen; zie handleiding 3 voor hoe de agent bestanden maakt |
| De agent beoordeelt of een brief langs team communicatie moet | Stap 2, nieuw punt met de regel uit hoofdstuk 6 | moeilijk | Een poortwachter; test goed, want de agent moet dan de doelgroep uit de brief afleiden |
**Drie opdrachten**
1. **Vervang de schrijfwijzer.** Zet de schrijfregels van jouw school in de instructie en laat dezelfde wollige brief herschrijven. Welke regel uit jouw document zie je terug in "Wat ik heb veranderd", welke niet? Regels die de agent negeert, staan meestal te vaag ("schrijf helder"). Maak ze concreet ("zinnen van maximaal vijftien woorden").
2. **Vijf brieven van dit jaar.** Verzamel vijf echte brieven die je school dit jaar stuurde (namen eruit). Laat ze nakijken met de derde startvraag. Wat valt op? Dat is je schrijfwijzer voor volgend jaar.
3. **Laat de mentoren hem slopen.** Deel de agent met twee mentoren en vraag ze een week lang elke brief erdoorheen te halen. Vraag na een week: wat herschreef de agent goed, wat moesten ze elke keer terugdraaien? Dat laatste gaat in de instructie.
**Checklist voordat je deelt**
- [ ] De schrijfwijzer in de instructie is de versie waar team communicatie achter staat
- [ ] Er staat geen naam van een leerling of ouder in de instructie of in de startvragen
- [ ] Punt 4 (niets verzinnen) staat erin en je hebt het getest met een brief zonder datum
- [ ] Wie de agent gebruikt, weet dat het een concept is dat hij zelf naleest en verstuurt
- [ ] Afgesproken wie de instructie bijwerkt als de schrijfwijzer verandert
---
## En verder
Deze agent werkt met tekst die de gebruiker plakt. In handleiding 3 laat je een agent rekenen en een bestand maken: de **Toetsweekplanner** stelt vragen, verdeelt de toetsstof over de dagen en levert een Excel-bestand op OneDrive.
+47
View File
@@ -0,0 +1,47 @@
Je bent de Ouderbrief-assistent van Het Voorbeeldcollege. Docenten, mentoren en teamleiders plakken een conceptbrief of een paar losse zinnen, en jij maakt er een brief van die ouders in een keer begrijpen. Je werkt volgens de schrijfwijzer hieronder.
Werkwijze:
1. Pas de schrijfwijzer toe: taalniveau B1, u en je, te vermijden woorden, de opbouw van een ouderbrief en de lengte per kanaal.
2. Als niet duidelijk is voor wie de brief is (welke klas of afdeling) of wat de ouder moet doen, vraag dat dan eerst; ga niet gokken.
3. Geef eerst de herschreven brief, met onderwerpregel, en daarna onder het kopje "Wat ik heb veranderd" een lijstje van maximaal vijf punten, elk met de regel uit de schrijfwijzer die erbij hoort.
4. Verzin geen data, namen of afspraken die niet in de aangeleverde tekst staan. Ontbreekt iets wat een ouder moet weten, zet dan [INVULLEN] op die plek.
5. Vraagt iemand om een bericht voor de website, de ouderapp of sociale media, houd je dan aan de lengte en de regels van dat kanaal uit hoofdstuk 4.
6. Wees kort. Geen inleiding, geen compliment, geen afsluiting van jouw kant.
SCHRIJFWIJZER OUDERBRIEVEN EN NIEUWS, Het Voorbeeldcollege, team communicatie, schooljaar 2026-2027
1. Voor wie we schrijven
Onze ouders zijn druk, lezen op hun telefoon en hebben niet allemaal Nederlands als eerste taal. Een brief van school moet in een keer duidelijk zijn: wat is er, wat betekent het voor mijn kind, en wat moet ik doen. Wie na het lezen nog moet bellen om het te begrijpen, heeft een slechte brief gekregen.
2. Taalniveau en toon
We schrijven op taalniveau B1: korte zinnen (gemiddeld twaalf woorden), gewone woorden, een onderwerp per alinea. Actief, niet lijdend: "De mentor belt u", niet "U wordt door de mentor gebeld". Vriendelijk en direct, zonder omhaal. Geen uitroeptekens, geen hoofdletters om iets te benadrukken.
Ouders spreken we aan met u. Leerlingen noemen we bij voornaam of "uw kind"; in nieuws op de website "leerlingen", nooit "kids". Medewerkers spreken we aan met je.
Liever niet, en wat dan wel:
- middels, ten behoeve van, inzake, omtrent: met, voor, over
- faciliteren: regelen, mogelijk maken
- onderwijsprofessional, onderwijsgevende: docent, leerkracht
- traject, proces: aanpak, plan, periode
- in het kader van: voor, omdat
- u dient, u wordt verzocht: wilt u, graag
- d.m.v., i.v.m., z.s.m., t.a.v.: voluit schrijven
3. Opbouw van een ouderbrief
1. Onderwerpregel die zegt waar het over gaat, maximaal acht woorden. Niet "Belangrijke informatie", wel "Ouderavond klas 2 op 8 oktober".
2. Eerste alinea: wat, wanneer, voor wie. In twee of drie zinnen.
3. Wat het voor u betekent: wat verandert er, wat moet u doen, voor wanneer. Elke actie op een eigen regel, met datum.
4. Afsluiting: bij wie kunt u terecht met vragen, met naam en e-mailadres of telefoonnummer. Onderteken met naam en functie, niet met "de directie".
Een ouderbrief is maximaal een A4, liefst korter. Bijlagen alleen als het echt niet anders kan; zet de kern altijd in de brief zelf.
4. Nieuws op website, ouderapp en sociale media
Website: maximaal 200 woorden. Kop van maximaal acht woorden, eerste alinea beantwoordt wie, wat, waar, wanneer. Sluit af met een vervolgstap of contactmogelijkheid.
Ouderapp: maximaal 80 woorden, want ouders lezen dit op de telefoon. Een boodschap, een datum, een actie. Geen inleiding.
Sociale media (Instagram en LinkedIn van de school): maximaal 60 woorden, warm van toon, met de gebeurtenis als aanleiding. Maximaal drie hashtags, waaronder altijd #Voorbeeldcollege. Alleen foto's van leerlingen met toestemming (zie hoofdstuk 5).
5. Namen, foto's en privacy
Leerlingen noemen we in nieuws alleen bij voornaam, en nooit met klas en achternaam samen. Leerlingen komen alleen herkenbaar in beeld met toestemming van de ouders, per schooljaar vastgelegd in het ouderportaal. Zonder toestemming fotograferen we van achteren of met de focus op handen en werk. Cijfers, verzuim en ondersteuning noemen we nooit in groepsberichten; dat gaat altijd in een persoonlijk gesprek.
6. Wie schrijft en wie kijkt na
Mentoren en teamleiders schrijven zelf. Brieven aan een hele afdeling of aan alle ouders gaan eerst langs het team communicatie. Berichten over incidenten, veiligheid of pers gaan altijd via de schoolleiding; zelf niets naar buiten brengen.
7. Contact
Team communicatie Het Voorbeeldcollege: communicatie@voorbeeldcollege.nl, op schooldagen van 8.30 tot 16.00 uur.
Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

+7
View File
@@ -0,0 +1,7 @@
#!/usr/bin/env python3
"""Bouwt handleiding-copilot-toetsweekplanner.html, .pdf en .docx. Gebruik: python3 build.py
Het echte werk staat in ../_gereedschap/build_handleiding.py (gedeeld door alle handleidingen)."""
import runpy, sys
from pathlib import Path
sys.argv = ["build_handleiding.py", str(Path(__file__).resolve().parent / "handleiding-copilot-toetsweekplanner.md")]
runpy.run_path(str(Path(__file__).resolve().parent.parent / "_gereedschap" / "build_handleiding.py"), run_name="__main__")
@@ -0,0 +1,311 @@
<!--
VOOR DE BEWERKER
Handleiding 3 van de Copilot-reeks: de Toetsweekplanner in de Agent Builder van Microsoft 365
Copilot. Beelden in beelden/, vastgelegd op 21 september 2026 (Microsoft 365 Copilot Chat, werkaccount
zonder Microsoft 365 Copilot-licentie, Nederlandse interface).
Omzetten naar HTML, PDF en Word: python3 build.py
(python-markdown, google-chrome en libreoffice; opmaak en logo in _gereedschap/build_handleiding.py)
Opmaakafspraken: zie handleiding 1 en README.md.
Bestanden in deze map:
toetsrooster-voorbeeld.csv het fictieve toetsrooster (zelfde als in de Dify-reeks, handleiding 4)
instructies.txt de volledige instructie van de agent, om te plakken
-->
# Bouwen in Microsoft 365 Copilot: de Toetsweekplanner
**Handleiding 3 van de reeks Copilot-agents voor school**
LeX Consultancy B.V. · 21 september 2026
Je bouwt een agent die met een leerling een studieplan voor de toetsweek maakt. De agent kent het toetsrooster, vraagt wanneer de leerling kan leren en hoe moeilijk de vakken zijn, en levert dan een plan in de chat plus een Excel-bestand op OneDrive. Dat laatste is nieuw: de agent schrijft en draait een klein programma om dat bestand te maken.
Dit is de tegenhanger van handleiding 4 uit de Dify-reeks (de Agent Console). Wie die kent, ziet hetzelfde ontwerp: een instructie met regels, een rooster, en een agent die zelf bepaalt hoe hij het aanpakt. De stappen in de Agent Builder ken je uit handleiding 1 en 2; hier staan ze kort.
Deze handleiding volgt Microsoft 365 Copilot zoals het er op 21 september 2026 uitziet, in een werkaccount met Copilot Chat en zonder de betaalde Microsoft 365 Copilot-licentie. Wijkt je scherm af, volg dan wat je ziet.
**Zo lees je deze handleiding**
| Vorm | Betekenis |
| --- | --- |
| 1. 2. 3. | Wat je doet: klikken, kiezen, openen |
| **Vet** | Een knop, menu of veld zoals het op je scherm staat |
| Tabel *Wat je intypt* | Waarden die je in een formulierveld zet |
| Grijs kader *Intypen* | Tekst die je letterlijk overtypt of plakt |
| Oranje kader | Een valkuil die je anders zelf ontdekt |
| Groen kader *Zelf kiezen* | Een plek waar je ons voorbeeld kunt vervangen door je eigen materiaal, stijl of prompt |
---
<!-- ontwerpkaart -->
## De ontwerpkaart van deze app
| 1. Voor wie | 2. Wat gaat erin |
| --- | --- |
| Een leerling uit klas 2, drie weken voor de toetsweek, die niet weet waar te beginnen. Heeft het rooster, een telefoon en anderhalf uur per avond. | Het toetsrooster (in de instructie), de momenten waarop de leerling kan leren, en per vak makkelijk/gemiddeld/moeilijk. De agent vraagt ze een voor een. |
| 3. Wat komt eruit | 4. Waar moet hij zich aan houden |
| --- | --- |
| Een plan per dag in de chat (blok, vak, tijd, stof) en een bestand studieplan.xlsx op OneDrive. Afsluiting met de vraag of er iets moet schuiven. | Vijf planregels (moeilijke vakken dubbel, elk vak twee keer, blokken van 25-45 minuten met pauze, avond voor de toets alleen herhalen, niets buiten de opgegeven momenten); geen cijfers of oordelen; geen naam vragen. |
**5. Waaraan zie je dat het werkt**
| Test | Wat gaat erin | Wat moet eruit komen |
| --- | --- | --- |
| 1 | Datum van vandaag, leermomenten en moeilijkheid | Een plan dat de momenten respecteert, plus een echt Excel-bestand |
| 2 | "Op maandag staat nieuwe stof Engels, terwijl de toets dinsdag is. Klopt dat met je regels?" | De agent controleert zichzelf aan de regel en stelt een correctie voor |
| 3 (de lastige) | "Ga ik mijn wiskundetoets halen?" | Geen voorspelling; terug naar het plan |
<!-- /ontwerpkaart -->
## Lees dit eerst: wat mag en wat niet
Een studieplan is onschuldig, maar een leerling vertelt de agent wanneer hij thuis is en wat hij moeilijk vindt. Daarom:
| Wat | Afspraak |
| --- | --- |
| Echte leerlingen | Alleen als leerlingen een eigen schoolaccount in Microsoft 365 hebben en de school Copilot Chat voor leerlingen heeft aangezet. Dan vallen de gesprekken onder de afspraken van de school met Microsoft. In deze handleiding ben jij de "leerling". |
| Wat de agent zegt | Geen cijfers, oordelen of voorspellingen over toetsen. Dat staat in de instructie en blijft erin: een agent die leerlingen beoordeelt, valt onder de AI Act in de categorie hoog risico. |
| Bestanden | Het Excel-bestand komt in de OneDrive van degene die chat. Bij een leerling dus in de OneDrive van die leerling, niet bij jou. |
| Voor wie | Als de planner ooit voor leerlingen gaat: voor alle leerlingen, niet alleen voor leerlingen met een ondersteuningsbehoefte. |
---
## Voorbereiding
- Handleiding 1 gedaan.
- Het toetsrooster `toetsrooster-voorbeeld.csv` uit deze map, om te lezen: zes toetsen van maandag 12 tot en met vrijdag 16 oktober 2026. De tekst staat al in `instructies.txt`, omgezet naar zinnen.
- Geduld: deze agent rekent en schrijft een bestand. Een compleet plan duurde in onze test enkele minuten, en het antwoord verschijnt regel voor regel.
> **Zelf kiezen: het rooster.** Zet het echte toetsrooster van een klas in de instructie, in dezelfde vorm: per regel dag, datum, vak, begintijd, duur en stof. Zonder leerlinggegevens, want het is een rooster, geen klassenlijst. Alles wat een leerling daarna typt, gaat over zichzelf; het rooster is voor iedereen hetzelfde.
---
## Stap 1. Maak de agent
1. Klik op **Nieuwe agent**, dan op **Overslaan**.
2. Vul naam en beschrijving in.
| Veld op het scherm | Wat je intypt |
| --- | --- |
| Naam | `Toetsweekplanner` |
| Beschrijving | `Maakt met een leerling een persoonlijk studieplan voor de toetsweek: verdeelt de toetsstof over de beschikbare momenten en levert het plan als Excel-bestand.` |
> Vul de naam pas in als het formulier helemaal geladen is. Typ je te vroeg, dan komt je tekst midden in "Nieuwe agent" terecht of raakt hij kwijt. Kijk na het typen even naar de kop.
---
## Stap 2. Schrijf de instructie
1. Klik in **Instructies** en plak de tekst uit `instructies.txt`:
```
Je bent de Toetsweekplanner voor leerlingen in de onderbouw van het voortgezet onderwijs. Je helpt een leerling een persoonlijk studieplan te maken voor de toetsweek. Je spreekt de leerling aan met je, in korte zinnen en gewoon Nederlands.
Wat je nodig hebt van de leerling:
1. Het toetsrooster. Het rooster van deze toetsweek staat hieronder; vat het kort samen. Geeft de leerling een ander rooster, gebruik dan dat.
2. De momenten waarop de leerling kan leren, per dag, vanaf vandaag tot de laatste toets. Vraag ook welke datum het vandaag is als je dat niet weet.
3. Per vak hoe moeilijk de leerling het vindt: makkelijk, gemiddeld of moeilijk.
Stel deze vragen een voor een, niet allemaal tegelijk. Ga pas plannen als je alle drie hebt.
Planregels:
- Moeilijke vakken krijgen ongeveer twee keer zoveel tijd als makkelijke vakken.
- Elk vak komt minstens twee keer terug, met minimaal een dag ertussen; de laatste keer is de dag voor de toets.
- Een leerblok duurt 25 tot 45 minuten, met daarna 10 minuten pauze. Nooit meer dan drie blokken achter elkaar.
- De avond voor een toets alleen herhalen, geen nieuwe stof.
- Plan niets op momenten die de leerling niet heeft opgegeven.
Wat je oplevert:
- Een overzicht in de chat: per dag de blokken met vak, tijd en wat er precies geleerd wordt (welke hoofdstukken of paragrafen).
- Een Excel-bestand studieplan.xlsx met per rij: dag, datum, begintijd, eindtijd, vak, stof. Maak dat bestand echt aan en geef de leerling de link.
- Sluit af met een vraag of de leerling iets wil verschuiven.
Je geeft geen cijfers, oordelen of voorspellingen over hoe de toetsen zullen gaan. Je vraagt niet naar de naam van de leerling en bewaart niets.
TOETSROOSTER (dag, datum, vak, begintijd, duur, toetsstof)
maandag 12 oktober 2026, Nederlands, 09:00, 60 minuten: leesvaardigheid hoofdstuk 3 en 4; spelling werkwoorden (d/t)
maandag 12 oktober 2026, wiskunde, 10:45, 45 minuten: hoofdstuk 2 (vergelijkingen) en 3 (procenten)
dinsdag 13 oktober 2026, Engels, 09:00, 45 minuten: unit 3 en 4: woordenlijst, present simple en present continuous
woensdag 14 oktober 2026, geschiedenis, 09:00, 45 minuten: hoofdstuk 5: de Republiek in de Gouden Eeuw (paragraaf 1 t/m 4)
donderdag 15 oktober 2026, biologie, 10:45, 45 minuten: thema 2: cellen en organen (basisstof 1 t/m 5)
vrijdag 16 oktober 2026, Frans, 09:00, 45 minuten: chapitre 2: vocabulaire, être en avoir, getallen tot 100
```
Vier delen: wat de agent nodig heeft, de planregels, wat hij oplevert, en het rooster. Twee zinnen verdienen aandacht. "Vraag ook welke datum het vandaag is" staat erin omdat de agent in Copilot Chat geen klok heeft: zonder die zin plant hij vanaf een datum die hij verzint. En "Maak dat bestand echt aan en geef de leerling de link" is de zin die de agent aan het programmeren zet.
> Het rooster staat in de instructie als zinnen, niet als CSV. De kolomkoppen "dag, datum, vak, begintijd, duur, toetsstof" staan er een keer boven; dat is genoeg om een tabel te begrijpen, en het plakt zonder problemen.
2. Vul de startvragen in.
| Titel | Bericht |
| --- | --- |
| `Plan maken` | `Hoi, ik wil een studieplan voor de toetsweek.` |
| `Rooster bekijken` | `Welke toetsen heb ik in de toetsweek en wat is de stof?` |
| `Plan aanpassen` | `Ik wil een blok verschuiven in mijn plan.` |
![De ingevulde agent: naam, instructie, startvragen](beelden/01-configureren-ingevuld.jpg)
---
## Stap 3. Kijk of de agent bestanden mag maken
1. Klik op het tandwiel achter **Kennis**. Onder **Kennisinstellingen** staat **Maak documenten, grafieken en code**. Die staat standaard aan; laat dat zo. Zonder die schakelaar kan de agent geen Excel maken en beschrijft hij het plan alleen.
![Kennisinstellingen: documenten maken staat aan](beelden/02-kennisinstellingen.jpg)
2. Sluit het venster. **Kennis** blijft leeg en **Webzoekopdracht** blijft uit.
> Dit is de Copilot-versie van de "sandbox" uit de Dify Agent Console: een plek waar de agent een programma mag draaien. Je ziet er in Copilot minder van (geen script om te lezen), maar het resultaat is hetzelfde: een bestand dat er anders niet was.
---
## Stap 4. Test als leerling
1. Klik op **Voorbeeld** en stuur het eerste bericht. Geef de datum mee, want de agent weet niet welke dag het is.
| Bericht | Wat je intypt |
| --- | --- |
| 1 | `Hoi, ik wil een studieplan voor de toetsweek. Het is vandaag maandag 5 oktober 2026.` |
De agent vat het rooster samen en stelt zijn eerste vraag: wanneer kun je leren, met een voorbeeld van hoe je dat opgeeft.
![Het eerste antwoord: rooster samengevat, vraag naar leermomenten](beelden/03-eerste-antwoord.jpg)
2. Geef je leermomenten op.
| Bericht | Wat je intypt |
| --- | --- |
| 2 | `Ik kan leren van woensdag 7 tot en met donderdag 15 oktober, elke dag van 16:00 tot 18:00. Zaterdag 10 oktober niet. Zondag 11 oktober van 10:00 tot 12:00 en van 15:00 tot 17:00.` |
De agent bevestigt en vraagt per vak hoe moeilijk je het vindt, met de drie keuzes erbij.
![De derde vraag: hoe moeilijk vind je elk vak](beelden/04-vraag-vakken.jpg)
3. Beantwoord de vraag over de vakken.
| Bericht | Wat je intypt |
| --- | --- |
| 3 | `Nederlands makkelijk, wiskunde moeilijk, Engels makkelijk, geschiedenis gemiddeld, biologie gemiddeld, Frans moeilijk.` |
Nu gaat de agent aan het werk. Als eerste verschijnt: **Het gegenereerde 'studieplan.xlsx' bestand is automatisch opgeslagen in OneDrive**, met daaronder **Programmeren en uitvoeren**. De agent heeft een programma geschreven, gedraaid en het bestand weggezet, nog voordat het plan in de chat staat.
![Programmeren en uitvoeren: het Excel-bestand staat al op OneDrive](beelden/05-programmeren-en-uitvoeren.jpg)
4. Wacht. Het plan verschijnt regel voor regel, per dag een kopje met de blokken en pauzes.
![Het begin van het plan: woensdag 7 en donderdag 8 oktober](beelden/06-plan-begin.jpg)
Onderaan staat **Excel-bestand: studieplan.xlsx** als link, de vraag of je iets wilt verschuiven, en **1 verwijzing: CodeInterpreter**. Dat laatste is Copilots naam voor het onderdeel dat programma's draait.
![Het einde van het plan, de Excel-link en de verwijzing naar CodeInterpreter](beelden/07-plan-einde-excel.jpg)
5. Klik op **studieplan.xlsx**. Het bestand opent in Excel op OneDrive: een tabel met per rij dag, datum, begintijd, eindtijd, vak en stof, precies zoals de instructie vroeg.
![Het Excel-bestand op OneDrive](beelden/10-excel-in-onedrive.jpg)
> Het antwoord komt in Copilot Chat tergend langzaam op het scherm, en alleen als het venster zichtbaar is. Zet het niet op de achtergrond; wacht tot **Kopiëren** onder het antwoord staat. In onze test duurde het plan ruim vijf minuten.
---
## Stap 5. Controleer het plan aan de regels
Lees het plan tegen de vijf regels. In onze test viel iets op: op maandag 12 oktober stond "Engels: unit 4 en werkwoordstijden", nieuwe stof, terwijl de toets Engels op dinsdag is en de regel zegt: de avond voor een toets alleen herhalen. Leg dat de agent voor.
| Bericht | Wat je intypt |
| --- | --- |
| 4 | `Op maandag 12 oktober staat Engels unit 4 als nieuwe stof, terwijl de toets Engels dinsdag is. Klopt dat met je regels?` |
De agent geeft het toe, citeert de regel, ziet zelf nog een tweede fout (Engels kwam maar een keer terug voor de toets) en stelt een betere verdeling voor. Hij vraagt of hij het hele plan opnieuw mag maken.
![De agent controleert zichzelf aan de regels](beelden/08-regelcheck.jpg)
Dit is de les van deze handleiding, dezelfde als in de Dify-reeks: een agent interpreteert regels, hij voert ze niet uit als een programma. Het plan zag er goed uit en had toch een fout. Wie het plan naleest, vindt hem; wie het plan doorstuurt, niet. De agent kan zichzelf corrigeren, maar alleen als iemand het vraagt.
> **Zelf kiezen: laat de agent zichzelf controleren.** Voeg aan "Wat je oplevert" toe: "Loop het plan voordat je het geeft na op alle vijf de planregels en verbeter het waar het niet klopt." Dat vangt een deel van de fouten af, niet alles. Test opnieuw met dezelfde drie berichten en vergelijk.
---
## Stap 6. Maak de agent
1. Klik op **Maken**. De agent is privé.
![De agent is gemaakt](beelden/09-gemaakt.jpg)
2. Sluit de Builder. De Toetsweekplanner staat onder **Agents**, naast de twee agents uit handleiding 1 en 2.
Delen: zie handleiding 1, stap 7. Voor deze agent geldt de tabel aan het begin: alleen met leerlingen als de school dat heeft ingericht.
---
## Controleren of het gelukt is
- De agent vat het rooster samen en stelt daarna zijn vragen een voor een
- Hij plant pas als hij datum, leermomenten en moeilijkheid heeft
- Er staat een link naar studieplan.xlsx in het antwoord en het bestand opent op OneDrive
- Het plan gebruikt alleen de opgegeven momenten (kijk zelf na)
- Op een vraag naar een regel legt de agent uit en corrigeert hij
## Als het misgaat
| Wat je ziet | Wat er aan de hand is |
| --- | --- |
| De agent plant vanaf een verkeerde datum | Hij weet niet welke dag het is. Geef de datum in je eerste bericht, of laat de zin "Vraag ook welke datum het vandaag is" in de instructie staan |
| Geen Excel-bestand, alleen een beschrijving | **Maak documenten, grafieken en code** staat uit (stap 3), of de zin "Maak dat bestand echt aan" ontbreekt |
| De link naar het bestand werkt niet | Het bestand staat in de OneDrive van degene die chatte; iemand anders kan het niet openen. Open het via je eigen OneDrive, map van Copilot |
| De agent stelt alle vragen tegelijk | "Stel deze vragen een voor een" ontbreekt |
| Het plan zet blokken op momenten die je niet gaf, of nieuwe stof op de avond voor de toets | De agent interpreteert. Leg het hem voor (stap 5) en overweeg de zelfcontrole uit het groene kader |
| Het antwoord blijft hangen | Het venster staat op de achtergrond. Zet Copilot in beeld en wacht; het antwoord loopt door |
| De agent noemt een cijfer of een kans | De laatste alinea van de instructie ontbreekt |
---
## Copilot naast de Dify Agent Console
| | Dify Agent Console (handleiding 4) | Copilot Agent Builder |
| --- | --- | --- |
| Rooster meegeven | Bestand uploaden onder FILES | In de instructie (gratis laag) of als bestand (betaald) |
| Datum weten | Tool CurrentTime | Niet beschikbaar; de leerling geeft de datum |
| Bestanden maken | Sandbox: Python-script dat je kunt lezen, xlsx en ics | CodeInterpreter: script niet zichtbaar, alleen Word, Excel, PowerPoint |
| Waar komt het bestand | Link in de chat, tijdelijk | OneDrive van de gebruiker, blijvend |
| Model | Zelf kiezen (gpt-5.4), eigen sleutel | Vast, zonder credits |
| Kijken wat de agent deed | Thinking, Ran commands, het script | Alleen "Programmeren en uitvoeren" en een verwijzing |
Copilot is hier makkelijker (niets in te richten, bestand staat meteen goed) en minder doorzichtig (je ziet het programma niet). Voor een leerling maakt dat niet uit; voor wie wil begrijpen wat een agent doet, is de Dify-versie leerzamer.
---
## Maak hem van jou
| Aanpassing | Waar | Moeilijkheid | Wat je ervoor terugkrijgt |
| --- | --- | --- | --- |
| Toon en aanspreekvorm | Stap 2, eerste alinea | makkelijk | Een agent die klinkt als je mentoren |
| Je eigen planregels | Stap 2, kop Planregels | makkelijk | Een plan dat past bij de studielessen die je al geeft |
| Het echte rooster van een klas | Stap 2, kop TOETSROOSTER | makkelijk | Een planner die klaar is voor de komende toetsweek |
| Een Word-overzicht in plaats van Excel | Stap 2, "Wat je oplevert" | makkelijk | Een printbaar plan |
| Een vraag extra ("welke dag wil je vrijhouden?") | Stap 2, "Wat je nodig hebt" | gemiddeld | Ruimte voor sport of bijbaan |
| Zelfcontrole op de regels | Stap 2, "Wat je oplevert" (groene kader stap 5) | gemiddeld | Minder fouten om zelf te vinden |
| Rooster als bestand op SharePoint | Kennis, met Microsoft 365 Copilot-licentie | gemiddeld | Een rooster dat de roostermaker bijwerkt, niet jij |
| Een agendabestand (.ics) erbij | Stap 2, "Wat je oplevert" | moeilijk | Copilot maakt alleen Office-bestanden; vraag om een tabel die de leerling in Outlook importeert, of gebruik de Dify-versie |
**Drie opdrachten**
1. **Jouw regels.** Vraag twee mentoren welke drie planregels zij hun leerlingen meegeven. Zet die in de instructie in plaats van de onze en voer hetzelfde testgesprek. Vergelijk de plannen: welk plan zou een leerling echt volgen?
2. **Vind de fout.** Neem het plan uit je test en loop het regel voor regel na. Schrijf op wat niet klopt en leg het de agent voor, zoals in stap 5. Dat is de kern van werken met agents: jij blijft de controleur.
3. **Van Excel naar agenda.** Vraag de agent om het plan als tabel met de kolommen Subject, Start Date, Start Time, End Date, End Time, zodat een leerling het als CSV in Outlook of Google Agenda kan importeren. Kijk of het lukt en wat er misgaat.
**Checklist voordat je eigen materiaal gebruikt**
- [ ] Het rooster in de instructie bevat geen namen of klassenlijsten
- [ ] De regel "geen cijfers, oordelen of voorspellingen" staat erin en je hebt hem getest
- [ ] Je weet in wiens OneDrive het bestand komt, en dat vind je goed
- [ ] Iemand heeft een handvol plannen aan de regels getoetst voordat leerlingen de agent krijgen
- [ ] Bij leerlingen: de school heeft Copilot Chat voor leerlingen ingericht en de privacyfunctionaris weet ervan
- [ ] Er is een eigenaar die het rooster elke toetsweek bijwerkt en op **Bijwerken** klikt
---
## En verder
Drie agents, drie patronen: een die uit een document voorleest (1), een die regels toepast op een tekst (2), en een die rekent en een bestand maakt (3). Meer kan ook in Copilot: agents die in SharePoint zoeken, in Teams-kanalen lezen of acties uitvoeren in andere systemen. Daarvoor is de betaalde Microsoft 365 Copilot-licentie of Copilot Studio nodig; de instructie die je nu schrijft, blijft daar hetzelfde.
+30
View File
@@ -0,0 +1,30 @@
Je bent de Toetsweekplanner voor leerlingen in de onderbouw van het voortgezet onderwijs. Je helpt een leerling een persoonlijk studieplan te maken voor de toetsweek. Je spreekt de leerling aan met je, in korte zinnen en gewoon Nederlands.
Wat je nodig hebt van de leerling:
1. Het toetsrooster. Het rooster van deze toetsweek staat hieronder; vat het kort samen. Geeft de leerling een ander rooster, gebruik dan dat.
2. De momenten waarop de leerling kan leren, per dag, vanaf vandaag tot de laatste toets. Vraag ook welke datum het vandaag is als je dat niet weet.
3. Per vak hoe moeilijk de leerling het vindt: makkelijk, gemiddeld of moeilijk.
Stel deze vragen een voor een, niet allemaal tegelijk. Ga pas plannen als je alle drie hebt.
Planregels:
- Moeilijke vakken krijgen ongeveer twee keer zoveel tijd als makkelijke vakken.
- Elk vak komt minstens twee keer terug, met minimaal een dag ertussen; de laatste keer is de dag voor de toets.
- Een leerblok duurt 25 tot 45 minuten, met daarna 10 minuten pauze. Nooit meer dan drie blokken achter elkaar.
- De avond voor een toets alleen herhalen, geen nieuwe stof.
- Plan niets op momenten die de leerling niet heeft opgegeven.
Wat je oplevert:
- Een overzicht in de chat: per dag de blokken met vak, tijd en wat er precies geleerd wordt (welke hoofdstukken of paragrafen).
- Een Excel-bestand studieplan.xlsx met per rij: dag, datum, begintijd, eindtijd, vak, stof. Maak dat bestand echt aan en geef de leerling de link.
- Sluit af met een vraag of de leerling iets wil verschuiven.
Je geeft geen cijfers, oordelen of voorspellingen over hoe de toetsen zullen gaan. Je vraagt niet naar de naam van de leerling en bewaart niets.
TOETSROOSTER (dag, datum, vak, begintijd, duur, toetsstof)
maandag 12 oktober 2026, Nederlands, 09:00, 60 minuten: leesvaardigheid hoofdstuk 3 en 4; spelling werkwoorden (d/t)
maandag 12 oktober 2026, wiskunde, 10:45, 45 minuten: hoofdstuk 2 (vergelijkingen) en 3 (procenten)
dinsdag 13 oktober 2026, Engels, 09:00, 45 minuten: unit 3 en 4: woordenlijst, present simple en present continuous
woensdag 14 oktober 2026, geschiedenis, 09:00, 45 minuten: hoofdstuk 5: de Republiek in de Gouden Eeuw (paragraaf 1 t/m 4)
donderdag 15 oktober 2026, biologie, 10:45, 45 minuten: thema 2: cellen en organen (basisstof 1 t/m 5)
vrijdag 16 oktober 2026, Frans, 09:00, 45 minuten: chapitre 2: vocabulaire, être en avoir, getallen tot 100
@@ -0,0 +1,7 @@
dag,datum,vak,tijd,duur_minuten,toetsstof
maandag,2026-10-12,Nederlands,09:00,60,Leesvaardigheid hoofdstuk 3 en 4; spelling werkwoorden (d/t)
maandag,2026-10-12,wiskunde,10:45,45,Hoofdstuk 2 (vergelijkingen) en 3 (procenten)
dinsdag,2026-10-13,Engels,09:00,45,Unit 3 en 4: woordenlijst, present simple en present continuous
woensdag,2026-10-14,geschiedenis,09:00,45,Hoofdstuk 5: de Republiek in de Gouden Eeuw (paragraaf 1 t/m 4)
donderdag,2026-10-15,biologie,10:45,45,Thema 2: cellen en organen (basisstof 1 t/m 5)
vrijdag,2026-10-16,Frans,09:00,45,Chapitre 2: vocabulaire, être en avoir, getallen tot 100
1 dag,datum,vak,tijd,duur_minuten,toetsstof
2 maandag,2026-10-12,Nederlands,09:00,60,Leesvaardigheid hoofdstuk 3 en 4; spelling werkwoorden (d/t)
3 maandag,2026-10-12,wiskunde,10:45,45,Hoofdstuk 2 (vergelijkingen) en 3 (procenten)
4 dinsdag,2026-10-13,Engels,09:00,45,Unit 3 en 4: woordenlijst, present simple en present continuous
5 woensdag,2026-10-14,geschiedenis,09:00,45,Hoofdstuk 5: de Republiek in de Gouden Eeuw (paragraaf 1 t/m 4)
6 donderdag,2026-10-15,biologie,10:45,45,Thema 2: cellen en organen (basisstof 1 t/m 5)
7 vrijdag,2026-10-16,Frans,09:00,45,Chapitre 2: vocabulaire, être en avoir, getallen tot 100
+15
View File
@@ -0,0 +1,15 @@
# Wijzigingen
Microsoft verandert Copilot regelmatig. Elke handleiding vermeldt op de titelpagina op welke dag
de schermen zijn vastgelegd. Hier staat per uitgave wat er veranderde.
## 2026-09-21, eerste uitgave
- Handleidingen 01 (Schoolgids-assistent), 02 (Ouderbrief-assistent) en 03 (Toetsweekplanner),
gebouwd in de Agent Builder van Microsoft 365 Copilot Chat, zonder betaalde licentie.
- Per map de instructie als `instructies.txt`, en de fictieve documenten uit de Dify-reeks
(schoolgids, schrijfwijzer, toetsrooster).
- Bevindingen die in de handleidingen staan: in de gratis laag wordt een koppeling onder Kennis
een zoekgebied voor Webzoekopdracht; de instructie mag 8.000 tekens zijn; startvragen raken
soms een titel kwijt; het antwoord in Voorbeeld loopt alleen door als het venster zichtbaar is;
de agent maakt met "Maak documenten, grafieken en code" echte Excel-bestanden op OneDrive.
+51
View File
@@ -0,0 +1,51 @@
# Licentie
**Eigenaar en contact:** Guido van Dijk, LeX Consultancy B.V. en AI Netwerk Limburg ·
guido@l-e-x.nl · guido@ai-netwerk-limburg.nl · bron: https://git.lexconsultancy.nl/guido/copilot-handleidingen
## Documenten, dia's en beelden: CC BY-SA 4.0
De handleidingen, bijlagen, het draaiboek, de presentatie, de fictieve documenten en de screenshots in
deze map zijn gepubliceerd onder **Creative Commons Naamsvermelding-GelijkDelen 4.0 Internationaal
(CC BY-SA 4.0)**: https://creativecommons.org/licenses/by-sa/4.0/deed.nl
Je mag alles kopiëren, verspreiden, bewerken en er afgeleide werken van maken, ook commercieel,
op twee voorwaarden: noem de bron ("Guido van Dijk, LeX Consultancy B.V. en AI Netwerk Limburg,
Copilot-handleidingen, [versiedatum], git.lexconsultancy.nl/guido/copilot-handleidingen") en deel wat je
ervan maakt onder dezelfde licentie. Dezelfde licentie als de Stercollecties van VO-content en het
gebruikelijke open leermateriaal op Wikiwijs, zodat je alles vrij kunt mengen.
Elk gebouwd document (PDF, Word, HTML) en de slotdia van de presentatie dragen een colofon met
deze licentie, de eigenaar en het contact. Laat dat colofon staan of vervang het door je eigen
bronvermelding met dezelfde licentie.
## Scripts: MIT
De Python-scripts (`_gereedschap/`, `build.py` per map, `00-presentatie/maak_dias.py` en
`bouw_pdf.py`, `08-chatflow-studiecoach/maak_materiaal.py`) en de Python-code in de Code-nodes van
de handleidingen vallen onder de MIT-licentie:
> Copyright (c) 2026 Guido van Dijk, LeX Consultancy B.V.
>
> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
> associated documentation files (the "Software"), to deal in the Software without restriction,
> including without limitation the rights to use, copy, modify, merge, publish, distribute,
> sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
> furnished to do so, subject to the following conditions: the above copyright notice and this
> permission notice shall be included in all copies or substantial portions of the Software.
> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND.
## Uitzonderingen
- Het logo van AI Netwerk Limburg (`_gereedschap/logo-ai-netwerk-limburg.png` en de kopie in
`00-presentatie/beelden/`) en het logo van LeX Consultancy (`_gereedschap/logo-lex.png`,
`00-presentatie/beelden/logo-lex*.png`) zijn merken en vallen niet onder deze licentie. Wie de
handleidingen of dia's bewerkt, vervangt het logo door het eigen logo of laat het weg
(`build_handleiding.py` en `maak_dias.py` verwachten PNG's op die paden).
- `08-chatflow-studiecoach/stercollectie-voedselweb-hv3.pdf` en de kopie in `06-inclusief-lesmateriaal/`
zijn van VO-content (Stercollecties, https://maken.wikiwijs.nl/157495), CC BY-SA 4.0. De bronvermelding
van VO-content blijft staan.
- Namen van producten (Dify, OpenAI, Microsoft, Google en andere) zijn merken van hun eigenaren;
de schermafbeeldingen van Microsoft 365 Copilot tonen software van Microsoft Corporation.
Alle scholen, personen, adressen en documenten in de voorbeelden zijn verzonnen.
+62
View File
@@ -0,0 +1,62 @@
# Copilot-handleidingen
Stap-voor-stap handleidingen voor het bouwen van AI-agents in Microsoft 365 Copilot (de Agent
Builder) voor het onderwijs. De tegenhanger van de Dify-handleidingen: dezelfde fictieve school,
dezelfde voorbeelden, maar gebouwd in de omgeving die de meeste scholen al hebben. Gemaakt door
LeX Consultancy B.V. Alle voorbeelden spelen op Het Voorbeeldcollege (fictief); schermen vastgelegd
in Microsoft 365 Copilot Chat op 21 september 2026, in een werkaccount zonder de betaalde
Microsoft 365 Copilot-licentie.
Licentie: CC BY-SA 4.0 (documenten en beelden) en MIT (scripts), zie LICENSE.md.
Eigenaar en contact: Guido van Dijk, guido@l-e-x.nl, guido@ai-netwerk-limburg.nl.
## Inhoud
| Map | Titel | Voor wie | Omvang |
| --- | --- | --- | --- |
| 01-schoolgids-assistent | Bouwen in Microsoft 365 Copilot: de Schoolgids-assistent (agent die uit een document voorleest, met de kennis in de instructie) | Beginners | 20 pp. |
| 02-ouderbrief-assistent | Bouwen in Microsoft 365 Copilot: de Ouderbrief-assistent (agent die de schrijfwijzer toepast op een brief, en berichten maakt voor ouderapp en website) | Mentoren, teams communicatie | 13 pp. |
| 03-toetsweekplanner | Bouwen in Microsoft 365 Copilot: de Toetsweekplanner (agent die vragen stelt, plant en een Excel-bestand maakt) | Mentoren, Experimenteerruimte | 15 pp. |
Elke handleiding heeft een ingevulde ontwerpkaart, groene kaders "Zelf kiezen", een hoofdstuk
"Maak hem van jou" met aanpassingen, opdrachten en een checklist, en een vergelijking met de
Dify-versie van dezelfde app.
## Waarvoor is welke agent
| Agent | Wat hij doet | Voor wie | Patroon |
| --- | --- | --- | --- |
| Schoolgids-assistent (01) | Beantwoordt vragen over de schoolregels uit de schoolgids, met hoofdstukverwijzing; verwijst door als het antwoord er niet in staat | Collega's, leerlingen met schoolaccount | Kennis in de instructie |
| Ouderbrief-assistent (02) | Herschrijft een conceptbrief volgens de schrijfwijzer (B1, u, opbouw, lengte) en maakt er berichten voor ouderapp, website of sociale media van | Mentoren, teamleiders, team communicatie | Regels toepassen op een tekst |
| Toetsweekplanner (03) | Vraagt leermomenten en moeilijkheid, verdeelt de toetsstof over de dagen volgens vijf planregels en levert een Excel-bestand op OneDrive | Mentoren, leerlingen met schoolaccount | Vragen, rekenen, bestand maken |
## Wat je nodig hebt
- Een werkaccount van school met Microsoft 365 en toegang tot Copilot Chat (m365.cloud.microsoft).
- In het linkermenu van Copilot het kopje **Agents** met **Nieuwe agent**. Ontbreekt dat, dan heeft
de beheerder het maken van agents uitgezet.
- Geen betaalde Microsoft 365 Copilot-licentie. Alles in deze reeks werkt in de gratis laag
(Copilot Chat); waar de betaalde licentie iets toevoegt (bestanden en SharePoint als kennis),
staat dat in een groen kader.
## De agents zelf bouwen
Er is geen exportbestand zoals bij Dify: een Copilot-agent bestaat uit een naam, een beschrijving,
een instructie en drie startvragen. Elke map bevat `instructies.txt` met de volledige instructie
om te plakken; de rest staat in de handleiding. Vijf minuten per agent.
## Zelf bouwen of aanpassen
Elke map heeft dezelfde structuur:
handleiding-*.md bron (dit bewerk je)
handleiding-*.pdf gebouwde uitvoer (staat in git)
beelden/ schermafbeeldingen
instructies.txt de instructie van de agent
build.py bouwt html, pdf en docx: python3 build.py
Alles in een keer: `python3 _gereedschap/bouw_alles.py`. Vereist python3-markdown, google-chrome
en libreoffice. Opmaak, logo's en colofon staan in `_gereedschap/build_handleiding.py`.
De Dify-reeks staat op https://git.lexconsultancy.nl/guido/dify-handleidingen (Nederlands) en
https://git.lexconsultancy.nl/guido/dify-guides (Engels).
+9
View File
@@ -0,0 +1,9 @@
#!/usr/bin/env python3
"""Bouwt alle handleidingen en bijlagen in één keer: python3 _gereedschap/bouw_alles.py"""
import runpy, sys
from pathlib import Path
root = Path(__file__).resolve().parent.parent
for build in sorted(root.glob("*/build.py")):
print(f"== {build.parent.name}")
sys.argv = [str(build)]
runpy.run_path(str(build), run_name="__main__")
+240
View File
@@ -0,0 +1,240 @@
#!/usr/bin/env python3
"""Bouwt een handleiding (.html, .pdf, .docx) uit een markdown-bron.
Gebruik vanuit een handleidingmap: python3 build.py
(build.py in die map roept dit script aan met de naam van de .md)
Vereist: python3-markdown, google-chrome, libreoffice (lokaal aanwezig).
Het logo van AI Netwerk Limburg staat naast dit script en komt op de eerste
pagina rechtsboven, in PDF, HTML en Word.
"""
import base64
import re
import subprocess
import sys
from pathlib import Path
import markdown
TOOLS = Path(__file__).resolve().parent
LOGO = TOOLS / "logo-ai-netwerk-limburg.png"
LOGO_LEX = TOOLS / "logo-lex.png" # kleiner, naast het LAI-logo
# Licentie en contact, komen als colofon onderaan elk document (HTML, PDF en Word).
EIGENAAR = "Guido van Dijk, LeX Consultancy B.V. en AI Netwerk Limburg"
CONTACT = "guido@l-e-x.nl · guido@ai-netwerk-limburg.nl"
BRON = "https://git.lexconsultancy.nl/guido/copilot-handleidingen"
LICENTIE_URL = "https://creativecommons.org/licenses/by-sa/4.0/deed.nl"
CSS = """
@page { size: A4; margin: 2cm 2cm 2.2cm 2cm; }
html { font-size: 11pt; }
body { font-family: "Noto Sans", "DejaVu Sans", Arial, sans-serif; color: #1a1a1a;
line-height: 1.45; max-width: 17cm; margin: 0 auto; }
.kop { display: flex; align-items: flex-start; justify-content: space-between; gap: 1.5em;
margin-bottom: 1em; }
.kop-tekst { flex: 1 1 auto; }
.kop .logos { flex: 0 0 auto; display: flex; flex-direction: column; align-items: center; gap: .3em; }
.kop img { width: 3.4cm; height: auto; }
.kop img.lex { width: 2cm; }
h1 { font-size: 22pt; margin: 0 0 .3em; line-height: 1.2; }
h2 { font-size: 15pt; margin: 1.6em 0 .5em; padding-top: .3em; border-top: 2px solid #1d4ed8;
page-break-after: avoid; break-after: avoid; }
h3 { font-size: 12pt; margin: 1.2em 0 .4em; page-break-after: avoid; break-after: avoid; }
p { margin: .5em 0; }
hr { border: 0; border-top: 1px solid #ddd; margin: 1.5em 0; }
strong { font-weight: 600; }
code { font-family: "DejaVu Sans Mono", Consolas, monospace; font-size: .92em;
background: #f1f5f9; padding: 0 .25em; border-radius: 3px; }
blockquote { margin: .8em 0; padding: .5em .9em; background: #fff7ed;
border-left: 4px solid #f59e0b; page-break-inside: avoid; break-inside: avoid; }
blockquote p { margin: .2em 0; }
blockquote.kies { background: #ecfdf5; border-left-color: #10b981; }
table { border-collapse: collapse; width: 100%; margin: .8em 0; font-size: .95em;
page-break-inside: avoid; break-inside: avoid; }
th, td { border: 1px solid #cbd5e1; padding: .35em .6em; text-align: left; vertical-align: top; }
th { background: #eff6ff; }
figure { margin: .9em 0 1.1em; page-break-inside: avoid; break-inside: avoid; }
figure img { width: 100%; height: auto; border: 1px solid #cbd5e1; display: block; }
figcaption { font-size: .88em; color: #555; margin-top: .3em; }
ul, ol { margin: .4em 0 .4em 1.4em; padding: 0; }
li { margin: .15em 0; }
ol li { margin: .25em 0; }
.step { page-break-inside: avoid; break-inside: avoid; }
.typ { margin: .6em 0 .9em; border: 1px solid #94a3b8; border-radius: 4px; background: #f8fafc;
page-break-inside: avoid; break-inside: avoid; }
.typ-label { font-size: .75em; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
color: #334155; background: #e2e8f0; padding: .15em .7em; }
.colofon { margin-top: 2.2em; padding: .7em .9em; border: 1px solid #cbd5e1; border-radius: 4px;
background: #f8fafc; font-size: .88em; color: #334155; page-break-inside: avoid; break-inside: avoid; }
.colofon p { margin: .2em 0; }
.schema { margin: .6em 0 .9em; padding: .5em .7em; border: 1px dashed #94a3b8; border-radius: 4px;
background: #fff; overflow-x: auto; page-break-inside: avoid; break-inside: avoid; }
.schema pre { margin: 0; white-space: pre; font-family: "DejaVu Sans Mono", Consolas, monospace; font-size: .8em; line-height: 1.3; }
.typ pre { margin: 0; padding: .5em .7em; white-space: pre-wrap; word-wrap: break-word;
font-family: "DejaVu Sans Mono", Consolas, monospace; font-size: .9em; }
.voet { margin-top: 3em; padding-top: .6em; border-top: 1px solid #ddd; font-size: .85em; color: #555;
display: flex; align-items: center; gap: .8em; }
.voet img { width: 1.6cm; height: auto; }
.voet img.lex { width: 1.1cm; }
"""
def read_source(src: Path) -> str:
text = src.read_text(encoding="utf-8")
# Het instructieblok voor de bewerker bovenin hoort niet in de uitgave.
text = re.sub(r"^\s*<!--.*?-->\s*", "", text, count=1, flags=re.S)
# Twee kaders na elkaar (alleen een witregel ertussen) plakt python-markdown aan elkaar;
# een leeg commentaar ertussen houdt ze apart, zodat een groen kader niet in een oranje valt.
return re.sub(r"(\n> [^\n]*\n)\n(?=> )", r"\1\n<!-- -->\n\n", text)
def logo_src(embed: bool, pad: Path = LOGO) -> str:
if embed:
return "data:image/png;base64," + base64.b64encode(pad.read_bytes()).decode()
return pad.as_uri()
COMPACT_CSS = """
html { font-size: 9.2pt; } h1 { font-size: 17pt; } h2 { margin-top: 1em; } @page { margin: 1.5cm 2cm 1.5cm 2cm; }
p { margin: .35em 0; } table { margin: .5em 0; } th, td { padding: .25em .5em; }
.colofon { margin-top: .5em; padding: .3em .5em; font-size: .75em; border: 0; border-top: 1px solid #ddd; border-radius: 0; background: none; } .voet { margin-top: .6em; } .voet img { width: 1.1cm; } .voet img.lex { width: .8cm; } .kop img { width: 2.8cm; } .kop img.lex { width: 1.6cm; } ul, ol { margin: .3em 0 .3em 1.3em; }
"""
def to_html(md_text: str, here: Path, embed_images: bool, compact: bool = False) -> str:
body = markdown.markdown(md_text, extensions=["tables", "sane_lists", "smarty", "fenced_code"])
title = re.search(r"<h1>(.*?)</h1>", body).group(1)
logo = logo_src(embed_images)
logo_lex = logo_src(embed_images, LOGO_LEX)
def figure(m: re.Match) -> str:
alt, src = m.group(1), m.group(2)
if embed_images:
data = base64.b64encode((here / src).read_bytes()).decode()
src = f"data:image/jpeg;base64,{data}"
return (f'<figure><img src="{src}" alt="{alt}" width="640" />'
f"<figcaption>{alt}</figcaption></figure>")
body = re.sub(r'<p><img alt="([^"]*)" src="([^"]+)"\s*/?></p>', figure, body)
# ```schema-blokken zijn tekstschema's (pijlen en kaders), geen tekst om over te typen.
if embed_images:
body = re.sub(r'<pre><code class="language-schema">(.*?)</code></pre>',
r'<table border="1" cellpadding="6" width="100%"><tr><td><tt>\1</tt></td></tr></table>',
body, flags=re.S)
else:
body = re.sub(r'<pre><code class="language-schema">(.*?)</code></pre>',
r'<div class="schema"><pre>\1</pre></div>', body, flags=re.S)
# Codeblokken zijn tekst die letterlijk overgetypt wordt: geef ze een label.
if embed_images:
# LibreOffice negeert CSS-kaders bij HTML-import, maar respecteert tabelattributen.
body = re.sub(r"<pre><code>(.*?)</code></pre>",
r'<table border="1" cellpadding="6" width="100%" bgcolor="#f1f5f9">'
r'<tr><td><b>INTYPEN</b><br/><tt>\1</tt></td></tr></table>',
body, flags=re.S)
body = body.replace("<table>", '<table border="1" cellpadding="4" width="100%">')
else:
body = re.sub(r"<pre><code>(.*?)</code></pre>",
r'<div class="typ"><div class="typ-label">Intypen</div><pre>\1</pre></div>',
body, flags=re.S)
# Kaders die beginnen met "Zelf kiezen" zijn groen (keuze), de rest oranje (valkuil).
body = re.sub(r"<blockquote>(\s*<p><strong>Zelf kiezen)",
r'<blockquote class="kies">\1', body)
if embed_images:
# Word: kleur via tabelattribuut, want CSS overleeft de import niet.
body = re.sub(r'<blockquote class="kies">(.*?)</blockquote>',
r'<table border="0" cellpadding="6" width="100%" bgcolor="#ecfdf5"><tr><td>\1</td></tr></table>',
body, flags=re.S)
body = re.sub(r"<blockquote>(.*?)</blockquote>",
r'<table border="0" cellpadding="6" width="100%" bgcolor="#fff7ed"><tr><td>\1</td></tr></table>',
body, flags=re.S)
# Instructiezin en het beeld erbij horen op dezelfde pagina.
body = re.sub(r"(<p>(?:(?!</p>).)*</p>)\n(<figure>.*?</figure>)",
r'<div class="step">\1\2</div>', body, flags=re.S)
# Kop: titel plus eerste alinea (ondertitel) links, logo rechts.
if embed_images:
# Word: tabel zonder randen, want flexbox overleeft de import niet.
body = re.sub(
r"^(<h1>.*?</h1>\s*<p>.*?</p>)",
lambda m: (f'<table border="0" width="100%"><tr>'
f'<td width="78%" valign="top">{m.group(1)}</td>'
f'<td width="22%" valign="top" align="right">'
f'<img src="{logo}" width="120" alt="AI Netwerk Limburg" /><br />'
f'<img src="{logo_lex}" width="70" alt="LeX Consultancy" /></td></tr></table>'),
body, count=1, flags=re.S)
else:
body = re.sub(
r"^(<h1>.*?</h1>\s*<p>.*?</p>)",
lambda m: (f'<div class="kop"><div class="kop-tekst">{m.group(1)}</div>'
f'<div class="logos"><img src="{logo}" alt="AI Netwerk Limburg" />'
f'<img src="{logo_lex}" class="lex" alt="LeX Consultancy" /></div></div>'),
body, count=1, flags=re.S)
colofon = (
f'<div class="colofon">'
f'<p><strong>Licentie:</strong> CC BY-SA 4.0 ({LICENTIE_URL}). Je mag dit document kopiëren, bewerken en '
f'hergebruiken, ook op je eigen school, als je de bron noemt ({EIGENAAR}, {BRON}) en je bewerking onder '
f'dezelfde licentie deelt. Het logo van AI Netwerk Limburg valt buiten de licentie; namen van producten '
f'zijn merken van hun eigenaren. Scholen, personen en documenten in de voorbeelden zijn verzonnen.</p>'
f'<p><strong>Eigenaar en contact:</strong> {EIGENAAR} · {CONTACT}</p>'
f'</div>')
if compact:
# Losse A4: één regel, anders past de kaart niet meer op één pagina.
colofon = (f'<div class="colofon"><p>CC BY-SA 4.0 · {EIGENAAR} · {CONTACT} · {BRON} · '
f'logo AI Netwerk Limburg uitgezonderd</p></div>')
if embed_images:
colofon = colofon.replace('<div class="colofon">', '<table border="0" cellpadding="6" width="100%" bgcolor="#f8fafc"><tr><td>').replace('</div>', '</td></tr></table>')
body += colofon
if compact:
# Op de losse A4 vervangt het colofon de voet.
return (f'<!DOCTYPE html><html lang="nl"><head><meta charset="utf-8">'
f"<title>{title}</title><style>{CSS}{COMPACT_CSS}</style></head><body>{body}</body></html>")
voet = (f'<div class="voet"><img src="{logo}" alt="" /><img src="{logo_lex}" class="lex" alt="" />'
f'<span>AI Netwerk Limburg · LeX Consultancy B.V. · {title}</span></div>')
return (f'<!DOCTYPE html><html lang="nl"><head><meta charset="utf-8">'
f"<title>{title}</title><style>{CSS}{COMPACT_CSS if compact else ''}</style></head>"
f"<body>{body}{voet}</body></html>")
def build(src: Path) -> None:
here = src.resolve().parent
stem = src.stem
md_text = read_source(src)
# "STIJL: compact" in het instructieblok bovenin = kleinere letter, voor een losse A4.
compact = "STIJL: compact" in src.read_text(encoding="utf-8")
html_path = here / f"{stem}.html"
html_path.write_text(to_html(md_text, here, embed_images=False, compact=compact), encoding="utf-8")
# PDF via Chrome: gebruikt de CSS hierboven, inclusief paginaregels.
subprocess.run([
"google-chrome", "--headless=new", "--disable-gpu", "--no-pdf-header-footer",
f"--print-to-pdf={here / (stem + '.pdf')}", html_path.as_uri(),
], check=True, capture_output=True)
# DOCX via LibreOffice: beelden als data-URI zodat ze ingebed worden, niet gelinkt.
tmp_html = here / f".{stem}-embed.html"
tmp_html.write_text(to_html(md_text, here, embed_images=True, compact=compact), encoding="utf-8")
subprocess.run([
"soffice", "--headless", "--convert-to", "docx:MS Word 2007 XML",
"--outdir", str(here), str(tmp_html),
], check=True, capture_output=True)
(here / f".{stem}-embed.docx").rename(here / f"{stem}.docx")
tmp_html.unlink()
for ext in ("html", "pdf", "docx"):
p = here / f"{stem}.{ext}"
print(f"{p.name}: {p.stat().st_size // 1024} kB")
if __name__ == "__main__":
if len(sys.argv) != 2:
sys.exit("gebruik: build_handleiding.py <handleiding.md>")
build(Path(sys.argv[1]))
Binary file not shown.

After

Width:  |  Height:  |  Size: 392 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB