Logica en automatisering
Het Python-script schrijven dat de commerciële pipeline samenvat, het met de hand uitvoeren en het voor elke ochtend inplannen.
De app toont al gegevens en laat ze bewerken. Wat ontbreekt is het deel dat zelf werkt: een script dat elke ochtend naar de pipeline kijkt, telt wat er open staat en de voor die week verwachte sluitingen vastlegt.
In deze etappe schrijft u dat script in Python, voert u het met de hand uit om het resultaat te zien, en geeft u het een tijdstip — elke dag om 07:00.
Wat het script gaat doen
Het script atualizar_indicadores beantwoordt drie vragen, en geeft ze terug
in een resultaat dat in de geschiedenis blijft staan:
| Vraag | Wat het teruggeeft |
|---|---|
| Hoeveel opportuniteiten staan er open? | oportunidades_abertas |
| Hoeveel is de pipeline waard? | valor_pipeline |
| Hoeveel sluitingen worden er de komende 7 dagen verwacht? | fechos_proximos_7_dias |
Naast het resultaat schrijft het logs — één regel per sluiting van de week — zodat wie de geschiedenis opent zonder rekenwerk begrijpt wat er op die dag gepland stond.
Het script aanmaken
- Kies het paneel Code in de zijbalk.
- Klik op de regel Scripts op de + (Nieuw script). Het dialoogvenster Nieuw script opent — "Kies de runtime en maak het aan — de code bewerkt u daarna, met het contract in beeld."
- Schrijf bij Naam
atualizar_indicadores. De naam identificeert het script overal — in de planningen, in de API-stappen, in de afhankelijkheden van andere scripts. - Runtime staat vast op Python.
- Schrijf bij Beschrijving
Herberekent de commerciële indicatoren en waarschuwt wanneer er deze week sluitingen zijn. - Laat bij Tijdslimiet 1 minuut staan. Dat is het plafond van de uitvoering: na die tijd breekt het platform af.
- Klik op Script aanmaken. De editor opent met
main.pyklaar.

Dica
Een royale tijdslimiet is geen vriendelijkheid: wordt dit script als stap van een API gebruikt, dan wachten de clients in het slechtste geval al die tijd. Een minuut is ruimschoots genoeg voor wat we gaan doen.
De main.py schrijven
Het contract van een script is kort: een functie main(input) die iets
teruggeeft. Wat u teruggeeft, blijft in de geschiedenis van de uitvoeringen
staan en is, als het script door een API wordt aangeroepen, haar antwoord.
Schrijf dit in de editor:
from datetime import date, timedelta
from api_manager import db, log
def main(input):
"""Herberekent de indicatoren van het commerciële paneel.
Draait elke dag om 7.00 uur (planning "Dagelijkse indicatoren") en
geeft de samenvatting terug — de geschiedenis van de uitvoeringen
houdt per dag een leesbare registratie over.
"""
crm = db("Dados CRM")
abertas = crm.query(
"select count(*) as n, coalesce(sum(valor), 0) as total "
"from oportunidades where fase not in ('fechada_ganha', 'fechada_perdida')"
)[0]
limite = (date.today() + timedelta(days=7)).isoformat()
fechos_semana = crm.query(
"select titulo, data_fecho from oportunidades "
"where fase not in ('fechada_ganha', 'fechada_perdida') "
"and data_fecho <= ? order by data_fecho",
[limite],
)
log("pipeline:", abertas["n"], "opportuniteiten /", abertas["total"], "EUR")
for op in fechos_semana:
log("sluiting deze week:", op["titulo"], "(", op["data_fecho"], ")")
return {
"oportunidades_abertas": abertas["n"],
"valor_pipeline": abertas["total"],
"fechos_proximos_7_dias": len(fechos_semana),
}

Vier dingen om uit deze code te onthouden:
| Regel | Wat die doet |
|---|---|
from api_manager import db, log |
De toegang van het platform: db opent databases, log schrijft in de geschiedenis. |
db("Dados CRM") |
De database op de interne naam van de datasource — dezelfde die u in de etappe van het model hebt vastgelegd. Wijzig die naam daar en deze regel werkt niet meer. |
crm.query(sql, [waarden]) |
Geparametriseerde query. De waarden gaan altijd los van de query mee — nooit aan de tekst geplakt. |
return { … } |
Het resultaat van de uitvoering. Het blijft in de geschiedenis staan en is wat een API zou teruggeven. |
De input die de functie krijgt, brengt de argumenten van de uitvoering mee —
die van een API, die van een planning of die welke u zo meteen met de hand
schrijft. Hier gebruiken we er geen.
Nota
Er is geen opslaanknop: de editor slaat zelf op. De schakelaar Actief rechtsboven is iets anders — een inactief script blijft bestaan maar draait niet, niet met de hand en niet volgens planning.
Het script met de hand uitvoeren
- Klik boven in de editor op Nu uitvoeren.
- Het dialoogvenster opent — "Stel de argumenten van deze uitvoering in (optioneel). De waarden komen als tekst bij het script aan." Wij hebben er geen nodig.
- Klik op Uitvoeren.

Het paneel Resultaat van de uitvoering, onderaan, vult zich: het label
Succes met de duur, de teruggegeven waarde in JSON en het blok Logs
met de regels die log() heeft geschreven.

Dica
De eerste uitvoering van een Python-script is altijd de traagste — de omgeving wordt op dat moment klaargezet. De volgende draaien in milliseconden.
De geschiedenis van de uitvoeringen
Het resultaat in de editor is alleen dat van de huidige sessie. De volledige geschiedenis staat achter de knop Uitvoeringen, naast Nu uitvoeren:

Elke regel zegt Begin, Oorsprong (Handmatig, wanneer u het was; Planning, wanneer het het geplande tijdstip was), Status en Duur, en de link Details opent de uitvoering: de argumenten, het teruggegeven resultaat en de logs van precies die run. Zo begrijpt u, drie weken later, wat het script zag op de ochtend dat niemand keek.
Voor elke ochtend inplannen
Een script dat alleen draait wanneer iemand op de knop drukt, is geen automatisering. Het is tijd om het een tijdstip te geven.
- Klap in de boom van het paneel Code de knoop van het script
atualizar_indicadoresuit. Er verschijnen drie secties: Bestanden, Afhankelijkheden en Planningen. - Ga met de muis over Planningen en klik op de + (Nieuwe planning).
- Geef haar de naam
Dagelijkse indicatorenen maak haar aan. De editor van de planning opent in een tabblad. - Kies bij Frequentie Op vaste momenten — "Op een tijdstip van de dag, op de dagen die u kiest."
- Kies bij Herhaalt Elke dag (op de gekozen dagen).
- Schrijf bij Om
07:00. - Laat bij Dagen alle zeven geselecteerd (of klik op Werkdagen als het weekend er niet toe doet).
- Kies bij Tijdzone
Europe/Amsterdam. Dat is de tijdzone die bepaalt wat "zeven uur 's ochtends" is — zonder haar verschuift het juiste tijdstip mee met de zomertijd. - Kies bij Als een uitvoering wordt gemist Negeren.
- Controleer dat de schakelaar Actief aan staat en klik op Opslaan.

De drie frequenties
| Frequentie | Wanneer u die gebruikt |
|---|---|
| Herhalen | Om de N minuten of uren, zonder ophouden. Synchronisaties, peilingen. |
| Op vaste momenten | Op een tijdstip van de dag, op de gekozen dagen. Dat is ons geval — en het meest gebruikelijke. |
| Bewakingsvenster | Peilt om de N minuten tussen twee tijdstippen en stopt zodra het werk van de dag klaar is. Om te wachten op een bestand dat "'s ochtends, op wisselende tijden" binnenkomt. |
Wie de planningsexpressie liever met de hand schrijft, heeft onder de drie opties de link De expressie met de hand schrijven.
Wat er gebeurt met wat niet is gedraaid
De server lag om zeven uur 's ochtends plat. Wat gebeurt er, wanneer hij terugkomt, met het gemiste moment? Dat bepaalt Als een uitvoering wordt gemist:
| Optie | Wat die doet |
|---|---|
| Negeren | Haalt niets in. Het missen wordt wel vastgelegd. |
| Alleen de meest recente | Haalt de laatste gemiste uitvoering in; de eerdere worden als gemist vastgelegd. |
| Alle | Haalt alle gemiste uitvoeringen in, in de volgorde waarin zij gepland stonden. |
Voor een dagelijkse samenvatting is Negeren het juiste: de samenvatting van dinsdag op donderdag draaien helpt niemand. Voor een maandelijkse facturatie is Alle volkomen logisch.
Het uitvoeringspaneel van de planning
Rechts in de editor staat het paneel Uitvoeringen, met de geplande tijdstippen en wat er met elk daarvan is gebeurd: Gedaan, Nog te doen, Gemist of Overgeslagen.
Atenção
Waarschuwt dit paneel dat "de planner niet op deze installatie draait — er wordt niets uitgevoerd", dan blijven de geplande tijdstippen wachten en draait er niets. De planner wordt op de installatie aangezet, niet in de app — spreek met wie het platform beheert.
En hierna?
Het script is klaar voor meer dan het geplande tijdstip: het kan een stap van
een API zijn (zodat de samenvatting op aanvraag wordt berekend), het kan
andere scripts als afhankelijkheid aanroepen, en het kan de Python-pakketten
installeren die het nodig heeft. Het hoofdstuk
Scripts doorloopt dat allemaal, en de SDK
van de scripts documenteert api_manager — databases,
bestanden, secrets, meldingen en HTTP-aanroepen.
Waarom niet…?
- Waarom mislukt het script met "datasource niet gevonden"? De naam in
db("…")moet exact de Interne naam van de datasource zijn, hoofdletters inbegrepen. - Waarom zie ik de knop Nu uitvoeren niet? Het script is inactief — zet de schakelaar bovenaan aan.
- Waarom is de uitvoering halverwege afgebroken? Zij liep tegen de Tijdslimiet aan. Ofwel duurt het script werkelijk zo lang en verhoogt u de limiet, ofwel doet het te veel werk voor de plek waar het wordt aangeroepen.
- Waarom heeft de planning nooit gedraaid? Kijk, op volgorde: is de planning Actief? Is het script Actief? Draait de planner op deze installatie? En is de Tijdzone wel wat u denkt dat zij is?
Het CRM is compleet. Nu moet het nog online: publiceren en gebruiken.