Webhook de Trocas&Devoluções

Consigo receber atualizações das minhas reversas e reembolsos via webhook?

Sim, O Trocas & Devoluções possui um webhook que dispara informações de reversas e/ou reembolsos para um endereço pré-determinado do cliente, sempre que ocorre uma atualização de status, no reembolso ou na reversa, que tenha sido indicado como gatilho de envio pelo cliente.

Como configurar o webhook?

Siga estes passos:

1 - Envie um e-mail para suporte@after.sale com o assunto [nome_do_seu_e-commerce] Configuração de Webhook - T&D. No conteúdo do e-mail indique:
 a - O endereço (URL) que receberá os envios;
 b - O token/senha de acesso que a Aftersale deve utiliza para acessar este endereço;
 c - Liste os status de Reversa e/ou status de Reembolso, a partir dos quais deseja receber atualizações (veja quais são eles abaixo);
 d - Dois números de pedidos que poderão ser usados para testar os envios.

2 - Aguarde o retorno do time Aftersale, informando da configuração realizada e solicitando a confirmação dos envios de teste.

3 - Confirme a recepção dos arquivos enviados.
4 - E pronto! Agora você deve mapear as informações dos arquivos enviados respeitando os padrões descritos abaixo.


Quais são os status de Reversa disponíveis como gatilho?

ID

Evento

Status ADMIN

29

reverse.status.changed.received

Recebido

30

reverse.status.changed.pending

Em análise

31

reverse.status.changed.divergent_received

Recebimento divergente

33

reverse.status.changed.approved

Aprovado

34

reverse.status.changed.processing

Processando

35

reverse.status.changed.awaiting

Aguardando envio

36

reverse.status.changed.shipped

Em trânsito

37

reverse.status.changed.delivered

Entrega realizada

38

reverse.status.changed.canceled

Cancelado

39

reverse.status.changed.shipping_failed

Problemas no transporte

46

reverse.status.changed.invoice_pending

Nota fiscal pendente

47

reverse.status.changed.awaiting_payment

Aguardando pagamento

48

reverse.status.changed.almost_done

Parcialmente resolvido

49

reverse.status.changed.done

Resolvido

50

reverse.status.changed.partially_approved

Parcialmente aprovado

51

reverse.status.changed.refused

Recusado

55

reverse.status.changed.courier_correction_letter_attached

carta de correção anexada

57

reverse.status.changed.courier_swaped

troca de transportadora

58

reverse.status.changed.returned_invoice_refused

Nota fiscal de devolução recusada


Quais são os status de Reembolso disponíveis como gatilho?

 

ID

Evento

Status ADMIN

29

reverse.status.changed.received

Recebido

30

reverse.status.changed.pending

Em análise

31

reverse.status.changed.divergent_received

Recebimento divergente

33

reverse.status.changed.approved

Aprovado

34

reverse.status.changed.processing

Processando

35

reverse.status.changed.awaiting

Aguardando envio

36

reverse.status.changed.shipped

Em trânsito

37

reverse.status.changed.delivered

Entrega realizada

38

reverse.status.changed.canceled

Cancelado

39

reverse.status.changed.shipping_failed

Problemas no transporte

46

reverse.status.changed.invoice_pending

Nota fiscal pendente

47

reverse.status.changed.awaiting_payment

Aguardando pagamento

48

reverse.status.changed.almost_done

Parcialmente resolvido

49

reverse.status.changed.done

Resolvido

50

reverse.status.changed.partially_approved

Parcialmente aprovado

51

reverse.status.changed.refused

Recusado

55

reverse.status.changed.courier_correction_letter_attached

carta de correção anexada

57

reverse.status.changed.courier_swaped

troca de transportadora

58

reverse.status.changed.returned_invoice_refused

Nota fiscal de devolução recusada



Qual o padrão de arquivo de Atualização de Reversa enviado?

{
"event_name": "refund.status.changed",
"signature": "signature",
"data": {
"id": 0,
"type": "string",
"action": "string",
"bonus_amount": 0,
"bonus_amount_percent": 0,
"requested_amount": 0,
"requested_total_amount": 0,
"received_amount": 0,
"received_raw_amount": 0,
"total_amount": 0,
"free_shipping": "string",
"created_at": "string",
"updated_at": "string",
"customer": {
"id": 0,
"first_name": "string",
"last_name": "string",
"email": "string"
},
"status": {
"id": 0,
"name": "string",
"description": "string"
},
"status_histories": [
{
"id": 0,
"reverse_id": 0,
"status_id": 0,
"user_id": 0,
"customer_id": 0,
"date": "string",
"comments": "string",
"status": {
"id": 0,
"service_code": "string",
"name": "string",
"description": "string"
},
"user": {
"id": 0,
"name": "string",
"first_name": "string",
"last_name": "string",
"email": "string",
"mobile_phone": "string",
"phone": "string",
"document": "string",
"wallet": "string"
}
}
],
"total_amount_histories": [
{
"id": 0,
"user": {
"id": 0,
"first_name": "string",
"last_name": "string"
},
"total_amount": "string",
"date": "string",
"type": {
"id": 0,
"name": "string",
"description": "string"
}
}
],
"cashback_account": "string",
"voucher": {
"redemption_code": "string",
"giftcard_id": "string",
"expiring_date": "string"
},
"should_ask_voucher_code": true,
"order_payment_methods": "string",
"order_transactions": [{}],
"refund_product_requests": [{}],
"reverse": {
"status": {
"id": 0,
"service_code": "string",
"name": "string",
"description": "string"
},
"id": 0,
"created_at": "string",
"ecommerceOrder": {
"id": 0,
"order_id": "string"
}
},
"products": [
{
"id": 0,
"reverse_id": 0,
"motive_id": 0,
"reason": {
"id": 0,
"ecommerce_id": 0,
"description": "string",
"reason_category_id": "string",
"action": "string",
"should_approve": true,
"upload_image": "string",
"show_product_grid": true,
"ord": "string",
"created_at": "string",
"updated_at": "string",
"deleted_at": "string"
},
"ecommerce_order_product_id": 0,
"refund_id": 0,
"qty": 0,
"requested_qty": 0,
"received_qty": 0,
"product_received_comment": 0,
"comments": "string",
"reverse_action": "string",
"customer_retention_method_id": "string",
"protocol": "string",
"images": [
{
"id": 0,
"product_id": "string",
"image_path": "string",
"image_url": "string"
}
],
"refund_product_requests": [{}],
"product_id": "string",
"hash": "string",
"name": "string",
"sku": "string",
"price": "string",
"selling_price": "string",
"weight": "string",
"returned_invoice": "string",
"invoice": "string",
"order_id": 0,
"image_url": ["string"]
}
],
"can_edit_wire_transfer": true,
"has_wire_transfer_account": true,
"customer_retention_method_id": "string",
"external_order_url": "string"
}
};

Qual o padrão de arquivo de Atualização de Reembolso enviado?

{
"event_name": "reverse.status.changed.shipping_failed",
"event_date": "2020-10-20 18:07:26",
"signature": "abcd1234",
"data": {
"reverse": {
"id": 9,
"reverse_type": "courier",
"courier_collect": false,
"ecommerce_order_id": 9,
"store_id": null,
"dot_id": null,
"order_id": null,
"courier_contract_id": 9,
"total_amount": null,
"invoice": null,
"courier_data": null,
"destination_data": {
"seller_info": "N\u00e3o informado no produto",
"return_to_seller": false,
"seller_id": null
},
"store_expire_date": null,
"skip_process_step": 0,
"freight_by_customer": false,
"tracking_error": null,
"created_at": "2020-10-20 18:07:26",
"updated_at": "2020-10-20 18:07:26",
"deleted_at": null,
"status_id": 39,
"products": [],
"tracking": null,
"status": {
"id": 39,
"service_code": "reverses",
"name": "shipping_failed",
"description": "problemas no transporte"
},
"status_histories": [
{
"id": 9,
"reverse_id": 9,
"status_id": 39,
"user_id": null,
"customer_id": null,
"date": "2020-10-20 18:07:26",
"comments": null,
"status": {
"id": 39,
"service_code": "reverses",
"name": "shipping_failed",
"description": "problemas no transporte"
},
"user": null
}
],
"refunds": [],
"ecommerce_order": {
"id": 9,
"order_id": null,
"invoice_number": null,
"uuid": null,
"shipping_value": null,
"ordered_at": null,
"value": null,
"currency": null,
"payment_methods": null,
"ecommerce_id": 9,
"customer_id": 893,
"is_online": true,
"is_marketplace": null,
"marketplace_name": null,
"options": null,
"updated_at": "2020-10-20 18:07:26",
"deleted_at": null
},
"must_treat_refund": false,
"external_order_url": null,
"returned_invoice": null,
"reverse_type_name": "correios",
"can_generate_voucher": false,
"could_cancel": true,
"available_swap_couriers": [],
"can_send_correction_letter": false,
"correction_letter_link": null
},
"customer": {
"id": 893,
"first_name": "Demetris",
"last_name": "Lebsack",
"email": "penelope.rosenbaum@example.com",
"contact_email": null,
"document": "12345678911",
"phone": "+5541123416512",
"address_id": 18,
"shipping_address_id": 17,
"address": {
"id": 18,
"zip_code": "69475000",
"address": "Rua Francisco Derosso",
"complement": "Apartamento 1 Torre 1",
"number": "77144828",
"neighborhood": "Xaxim",
"city": "Curitiba",
"state": "PR",
"lat": "83.455368",
"long": "-25.326949",
"updated_at": "2020-10-20 18:07:26",
"deleted_at": null
},
"shipping_address": {
"id": 17,
"zip_code": "69475000",
"address": "Rua Francisco Derosso",
"complement": "Apartamento 1 Torre 1",
"number": "74045",
"neighborhood": "Xaxim",
"city": "Curitiba",
"state": "PR",
"lat": "-4.795581",
"long": "-28.582266",
"updated_at": "2020-10-20 18:07:26",
"deleted_at": null
}
},
"ecommerce_order": null,
"tracking_history": []
}
}



Dicionário de dados dentro do payload Reversa:

Campos mais relevantes.

Reversa ou Reembolso

O que é

"event_name"

reembolso

Nome do status do reembolso

“id"

reembolso/data

Id do reembolso

“type”

reembolso/data

Tipo do reembolso.
exchange, return (string).

"action"

reembolso/data

Ação do reembolso, voucher, estorno ou tranferência (string).

“free_shipping”??

reembolso/data

Envio grátis.

"created_at"

reembolso/data

Data da criação do reembolso.

"updated_at"

reembolso/data

Data de atualização do reembolso.

"id"

reembolso/data/customer

Id do consumidor.

"first_name"

reembolso/data/customer

Nome do consumidor

"last_name"

reembolso/data/customer

Sobrenome do consumidor.

"email"

reembolso/data/customer

E-mail do consumidor.

"id"

reembolso/data/status

Id do status do reembolso.

"name"

reembolso/data/status

Nome do status do reembolso.

"description"

reembolso/data/status

Descrição do status do reembolso.

"status_histories"

reembolso/data/status_histories

Histórico de status do reembolso.

"user"

reembolso/data/status_histories/user

Alterações de status feitas pelo usuário do admin.

"total_amount_histories"

reembolso/data/total_amount_histories

Se refere a alterações de reembolso feitas pelo operador.

“giftcard_id”

reembolso/data/voucher

Id do voucher.

"expiring_date"

reembolso/data/voucher

Data de expiração do voucher.

"order_transactions"

reembolso/data/

Número das transações financeiras (serve apenas para a Vtex).

“refund_product_requests”

reembolso/data/refund_product_requests

Produtos que pediram reembolso.

 

 "products"

reembolso/data/products

Produtos.

“reason_category_id”

reembolso/data/products

Motivo de troca ou devolução.

“action"

reembolso/data/products

Se é troca ou devolução.
EXG ou RTN.

"show_product_grid"

reembolso/data/products

Grade de produtos para troca.

 "requested_qty"

reembolso/data/products

Quantos produtos foram solicitados na reversa.

"received_qty"

reembolso/data/products

Quantos produtos o operador recebeu.

 "reverse_action"

reembolso/data/products

Ação da reversa: Trocar, devolver, falha na entrega e troca retida.

"id"

reversa/data/reverse

Id da reversa (string).

"reverse_type"

reversa/data/reverse

Tipo da reversa. Por transportadora ou seller/loja física (string).

"order_id"

reversa/data/reverse

Número do pedido (string).

"courier_collect"

reversa/data/reverse

Se é coleta ou não (boolean).

"courier_contract_id"

reversa/data/reverse

Id do contrato de transportadora vinculado ao e-commerce no Admin.

“destination_data”

reversa/data/reverse

Dados de destino para onde o produto vai retornar.

"seller_info"

reversa/data/reverse

Se tem um seller cadastrado, ele será mostrado.

"skip_process_step"

reversa/data/reverse

(number)
0 = gerou coleta/postagem

1 = não gerou/não vai gerar coleta/postagem, e foi feito manualmente pelo admin quando a reversa estava com o status "em analise".

2 = não gerou/não vai gerar coleta/postagem, e foi feito automático pela regra do valor da reversa.

"freight_by_customer"

reversa/data/reverse

Frete pago pelo consumidor (boolean).

"order_id"

reversa/data/reverse/refunds/ecommerce_order

Id do pedido.

"invoice_number"

reversa/data/reverse/refunds/ecommerce_order

Número da nota fiscal (string).

"uuid"

reversa/data/reverse/refunds/ecommerce_order

Dado da transação financeira.

"ordered_at

reversa/data/reverse/refunds/ecommerce_order

Data de entrega.

"payment_methods"

reversa/data/reverse/refunds/ecommerce_order

Métodos de pagamento. Ex: “creditCard" (string).

"ecommerce_id"

reversa/data/reverse/refunds/ecommerce_order

Id do e-commerce.

"customer_id"

reversa/data/reverse/refunds/ecommerce_order

Id do consumidor.

"customer"

reversa/data/reverse/refunds/customer

Informações a respeito do consumidor e endereço.

 

Exemplo de payload de Reversa preenchido com dados fictícios:

{
"event_name": "reverse.status.changed.shipped",
"event_date": "2021-11-12 14:43:31",
"data": {
"reverse": {
"id": 29,
"reverse_type": "courier",
"courier_collect": false,
"ecommerce_order_id": 29,
"store_id": null,
"dot_id": null,
"order_id": null,
"courier_contract_id": 1,
"total_amount": "129.99",
"invoice": null,
"courier_data": null,
"destination_data": {
"name": "Cliente - ABC",
"type": "ecommerce",
"address": {
"id": 46,
"lat": null,
"city": "Curitiba",
"long": null,
"state": "PR",
"number": "1",
"address": "Rua Roberto Faria",
"country": "BR",
"zip_code": "81050620",
"complement": null,
"deleted_at": null,
"updated_at": "2021-11-12 14:43:03",
"neighborhood": "Fanny"
},
"type_id": 45,
"seller_id": "abc-embu",
"seller_info": "abc-embu não cadastrado",
"return_to_seller": false
},
"locker_reference": null,
"store_expire_date": null,
"skip_process_step": 0,
"freight_by_customer": false,
"tracking_error": null,
"origin": "customer",
"created_by": null,
"created_at": "2021-11-12 14:43:17",
"updated_at": "2021-11-12 14:43:31",
"deleted_at": null,
"status_id": 35,
"type": "reverse",
"products": [
{
"id": 28,
"reverse_id": 29,
"motive_id": null,
"reason": {
"id": 561,
"ecommerce_id": 45,
"description": "Tamanho diferente do esperado",
"reason_category_id": null,
"action": "EXG",
"should_approve": false,
"upload_image": "none",
"show_product_grid": false,
"ord": null,
"created_at": "2021-11-12 14:30:47",
"updated_at": "2021-11-12 14:30:47",
"deleted_at": null
},
"ecommerce_order_product_id": 42,
"refund_id": 28,
"qty": 1,
"requested_qty": 1,
"received_qty": null,
"product_received_comment": null,
"comments": null,
"reverse_action": "trocar",
"customer_retention_method_id": null,
"protocol": "tr_29",
"images": [],
"refund_product_requests": [],
"is_included_by_admin": null,
"fraud": null,
"situation": null,
"product_id": "5f42dbb6e28e6b0035a9c16f",
"hash": "f61e22119a01a0d509ccaf0bd17f8a1a",
"name": "Tênis Infantil",
"sku": "166784734117",
"price": "129.99",
"selling_price": "129.99",
"weight": null,
"order_id": 29,
"original_images": [],
"returned_invoice": null,
"returned_invoice_url": null,
"transference_invoice": null,
"invoice": null,
"options": {
"ean": null,
"width": null,
"height": null,
"images": [],
"length": null,
"ref_id": null,
"alternative_sku": null
}
}
],
"tracking": {
"id": 11,
"reverse_id": 29,
"courier_contract_id": 1,
"authorization_code": "1921410934",
"tracking_code": "OD805620473BR",
"shipping_amount": "0.00",
"package_amount": "129.99",
"courier_name": null,
"tracking_url": null,
"expire_date": "2021-11-19 03:00:00",
"status": null,
"message": null,
"status_updated_at": null,
"is_change_collect_to_post": null,
"type": "A",
"cte": null,
"delivery_deadline": null,
"updated_at": "2021-11-12 14:43:31",
"deleted_at": null
},
"status": {
"id": 35,
"service_code": "reverses",
"name": "awaiting",
"description": "aguardando"
},
"status_histories": [
{
"id": 127,
"reverse_id": 29,
"status_id": 35,
"user_id": null,
"customer_id": null,
"date": "2021-11-12 14:43:31",
"comments": null,
"status": {
"id": 35,
"service_code": "reverses",
"name": "awaiting",
"description": "aguardando"
},
"user": null
},
{
"id": 126,
"reverse_id": 29,
"status_id": 34,
"user_id": null,
"customer_id": null,
"date": "2021-11-12 14:43:17",
"comments": null,
"status": {
"id": 34,
"service_code": "reverses",
"name": "processing",
"description": "processando"
},
"user": null
},
{
"id": 125,
"reverse_id": 29,
"status_id": 33,
"user_id": null,
"customer_id": null,
"date": "2021-11-12 14:43:17",
"comments": null,
"status": {
"id": 33,
"service_code": "reverses",
"name": "approved",
"description": "aprovado"
},
"user": null
},
{
"id": 124,
"reverse_id": 29,
"status_id": 30,
"user_id": null,
"customer_id": 29,
"date": "2021-11-12 14:43:17",
"comments": null,
"status": {
"id": 30,
"service_code": "reverses",
"name": "pending",
"description": "pendente"
},
"user": null
},
{
"id": 123,
"reverse_id": 29,
"status_id": 15,
"user_id": null,
"customer_id": null,
"date": "2021-11-12 14:43:17",
"comments": null,
"status": {
"id": 15,
"service_code": null,
"name": "created",
"description": "criado"
},
"user": null
}
],
"refunds": [
{
"id": 28,
"reverse_id": 29,
"order_id": "6992302",
"type": "exchange",
"action": "voucher",
"requested_amount": 129.99,
"bonus_amount": 0,
"bonus_amount_percent": 0,
"requested_total_amount": 129.99,
"total_amount": 129.99,
"created_at": "2021-11-12 14:43:17",
"updated_at": "2021-11-12 14:43:17",
"refund_attachment": null,
"customer": {
"id": 29,
"first_name": "Milena",
"last_name": "Alves Cardoso"
},
"status": {
"id": 40,
"name": "refund_requested",
"description": "solicitado"
}
}
],
"ecommerce_order": {
"id": 29,
"order_id": "6992302",
"invoice_number": "6992302",
"uuid": "d9e94ab0-43c6-11ec-815e-6363f3960ba8",
"shipping_value": 0,
"ordered_at": "2020-08-23 21:12:22",
"value": 129.99,
"currency": "BRL",
"payment_methods": "creditCard",
"ecommerce_id": 45,
"customer_id": 29,
"is_online": true,
"is_marketplace": false,
"marketplace_name": null,
"options": [],
"packages": [],
"updated_at": "2021-11-12 14:43:17",
"deleted_at": null
},
"must_treat_refund": false,
"customer_nfd_attached": null,
"external_order_url": null,
"returned_invoice": null,
"reverse_type_name": "correios",
"can_generate_voucher": false,
"could_cancel": true,
"available_swap_couriers": [],
"can_send_correction_letter": false,
"correction_letter_link": null,
"ecommerce_order_seller": null
},
"customer": {
"id": 29,
"first_name": "Milena",
"last_name": "Alves Cardoso",
"email": "milenaalvesc@gmail.com",
"contact_email": null,
"document": "50557537752",
"phone": "11985591022",
"address_id": 57,
"shipping_address_id": 58,
"address": {
"id": 57,
"zip_code": "07640018",
"address": "Rua José Hurtado",
"complement": "Casa 1",
"number": "49",
"neighborhood": "Laranjeiras",
"city": "Caieiras",
"state": "SP",
"country": "BR",
"lat": null,
"long": null,
"updated_at": "2021-11-12 14:43:17",
"deleted_at": null
},
"shipping_address": {
"id": 58,
"zip_code": "07640018",
"address": "Rua José Hurtado",
"complement": "Casa 1",
"number": "49",
"neighborhood": "Laranjeiras",
"city": "Caieiras",
"state": "SP",
"country": "BR",
"lat": null,
"long": null,
"updated_at": "2021-11-12 14:43:17",
"deleted_at": null
}
},
"ecommerce_order": "6992302",
"tracking_history": []
},
"signature": "''"
}