Gestão da base de cupons de desconto

Olá, preciso saber se tem algum caminho de gerenciar a base de cupons de desconto por Api. Procurei na documentação e encontrei pontos relacionados a pedidos, clientes e produtos, entre outras coisas, mas não achei nada específico sobre os cupons. Preciso gerenciar a base de cupons cadastrados, além das informações de cada um, e a quantidade de usos também.

Boa tarde, tudo bem @sejabazico?
Sobre quantidade e usos, você consegue pelo nosso relatório padrão. Não sei como planeja fazer isso programaticamente, mas se fizer diretamente dentro do painel, algumas etapas são evitadas como a questão da autenticação. Já se for externo por algum BI, precisará da etapa de autenticação, então vou te dar um exemplo de ambos.

  • Externo ao painel (por exemplo usando alguma planilha):

Para autenticar, precisará criar um usuário, dê permissões a ele para realizar o processo de autenticação:

Ao conseguir o access token, poderá realizar chamadas em nossa api, pois já saberá os

X-Store-ID,
X-My-ID,
X-Access-Token

Para inserir ou editar cupons, pode seguir a linha mostrada em E-Com Plus - Manipulando cupons no aplicativo de descontos padrão · GitHub

Caso realize um GET no mesmo endpoint citado acima, conseguirá todos as as regras de desconto. No caso, existem duas possibilidades, o que são criados dentro do painel, você conseguirá acessá-los na propriedade discount_rules, os que são inseridos pela API, será o código do cupom de cara, no seu caso, como usa fidelizar mais, verá por exemplo:

{
	"230132469712300": {
		"discount": {
			"apply_at": "freight",
			"type": "percentage",
			"value": 100
		},
		"cumulative_discount": false,
		"usage_limit": 1,
		"total_usage_limit": 1
	}
}

Em que 230132469712300 é um cupom gerado pela api do fidelizar mais, só modifiquei o código do cupom, para que não fique público, mas em verá semelhante a isso.

Para saber os usos dos cupons por período, será em outro lugar da API:

POST https://api.e-com.plus/v1/$aggregate.json
  -H "X-Store-ID: <store_id>"
  -H "X-My-ID: <authentication_id>"
  -H "X-Access-Token: <access_token>"
  -d '{     
        "resource": "orders"
	    "pipeline": [
		{
			"$match": {
				"created_at": {
					"$gte": "2023-04-02T03:00:00.000Z",
					"$lte": "2023-05-03T02:59:59.059Z"
				},
				"extra_discount.flags": {
					"$in": [
						"COUPON"
					]
				},
				"financial_status.current": "paid"
			}
		},
		{
			"$group": {
				"_id": {
					"$toUpper": "$extra_discount.discount_coupon"
				},
				"count": {
					"$sum": 1
				}
			}
		}
	]
}

Como retorno, terá uma lista de cupons e seus respectivos usos durante
2023-04-02T03:00:00.000Z e 2023-05-03T02:59:59.059Z

Caso seja dentro do painel, fará as mesmas requisições, porém usando a função: callApi, um exemplo é:

callApi(
      '$aggregate.json',
      'POST',
      (err, json) => {
        if (!err) {
          const { result } = json
          if (Array.isArray(result)) {
          // do what you need to do
          }
        }
      },
      {
        resource: 'orders',
        pipeline: [
          { 
            $match : {
            created_at: {
              $gte: start.toISOString(),
              $lte: end.toISOString(),
            },
            'financial_status.current': 'paid',
            'extra_discount.flags': {
              $in: ['COUPON']
            }
          } 
        },
        {
          $group: {
            _id: {
              $toUpper: '$extra_discount.discount_coupon'
            },
            count: {
              $sum: 1
            },
            total: {
              $sum: '$amount.total'
            },
            discount: {
              $sum: '$extra_discount.value'
            }
          } 
        }
      ]
    })

Na função callApi(url, method, callback, body)

URL é somente o final, pois o callApi já tem como baseURL https://api.e-com.plus/v1/, por isso precisará preencher apenas o restante. O body será somente necessário se for usar os métodos PATCH, POST ou PUT. Um exemplo de callback é:

(err, json) => {
        if (!err) {
          const { result } = json
          if (Array.isArray(result)) {
          // do what you need to do
          }
        }
      }