KEPLIN Docs

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

  1. Kies het paneel Code in de zijbalk.
  2. 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."
  3. Schrijf bij Naam atualizar_indicadores. De naam identificeert het script overal — in de planningen, in de API-stappen, in de afhankelijkheden van andere scripts.
  4. Runtime staat vast op Python.
  5. Schrijf bij Beschrijving Herberekent de commerciële indicatoren en waarschuwt wanneer er deze week sluitingen zijn.
  6. Laat bij Tijdslimiet 1 minuut staan. Dat is het plafond van de uitvoering: na die tijd breekt het platform af.
  7. Klik op Script aanmaken. De editor opent met main.py klaar.

Het dialoogvenster Nieuw script — naam, runtime, beschrijving en tijdslimiet.
Het dialoogvenster Nieuw script — naam, runtime, beschrijving en tijdslimiet.

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),
    }

De editor van het script atualizar_indicadores — de main.py en, onderaan, het paneel Resultaat van de uitvoering.
De editor van het script atualizar_indicadores — de main.py en, onderaan, het paneel Resultaat van de uitvoering.

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

  1. Klik boven in de editor op Nu uitvoeren.
  2. 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.
  3. Klik op Uitvoeren.

Het dialoogvenster Nu uitvoeren — optionele argumenten van deze uitvoering, als tekst aan het script afgeleverd.
Het dialoogvenster Nu uitvoeren — optionele argumenten van deze uitvoering, als tekst aan het script afgeleverd.

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.

Het paneel Resultaat van de uitvoering, met de teruggegeven waarde en de logs.
Het paneel Resultaat van de uitvoering, met de teruggegeven waarde en de logs.

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:

De geschiedenis Uitvoeringen van het script — begin, oorsprong, status en duur van elke run.
De geschiedenis Uitvoeringen van het script — begin, oorsprong, status en duur van elke run.

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.

  1. Klap in de boom van het paneel Code de knoop van het script atualizar_indicadores uit. Er verschijnen drie secties: Bestanden, Afhankelijkheden en Planningen.
  2. Ga met de muis over Planningen en klik op de + (Nieuwe planning).
  3. Geef haar de naam Dagelijkse indicatoren en maak haar aan. De editor van de planning opent in een tabblad.
  4. Kies bij Frequentie Op vaste momenten"Op een tijdstip van de dag, op de dagen die u kiest."
  5. Kies bij Herhaalt Elke dag (op de gekozen dagen).
  6. Schrijf bij Om 07:00.
  7. Laat bij Dagen alle zeven geselecteerd (of klik op Werkdagen als het weekend er niet toe doet).
  8. 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.
  9. Kies bij Als een uitvoering wordt gemist Negeren.
  10. Controleer dat de schakelaar Actief aan staat en klik op Opslaan.

De planning Dagelijkse indicatoren — elke dag om 07:00 (Europe/Amsterdam), met het paneel Uitvoeringen rechts.
De planning Dagelijkse indicatoren — elke dag om 07:00 (Europe/Amsterdam), met het paneel Uitvoeringen rechts.

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.