new(whatsapp.gblib): FB Analytics.

This commit is contained in:
Rodrigo Rodriguez 2025-02-16 17:57:01 -03:00
parent 52dbc5a109
commit 61e72cd186

View file

@ -1544,73 +1544,105 @@ private async sendButtonList(to: string, buttons: string[]) {
const businessAccountId = this.whatsappBusinessManagerId; const businessAccountId = this.whatsappBusinessManagerId;
const userAccessToken = this.whatsappServiceKey; const userAccessToken = this.whatsappServiceKey;
if (!(businessAccountId && userAccessToken)){ if (!(businessAccountId && userAccessToken)) {
return 'No report for campaigns.'; return 'No statistics available for WhatsApp templates.';
} }
let campaignData; let templateData;
try { try {
// Step 1: Fetch the latest campaign data // Step 1: Fetch template message statistics
const campaignResponse = await fetch( const statsResponse = await fetch(
`https://graph.facebook.com/v20.0/${businessAccountId}/message_campaigns?` + `https://graph.facebook.com/v20.0/${businessAccountId}/message_templates?` +
`fields=id,name,status,message_template_name,language,` + `fields=id,name,status,language,quality_score,category,` +
`scheduled_time,completed_time,audience_size,delivered_count,read_count&` + `message_sends_24h,message_sends_7d,message_sends_30d,` +
`limit=1&order=created_time_desc`, { `delivered_24h,delivered_7d,delivered_30d,` +
`read_24h,read_7d,read_30d&limit=1`, {
headers: { headers: {
Authorization: `Bearer ${userAccessToken}` Authorization: `Bearer ${userAccessToken}`
} }
}); });
const data = await campaignResponse.json(); const data = await statsResponse.json();
if (!campaignResponse.ok) { if (!statsResponse.ok) {
throw new Error(data.error.message); throw new Error(data.error.message);
} }
if (!data.data || data.data.length === 0) { if (!data.data || data.data.length === 0) {
throw new Error('No campaigns found'); throw new Error('No template statistics found');
} }
campaignData = data.data[0]; templateData = data.data[0];
console.log('Latest campaign retrieved:', campaignData.name); console.log('Template statistics retrieved:', templateData.name);
// Step 2: Calculate key metrics // Step 2: Calculate key metrics
const metrics = { const metrics = {
name: campaignData.name, name: templateData.name,
status: campaignData.status, status: templateData.status,
template: campaignData.message_template_name, language: templateData.language,
language: campaignData.language, category: templateData.category,
timing: campaignData.completed_time || campaignData.scheduled_time, qualityScore: templateData.quality_score,
audience: campaignData.audience_size,
delivered: campaignData.delivered_count, // 24-hour metrics
read: campaignData.read_count, sends24h: templateData.message_sends_24h,
deliveryRate: ((campaignData.delivered_count / campaignData.audience_size) * 100).toFixed(2), delivered24h: templateData.delivered_24h,
readRate: ((campaignData.read_count / campaignData.delivered_count) * 100).toFixed(2) read24h: templateData.read_24h,
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,
delivered7d: templateData.delivered_7d,
read7d: templateData.read_7d,
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,
delivered30d: templateData.delivered_30d,
read30d: templateData.read_30d,
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 // Step 3: Format and return the report
return ` return `
Latest Campaign Summary WhatsApp Template Statistics
---------------------- ---------------------------
Name: ${metrics.name} Template Name: ${metrics.name}
Status: ${metrics.status} Status: ${metrics.status}
Template: ${metrics.template}
Language: ${metrics.language} Language: ${metrics.language}
Time: ${new Date(metrics.timing).toLocaleString()} Category: ${metrics.category}
Quality Score: ${metrics.qualityScore}
Metrics Last 24 Hours
------- ------------
Audience Size: ${metrics.audience.toLocaleString()} Messages Sent: ${metrics.sends24h?.toLocaleString() ?? '0'}
Delivered: ${metrics.delivered.toLocaleString()} Delivered: ${metrics.delivered24h?.toLocaleString() ?? '0'}
Read: ${metrics.read.toLocaleString()} Read: ${metrics.read24h?.toLocaleString() ?? '0'}
Delivery Rate: ${metrics.deliveryRate}% Delivery Rate: ${metrics.deliveryRate24h}%
Read Rate: ${metrics.readRate}% Read Rate: ${metrics.readRate24h}%
Last 7 Days
----------
Messages Sent: ${metrics.sends7d?.toLocaleString() ?? '0'}
Delivered: ${metrics.delivered7d?.toLocaleString() ?? '0'}
Read: ${metrics.read7d?.toLocaleString() ?? '0'}
Delivery Rate: ${metrics.deliveryRate7d}%
Read Rate: ${metrics.readRate7d}%
Last 30 Days
-----------
Messages Sent: ${metrics.sends30d?.toLocaleString() ?? '0'}
Delivered: ${metrics.delivered30d?.toLocaleString() ?? '0'}
Read: ${metrics.read30d?.toLocaleString() ?? '0'}
Delivery Rate: ${metrics.deliveryRate30d}%
Read Rate: ${metrics.readRate30d}%
`.trim(); `.trim();
} catch (error) { } catch (error) {
console.error('Error fetching campaign data:', error.message); console.error('Error fetching WhatsApp template statistics:', error.message);
throw error; throw error;
} }
} }
} }