Olá Zericksp, como vai?
Entendo a sua frustração com a ação obsoleta “cancel order” no Shopify Flow e a necessidade de automatizar o processo de cancelamento de pedidos específicos diretamente dentro do Flow. Embora o Flow seja uma ferramenta poderosa para automações dentro do Shopify, ele possui algumas limitações em termos de ações nativas disponíveis. No entanto, é possível contornar essas limitações utilizando webhooks e integrações com APIs externas, como você já fez com a API GraphQL.
A seguir, apresento uma solução detalhada para criar o fluxo desejado dentro do Shopify Flow, utilizando webhooks para integrar com sua solução baseada em GraphQL:
Passo a Passo para Criar o Fluxo no Shopify Flow#### 1. Preparação da Solução Externa
Antes de configurar o Flow, certifique-se de que você possui um endpoint (API) configurado para receber os webhooks e executar as ações necessárias (listar pedidos, arquivar, realizar reembolso e retornar itens ao estoque). Como você já mencionou que possui uma solução via GraphQL API, essa parte já está implementada.
2. Configurar um Endpoint para Receber Webhooks
Caso ainda não tenha, você precisará configurar um servidor que possa receber requisições HTTP e interagir com a API GraphQL do Shopify. Esse servidor será responsável por:
- Receber a solicitação do Flow.
- Executar a lógica para listar os pedidos com os critérios especificados.
- Arquivar cada pedido.
- Realizar o reembolso.
- Retornar os itens ao estoque.
Exemplo de Implementação (usando Node.js e Express):
javascript
const express = require(‘express’); const app = express(); const axios = require(‘axios’); // Middleware para parsear JSON app.use(express.json()); app.post(‘/webhook/cancel-orders’, async (req, res) => { try { // Lógica para listar pedidos com created_at > agora - 1 hora, gateway ‘Pix’ e financial_status ‘pending’ const query = { orders(first: 10, query: "created_at:>'${new Date(Date.now() - 60*60*1000).toISOString()}' AND gateway:'Pix' AND financial_status:pending") { edges { node { id name # Outros campos necessários } } } }; const response = await axios.post(‘https://your-shopify-store.myshopify.com/admin/api/2023-10/graphql.json’, { query }, { headers: { ‘Content-Type’: ‘application/json’, ‘X-Shopify-Access-Token’: ‘YOUR_ACCESS_TOKEN’ } }); const orders = response.data.data.orders.edges; for (const orderEdge of orders) { const order = orderEdge.node; // Arquivar o pedido await axios.post([https://your-shopify-store.myshopify.com/admin/api/2023-10/orders/](https://your-shopify-store.myshopify.com/admin/api/2023-10/orders/)${order.id}/archive.json, {}, { headers: { ‘Content-Type’: ‘application/json’, ‘X-Shopify-Access-Token’: ‘YOUR_ACCESS_TOKEN’ } }); // Realizar o reembolso const refundData = { refund: { # Detalhes do reembolso } }; await axios.post([https://your-shopify-store.myshopify.com/admin/api/2023-10/orders/](https://your-shopify-store.myshopify.com/admin/api/2023-10/orders/)${order.id}/refunds.json, refundData, { headers: { ‘Content-Type’: ‘application/json’, ‘X-Shopify-Access-Token’: ‘YOUR_ACCESS_TOKEN’ } }); // Retornar itens ao estoque // Lógica para atualizar o inventário } res.status(200).send(‘Pedidos cancelados com sucesso.’); } catch (error) { console.error(error); res.status(500).send(‘Erro ao processar os pedidos.’); } }); const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(Servidor rodando na porta ${PORT}); });
Nota: Substitua ‘YOUR_ACCESS_TOKEN’ pelo seu token de acesso à API do Shopify e ajuste a lógica conforme necessário para sua implementação específica.
3. Criar um Webhook no Shopify Flow
Agora, vamos configurar o Shopify Flow para acionar o webhook que você criou:
-
Acesse o Shopify Flow:
- No painel de administração do Shopify, vá para Apps e selecione Flow.
-
Criar um Novo Fluxo:
- Clique em Create Workflow.
-
Definir o Trigger (Gatilho):
- Trigger: Como o Flow não suporta gatilhos baseados em tempo diretamente, você pode utilizar o gatilho “Order Created” para capturar novos pedidos e avaliar se eles atendem aos critérios.
Configuração do Gatilho:
- Trigger: Order Created
-
Adicionar Condições:
- Condição 1: created_at > agora - 1 hora
- Condição 2: gateway contém “Pix”
- Condição 3: financial_status é “pending”
Como Configurar:
-
Condição 1:
- Campo: Order created at
- Operador: is after
- Valor: {{ scheduledAt | date_minus: “1 hour” }}
-
Condição 2:
- Campo: Gateway
- Operador: contains
- Valor: Pix
-
Condição 3:
- Campo: Financial Status
- Operador: equals
- Valor: pending
-
Adicionar Ação: Enviar Webhook
- Ação: HTTP Request (Enviar Webhook)
Configuração da Ação:
- URL: https://seu-servidor.com/webhook/cancel-orders
- Método: POST
- Cabeçalhos:
- Content-Type: application/json
- Corpo:
- Você pode enviar informações relevantes do pedido, caso necessário.
Exemplo de Corpo JSON:
json
{ “order_id”: “{{ order.id }}”, “order_name”: “{{ order.name }}”, “created_at”: “{{ order.created_at }}” // Adicione outros campos se necessário }
-
Salvar e Ativar o Fluxo:
- Após configurar o gatilho, as condições e a ação de webhook, salve o fluxo e ative-o.
4. Testar o Fluxo
Após configurar o fluxo, realize testes para garantir que tudo está funcionando conforme o esperado:
-
Criar um Pedido de Teste:
- Simule a criação de um pedido que atenda aos critérios (gateway “Pix” e financial_status “pending”).
-
Verificar a Execução do Webhook:
- Verifique os logs do seu servidor para confirmar se o webhook foi recebido e processado corretamente.
-
Confirmar Ações no Shopify:
- Após a execução, verifique se o pedido foi arquivado, o reembolso foi realizado e os itens foram devolvidos ao estoque.
5. Agendamento Periódico (Opcional)
Se você precisa executar essa verificação periodicamente (por exemplo, a cada hora), considere usar uma solução de agendamento externa para acionar o webhook:
-
Serviços de Agendamento:
- Utilize serviços como AWS Lambda com CloudWatch Events, Google Cloud Functions com Cloud Scheduler, ou cron jobs em seu servidor para enviar requisições HTTP ao webhook https://seu-servidor.com/webhook/cancel-orders a cada hora.
-
Ajuste na Lógica do Endpoint:
- Modifique a lógica do seu endpoint para listar e processar todos os pedidos que atendem aos critérios sem depender de gatilhos de criação de pedidos.
Considerações Finais- Manutenção e Monitoramento:
-
Assegure-se de monitorar o fluxo e o endpoint para identificar e corrigir possíveis falhas rapidamente.
-
Segurança:
- Proteja seu endpoint utilizando autenticação (por exemplo, tokens secretos) para garantir que apenas requisições autorizadas possam acioná-lo.
-
Logs e Auditoria:
- Implemente logs detalhados para rastrear as ações realizadas e facilitar a auditoria e solução de problemas.
-
Limitações do Shopify Flow:
- Este método contorna a limitação de ações obsoletas no Flow, utilizando webhooks para integrar com soluções externas que podem interagir diretamente com a API do Shopify.
Espero que essa solução atenda às suas necessidades e permita automatizar o processo conforme desejado!
Abraços Paolo Werneck
AgenciaFY & Playecom