Sendgrid-nodejs: Impossible de créer des contacts avec des champs personnalisés définis

Créé le 10 juil. 2019  ·  39Commentaires  ·  Source: sendgrid/sendgrid-nodejs

Résumé de la question

Impossible de créer des contacts avec des champs personnalisés définis à l'aide de Nouvelles campagnes marketing PUT
API /marketing/contacts

Étapes pour reproduire

  1. Après avoir créé des champs personnalisés, envoyez la charge utile suivante à 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'
    }
  }
  ]
}

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

Détails techniques:

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

Commentaire le plus utile

On dirait que l'API actuelle attend le field_id et non le nom.

Si vous inspectez le trafic réseau à l'intérieur de SendGrid lors du chargement de la page https://mc.sendgrid.com/custom-fields, vous pouvez voir la réponse pour /field_definitions qui renvoie les field_ids ainsi que les noms.

SendGrid doit soit afficher cette valeur d'ID sur le front-end, soit mettre à jour l'API pour accepter le nom dans la demande.

Tous les 39 commentaires

+1

J'ai rencontré le même problème aujourd'hui. Je l'ai évoqué avec l'assistance par chat (en faisant référence à ce problème). Leur réponse :

« D'accord, cela s'est passé récemment. Vous n'êtes pas le seul. Malheureusement, nous n'avons pas de solution à ce problème pour le moment. Nos ingénieurs seniors ont été mis au courant de ce problème. »

Screenshot 2019-07-12 at 15 54 56

C'est ce que j'obtiens sur le site officiel de l'API

J'ai le même problème sur l'API officielle. Si vous prenez l'extrait de génération de code cURL, cela fonctionnera.

On dirait que l'API actuelle attend le field_id et non le nom.

Si vous inspectez le trafic réseau à l'intérieur de SendGrid lors du chargement de la page https://mc.sendgrid.com/custom-fields, vous pouvez voir la réponse pour /field_definitions qui renvoie les field_ids ainsi que les noms.

SendGrid doit soit afficher cette valeur d'ID sur le front-end, soit mettre à jour l'API pour accepter le nom dans la demande.

Tu as probablement raison. Triste que leur soutien puisse aider n'importe qui. Et, bien sûr, l'utilisation d'identifiants rend l'api beaucoup plus difficile à utiliser.
Avez-vous remarqué si le point de terminaison des champs personnalisés renvoie un identifiant lorsque vous créez un nouveau champ, ou vous devez l'OBTENIR ?

@AAverin Pas trop sûr depuis que j'ai créé les champs personnalisés dans l'interface graphique. La référence de l'API indique cependant qu'elle renvoie l'ID dans l'objet de réponse pour les requêtes PUT/PATCH.

Le support m'a dit qu'il était possible d'utiliser des noms de champs personnalisés en les transmettant directement dans la charge utile, sans objet custom_fields supplémentaire.
Cela a fonctionné, mais les valeurs des champs n'ont pas été définies.
Quoi qu'il en soit, les champs personnalisés ne sont nécessaires que pour les segments et il n'y a pas de segments dans New Marketing. Alors peut-être ignorez-vous complètement les champs personnalisés ?

Donc juste pour clore le sujet.
La charge utile correcte serait :

{
  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'
  }
  ]
}

Ils ont également promis de tester et de mettre à jour la documentation de l'API

Une mise à jour pour ceci?
J'ai la même erreur lorsque j'ai le nom du champ dans custom_fields.
Je n'ai pas d'erreur lorsque j'utilise l'identifiant de champ dans custom_fields ou à l'intérieur MAIS le contact n'est pas enregistré.

J'utilise également curl directement, pas ce module, donc je pense que le problème vient du côté sendgrid.

@soramister
La dernière réponse que j'ai reçue du support était que maintenant nous sommes censés utiliser des identifiants spéciaux lors de la définition des valeurs des champs personnalisés.
Voir la réponse de @adanot ci-dessus.

Pourtant, les champs personnalisés sont quelque peu inutiles pour le moment car il n'est pas possible de créer des segments personnalisés. Alors oui, vous pouvez envoyer des champs personnalisés mais vous ne pouvez pas vraiment les utiliser pour quoi que ce soit.

@AAverin
J'ai aussi essayé avec l'ID de champ. Il n'y a pas de message d'erreur MAIS le contact n'enregistre pas.

@soramister Je n'ai pas encore essayé moi-même, car en raison de segments manquants et de certaines fonctionnalités, j'envisage de passer à Mailerlite à la place.
Quoi qu'il en soit, selon le support, vous devriez pouvoir obtenir vos champs personnalisés créés en utilisant l'appel GET https://api.sendgrid.com/v3/marketing/field_definitions .

Ensuite, vous devrez prendre les identifiants des champs personnalisés pour lesquels vous souhaitez ajouter/mettre à jour des valeurs, et les utiliser dans votre appel pour ajouter/mettre à jour un contact avec : PUT https://api.sendgrid.com/v3/marketing/contacts

Voici un exemple que le support de charge utile m'a donné. les clés du champ custom_fields sont ces identifiants spéciaux.

{

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

J'ai essayé avec les champs id. Tant que la commande est réussie (aucune erreur renvoyée), le contact n'est pas ajouté.

@soramister
Ça m'a l'air bien.
A pu transmettre avec succès les données des champs personnalisés pour tous mes utilisateurs

@soramister, il faut environ une minute à Sendgrid avant de le voir.

quel devrait être l'identifiant du champ personnalisé pour que cela fonctionne ?? @AAverin , veuillez expliquer votre exemple de charge utile.

J'ai essayé avec les champs id. Tant que la commande est réussie (aucune erreur renvoyée), le contact n'est pas ajouté.

Pareil pour moi. J'obtiens un ID de travail dans la réponse mais il semble que les données ne soient pas dans sendgrid

Donc, pour moi, les champs personnalisés utilisant la nouvelle API de contact ne fonctionnent certainement pas. J'ai essayé d'utiliser des identifiants de champs personnalisés et sans. Sans ID, il y a des erreurs "identifiants de champ personnalisés non valides fournis" avec les ID, cela fonctionne / j'obtiens un succès mais cela ne met pas à jour les données

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

Cela peut prendre un certain temps pour voir le contact créé sur sendgrid, le contact a-t-il été créé ?
Votre objet a l'air bien.

Cela peut prendre un certain temps pour voir le contact créé sur sendgrid, le contact a-t-il été créé ?
Votre objet a l'air bien.

C'est vraiment étrange, le contact ne sera créé que si je n'inclus pas de champs personnalisés. Un peu perdu où aller à partir d'ici

@Lucania001 a le même problème ! Vraiment vraiment pas impressionné par l'API de Sendgrid. Extrêmement cassant et opaque. Si peu d'informations sur ce qui se passe et si peu de documentation pour expliquer les points de terminaison et leur comportement.

Même avec l'identifiant du champ plutôt que le nom du champ, je ne suis pas en mesure de mettre à jour les champs personnalisés pour les contacts. Cela doit être résolu dès que possible ou un client est en panne.

Je ne peux même pas créer un contact à l'aide de la section "essayer" de SendGrid de leur API sans champ personnalisé. Tout ce que j'obtiens c'est ça :

{
"les erreurs": [
{
"domaine": "",
"message": "JSON invalide"
}
]
}

Je ne peux même pas créer un contact à l'aide de la section "essayer" de SendGrid de leur API sans champ personnalisé. Tout ce que j'obtiens c'est ça :

{
"les erreurs": [
{
"domaine": "",
"message": "JSON invalide"
}
]
}

Oui, l'essayer ne fonctionne pas vraiment du tout. Essayez-le via le facteur. Cependant, vous rencontrerez probablement les mêmes problèmes que le reste d'entre nous.

Bonjour,

Je suis revenu sur ce problème pour voir s'il était résolu. Ce n'est pas. Le problème est toujours présent.

Voici ce que j'ai essayé avec une requête curl :

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,"ville":null,"country":"UK","email ":" [email protected] ","first_name":"Test","last_name":"TEST","postal_code":null,"state_province_region":null,"custom_fields":{"e4_T":"FR" ,"e2_D":null,"e1_T":"champ personnalisé","e3_T":" http://google.com/ "}}]}'

Lorsque je supprime la valeur custom_fields, cela fonctionne. Le contact est créé. Si je rajoute, le contact n'est pas ajouté.
Les deux cas renvoient un identifiant de travail, pas d'erreur.

S'il vous plaît laissez-moi savoir quoi faire.

Je ne pense pas que quiconque de SendGrid prête attention à ce fil ou à github en général.
La seule chose que vous pouvez faire est d'écrire directement au support sur le site Web, généralement ils vous aident.
Une solution pour moi était de passer de SendGrid à un autre service et j'ai déjà tout exécuté là-bas, alors que SendGrid a toujours des problèmes pour créer des contacts

Merci AAverin, pour résumer : pour créer des contacts avec custom_field, sachez que les identifiants ne sont pas le nom que vous leur donnez, sendgrid applique ses propres identifiants que vous pouvez récupérer via GET https://api.sendgrid.com/v3/marketing/field_definitions

Merci AAverin, pour résumer : pour créer des contacts avec custom_field, sachez que les identifiants ne sont pas le nom que vous leur donnez, sendgrid applique ses propres identifiants que vous pouvez récupérer via GET https://api.sendgrid.com/v3/marketing/field_definitions

Comme ci-dessus, même si j'utilise la grille d'envoi de l'ID, cela ne fonctionne toujours pas

Voici un exemple de curl qui fonctionne pour moi pour créer plusieurs contacts avec un champ personnalisé :

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

@soraister J'ai joué avec votre demande de curl. Votre demande fonctionne si vous n'incluez pas de valeurs nulles pour custom_fields. L'entrée Null semble fonctionner correctement pour les reserves_fields mais pas pour les custom_fields. Construire votre demande de manière dynamique afin que les entrées avec des valeurs nulles ne soient pas incluses devrait résoudre votre problème.

Merci @adanot , cela a fonctionné pour moi. Bonne prise!

Les métadonnées sur l'objet de champs personnalisés lors de la création d'un nouveau contact auraient dû figurer dans la documentation. Au fait, merci @adanot et @AAverin

Ils ont également modifié le format des champs de date personnalisés, dans l'ancienne API marketing, c'était "10/12/2019" et maintenant c'est "2019-10-12T23:14:20Z" qui est ISO 8601 Zulu Time.

Bien que leur interface utilisateur affiche toujours l'ancien format de date, ce qui est toujours déroutant. La bonne chose serait que je puisse utiliser l'heure du champ de date personnalisé pour créer des segments, car auparavant, cela permettait simplement de mettre des dates.

Je suis tombé sur ce problème aujourd'hui. Lors de l'ajout d'un contact qui inclut des champs personnalisés, l'API renverrait un job_id mais le contact ne serait jamais ajouté.

Pour moi, le problème était que j'envoyais des valeurs booléennes à un champ personnalisé « texte ». L'envoi de ces booléens sous forme de chaînes a plutôt résolu mon problème.

L'API Marketing et custom_fields ont été un véritable cauchemar. Les documents vous demandent d'envoyer un identifiant custom_field lorsque vous mettez un nouveau contact dans une liste marketing. Ensuite, lorsque vous le faites, il renvoie un message "ID de champ personnalisé non valide". Nulle part dans la documentation je n'ai trouvé que vous aviez vu envoyer ces étranges identifiants custom_field de style "e1_T". Quelqu'un d'autre?

Mais... lorsque vous envoyez une demande PUT et utilisez l'ID custom_field de style "e1_T" au lieu de l'ID qui est renvoyé lorsque vous effectuez une demande GET sur le point de terminaison custom_fields, cela fonctionne parfaitement pour ajouter un nouveau contact.

Je ne comprends tout simplement pas.

C'est fragile et souvent pas intuitif, le doc Sendgrid dit "Vous devriez enregistrer la valeur d'identification renvoyée si jamais vous souhaitez mettre à jour ou supprimer des champs personnalisés.", dans mon cas, les valeurs d'identification renvoyées étaient ces étranges style "e1_T", et en utilisant ces fonctionne bien .. juste une douleur, pourquoi ils ne se sont pas simplement installés pour prendre le nom du champ me dépasse.

Pour ceux qui cherchent encore une réponse, exemple de charge utile ci-dessous :
contacts: [ { email: "
[email protected]", first_name: "test", last_name: "test", custom_fields: { e7_T: "TRUE" } } ]
Donc custom_fields est un objet, où key est votre identifiant de champ personnalisé - e7_T dans mon cas

Conception d'API vraiment mauvaise, imo

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

umarhussain15 picture umarhussain15  ·  3Commentaires

agostonbonomi picture agostonbonomi  ·  3Commentaires

polkhovsky picture polkhovsky  ·  3Commentaires

metalshan picture metalshan  ·  3Commentaires

thinkingserious picture thinkingserious  ·  4Commentaires