KEPLIN Docs

Logikk og automatisering

Skrive Python-skriptet som oppsummerer salgspipelinen, kjøre det for hånd og sette det på tidsplan hver morgen.

Appen viser allerede data og lar deg redigere dem. Det som mangler, er delen som jobber av seg selv: et skript som hver morgen ser på pipelinen, teller det som er åpent, og registrerer avslutningene som er ventet i løpet av uken.

I denne etappen skriver du det skriptet i Python, kjører det for hånd for å se resultatet, og setter opp et klokkeslett for det — hver dag kl. 07:00.

Hva skriptet skal gjøre

atualizar_indicadores svarer på tre spørsmål og gir dem tilbake i et resultat som blir liggende i historikken:

Spørsmål Hva den gir tilbake
Hvor mange salgsmuligheter er åpne? oportunidades_abertas
Hvor mye er pipelinen verdt? valor_pipeline
Hvor mange avslutninger er ventet de neste 7 dagene? fechos_proximos_7_dias

I tillegg til resultatet skriver den logger — én linje per avslutning i uken — slik at den som åpner historikken, uten å regne skjønner hva som var ført opp den dagen.

Lage skriptet

  1. Velg panelet Kode i sidefeltet.
  2. På linjen Skript, klikk på + (Nytt skript). Dialogen Nytt skript åpnes — «Velg runtime og opprett — koden redigerer du etterpå, med kontrakten synlig.»
  3. I Navn, skriv atualizar_indicadores. Navnet identifiserer skriptet overalt — i tidsplanene, i API-trinnene, i avhengighetene til andre skript.
  4. Runtime er låst til Python.
  5. I Beskrivelse, skriv Regner ut salgsindikatorene på nytt og varsler når det er avslutninger denne uken.
  6. I Tidsgrense, la 1 minutt stå. Det er taket for kjøringen: er den tiden gått, kutter plattformen.
  7. Klikk på Opprett skript. Editoren åpnes med main.py klar.

Dialogen Nytt skript — navn, runtime, beskrivelse og tidsgrense.
Dialogen Nytt skript — navn, runtime, beskrivelse og tidsgrense.

Dica

En raus tidsgrense er ikke vennlighet: brukes dette skriptet som trinn i et API, står klientene og venter i akkurat den tiden i verste fall. Ett minutt holder og vel så det til det vi skal gjøre.

Skrive main.py

Kontrakten til et skript er kort: en funksjon main(input) som gir noe tilbake. Det du gir tilbake, havner i kjøringshistorikken, og hvis skriptet kalles av et API, er det svaret fra det.

Skriv dette i editoren:

from datetime import date, timedelta

from api_manager import db, log


def main(input):
    """Recalcula os indicadores do painel comercial.

    Corre todos os dias às 7h00 (agendamento "Indicadores diários") e
    devolve o resumo — o histórico de execuções fica com um registo
    legível por dia.
    """
    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"], "oportunidades /", abertas["total"], "EUR")
    for op in fechos_semana:
        log("fecho esta semana:", op["titulo"], "(", op["data_fecho"], ")")

    return {
        "oportunidades_abertas": abertas["n"],
        "valor_pipeline": abertas["total"],
        "fechos_proximos_7_dias": len(fechos_semana),
    }

Editoren for skriptet atualizar_indicadores — main.py og, nederst, panelet Resultatet av kjøringen.
Editoren for skriptet atualizar_indicadores — main.py og, nederst, panelet Resultatet av kjøringen.

Fire ting å ta med seg fra denne koden:

Linje Hva den gjør
from api_manager import db, log Tilgangen fra plattformen: db åpner databaser, log skriver til historikken.
db("Dados CRM") Databasen etter det interne navnet på datakilden — det samme som du registrerte i modelletappen. Endrer du navnet der, slutter denne linjen å virke.
crm.query(sql, [verdier]) Parametrisert spørring. Verdiene går alltid ved siden av spørringen — aldri limt inn i teksten.
return { … } Resultatet av kjøringen. Det blir liggende i historikken, og det er det et API ville gitt tilbake.

input-et som funksjonen tar imot, bærer med seg argumentene for kjøringen — de fra et API, de fra en tidsplan, eller de du selv skriver inn for hånd nedenfor. Her bruker vi ingen.

Nota

Det finnes ingen lagreknapp: editoren lagrer av seg selv. Bryteren Aktiv i øvre høyre hjørne er noe annet — et inaktivt skript finnes fortsatt, men kjører ikke, verken for hånd eller etter tidsplan.

Kjøre skriptet for hånd

  1. Øverst i editoren, klikk på Kjør nå.
  2. Dialogen åpnes — «Angi argumentene for denne kjøringen (valgfritt). Verdiene når skriptet som tekst.» Vi trenger ingen.
  3. Klikk på Kjør.

Dialogen Kjør nå — valgfrie argumenter for denne kjøringen, levert til skriptet som tekst.
Dialogen Kjør nå — valgfrie argumenter for denne kjøringen, levert til skriptet som tekst.

Panelet Resultatet av kjøringen, nederst, fylles opp: merket Vellykket med varigheten, verdien som ble gitt tilbake i JSON, og blokken Logger med linjene log() skrev.

Panelet Resultatet av kjøringen, med verdien som ble gitt tilbake og loggene.
Panelet Resultatet av kjøringen, med verdien som ble gitt tilbake og loggene.

Dica

Den første kjøringen av et Python-skript er alltid den tregeste — miljøet gjøres klart i det øyeblikket. De neste kjører på millisekunder.

Kjøringshistorikken

Resultatet i editoren gjelder bare den gjeldende økten. Den komplette historikken ligger på knappen Kjøringer, ved siden av Kjør nå:

Historikken Kjøringer for skriptet — start, opphav, status og varighet for hver kjøring.
Historikken Kjøringer for skriptet — start, opphav, status og varighet for hver kjøring.

Hver linje sier Start, Opphav (Manuell, når det var deg; Tidsplan, når det var det avtalte klokkeslettet), Status og Varighet, og lenken Detaljer åpner kjøringen: argumentene, resultatet som ble gitt tilbake, og loggene fra akkurat den kjøringen. Det er her du, tre uker senere, skjønner hva skriptet så den morgenen ingen så på.

Sette på tidsplan hver morgen

Et skript som bare kjører når noen trykker på knappen, er ikke automatisering. Det er på tide å gi det et klokkeslett.

  1. I treet i panelet Kode, utvid noden til skriptet atualizar_indicadores. Tre seksjoner dukker opp: Filer, Avhengigheter og Tidsplaner.
  2. Hold musen over Tidsplaner og klikk på + (Ny tidsplan).
  3. Gi den navnet Indicadores diários og opprett den. Editoren for tidsplanen åpnes i en fane.
  4. I Frekvens, velg På bestemte tidspunkter«På et klokkeslett, på de dagene du velger.»
  5. I Gjentas, velg Hver dag (på de valgte dagene).
  6. I Klokken, skriv 07:00.
  7. I Dager, la alle sju stå valgt (eller klikk på Hverdager hvis helgen ikke er interessant).
  8. I Tidssone, velg Europe/Lisbon. Det er tidssonen som avgjør hva «klokken sju om morgenen» er — uten den flytter riktig klokkeslett seg når klokken stilles om.
  9. I Hvis en kjøring uteblir, velg Ignorer.
  10. Sjekk at bryteren Aktiv er slått på, og klikk på Lagre.

Tidsplanen Indicadores diários — hver dag kl. 07:00 (Europe/Lisbon), med panelet Kjøringer til høyre.
Tidsplanen Indicadores diários — hver dag kl. 07:00 (Europe/Lisbon), med panelet Kjøringer til høyre.

De tre frekvensene

Frekvens Når du bruker den
Gjentas Hvert N-te minutt eller hver N-te time, uten stopp. Synkroniseringer, pollinger.
På bestemte tidspunkter På et klokkeslett, på de valgte dagene. Det er vårt tilfelle — og det vanligste.
Overvåkingsvindu Sjekker hvert N-te minutt mellom to klokkeslett og stopper når dagens arbeid er gjort. Til å vente på en fil som kommer «om morgenen, på varierende tidspunkter».

De som heller vil skrive tidsplanuttrykket for hånd, har lenken Skriv uttrykket for hånd under de tre alternativene.

Hva du gjør med det som ikke ble kjørt

Serveren var nede klokken sju om morgenen. Når den kommer tilbake, hva skjer med kjøringen som gikk tapt? Det er det Hvis en kjøring uteblir bestemmer:

Alternativ Hva det gjør
Ignorer Henter ingenting inn. Det registreres at kjøringen gikk tapt.
Bare den siste Henter inn den siste som ble hoppet over; de tidligere registreres som tapt.
Alle Henter inn alle som ble hoppet over, i den rekkefølgen de var planlagt.

Til et daglig sammendrag er Ignorer det riktige: å kjøre tirsdagens sammendrag på torsdag hjelper ingen. Til en månedlig fakturering gir Alle all verdens mening.

Kjøringspanelet i tidsplanen

Til høyre i editoren ligger panelet Kjøringer, med de planlagte klokkeslettene og hva som skjedde med hvert av dem: Utført, Gjenstår, Tapt eller Hoppet over.

Atenção

Varsler dette panelet om at «Planleggeren kjører ikke i denne installasjonen — ingenting vil bli kjørt.», blir de avtalte klokkeslettene stående og vente, og ingenting kjører. Planleggeren slås på i installasjonen, ikke i appen — snakk med den som administrerer plattformen.

Og hva så?

Skriptet er klart for mer enn det avtalte klokkeslettet: det kan være et trinn i et API (slik at sammendraget regnes ut på forespørsel), det kan kalle andre skript som avhengighet, og det kan installere de Python-pakkene det trenger. Kapittelet Skript går gjennom alt dette, og SDK-et for skript dokumenterer api_manager — databaser, filer, hemmeligheter, varsler og HTTP-kall.

Hvorfor ikke …?

  • Hvorfor feiler skriptet med «datasource não encontrado»? Navnet i db("…") må være nøyaktig det Interne navnet på datakilden, store bokstaver inkludert.
  • Hvorfor ser jeg ikke knappen Kjør nå? Skriptet er inaktivt — slå på bryteren øverst.
  • Hvorfor ble kjøringen kuttet midt i? Den traff Tidsgrensen. Enten tar skriptet virkelig så lang tid, og da øker du grensen, eller så gjør det for mye arbeid for stedet der det kalles fra.
  • Hvorfor kjørte tidsplanen aldri? Sjekk, i denne rekkefølgen: er tidsplanen Aktiv? Er skriptet Aktiv? Kjører planleggeren i denne installasjonen? Og er Tidssonen den du tror den er?

CRM-et er komplett. Nå gjenstår det å sette det i drift: publisere og bruke.