Sendgrid-nodejs: Incapaz de criar contatos com campos personalizados definidos

Criado em 10 jul. 2019  ·  39Comentários  ·  Fonte: sendgrid/sendgrid-nodejs

Resumo do problema

Não é possível criar contatos com campos personalizados definidos usando PUT de novas campanhas de marketing
API de / marketing / contacts

Passos para reproduzir

  1. Tendo os campos personalizados criados, envie a seguinte carga útil para PUT / marketing / contatos
{
  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'
    }
  }
  ]
}

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

Detalhes técnicos:

  • sendgrid-nodejs Versão: 6.4.0
  • Versão Node.js v12.1.0

Comentários muito úteis

Parece que a API atual está esperando o field_id e não o nome.

Se você inspecionar o tráfego de rede dentro do SendGrid ao carregar a página https://mc.sendgrid.com/custom-fields , poderá ver a resposta para / field_definitions que retorna os field_ids, bem como os nomes.

SendGrid precisa exibir esse valor de id no front end ou atualizar a API para aceitar o nome na solicitação.

Todos 39 comentários

+1

Corri para o mesmo problema hoje. Eu mencionei o assunto com o suporte por bate-papo (referindo-se a esse problema). A resposta deles:

"Ok, isso tem acontecido recentemente. Você não é o único. Infelizmente, não temos uma solução alternativa para isso agora. Nossos engenheiros seniores estão cientes desse problema."

Screenshot 2019-07-12 at 15 54 56

Isso é o que eu obtenho no site oficial da API

Estou com o mesmo problema na API oficial. Se você pegar o snippet de geração de código cURL, ele funcionará.

Parece que a API atual está esperando o field_id e não o nome.

Se você inspecionar o tráfego de rede dentro do SendGrid ao carregar a página https://mc.sendgrid.com/custom-fields , poderá ver a resposta para / field_definitions que retorna os field_ids, bem como os nomes.

SendGrid precisa exibir esse valor de id no front end ou atualizar a API para aceitar o nome na solicitação.

Você provavelmente está certo. Triste que o apoio deles pudesse ajudar alguém. E, é claro, o uso de ids torna a API muito mais difícil de usar.
Você notou se o endpoint de campos personalizados retorna id quando você cria um novo campo, ou você precisa obtê-lo?

@AAverin Não tenho muita certeza desde que criei os campos personalizados na GUI. A referência da API diz que retorna o id no objeto de resposta para solicitações PUT / PATCH.

O suporte me disse que é possível usar nomes de campos personalizados, passando-os diretamente na carga útil, sem o objeto custom_fields extra.
Funcionou, mas os valores dos campos não foram definidos.
De qualquer forma, os campos personalizados são necessários apenas para segmentos e não há segmentos no Novo Marketing. Então, talvez simplesmente ignore os campos personalizados completamente?

Então, apenas para encerrar o problema.
A carga útil correta seria:

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

Eles também prometeram testar e atualizar a documentação da API

alguma atualização disso?
Eu tenho o mesmo erro quando tenho o nome do campo dentro de custom_fields.
Não tenho erro quando uso o campo id dentro de custom_fields ou dentro MAS o contato não é salvo.

Também estou usando o curl diretamente, não este módulo, então acho que o problema está no lado do sendgrid.

@soramister
A última resposta que recebi do suporte foi que agora devemos usar IDs especiais ao definir valores para campos personalizados.
Veja a resposta @adanot acima.

Ainda assim, os campos personalizados são um pouco inúteis no momento porque não é possível construir segmentos personalizados. Então, sim, você pode enviar campos personalizados, mas não pode realmente usá-los para nada.

@AAverin
Também tentei com o ID do campo. Não há mensagem de erro, MAS o contato não salva.

@soramister Eu não tentei ainda, porque devido à falta de segmentos e algum recurso, eu considero mudar para o Mailerlite.
De qualquer forma, de acordo com o suporte, você deve ser capaz de obter seus campos personalizados criados usando GET https://api.sendgrid.com/v3/marketing/field_definitions call.

Em seguida, você precisará obter os IDs para os campos personalizados nos quais está interessado em adicionar / atualizar valores e usá-los em sua chamada para adicionar / atualizar um contato com: PUT https://api.sendgrid.com/v3/marketing/contacts

Aqui está um exemplo que o suporte de carga útil me deu. as chaves para o campo custom_fields são aqueles ids especiais.

{

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

Já tentei com os campos id. Enquanto o comando é bem-sucedido (nenhum erro retornou), o contato não é adicionado.

@soramister
Parece bom para mim.
Consegui passar dados de campos personalizados para todos os meus usuários

@soramister ,

qual deve ser o ID do campo personalizado para fazê-lo funcionar? @AAverin , explique seu exemplo de carga útil.

Já tentei com os campos id. Enquanto o comando é bem-sucedido (nenhum erro retornou), o contato não é adicionado.

O mesmo para mim. Recebo um ID de trabalho na resposta, mas parece que os dados não estão em sendgrid

Portanto, para mim, os campos personalizados que usam a nova API de contato definitivamente não estão funcionando. Eu tentei usar IDs de campos personalizados e sem. Sem IDs, os erros "IDs de campo personalizado fornecidos inválidos" com IDs funciona / consigo um sucesso, mas não atualiza os dados

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

Pode demorar um pouco para ver o contato criado no sendgrid. O contato foi criado?
Seu objeto parece bom.

Pode demorar um pouco para ver o contato criado no sendgrid. O contato foi criado?
Seu objeto parece bom.

É muito estranho, o contato só será criado se eu não incluir campos personalizados. Sem saber para onde ir a partir daqui

@ Lucania001 tendo o mesmo problema! Realmente muito impressionado com a API do Sendgrid. Extremamente quebradiço e opaco. Tão poucos insights sobre o que está acontecendo e tão pouca documentação para explicar os terminais e seu comportamento.

Mesmo com o ID do campo em vez do nome do campo, não consigo atualizar os campos personalizados dos contatos. Isso precisa ser resolvido o mais rápido possível ou o cliente está perdendo o ralo.

Não consigo nem mesmo fazer com que um contato seja criado usando a seção "teste" do SendGrid de sua API sem um campo personalizado. Tudo que eu consigo é isto:

{
"erros": [
{
"campo": "",
"mensagem": "JSON inválido"
}
]
}

Não consigo nem mesmo fazer com que um contato seja criado usando a seção "teste" do SendGrid de sua API sem um campo personalizado. Tudo que eu consigo é isto:

{
"erros": [
{
"campo": "",
"mensagem": "JSON inválido"
}
]
}

Sim, o teste não funciona realmente. Experimente através do carteiro. Você provavelmente terá os mesmos problemas que o resto de nós.

Olá,

Voltei a esse problema para ver se ele foi corrigido. Não é. O problema ainda está presente.

Aqui está o que tentei com uma solicitação curl:

curl --request PUT --url https://api.sendgrid.com/v3/marketing/contacts --header 'autorização: 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 ":" EN " , "e2_D": null, "e1_T": "campo personalizado", "e3_T": " http://google.com/ "}}]} '

Quando removo o valor custom_fields, ele funciona. O contato é criado. Se eu adicionar de volta, o contato não será adicionado.
Ambos os casos retornam um ID de trabalho, sem erro.

Por favor, deixe-me saber o que fazer.

Eu não acho que ninguém do SendGrid preste atenção a este tópico ou github em geral.
A única coisa que você pode fazer é escrever diretamente para o suporte no site, geralmente eles ajudam.
Uma solução para mim foi trocar o SendGrid para outro serviço e já tenho tudo rodando lá, enquanto o SendGrid ainda tem problemas para criar contatos

Obrigado AAverin, para resumir: Para criar contatos com custom_fields apenas saiba que os ids não são o nome que você deu a eles, sendgrid aplica seus próprios ids que você pode recuperar via GET https://api.sendgrid.com/v3/marketing/field_definitions

Obrigado AAverin, para resumir: Para criar contatos com custom_fields apenas saiba que os ids não são o nome que você deu a eles, sendgrid aplica seus próprios ids que você pode recuperar via GET https://api.sendgrid.com/v3/marketing/field_definitions

Como acima, mesmo se eu usar o sendgrid do ID, ele ainda não funciona

Aqui está um exemplo de curl que funciona para mim para criar vários contatos com um campo personalizado:

curl -X PUT https://api.sendgrid.com/v3/marketing/contacts -H "Tipo de conteúdo: aplicativo / json" -H 'autorização: Bearer API_KEY' --data '{"contatos": [{" email ":" [email protected] "," custom_fields ": {" e2_N ": 1}}, {" email ":" [email protected] "," first_name ":" Joe "," last_name ":" Dirte "," custom_fields ": {" e2_N ": 2}}]} '

@soramister eu brinquei com seu pedido de curl. Sua solicitação funciona se você não incluir valores nulos para custom_fields. A entrada nula parece funcionar bem para reserved_fields, mas não para custom_fields. Construir sua solicitação dinamicamente para que as entradas com valores nulos não sejam incluídas deve corrigir o seu problema.

Obrigado @adanot , funcionou para mim. Boa pegada!

Os metadados no objeto de campos personalizados na criação de um novo contato deveriam estar na documentação. A propósito , obrigado @AAverin

Eles também mudaram o formato dos campos de data personalizados, na API de marketing herdada era "10/12/2019" e agora é "2019-10-12T23:14:20Z" que é ISO 8601 Zulu Time.

Embora a interface do usuário ainda mostre o formato de data mais antigo, isso ainda é confuso. O bom seria se eu pudesse usar o tempo do campo de data personalizado para criar segmentos, já que antes ele permitia apenas inserir datas.

Eu me deparei com esse problema hoje. Ao adicionar um contato que inclui campos personalizados, a api retornaria um job_id mas o contato nunca seria adicionado.

Para mim, o problema era que eu estava enviando valores booleanos para um campo personalizado de 'texto'. Enviar esses booleanos como strings resolveu meu problema.

A API de marketing e custom_fields têm sido um verdadeiro pesadelo. Os documentos dizem para você enviar uma ID custom_field quando você estiver COLOCANDO um novo contato em uma lista de marketing. Então, quando você fizer isso, ele enviará de volta uma mensagem "ID custom_field inválido". Em nenhum lugar da documentação eu achei que você viu enviar aqueles ids custom_field estranhos no estilo "e1_T". Alguém mais?

Mas ... quando você envia uma solicitação PUT e usa o ID custom_field do estilo "e1_T" em vez do ID que é retornado quando você faz uma solicitação GET no terminal custom_fields, funciona perfeitamente para adicionar um novo contato.

Eu simplesmente não entendo.

É frágil e muitas vezes não intuitivo, o documento Sendgrid diz "Você deve salvar o valor de id retornado se quiser atualizar ou excluir campos personalizados.", No meu caso os valores de id retornados eram estranhos no estilo "e1_T", e usando aqueles funciona bem .. apenas uma dor, porque eles não configuraram apenas para pegar o nome do campo está além de mim.

Para quem ainda está procurando uma resposta, veja o exemplo de carga útil abaixo:
contacts: [ { email: "
[email protected]", first_name: "test", last_name: "test", custom_fields: { e7_T: "TRUE" } } ]
Portanto, custom_fields é um objeto, onde key é o id do seu campo personalizado - e7_T no meu caso

Design de API muito ruim, imo

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

wooyah picture wooyah  ·  4Comentários

agostonbonomi picture agostonbonomi  ·  3Comentários

metalshan picture metalshan  ·  3Comentários

danielflippance picture danielflippance  ·  4Comentários

mikemaccana picture mikemaccana  ·  4Comentários