Alterar API List Orders para Order Feed

Boa tarde,

A empresa que trabalho recebeu um e-mail informando sobra à alteração da API, eu segui os passos no site mas estou com problemas.

1 - Primeiro fiz a configuração

Post - https://xxxx.myvtex.com/api/orders/feed/config

{
    "filter": {
        "status": ["order-completed","start-handling", "handling", "ready-for-handling", "waiting-ffmt-authorization", "cancel"]
    },
    "queue":{
        "type":"FromOrders",
        "visibilityTimeoutInSeconds": 350,
        "MessageRetentionPeriodInSeconds":355600
    }
}

2 - Realizei uma consulta da configuração.

Get - https://xxxx.myvtex.com/api/orders/feed/config

{
    "filter": {
        "status": [
            "order-completed",
            "start-handling",
            "handling",
            "ready-for-handling",
            "waiting-ffmt-authorization",
            "cancel"
        ],
        "type": "FromWorkflow"
    },
    "queue": {
        "visibilityTimeoutInSeconds": 350,
        "messageRetentionPeriodInSeconds": 355600
    },
    "quantity": 25,
    "approximateAgeOfOldestMessageInSeconds": 24691.625987708518
}

3 - Consultei os pedidos, e não traz absolutamente nada.

GET https://zzzzz.vtexcommercestable.com/api/orders/feed?maxlot=10

Error: connect ETIMEDOUT 199.59.242.153:80

▶Request Headers

Já quando realizo utilizando a List Orders traz vários registros. Alguém por favor pode me ajudar a entender o que está faltando?

1 Like

Oi Alan! Bem vindo à nossa comunidade :blush:

Primeiramente acho importante mencionar que temos dois jeitos de configurar o filtro, FromWorkflow (Você filtra por status do pedido - A lista de possíveis status de pedidos pode ser vista no artigo Fluxo de pedidos) e FromOrders (Filtra por qualquer chave que tiver no Json do pedido), que no caso, foi o que você configurou. A diferença desses dois é que ao invés de usar o status, no FromOrders é preciso colocar um expression no filtro, como o exemplo abaixo:

{

“filter”: {

“type”: “FromOrders”,

“expression”: “status = \“payment-pending\””,

“disableSingleFire”: false

},

“queue”: {

“visibilityTimeoutInSeconds”: 240,

“messageRetentionPeriodInSeconds”: 345600

}

}

O mais comum é utilizar a opção FromWorkflow , onde vocês configuram quais são os status que irão gerar um evento de atualização do pedido. Suponhamos que vocês queiram ter o controle apenas do pedido criado, pagamento pendente e pedido cancelado, a configuração seria essa:
{
“filter”: {
“status”: [
“order-created”,
“payment-pending”,
“canceled”
],
“type”: “FromWorkflow”
},

}

Os dois tipos de configuração de filtro são mutuamente exclusivos. Se passar FromWorkflow no campo type, o campo expression não deve ser passado, e se você passar type como FromOrders, você não deve incluir o campo de status.

Acho que esse seria um bom começo para corrigir as configurações do seu Feed.
Sugiro que comece com poucos status primeiro, para ver ele funcionando e depois comece a utilizar mais status e desbravando as possibilidades.
Vale lembrar que para usar o Feed é preciso ter uma appkey que tenha um perfil de acesso com autorização para usar o feed.

Sugiro que verifique nossa documentação completa sobre Feed v3, tem tudo isso que eu expliquei em muito mais detalhes : Feed v3
https://help.vtex.com/pt/tutorial/feed-de-pedidos--5SzSKee2f666YCoWkm0eQC
E também a documentação sobre as APIs que vão te ajudar :
Feed v3

Boa sorte!

3 Likes

Olá, @Alan_Oliveira!

Em complemento ao que a @FerSesnick comentou, queria te dar uma perspectiva do funcionamento do Feed, que é diferente do List orders, mas cumpre a mesma função de maneira mais eficiente.

O List orders te retorna a lista dos pedidos que foram feitos na sua loja naquele período de tempo selecionado.

Já o Feed retorna uma lista de atualizações de pedidos que cumpram os requisitos do filtro. Mas o Feed só recebe atualizações depois que você o configura. Vamos ver um exemplo com a configuração que você fez:

Get - https://xxxx.myvtex.com/api/orders/feed/config
{
“filter”: {
“status”: [
“order-completed”,
“start-handling”,
“handling”,
“ready-for-handling”,
“waiting-ffmt-authorization”,
“cancel”
],
“type”: “FromWorkflow”
},
“queue”: {
“visibilityTimeoutInSeconds”: 350,
“messageRetentionPeriodInSeconds”: 355600
},
“quantity”: 25,
“approximateAgeOfOldestMessageInSeconds”: 24691.625987708518
}

Qualquer pedido que entrar em algum desses status do campo status vai gerar um evento no feed. Digamos que você configurou às 12h e às 12h30 o pedido ABC entra em ready-for-handling. Você consulta o Feed às 12h45 e o feed vai retornar algo parecido com isso:

[
{
"eventId": "ED423DDED4C1AE580CADAC1A4D02DA3F"
"handle": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lZW50aXR ..."
"domain": "Fulfillment"
"state": "ready-for-handling"
"lastState": "window-to-cancel"
"orderId": "ABC"
"lastChange": "2019-08-12T12:20:01.134057Z"
"currentChange": "2019-08-12T20:12:30.7153839Z"
}
]

Aí você toma as devidas ações na loja com essa informação e comita o evento, limpando o feed.

Às 13h o pedido XYZ também chega em ready-for-handling e às 13h05 o ABC chega em start-handling. Nesse caso, se consultar o feed às 13h10, receberá:

[
{
"eventId": "ED423DDOLJHDFHG354AC1A4D02DA3F"
"handle": "dfhg6d5fgh4g6hk8h4u6l84h6h8f4gb6daz8f4g68fg4nghj5k1lhf32lj468gkxv3h5jxv3nb54xv3b5n4gc6h8j7k ..."
"domain": "Fulfillment"
"state": "start-handling"
"lastState": "ready-for-handling"
"orderId": "ABC"
"lastChange": "2019-08-12T12:30:01.134057Z"
"currentChange": "2019-08-12T20:13:05.7153839Z"
},
{
"eventId": "ED423456GDSFADAC1A4D02DA3F"
"handle": "dgfh6s5dfhg46sd5h46fg54h6df5gh46df5g4h6d5fg4h6d5f4gh65d4f6gh54d6fg5h46df5g4h6df5g4h65f ..."
"domain": "Fulfillment"
"state": "ready-for-handling"
"lastState": "window-to-cancel"
"orderId": "XYZ"
"lastChange": "2019-08-12T12:30:01.134057Z"
"currentChange": "2019-08-12T20:13:00.7153839Z"
}
]

Então, novamente, você pode realizar as ações necessárias na loja e comitar os eventos, limpando o feed novamente.

Importante lembrar que que, dados os valores que você estabeleceu na sua configuração, depois que você consulta o feed, os eventos retornados somem de consultas futuras por 350 segundos (visibilityTimeOutInSeconds). Além disso, qualquer evento será automaticamente excluído do feed após 355600 segundos = ±98h (MessageRetentionPeriodInSeconds).

Além dessas documentações que a Fer citou, recomendo também esse guia de integração de pedidos que traz esse fluxo bem explicado.

3 Likes

Ah sim! Considerando esse exemplo, um pedido FGH que passou para cancel às 11h45 não aparecerá no feed, pois a configuração ainda não existia.

2 Likes

Obrigado PedroAntunes pela explicação, ficou super fácil.

1 Like

Não tenho palavras para te agradecer pelo Help…!! Ficou muito mais fácil de entender como funciona essa api.

Essa documentação que você passou é diferente da que encontrei no Feed e bem mais completa.

Muitíssimo obrigado…!! :kissing_heart:

3 Likes

This topic was automatically closed 24 hours after the last reply. New replies are no longer allowed.