0

API Kalender Digital

Hallo

Habe eine Frage: weist jemand wie man die unterstehende API anfrage in Ninox umsetzen kann? Ich komme nicht wieter

curl --location --request POST 'https://api.kalender.digital/public/event' \
--header 'X-API-KEY: {{YOUR_API_KEY}}' \
--header 'Content-Type: application/json' \
--data-raw '{
    "startDate": "2025-07-01 12:00:00",
    "endDate": "2025-07-01 13:00:00",
    "timeZone": "Europe/Berlin",
    "title": "API Test",
    "subCalendars": ["{{YOUR_SUBCALENDAR_NAME}}"],
    "description": "",
    "who": "",
    "where": ""
}'

Im Voraus Vielen Dank

Gruß Richard

37 Antworten

null
    • Leonid_Semik.2
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Ryszard,
    es sollte so gehen:
     

    let myMethod:="POST";
    let myURL:="https://api.kalender.digital/public/event";
    let myHeaders:=
    {
    'X-API-KEY':"DEINE_API_KEY",
    'Content-Type':"application/json"
    };
    let myBody:=
    {
        startDate: format(Startdatum,"YYYY-MM-DD HH:mm:ss",
        endDate: format(Enddatum,"YYYY-MM-DD HH:mm:ss",
        timeZone: "Europe/Berlin",
        title: "API Test",
        subCalendars: ["YOUR_SUBCALENDAR_NAME"],
        description: "",
        who: "",
        where: ""
    };
    let response:=
    do as server
    http(myMethod,myURL,myHeaders,myBody);
    end;
    alert(response.result)
    
    


    Leo

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Wenn du mehrere Subcalendars aus einem dyn. MehrfachAuswahlfeld heraus für den POST auswählen möchtest, lautet es im Body:

    subCalendars: split(replace(text(dyn.MehrfachAuswahlfeld), " ", ""), ",")

    Bei einem normalen MehrfachAuswahlfeld:

    cosen(MehrfachAuswahlfeld)

    Die eventId von Kalender.Digital speicherst du in Ninox wie folgt ab:
     

    KalenderDigitalId := response.result.eventId

    Wenn du die Kalendereinträge in Kalender.Digital änderst und die Änderungen nach Ninox übernehmen möchtest, benötigst du ein Drittprogramm wie Make oder n8n.

    Du erzeugst in Kalender.Digital einen Webhook und trägst die WebhookUrl des Webhooks von Make/n8n ein. Dann baust du dir einen Flow, der vereinfacht wie folgt aussehen könnte.

      • Ryszard_Paluch
      • vor 2 Jahren
      • Gemeldet - anzeigen

      UweG 

      Hallo Uwe

      Ich habe  bei mir die Änderungen Übernahme bei Ninox gemacht so wie Du es beschrieben hast, aber  mir ist aufgefallen das Make sehr lange auf eine Änderung in Kalender warten muss. Auch 2-3 Minuten. Ist das bei Dir auch so?

      Woher hast Du diesen Kalender digital Modul?  Ich habe so was nicht gefunden und habe das über einen Webhook abgewickelt

      Gruß Richard

      • UweG
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Ryszard Paluch Hallo Richard.

      Ja, es dauert zum Teil bis zu einer Minute, bis der Webhook von Kalender.Digital ausgelöst wird. Das Problem ist bei Kalender.Digital bekannt.
      Wenn du in Make  das + betätigst und 'Kalend' eintippst, wird dir Kalender.Digital angezeigt.
      Dort kannst du dann verschiedene Nodes auswählen.
      Ein normaler Webhook geht auch.
      Ich nutze den normalen Webhook auch für einen n8n-Flow als Verbindung Kalender.Digital -> Ninox.
       

      • Ryszard_Paluch
      • vor 2 Jahren
      • Gemeldet - anzeigen

      UweG 

      Habe Support kontaktiert. Sie werden die Tage die Auslöse  Zeit auf eine Minute verkürzen

      • UweG
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Ryszard Paluch Hallo Richard. Das ist gut aber max. 10 sec, wären besser, Rico nervt den Support auch schon seit geraumer Zeit.
      Ich habe den MakeFlow mal verkleinert. Er sieht jetzt so aus:
       

      Die Änderungen von Kalender.Digital wie CREATE, UPDATE, DELETE werden jetzt alle in Ninox vorgenommen. Spart etwas Aktivität in Make.
      Ich bin dazu übergegangen die Handy-App von Kalender.Digital für Eingaben zu nutzen. Aber da muss zwingend die Webhook-Zeit verkürzt werden.

      Die Kalenderauswahl in der DB erfolgt durch mehrere dyn.MehrfachAuswahlFelder.
      Diese werden auch vorbelegt, wenn der Termin aus Kalender.Digital heraus angelegt oder geändert wird.
      Du kannst ja bei Rico mal nachfragen, ob er dir bei Interesse die Prototype DB zur Verfügung stellt.

      • Ryszard_Paluch
      • vor 2 Jahren
      • Gemeldet - anzeigen

      UweG 

      Hallo Uwe

      Das wäre schon interessant die DB sich an zu schauen. Ich frage mal den Rico ob Er die DB bereitstellen kann. 

      Bei den arbeiten mit dem Digital Kalender (DK) ist mir aufgefallen dass Termine die bei NINOX nachmittag stattfinden sollen, werde in DK 12 stunden später eingetragen. Z.B. aus einen Termin zwischen 15 und 16 Uhr bei Ninox, wird in dem DK ein Termin zwischen 03 und 04 Uhr

      Termine die Vormittag eingetragen sind werden richtig dargestellt.

      Ich verwende dafür einen Datum+Uhrzeit Feld und so seht es aus:

      startDate: format('Datum+Uhrzeit Feld', "YYYY-MM-DD hh:mm:ss"),
      endDate: format('Datum+Uhrzeit Feld', "YYYY-MM-DD hh:mm:ss"),

      Verwendet man für die gleiche Aufgabe zwei Felder Datum  und Uhrzeit läuft alles ohne Problem

      Ist es bei Dir auch so?

      • UweG
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Ryszard Paluch Hallo Richard.

      Das Konstrukt der DB lässt die getrennte Eingabe von Datum und Uhrzeit zu.
      Daraus wird dann der Termin gebaut.
      Das von dir geschilderte Verhalten habe ich bisher nicht feststellen können.
      Habe es gerade getestet und der Termin wird richtig im DK dargestellt.

      Eine Schwierigkeit war der Ganztagtermin.
      Es gab da Fehlermeldungen, wenn Datum/Uhrzeit von Start und Ende identisch waren.
      Das habe ich aber durch einen Trigger nach der Auswahl 'Ganztags' abgeändert auf Startzeit 00:00 und Endzeit 23:59 des Tages.

      Ich muss noch einige winzige Änderungen in der Prototyp-DB machen, dann ist das Projekt abgeschlossen.

      In der DB besteht auch die Möglichkeit Kalender Nutzerabhängig anzeigen zu lassen.
      Ich habe noch eine Historie eingebaut um nach zu verfolgen,  wer/was  von Termin zu Termin geändert hat. Auch werden  eingabeabhängig Buttons für die Neuanlage/Änderung und Löschung des Termins ein-/ausgeblendet.

      Hier noch die Kontaktdaten bei Interesse an der Termin DB.
      Rico Kogleck von RiKo Consulting
      https://ricokogleck.com/ninox/
      office@ricokogleck.com

      • UweG
      • vor 2 Jahren
      • Gemeldet - anzeigen

      UweG Hallo Richard.
      KD hat jetzt einen Header bei den Webhooks integriert. Ich teste gerade, ob man direkt nach Ninox schreiben kann um Make zu umgehen. Im übrigen sind die Auslösezeiten für den Webhook momentan richtig gut. (max. 10sec.) Wenn das so bleibt, kann man wirklich produktiv damit arbeiten.

      • Ryszard_Paluch
      • vor 2 Jahren
      • Gemeldet - anzeigen

      UweG 

      Hallo Uwe

      Hatte es geklappt mit dem direktem schreiben nach Ninox ohne Make?

      • UweG
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Ryszard Paluch Ja, siehe Antwort ganz unten.
      Du musst die Daten in eine 'Zwischentabelle' schreiben und dann in Ninox verarbeiten. (Zuordnen oder neu erstellen).
      Ich habe zu jedem Termin eine Untertabelle Historie, in der jede Terminänderung dokumentiert wird. Dort schreibe ich die Daten aus KD/Ninox rein und verarbeite sie dann per Script in einem Änderungstrigger..

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Tippfehler hat sich eingeschlichen,
    Richtig lautet der Code:

    chosen(MehrfachAuswahlfeld)
      • Ryszard_Paluch
      • vor 2 Jahren
      • Gemeldet - anzeigen

      UweG

      Hallo Uwe

      Habe noch eine Frage: ich wähle mir die Ansicht von einzelnen kalender über ein Auswahlfeld.

      Ist es möglich die kalender über einen Mehrfachauswahl Feld zu wählen. Das könnte schwierig sein weil jeder kalender eine eigene adresse hat.

      Was denkst Du?

      Gruss Richard

      • UweG
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Ryszard Paluch Ich verstehe nicht, was du mit Ansichten meinst.
      Meinst du vielleicht sowas?

      Das hier funktioniert über ein dyn. Auswahlfeld.
      Da die DB im Mehrbenutzerbetrieb laufen soll, werden im AuswahlFeld nur die Kalender angezeigt, für die der angemeldete User zugelassen ist. Jeder User sieht also andere Auswahlmöglichkeiten.

      Kannst du ein Screenshot zum besseren Verständnis posten was du mit Ansichten meinst.

      • Ryszard_Paluch
      • vor 2 Jahren
      • Gemeldet - anzeigen

      UweG 

      Hallo Uwe

      Über Ansicht meine ich die Funktion mit Kalender so wie das hier:

      html(---
      <iframe src="{ "https://kalender.digital/sport" }" width="100%" height="100%"</iframe>
      ---)

      Ich benutze mehrere kalender in Ninox wie Arbeit, Privat, Sport usw. und die rufe ich jetzt einzeln auf, über ein Auswahlfeld. Meine Frage lautet ob es möglich wäre mehrere kalender in einem Kalender zu darstellen. 

      So was etwa:

      html(---
      <iframe src="{ "https://kalender.digital/sport" }" width="100%" height="100%"</iframe>
      ---)

      plus

      html(---
      <iframe src="{ "https://kalender.digital/privat" }" width="100%" height="100%"</iframe>
      ---)

      Gruss Richard

      • UweG
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Ryszard Paluch Das geht meines Wissens nicht. Um mehrere Kalender gleichzeitig im iFrame darzustellen musst du Einstellungen direkt in Kalender.Digital vornehmen.
      Und den Link mit in Ninox aufnehmen.
      Am besten baut man sich eine Unterkalendertabelle in Ninox, aus der man dann die entsprechenden Kalenderansichten wählen kann.

      Bei dieser Auswahl werden im Link Folgende Unterkalender gleichzeitig angezeigt: Feiertage, Rico,Projekt-Prater,UweG. Alles wo 'Kein Zugriff' steht, wird auch nicht angezeigt.
      Wenn du mehrere Unterkalender im iFrame angezeigt bekommen möchtest, musst du dir jeweils einen Link erzeugen, mit den ausgewählten Unterkalendern.

      • Ryszard_Paluch
      • vor 2 Jahren
      • Gemeldet - anzeigen

      UweG 

      Hallo Uwe

      Weist Du wie man das "response.result" abfragen kann?

      Ich möchte bei "false" und "true" verschiedene alerts ausgeben

      Gruss Richard

      • UweG
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Ryszard Paluch Hier ein Code wie ich ihn nutze bei Erstellung eines Termins:
       

      if vResponse.result.success = true then        KalenderDigitalId := vResponse.result.eventId;        'Termin ist gespeichert in folgenden Kalendern' := text('Unterkalender Dynamisch');        Status := 2;        let myId := number(this);        fx_Historie(myId, "CREATE", formatJSON(vBody))    end;
      • UweG
      • vor 2 Jahren
      • Gemeldet - anzeigen

      UweG Hier noch eine Variante bei Fehler:

       

      if vResponse.result.success = true then
              KalenderDigitalId := vResponse.result.eventId;
              'Termin ist gespeichert in folgenden Kalendern' := text('Unterkalender Dynamisch');
              Status := 2;
              let myId := number(this);
              fx_Historie(myId, "CREATE", formatJSON(vBody))
          else
              alert("Ein Fehler ist aufgetreten!!
      Fehlermeldung: " + vResponse.result.msg + "
      Der Termin wurde nicht auf Kalender.Digital gespeichert")
          end;
      
    • Ryszard_Paluch
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Leo / Hallo Uwe

    Vielen dan für die Unterstützung und vorschläge.

    Leo an Deinem Code musste ich noch klammern einfügen am Abschluss von startDate und endDate, sonst hat alles prima funktioniert

    So seht es aus:

    let myMethod := "POST";
    let myURL := "https://api.kalender.digital/public/event";
    let myHeaders := {
            'X-API-KEY': "mein api key",
            'Content-Type': "application/json"
        };
    let myBody := {
            startDate: format(Startdatum, "YYYY-MM-DD HH:mm:ss"),
            endDate: format(Enddatum, "YYYY-MM-DD HH:mm:ss"),
            timeZone: "Europe/Warsaw",
            title: 'tekst zadania',
            subCalendars: ["Rechnungen"],
            description: "",
            who: "Ryszard Paluch",
            where: "Marcyporęba"
        };
    let response := do as server
            http(myMethod, myURL, myHeaders, myBody)
        end;
    eventID := number(response.result.eventId);
    alert(response.result)

    Gruss Richard

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Richard.
    Schön das es funktioniert.
    Das besondere an Kalender.Digital ist ja auch, dass man direkt in Kalender.Digital Einträge erzeugen, ändern, löschen kann. Ein Beispiel wäre, einen neuen Termin mit der Api aus Ninox heraus zu erzeugen und anschließend beispielsweise diesen Termin im iFrame von Ninox zu verschieben.

    Um die Änderung auch in Ninox zu dokumentieren, benötigst du ein Drittprogramm wie Make oder n8n zum Übertragen der Änderungen nach Ninox.
    Hier mal ein Screenshot eines Make-Flow, welcher zusätzlich noch die Änderungen im Termin in einer Untertabelle dokumentiert um später nachvollziehen zu können, was geändert wurde oder ob der Termin gelöscht wurde.

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Kalender Digital kann jetzt die Ninox REST-API nutzen um Daten an Ninox zu senden.
     

    Man muss nach Bearer nur seinen Ninox API-Key eintragen und die Url mit dem Ninox-Link bestücken, der auf die entsprechende Tabelle zeigen soll.
    Damit spart man sich den Weg über ein Drittprogramm wie Make oder n8n.


    Ich habe auch mal getestet, wie man neue in KD angelegte Termine direkt einem Kunden zuordnen kann. Dazu gebe ich im Feld Teilnehmer von KD den Namen und das Geburtsdatum des Kunden ein. (Bsp. Uwe G, 01.04.2022). Ninox extrahiert mir aus diesem Feld den Kundennamen und das Geburtsdatum und prüft per select oder Verknüpfung, ob der Kunde vorhanden ist. Entsprechend dem Ergebnis der Prüfung wird der Termin dem Kunden zugeordnet oder es erscheint erstmal ein Hinweis, daß der Termin nicht zugeordnet wurde.
    Das ist mit Sicherheit noch verbesserungsfähig aber für's Erste als Machbarkeitsstudie angedacht.

      • Sven_Glaser
      • vor 1 Jahr
      • Gemeldet - anzeigen

      UweG Hallo Uwe,

      habe bereits auch schon eine eigene Datenbank in Ninox erstellt, die Termine direkt an KD sendet. Hatte dann mit dem Entwickler von KD gesprochen und um den Header Zusatz gebeten dieser wurde auch umgesetzt. Da die API Rest von KD zu Ninox bei Dir schon läuft, wäre es schön wenn du die Einstellungen im Webhook von KD nochmal genauer Dokumentieren könntest. Bei mir kommen die Termine leider noch nicht in Ninox an. Da ich keine Fehlermeldung einsehen kann weiß ich auch nicht wirklich was ich falsch gemacht habe.

       

      Im URL Feld habe ich die URL der Datenbank hinterlegt

      im Body steht bei mir:

      {
        "Kalender_Digital_ID": "{{EVENT_ID}}",
        "requestType": "{{REQUEST_TYPE}}",
        "Termin_Start": "{{START_DATE}}",
        "Termin_Ende": "{{END_DATE}}",
        "wholeDay": "{{WHOLEDAY}}",
        "Titel": "{{TITLE}}",
        "Beschreibung": "{{DESCRIPTION}}",
        "Wer": "{{WHO}}",
        "Wo": "{{WHERE}}",
        "Mitarbeiter": "{{SUBCALENDARS}}",
        "timeZone": "{{TIMEZONE}}"
      }

      und im Header folgendes:

      Authorization:"Bearer xxxxxxxxxxxxxxxxxxxxxxxx",
      "Content-Type":"application/json"

      Natürlich mit dem API Key der hier nur ausgeixt wurde

      leider kommen die Termine aber nicht an kannst Du vielleicht helfen damit das ganze dann läuft?

       

      Gruß Sven

      • UweG
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Sven Glaser Hallo Sven.

      Ja, ein Log in KD für den API-Response wäre schön.
      Hatte dies auch KD vorgeschlagen, dass ein Response-Log zum Webhook angelegt und nur die letzten 24Std. angezeigt werden. Mal sehen was passiert.

       
      Du musst den Body wie einen HTTP-Request schreiben und die Feld-ID statt des Feldnamens benutzen.
      Leider gibt es noch keine direkte Möglichkeit in Ninox die Feld-ID ohne API auszulesen.
      Ermittle mit Postman die ID der Feldnamen von Ninox und ersetze diese dann.
      Bsp:
      {
        "A": "{{EVENT_ID}}",
        "B": "{{REQUEST_TYPE}}",
        "A1": "{{START_DATE}}",
        "C": "{{END_DATE}}",
        "K": "{{WHOLEDAY}}",
        "Y1": "{{TITLE}}",
        "F": "{{DESCRIPTION}}",
        "Q": "{{WHO}}",
        "P": "{{WHERE}}",
        "T": "{{SUBCALENDARS}}",
        "F": "{{TIMEZONE}}"
      }
      Achte dabei darauf, dass zu beschreibende Felder auch in Ninox existieren.
       

      Der Header muss ohne Anführungszeichen geschrieben werden und den Content-Type kannst du weglassen.
      Bsp:
      Authorization:Bearer xxxxxxxxxxxxxxxxxxxxxxxx
      Achte auf die Schreibweise (weglassen/setzen des Leerzeichens)

      Die Url hat wie folgt auszusehen:
      https://api.ninox.com/v1/teams/TEAM_ID/databases/DATABASE_ID/tables/TABLE_ID/records

      Was die KD-API nicht kann, ist Terminänderungen einem bereits in Ninox vorhandenem Termin zuzuordnen. Da musst du dir mit einer Landing-Tabelle in Ninox behelfen.
      Ich habe diesen Umstand genutzt und in der Termintabelle eine Untertabelle eingefügt, die alle vorgenommenen Änderungen der Termin-Felder als Historie zum Nachverfolgen mit Userkennung speichert und diese Untertabelle gleichzeitig als Landing-Tabelle für KD nutzt.
      KD schreibt mir die Daten direkt in die Untertabelle und anhand des Request-Type erstelle ich entweder einen neuen Termin oder verknüpfe die Daten mit einem bereits vorhandenem Termin. Durch die Untertabelle habe ich auch die Möglichkeit bei Änderungen von Feldwerten in Ninox einen Änderungsbutton für KD einzublenden und auch automatisch wieder auszublenden, wenn die Änderung zurückgenommen wird. Dem Nutzer wird damit nur angezeigt, was in diesem Moment machbar ist.
      In der aktuellen Ninox-Version gibt bei dieser speziellen Ninox-DB einen Fehler mit Datumsfeldern. Der ist in der kommenden Ninox-Version behoben.
      Ich habe die Rest-API in der  Ninox-Alpha bereits getestet und keinerlei Datumsfehler mehr festgestellt.
      Willst du die DB in der Ninox Alpha testen lautet die Url:
      https://q-api.ninox.com/v1/teams/TEAM_ID/databases/DATABSE_ID/tables/TABLE_ID/records


      Wenn du die Termin Prototyp-DB zum testen, für Anregungen oder zur Weiterentwicklung nutzen möchtest, wende dich an folgenden Kontakt:

      Rico Kogleck von RiKo Consulting
      https://ricokogleck.com/ninox/
      office@ricokogleck.com

      • UweG
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Sven Glaser Noch eine Ergänzung:
      Wenn du Ganztagstermine aus Ninox an KD sendest funktioniert das Merkmal wholeDay noch nicht.
      In Ninox musst du die Ganztagsanzeige durch Datum/Uhrzeit steuern.
      Bsp.
      Ein ganzer Tag: Start:"04.05.20200 00:00", Ende:"05.05.20200 00:00"
      (Wird in KD als Ganztags 04.05.2022 angezeigt)
      Mehrere ganze Tage: Start:"04.05.20200 00:00", Ende:"09.05.20200 00:00"
      (Wird in KD als Ganztags 04.05.2022-08.05.2022 angezeigt)

      Das sieht in Ninox natürlich nicht logisch aus.
      KD arbeitet aber daran und wird das Merkmal zum einen aktivieren und auch die vorzugebenden Termine anpassen damit es auch in Ninox richtig aussieht.

Content aside

  • vor 9 MonatenZuletzt aktiv
  • 37Antworten
  • 843Ansichten
  • 9 Folge bereits