0

Header WebHook Response auswerten

Liebe Ninox Experten, ich versuche den Header im Response eines WebHook auszuwerten. Über Integromat kann ich sehr schön mehrere Werte im Header mitgeben. Nur wie nutze ich diese Werte in Ninox?

Mein Code aktuell:

let myID := this;
let response := do as server
http("GET", "https://hook.integromat.com/9999999999999", {
'Content-Type': "application/json"
}, {
myID: number(myID.Nr),
Bezeichnung: Bezeichnung,
NinoxURL: urlOf(myID)
})
end;
'200' := text(response.result);
void

damit bekomme ich schon mal den body des Response. Da ich aber mehrere Werte zurück bekommen und in Ninox weiterverarbeiten möchte ... wie funktioniert das? Google hilft mir seit 2 h nicht wirklich weiter, leider. Vielleicht habt Ihr ja eine Idee.

 

Danke und LG

Arne

17 Antworten

null
    • UweG
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Arne
    Im allgemeinen wird mit der Funktion irem() auf den Response der API-Anfrage zugegriffen.
    Hier ein Beispiel aus der Ninox-Reference DB im Webinarteam 'Webinar DE 2021'

    item(JSON, OBJECT1).OBJECT2

    let response := {"nr001": {"ob1":123}, "nr002": {"ob2":456}}
    item(response,"nr002").ob2
    ➤ Ergebnis: 456

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Halllo Arne,
    mir ist nicht ganz klar, warum du für den Hook die GET Methode verwendst. Normalerweise sollte es eine POST Methode sein und die Daten können dann dann von Integromat über das Modul "Webhook Response" zurückgegeben werden.

    Aber wenn es funktioniert, dann sollte es so bleiben. Wie sieht der Text im Feld '200' aus?

    Leo

    • Arne.1
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Webhooks und RestAPI sind für mich ehrlich gesagt sehr Neuland. Deswegen kann es sehr gut sein, dass ich POST anstelle von GET nutzen müsste.

    @Leo: Ich bekomme allerdings mit der Methode GET durchaus den Inhalt des Body Bereichs im Response zurück, wenn ich text(tesponse.result) nutze. Ich möchte aber mehrere Werte zurück bekommen.

    Also Integromat macht mit dem Webhook mehrere Dinge und ich möchte dann die Ergebnisse dieser mehreren Dinge in Ninox zurück schreiben. Nur einen Wert im Response zurück zu bekommen, das reicht mir nicht : )

    Im Integromat kann ich für einen Webhook Response mehrere Key Werte im header des Response angeben. Nur wie lese ich die dann im Ninox aus? Bin auch für alternative Vorschläge offen. Irgendwie muss ich also "einfach" mehrere Ergebnisse aus dem Webhook zurück bekommen und im Ninox weiterverarbeiten.

    @Uwe: item habe ich auch schon versucht. Ich weiß aber dann nicht, wie ich genau den Wert auslese, der im Response steht. Bsp.: ich gebe im Header des Integromat WebHook Response den Key "newurl" an mit dem Value, der aus dem Prozess aus dem Integromat kommt. Habe versucht dann in Ninox mit item(response.result.fields.newurl) den Wert auszulesen. Klappt nicht. Diverse Kombinationen (item(response.result.header.newurl), etc.) haben auch nicht geklappt.

    Danke und LG

    Arne

    • Arne.1
    • vor 3 Jahren
    • Gemeldet - anzeigen

    ergänzung: wenn ich mit postman den Webhook teste, dann sehe ich im Response auch den korrekten Wert im Header. Der Webhook und der Integromat Pozess funktionieren also. Nur das Auslesen mit Ninox ist mir nicht klar. 

    • UweG
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Arne
    Wie Leo schon schrieb.
    Poste doch mal wie der Inhalt des Feldes '200' aussieht, damit wir uns das Ergebnis deiner GET-Abfrage ansehen können.

    • Arne.1
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Das Ergebnis ist das, was ich im Integromat in den WebHook Response in den Body geschrieben habe: "https://1drv.ms/f/s!AESNdoT" als eine URL zu einem OneDrive Ordner.

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Also, du sendest einen Body an Webhook 

    {
    myID: number(myID.Nr),
    Bezeichnung: Bezeichnung,
    NinoxURL: urlOf(myID)
    }

    im Integromat machst du irgendwas mit Daten, dann nimmst du ein Modul "Webhook response", schreibst mehrere Daten darein:
    {myURL:"https://1drv.ms/f/s!AESNdoT",
    myName:"Tralala",
    myNumber:123}

    Wenn das so ist , dann sollte es im Feld 200 so etwas stehen:
    "myURL:https://1drv.ms/f/s!AESNdoT, myName:Tralala, myNumber:123"

    Wenn du die Werte weiter verarbeiten möchtest dann: 

    let oneDrive:=response.result.myURL;
    let DokName:=response.result.myName;
    let Seitenanzahl:=response.result.myNumber

    Leo

    • Arne.1
    • vor 3 Jahren
    • Gemeldet - anzeigen

    genau das klappt leider bei mir nicht.

     

    So sieht mein Code aktuell aus:

    let myID := this;
    let response := do as server
    http("GET", "https://hook.integromat.com/xq8c3ucxx2uupdtlw417x1t9i4bx7i65", {
    'Content-Type': "application/json"
    }, {
    myID: number(myID.Nr),
    Bezeichnung: Bezeichnung,
    Volumen: max(myID.Berechnungen.Kaufpreis),
    NinoxURL: urlOf(myID)
    })
    end;
    Response := text(response.result);
    OneDriveOrdner := response.result.odurl;
    HubSpotDealID := response.result.hsdid;
    void

    Und das kommt in's Feld Response: {odurl:https://1drv.ms/f/s!AESNjoFp,hsdid:3747664841}

    irgendwas mus sich noch übersehen haben!?

    • Arne.1
    • vor 3 Jahren
    • Gemeldet - anzeigen

    ach so: die Felder OneDriveOrdner und HubSpotDealID sind leer.

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Wie sieht es bei Integromat aus?

    • UweG
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Moin Arne.
    Sollte der Inhalt von Response nicht eher so aussehen?:

    {"odurl":"https://1drv.ms/f/s!AESNjoFp","hsdid":3747664841}

    In der von dir beschriebenen Form ist das nicht das Ergebnis eines JSON-Objekst sondern nur eine einfache Zeichenfolge. Und die musst du mit anderen Mitteln zerteilen.

    Mach mal folgendes:
    Response := text(response) und gib bitte mal den Inhalt von Response genau so wieder (mit/ohne Anführungszeichen) wie es im Textfeld steht.

    • Arne.1
    • vor 3 Jahren
    • Gemeldet - anzeigen

    habe jetzt noch verschiedene Dinge versucht. Es scheint in der Tat von Ninox einfach als String erkannt zu werden.

    Aktuell sieht der Body Inhalt im Integromat so aus:

    {'Content-Type': "application/json"},
    {odurl:'{{6.webUrl}}',
    hsdid:'{{2.dealId}}'}

    Und der Response im Textfeld:

    {'Content-Type': "application/json"},{odurl:'https://1drv.ms/f/s!AS7rjoFp',hsdid:'3747670724'}

     

    Habe schon mit normalen Anführungszeichen, einfachen Hochkommata, etc. versucht. Es scheint immer nur als Sting erkannt zu werden : /

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Bei Integromat muss man für Text gar keine Anführungszeichen verwenden

    • Arne.1
    • vor 3 Jahren
    • Gemeldet - anzeigen

    das kommt im Textfeld, in den ich den Response schreibe raus. Die beiden Felder, die die Inhale inzeln raus extrahieren sind weiterhin leer.

    {odurl:https://1drv.ms/f/s!AE7rjoFp,hsdid:3748891880}

    Im Integromat habe ich im Body des WebHook Response dies drin:

    {odurl:{{6.webUrl}},hsdid:{{2.dealId}}}

    • UweG
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Das ist aber kein JSON-Objekt, was du in Integromat baust.
    Ein JSON-Objekt wäre folgendes Konstrukt:
    {
    Objekt1: {
    'Content-Type': "application/json"
    },
    Objekt2: {
    odurl:  {{6.webUrl}},
    hsdid: {{2.dealId}}
    }
    }

    Das würde dann im Ninox-Textfeld so aussehen:
    {"Objekt1":{"Content-Type":"application/json"},"Objekt2":{"odurl":"https://1drv.ms/f/s!AS7rjoFp","hsdid":"3747670724"}}
    Damit kann man wie von Leo vorgeschlagen in Ninox weiterarbeiten.

    Mit deiner Schreibweise erzeugst du nur einen String trotz der vielen geschweiften Klammern.

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Wenn du aus einem Text wie {"odurl":"https://1drv.ms/f/s!AS7rjoFp","hsdid":"3747670724"}  in Ninox einen JSON machen möchtest, musst du den Text mit parseJSON()umwandeln:

    let myJSON:=parseJSON(TEXTFELD);
    URL:=myJSON.odurl;
    HSDID:=myJSON.hsdid

    Leo

    • Arne.1
    • vor 3 Jahren
    • Gemeldet - anzeigen

    genau, das war mein Problem. Es kam einfach als String an. Ich habe nun im Integromat ein JSON Objekt davor gesetzt, der dann in den Body des Response ein JSON setzt. So kommt es direkt als JSON an. Die Variante in Ninox ein JSON aus dem String zu machen, versuche ich auch nochmal.

    Super, danke! Das hat mich auf die richtige Fährte gelockt. Ich lerne noch : ))