Campo de ticket atualiza via postman, mas não via aplicativo.
Estamos tentando atualizar o valor de campos personalizados do ticket via aplicativo privado e não estamos conseguindo. Ocorre que, ao fazer a chamada via aplicativo, os campos não são atualizados, mas se o faço via postman, os campos são atualizados normalmente.
A chamada está sendo efetuada conforme orientado em https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#update-ticket, via endpoint PUT /api/v2/tickets/{ticket_id}
.
Tanto o objeto que estou enviando na carga via aplicativo, quanto via postman são idênticos em sua estrutura. Inclusive, se eu copiar o objeto do código do aplicativo e colar no postman, ele é enviado normalmente,
Em ambos os casos, a chamada retorna o próprio ticket e o status 200 ok, com a diferença que na chamada via postman os campos são atualizados e via aplicativo não.
Além disto, antes de cada update, faço antes uma chamada para o endpoint show ticket, para evitar colisão de dados, conforme orientado em https://developer.zendesk.com/documentation/ticketing/managing-tickets/creating-and-updating-tickets/#protecting-against-ticket-update-collisions.
Segue um exemplo do body da requisição:
{
"ticket": {
"custom_fields": [
{
"id": 13431756835092,
"value": "Teste15"
},
{
"id": 13431774140948,
"value": null
},
{
"id": 13431762748692,
"value": null
},
{
"id": 13431792046868,
"value": null
},
],
"updated_stamp": "2021-08-24T16:53:51Z", //retirado do showTicketEndpoint GET /api/v2/tickets/{ticket_id}
"safe_update": true,
}
}
Já modifiquei o objeto de diversas formas. Inclusive incluindo a propriedade requester_id, conforme https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#json-format
Também verifiquei se todas as informações estão sendo instanciadas corretamente e está tudo ok.
A forma como estou fazendo as chamadas é:
const getTicketEndpoint = {
type: "GET",
url: `${urlBase}/api/v2/tickets/${ticketId}`,
headers: { contentType: "application/json", },
}
const endpoint1Response = await client.request(getTicketEndpoint)
const ticketUpdateEndpoint = {
type: "PUT",
url: `${urlBase}/api/v2/tickets/${ticketId}`,
headers: {
contentType: "application/json",
Accept: 'application/json',
},
data:{
"ticket": {
"custom_fields": [
{ "id": 34, "value": "novo valor" }
{ "id": 82, "value": "novo valor" }
],
"updated_stamp": "2021-08-24T16:53:51Z", //retirado do showTicketEndpoint GET /api/v2/tickets/{ticket_id}
"safe_update": true,
}
}
}
const endpoint2Response = await client.request(ticketUpdateEndpoint)
A chamada está sendo feita dentro de uma função assíncrona e conforme informado ela retorna status 200.
Encontrei dois tópicos relacionados, mas que não ajudaram para o meu caso. A saber:
https://support.zendesk.com/hc/en-us/community/posts/4408868955034-How-to-update-custom-field-values-using-API-
https://support.zendesk.com/hc/en-us/community/posts/4408861037722-Trying-to-update-field-via-API-but-no-change-on-ticket
Agradeço imensamente qualquer ajuda em relação ao problema.
-
Hi Tiago! The reason that this isn't working in the application is because you aren't using the JSON.stringify() method to wrap the data, as we outline here. Once you do that, you should be all set!
-
Dear, thank you.
Unfortunately I've tried that way, too. Whether converting to string or forwarding the direct object, the result is the same.
Please sign in to leave a comment.
2 Comments