new(whatsapp.gblib): FB Analytics.

This commit is contained in:
Rodrigo Rodriguez 2025-02-16 18:16:14 -03:00
parent 292d396eeb
commit 614539a0b4

View file

@ -1540,112 +1540,109 @@ private async sendButtonList(to: string, buttons: string[]) {
return buf; return buf;
} }
public async getLatestTemplateReport() { public async getLatestTemplateReport() {
const businessAccountId = this.whatsappBusinessManagerId; const businessAccountId = this.whatsappBusinessManagerId;
const userAccessToken = this.whatsappServiceKey; const userAccessToken = this.whatsappServiceKey;
if (!(businessAccountId && userAccessToken)) { if (!(businessAccountId && userAccessToken)) {
return 'No statistics available for WhatsApp templates.'; return 'No statistics available for WhatsApp templates.';
} }
let templateData; try {
// Step 1: Fetch all templates ordered by creation time
try { const statsResponse = await fetch(
// Step 1: Fetch latest template message statistics `https://graph.facebook.com/v20.0/${businessAccountId}/message_templates?` +
const statsResponse = await fetch( `fields=id,name,status,language,quality_score,category,created_time,` +
`https://graph.facebook.com/v20.0/${businessAccountId}/message_templates?` + `message_sends_24h,message_sends_7d,message_sends_30d,` +
`fields=id,name,status,language,quality_score,category,created_time,` + `delivered_24h,delivered_7d,delivered_30d,` +
`message_sends_24h,message_sends_7d,message_sends_30d,` + `read_24h,read_7d,read_30d&` +
`delivered_24h,delivered_7d,delivered_30d,` + `ordering=[{created_time: 'DESC'}]`, {
`read_24h,read_7d,read_30d&` + headers: {
`limit=1&` + Authorization: `Bearer ${userAccessToken}`
`order=created_time_desc`, { }
headers: { });
Authorization: `Bearer ${userAccessToken}`
} const data = await statsResponse.json();
}); if (!statsResponse.ok) {
throw new Error(data.error.message);
const data = await statsResponse.json(); }
if (!statsResponse.ok) {
throw new Error(data.error.message); if (!data.data || data.data.length === 0) {
} throw new Error('No template statistics found');
}
if (!data.data || data.data.length === 0) {
throw new Error('No template statistics found'); // Get the last template from the sorted data
} const templateData = data.data[data.data.length - 1];
console.log('Latest template statistics retrieved:', templateData.name);
templateData = data.data[0];
console.log('Latest template statistics retrieved:', templateData.name); // Step 2: Calculate key metrics
const metrics = {
// Step 2: Calculate key metrics name: templateData.name,
const metrics = { status: templateData.status,
name: templateData.name, language: templateData.language,
status: templateData.status, category: templateData.category,
language: templateData.language, qualityScore: templateData.quality_score,
category: templateData.category, createdTime: new Date(templateData.created_time).toLocaleString(),
qualityScore: templateData.quality_score,
createdTime: new Date(templateData.created_time).toLocaleString(), // 24-hour metrics
sends24h: templateData.message_sends_24h,
// 24-hour metrics delivered24h: templateData.delivered_24h,
sends24h: templateData.message_sends_24h, read24h: templateData.read_24h,
delivered24h: templateData.delivered_24h, deliveryRate24h: ((templateData.delivered_24h / templateData.message_sends_24h) * 100).toFixed(2),
read24h: templateData.read_24h, readRate24h: ((templateData.read_24h / templateData.delivered_24h) * 100).toFixed(2),
deliveryRate24h: ((templateData.delivered_24h / templateData.message_sends_24h) * 100).toFixed(2),
readRate24h: ((templateData.read_24h / templateData.delivered_24h) * 100).toFixed(2), // 7-day metrics
sends7d: templateData.message_sends_7d,
// 7-day metrics delivered7d: templateData.delivered_7d,
sends7d: templateData.message_sends_7d, read7d: templateData.read_7d,
delivered7d: templateData.delivered_7d, deliveryRate7d: ((templateData.delivered_7d / templateData.message_sends_7d) * 100).toFixed(2),
read7d: templateData.read_7d, readRate7d: ((templateData.read_7d / templateData.delivered_7d) * 100).toFixed(2),
deliveryRate7d: ((templateData.delivered_7d / templateData.message_sends_7d) * 100).toFixed(2),
readRate7d: ((templateData.read_7d / templateData.delivered_7d) * 100).toFixed(2), // 30-day metrics
sends30d: templateData.message_sends_30d,
// 30-day metrics delivered30d: templateData.delivered_30d,
sends30d: templateData.message_sends_30d, read30d: templateData.read_30d,
delivered30d: templateData.delivered_30d, deliveryRate30d: ((templateData.delivered_30d / templateData.message_sends_30d) * 100).toFixed(2),
read30d: templateData.read_30d, readRate30d: ((templateData.read_30d / templateData.delivered_30d) * 100).toFixed(2)
deliveryRate30d: ((templateData.delivered_30d / templateData.message_sends_30d) * 100).toFixed(2), };
readRate30d: ((templateData.read_30d / templateData.delivered_30d) * 100).toFixed(2)
}; // Step 3: Format and return the report
return `
// Step 3: Format and return the report Latest WhatsApp Template Statistics
return ` ---------------------------------
Latest WhatsApp Template Statistics Template Name: ${metrics.name}
--------------------------------- Created: ${metrics.createdTime}
Template Name: ${metrics.name} Status: ${metrics.status}
Created: ${metrics.createdTime} Language: ${metrics.language}
Status: ${metrics.status} Category: ${metrics.category}
Language: ${metrics.language} Quality Score: ${metrics.qualityScore}
Category: ${metrics.category}
Quality Score: ${metrics.qualityScore} Last 24 Hours
------------
Last 24 Hours Messages Sent: ${metrics.sends24h?.toLocaleString() ?? '0'}
------------ Delivered: ${metrics.delivered24h?.toLocaleString() ?? '0'}
Messages Sent: ${metrics.sends24h?.toLocaleString() ?? '0'} Read: ${metrics.read24h?.toLocaleString() ?? '0'}
Delivered: ${metrics.delivered24h?.toLocaleString() ?? '0'} Delivery Rate: ${metrics.deliveryRate24h}%
Read: ${metrics.read24h?.toLocaleString() ?? '0'} Read Rate: ${metrics.readRate24h}%
Delivery Rate: ${metrics.deliveryRate24h}%
Read Rate: ${metrics.readRate24h}% Last 7 Days
----------
Last 7 Days Messages Sent: ${metrics.sends7d?.toLocaleString() ?? '0'}
---------- Delivered: ${metrics.delivered7d?.toLocaleString() ?? '0'}
Messages Sent: ${metrics.sends7d?.toLocaleString() ?? '0'} Read: ${metrics.read7d?.toLocaleString() ?? '0'}
Delivered: ${metrics.delivered7d?.toLocaleString() ?? '0'} Delivery Rate: ${metrics.deliveryRate7d}%
Read: ${metrics.read7d?.toLocaleString() ?? '0'} Read Rate: ${metrics.readRate7d}%
Delivery Rate: ${metrics.deliveryRate7d}%
Read Rate: ${metrics.readRate7d}% Last 30 Days
-----------
Last 30 Days Messages Sent: ${metrics.sends30d?.toLocaleString() ?? '0'}
----------- Delivered: ${metrics.delivered30d?.toLocaleString() ?? '0'}
Messages Sent: ${metrics.sends30d?.toLocaleString() ?? '0'} Read: ${metrics.read30d?.toLocaleString() ?? '0'}
Delivered: ${metrics.delivered30d?.toLocaleString() ?? '0'} Delivery Rate: ${metrics.deliveryRate30d}%
Read: ${metrics.read30d?.toLocaleString() ?? '0'} Read Rate: ${metrics.readRate30d}%
Delivery Rate: ${metrics.deliveryRate30d}% `.trim();
Read Rate: ${metrics.readRate30d}%
`.trim(); } catch (error) {
console.error('Error fetching latest WhatsApp template statistics:', error.message);
} catch (error) { throw error;
console.error('Error fetching latest WhatsApp template statistics:', error.message); }
throw error; }}
}
}
}