You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Global-sales/wai-server/core/webhook/index.js

38 lines
1.4 KiB
JavaScript

6 months ago
const axios = require('axios');
6 months ago
const { default: axiosRetry } = require('axios-retry');
6 months ago
const webhookUrl = require('../../config').webhook;
const { logger, getUserLogger } = require('../../utils/logger.util');
6 months ago
// 5s, 10s, 20s, 30s, 1m, 15m, 30m, 1h
const retryDelays = [5000, 10000, 20000, 30000, 300000, 900000, 1800000, 3600000];
axiosRetry(axios, {
retries: 1, // Number of retries
6 months ago
retryDelay: retryCount => {
const delayIndex = Math.min(retryCount - 1, retryDelays.length - 1);
const delay = retryDelays[delayIndex];
logger.warn(`retry attempt: ${retryCount}, delay: ${delay / 1000}s`);
return delay;
},
retryCondition: error => {
return false; // error.response?.status !== 200; // Retry only on non-200 status codes
6 months ago
},
onRetry: (retryCount, error, requestConfig) => {
logger.warn({ retryCount, error: error.message, }, `Retrying webhook call, attempt ${retryCount}`);
6 months ago
},
});
async function callWebhook(messageData) {
try {
if (!webhookUrl) {
6 months ago
logger.error('no webhook url provided\n', messageData);
6 months ago
return;
}
getUserLogger(messageData.whatsAppNo).info({ webhookUrl, messageData });
6 months ago
await axios.post(webhookUrl, messageData);
} catch (error) {
logger.error(JSON.stringify({ webhookUrl, messageData, error: error.message }, undefined, 2), 'Error calling webhook');
6 months ago
}
}
module.exports = { callWebhook };