Sendgrid-nodejs: Kontakte mit benutzerdefinierten Feldern können nicht erstellt werden

Erstellt am 10. Juli 2019  ·  39Kommentare  ·  Quelle: sendgrid/sendgrid-nodejs

Problemzusammenfassung

Es können keine Kontakte mit benutzerdefinierten Feldern erstellt werden, die mit PUT . für neue Marketingkampagnen festgelegt wurden
/marketing/contacts-API

Schritte zum Reproduzieren

  1. Nachdem Sie benutzerdefinierte Felder erstellt haben, senden Sie die folgende Nutzlast an PUT /marketing/contacts
{
  contacts: [
   {
    email: '[email protected]',
    custom_fields: {
      purchaseTime: -1,
      activations: 0,
      partner: 'none',
      userCreationTime: 1544997675,
      lastSigningTime: 1544997675,
      emailVerified: 1,
      disabled: 0,
      displayName: 'Rv',
      photoURL: 'https://lh6.googleusercontent.com/-,
      uid: 'uid'
    }
  }
  ]
}

Beobachten
invalid custom field ids supplied - partner,emailVerified,photoURL,uid,purchaseTime,activations,userCreationTime,lastSigningTime,disabled,displayName

Technische Details:

  • sendgrid-nodejs Version: 6.4.0
  • Node.js-Version v12.1.0

Hilfreichster Kommentar

Anscheinend erwartet die aktuelle API die field_id und nicht den Namen.

Wenn Sie beim Laden der Seite https://mc.sendgrid.com/custom-fields den Netzwerkverkehr in SendGrid überprüfen, können Sie die Antwort für /field_definitions sehen, die die field_ids sowie die Namen zurückgibt.

SendGrid muss diesen ID-Wert entweder im Frontend anzeigen oder die API aktualisieren, um den Namen in der Anfrage zu akzeptieren.

Alle 39 Kommentare

+1

Ich bin heute auf das gleiche Problem gestoßen. Ich habe es mit dem Chat-Support angesprochen (in Bezug auf dieses Problem). Ihre Antwort:

„Okay, das ist vor kurzem passiert. Sie sind nicht der Einzige. Leider haben wir derzeit keine Lösung dafür. Unsere leitenden Ingenieure wurden auf dieses Problem aufmerksam gemacht.“

Screenshot 2019-07-12 at 15 54 56

Das bekomme ich auf der offiziellen API-Website

Ich habe das gleiche Problem mit der offiziellen API. Wenn Sie das cURL-Code-Generierungs-Snippet verwenden, funktioniert es.

Anscheinend erwartet die aktuelle API die field_id und nicht den Namen.

Wenn Sie beim Laden der Seite https://mc.sendgrid.com/custom-fields den Netzwerkverkehr in SendGrid überprüfen, können Sie die Antwort für /field_definitions sehen, die die field_ids sowie die Namen zurückgibt.

SendGrid muss diesen ID-Wert entweder im Frontend anzeigen oder die API aktualisieren, um den Namen in der Anfrage zu akzeptieren.

Du hast wahrscheinlich Recht. Traurig, dass ihre Unterstützung jedem helfen konnte. Und natürlich macht die Verwendung von IDs die Verwendung der API viel schwieriger.
Ist Ihnen aufgefallen, ob der Endpunkt für benutzerdefinierte Felder beim Erstellen eines neuen Felds eine ID zurückgibt oder Sie diese abrufen müssen?

@AAverin Nicht ganz sicher, da ich die benutzerdefinierten Felder in der GUI erstellt habe. Die API-Referenz sagt jedoch, dass sie die ID im Antwortobjekt für PUT/PATCH-Anforderungen zurückgibt.

Der Support hat mir gesagt, dass es möglich ist, benutzerdefinierte Feldnamen zu verwenden, indem man sie direkt in die Nutzlast übergibt, ohne zusätzliches custom_fields-Objekt.
Es hat funktioniert, aber Werte für Felder wurden nicht festgelegt.
Wie auch immer, benutzerdefinierte Felder werden nur für Segmente benötigt und es gibt keine Segmente in New Marketing. Also vielleicht einfach benutzerdefinierte Felder komplett überspringen?

Also nur um das Thema abzuschließen.
Die richtige Nutzlast wäre:

{
  contacts: [
   {
    email: '[email protected]',
    purchaseTime: -1,
      activations: 0,
      partner: 'none',
      userCreationTime: 1544997675,
      lastSigningTime: 1544997675,
      emailVerified: 1,
      disabled: 0,
      displayName: 'Rv',
      photoURL: 'https://lh6.googleusercontent.com/-,
      uid: 'uid'
  }
  ]
}

Sie versprachen auch, die API-Dokumentation zu testen und zu aktualisieren

Gibt es hierzu Neuigkeiten?
Ich habe den gleichen Fehler, wenn ich den Feldnamen in custom_fields habe.
Ich habe keinen Fehler, wenn ich die Feld-ID in custom_fields oder innerhalb verwende, ABER der Kontakt wird nicht gespeichert.

Ich verwende auch curl direkt, nicht dieses Modul, daher denke ich, dass das Problem auf der Sendgrid-Seite liegt.

@soramister
Die letzte Antwort, die ich vom Support erhalten habe, war, dass wir jetzt beim Festlegen von Werten für benutzerdefinierte Felder spezielle IDs verwenden sollen.
Siehe @adanot- Antwort oben.

Allerdings sind benutzerdefinierte Felder im Moment etwas nutzlos, da es nicht möglich ist, benutzerdefinierte Segmente zu erstellen. Also ja, Sie können benutzerdefinierte Felder senden, aber Sie können sie nicht wirklich für irgendetwas verwenden.

@AAverin
Ich habe es auch mit der Feld-ID versucht. Es kommt keine Fehlermeldung ABER der Kontakt speichert nicht.

@soramister Ich habe es selbst noch nicht
Wie auch immer, laut Support sollten Sie Ihre erstellten benutzerdefinierten Felder mit dem GET https://api.sendgrid.com/v3/marketing/field_definitions Aufruf abrufen können.

Dann müssen Sie die IDs für die benutzerdefinierten Felder nehmen, für die Sie Werte hinzufügen/aktualisieren möchten, und diese in Ihrem Anruf verwenden, um einen Kontakt hinzuzufügen/zu aktualisieren mit: PUT https://api.sendgrid.com/v3/marketing/contacts

Hier ist ein Beispiel für die Nutzlastunterstützung, das mir gegeben wurde. Schlüssel für das Feld custom_fields sind diese speziellen IDs.

{

"contacts": [
    {
        "email": "[email protected]",
        "address_line_1": "123 main st",
        "custom_fields":
            {
                "e6_T": "5555555555",
                "e5_T": "Acme Group"
            }
    }]
}

Ich habe es mit der Feld-ID versucht. Solange der Befehl erfolgreich ist (kein Fehler zurückgegeben), wird der Kontakt nicht hinzugefügt.

@soramister
Sieht gut aus für mich.
Konnte erfolgreich benutzerdefinierte Felddaten für alle meine Benutzer übergeben

@soramister es dauert ungefähr eine Minute, bis

Was sollte die benutzerdefinierte Feld-ID sein, damit es funktioniert? @AAverin , erkläre bitte deine Beispielnutzlast.

Ich habe es mit der Feld-ID versucht. Solange der Befehl erfolgreich ist (kein Fehler zurückgegeben), wird der Kontakt nicht hinzugefügt.

Gleiche für mich. Ich erhalte eine Job-ID in der Antwort, aber anscheinend sind die Daten nicht in sendgrid

Für mich funktionieren benutzerdefinierte Felder mit der neuen Kontakt-API definitiv nicht. Ich habe versucht, benutzerdefinierte Feld-IDs und ohne zu verwenden. Ohne IDs wird die Fehlermeldung "Ungültige benutzerdefinierte Feld-IDs angegeben" angezeigt. Mit IDs funktioniert es / ich erhalte einen Erfolg, aber die Daten werden nicht aktualisiert

{ "list_ids": [ "4fb6cca6-06dc-4aa2-b7cb-851a4e3be37e" ], "contacts": [ { "email": "[email protected]", "first_name": "Test", "custom_fields": { "e1_N": "100000", "e2_N": "100000" } } ] }

Es kann eine Weile dauern, bis der auf sendgrid erstellte Kontakt angezeigt wird. Wurde der Kontakt erstellt?
Dein Objekt sieht aber gut aus.

Es kann eine Weile dauern, bis der auf sendgrid erstellte Kontakt angezeigt wird. Wurde der Kontakt erstellt?
Dein Objekt sieht aber gut aus.

Es ist wirklich seltsam, der Kontakt wird nur erstellt, wenn ich keine benutzerdefinierten Felder einfüge. Ich bin ein bisschen ratlos, wohin von hier aus gehen soll

@Lucania001 habe das gleiche Problem! Wirklich wirklich unbeeindruckt von der API von Sendgrid. Extrem spröde und undurchsichtig. So wenig Einblick in das Geschehen und so wenig Dokumentation, um die Endpunkte und ihr Verhalten zu erklären.

Selbst mit der Feld-ID anstelle des Feldnamens kann ich benutzerdefinierte Felder für Kontakte nicht aktualisieren. Dies muss so schnell wie möglich behoben werden, oder ein Kunde ist den Bach runter.

Ich kann nicht einmal einen Kontakt erstellen, der mit dem Abschnitt "Ausprobieren" von SendGrid ihrer API ohne ein benutzerdefiniertes Feld erstellt wurde. Alles was ich bekomme ist dies:

{
"Fehler": [
{
"Bereich": "",
"message": "ungültige JSON"
}
]
}

Ich kann nicht einmal einen Kontakt erstellen, der mit dem Abschnitt "Ausprobieren" von SendGrid ihrer API ohne ein benutzerdefiniertes Feld erstellt wurde. Alles was ich bekomme ist dies:

{
"Fehler": [
{
"Bereich": "",
"message": "ungültige JSON"
}
]
}

Ja, das Ausprobieren funktioniert nicht wirklich. Versuchen Sie es mit dem Postboten. Sie werden jedoch wahrscheinlich auf die gleichen Probleme stoßen wie der Rest von uns.

Hallo,

Ich bin auf dieses Problem zurückgekommen, um zu sehen, ob es behoben wurde. Es ist nicht. Das Problem ist immer noch vorhanden.

Hier, was ich mit einer Curl-Anfrage versucht habe:

curl --request PUT --url https://api.sendgrid.com/v3/marketing/contacts --header 'authorization: Bearer {{API_KEY}}}' --header "Content-Type: application/json" - -data '{"list_ids":["f85956da-5696-4d8b-826d-84ac6e27cb2f"],"contacts":[{"address_line_1":null,"city":null,"country":"UK","email ":" [email protected] ","first_name":"Test","last_name":"TEST","postal_code":null,"state_province_region":null,"custom_fields":{"e4_T":"DE" ,"e2_D":null,"e1_T":"benutzerdefiniertes Feld","e3_T":" http://google.com/ "}}]}'

Wenn ich den Wert custom_fields entferne, funktioniert es. Der Kontakt wird erstellt. Wenn ich wieder hinzufüge, wird der Kontakt nicht hinzugefügt.
Beide Fälle geben eine Job-ID zurück, kein Fehler.

Bitte lassen Sie mich wissen, was zu tun ist.

Ich glaube nicht, dass irgendjemand von SendGrid diesem Thread oder Github im Allgemeinen Aufmerksamkeit schenkt.
Das einzige, was Sie tun können, ist, direkt an den Support auf der Website zu schreiben, normalerweise helfen sie.
Eine Lösung für mich war, von SendGrid auf einen anderen Dienst umzuschalten und ich habe dort schon alles am Laufen, während SendGrid noch Probleme beim Erstellen von Kontakten hat

Danke AVerin, um es zusammenzufassen: Um Kontakte mit custom_fields zu erstellen, wissen Sie nur, dass die IDs nicht der Name sind, den Sie ihnen geben, sendgrid wendet seine eigenen IDs an, die Sie über GET abrufen können https://api.sendgrid.com/v3/marketing/field_definitions

Danke AVerin, um es zusammenzufassen: Um Kontakte mit custom_fields zu erstellen, wissen Sie nur, dass die IDs nicht der Name sind, den Sie ihnen geben, sendgrid wendet seine eigenen IDs an, die Sie über GET abrufen können https://api.sendgrid.com/v3/marketing/field_definitions

Wie oben gilt auch wenn ich das sendgrid der ID verwende, es funktioniert immer noch nicht

Hier ist ein Beispiel für curl, mit dem ich mehrere Kontakte mit einem benutzerdefinierten Feld erstellen kann:

curl -X PUT https://api.sendgrid.com/v3/marketing/contacts -H "Content-Type: application/json" -H 'Autorisierung: Bearer API_KEY' --data '{ "contacts": [{ " email": " [email protected] ", "custom_fields": {"e2_N":1 }},{ "email": " [email protected] ", "first_name": "Joe", "last_name": " Dirte", "custom_fields": {"e2_N":2 } }] }'

@soramister Ich habe mit deiner Lockenanfrage gespielt. Ihre Anfrage funktioniert, wenn Sie keine Nullwerte für custom_fields angeben. Ein Nulleintrag scheint für die reservierten_Felder gut zu funktionieren, aber nicht für benutzerdefinierte_Felder. Wenn Sie Ihre Anfrage dynamisch erstellen, sodass keine Einträge mit Nullwerten enthalten sind, sollte Ihr Problem behoben sein.

Danke @adanot , das hat bei mir funktioniert. Guter Fang!

Die Metadaten zum Objekt für benutzerdefinierte Felder beim Erstellen eines neuen Kontakts sollten in der Dokumentation enthalten sein. Übrigens, danke @adanot und @AAverin

Sie haben auch das Format für die benutzerdefinierten Datumsfelder geändert, in den alten Marketing-APIs war es "10/12/2019" und jetzt ist es "2019-10-12T23:14:20Z" was ISO 8601 Zulu Time entspricht.

Obwohl ihre Benutzeroberfläche immer noch das ältere Datumsformat anzeigt, ist dies immer noch verwirrend. Das Gute wäre, wenn ich die Zeit des benutzerdefinierten Datumsfelds verwenden könnte, um Segmente zu erstellen, da früher nur Daten eingegeben werden konnten.

Ich bin heute auf dieses Problem gestoßen. Beim Hinzufügen eines Kontakts, der benutzerdefinierte Felder enthält, würde die API job_id aber der Kontakt würde nie hinzugefügt.

Für mich bestand das Problem darin, dass ich boolesche Werte an ein benutzerdefiniertes Textfeld schickte. Das Senden dieser booleschen Werte als Strings löste stattdessen mein Problem.

Die Marketing API und custom_fields waren ein echter Albtraum. Die Dokumentation fordert Sie auf, eine benutzerdefinierte_Feld-ID zu senden, wenn Sie einen neuen Kontakt in eine Marketingliste aufnehmen. Wenn Sie dies tun, wird die Nachricht "ungültige benutzerdefinierte_Feld-ID" zurückgesendet. Nirgendwo in den Dokumenten habe ich gefunden, dass Sie gesehen haben, dass Sie diese seltsamen benutzerdefinierten_Feld-IDs im "e1_T" -Stil gesendet haben. Irgendjemand anderes?

Aber... wenn Sie eine PUT-Anfrage senden und die benutzerdefinierte_Feld-ID im "e1_T"-Stil anstelle der ID verwenden, die zurückgegeben wird, wenn Sie eine GET-Anfrage auf dem benutzerdefinierten_Felder-Endpunkt ausführen, funktioniert es perfekt, einen neuen Kontakt hinzuzufügen.

Ich verstehe es einfach nicht.

Es ist zerbrechlich und oft nicht intuitiv, das Sendgrid-Dokument sagt "Sie sollten den zurückgegebenen ID-Wert speichern, wenn Sie jemals benutzerdefinierte Felder aktualisieren oder löschen möchten." In meinem Fall waren die zurückgegebenen ID-Werte im seltsamen "e1_T" -Stil und verwenden diese funktioniert gut.. nur ein Schmerz, warum sie nicht nur den Feldnamen eingerichtet haben, ist mir ein Rätsel.

Für diejenigen, die immer noch nach einer Antwort suchen, folgende Beispielnutzlast:
contacts: [ { email: "
[email protected]", first_name: "test", last_name: "test", custom_fields: { e7_T: "TRUE" } } ]
Custom_fields ist also ein Objekt, wobei key Ihre benutzerdefinierte Feld-ID ist - in meinem Fall e7_T

Wirklich schlechtes API-Design, imo

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

amlcodes picture amlcodes  ·  4Kommentare

thinkingserious picture thinkingserious  ·  4Kommentare

nicoasp picture nicoasp  ·  3Kommentare

umarhussain15 picture umarhussain15  ·  3Kommentare

prasoonjalan picture prasoonjalan  ·  3Kommentare