O mínimo para uma integração completa entre o CRM e a plataforma de e-commerce deve ser:
- Cálculo de descontos (por cupom, UTM, e-mail do comprador...) diretamente no CRM para aplicação no checkout;
- Sincronização de pedidos.
Para esta implementação recomendamos a criação de um aplicativo da E-Com Plus, preferencialmente usando nosso template Application Starter.
No corpo do application, habilite o módulo apply_discount. Partindo do Application Starter basta descomentar a seguinte linha em functions/ecom.config.js:
apply_discount: { enabled: true },E depois editar o arquivo functions/routes/ecom/modules/apply-discount.js que receberá requisições POST com identificação do cliente, cupom (se houver), itens no carrinho e outros dados conforme o schema e deverá retornar retornar o desconto dispoível conforme o response schema.
Mais informações e exemplo simples está disponível no conteúdo inicial do próprio arquivo https://github.com/ecomplus/application-starter/blob/master/functions/routes/ecom/modules/apply-discount.js
Caso a intencão seja bypassar a requisição para um endpoint do CRM sem nenhum (ou quase) tratamento, o script pode ser editado para algo como:
const axios = require('axios')
exports.post = ({ appSdk, admin }, req, res) => {
const { params, application } = req.body
const { storeId } = req
const response = {}
const appData = Object.assign({}, application.data, application.hidden_data)
if (appData.crm_endpoint) {
return axios.post(appData.crm_endpoint, {
params,
storeId,
})
.then(({ data }) => res.send(data))
.catch(console.error)
}
res.send({})
}Neste exemplo o lojista deverá configurar
crm_endpointno painel através doadmin_settingsdo aplicativo, também configurado emfunctions/ecom.config.js:
...
"admin_settings": {
"crm_endpoint": {
"schema": {
"type": "string",
"maxLength": 255,
"format": "uri",
"title": "URL para cálculo de desconto",
"description": "Link disponível no seu painel do CRM"
},
"hide": true
}
}
...Referência da API para leitura e manipulação de pedidos.
Seu aplicativo deverá ter autorização para ler (e talvez editar) pedidos. Partindo do Application Starter basta descomentar a seguinte linha em functions/ecom.config.js:
auth_scope: {
// ...
orders: [
'GET', // List/read orders with public and private fields
// 'POST', // Create orders
// 'PATCH', // Edit orders
...Analogamente, talvez seu aplicativo também precise de autorização para manipulação de
customers.
Para receber webhooks de novos pedidos e atualizações de status, adicione o seguinte procedure em functions/ecom.config.js:
procedures.push({
title: app.title,
triggers: [
// Receive notifications when new order is created:
{
resource: 'orders',
action: 'create',
},
// Receive notifications when order financial/fulfillment status changes:
{
resource: 'orders',
field: 'financial_status',
},
{
resource: 'orders',
field: 'fulfillment_status',
},
]
})Em seguida os webhooks devem ser tratados em functions/routes/ecom/webhook.js, opcionalmente parseados e enviados para a API do CRM.
Em geral o webhook não terá o corpo completo do pedido, pode ser necessário ler o pedido completo a partir do order ID que será enviado no body do webhook como
resource_id(quando o pedido é atualizado) ouinserted_id(novo pedido):
// functions/routes/ecom/webhook.js
// ...
const orderId = req.body.resource_id || req.body.inserted_id
const { response } = await appSdk.apiRequest(storeId, `orders/${orderId}.json`)
const order = response.data