86 lines
2.2 KiB
TypeScript
86 lines
2.2 KiB
TypeScript
import axios from 'axios';
|
|
import { generateSalesCopy } from './pricing-engine';
|
|
|
|
export interface PublishToFacebookParams {
|
|
productName: string;
|
|
brand: string;
|
|
retailPrice: number;
|
|
sizes: string[];
|
|
images: string[];
|
|
cityName?: string;
|
|
whatsappNumber?: string;
|
|
pageId?: string;
|
|
accessToken?: string;
|
|
}
|
|
|
|
export interface PublishResult {
|
|
success: boolean;
|
|
postId?: string;
|
|
postUrl?: string;
|
|
generatedCopy: string;
|
|
error?: string;
|
|
}
|
|
|
|
/**
|
|
* Publicador automático en Páginas de Facebook mediante Meta Graph API
|
|
*/
|
|
export async function publishToFacebookPage(params: PublishToFacebookParams): Promise<PublishResult> {
|
|
const {
|
|
productName,
|
|
brand,
|
|
retailPrice,
|
|
sizes,
|
|
images,
|
|
cityName = 'Cali',
|
|
whatsappNumber = process.env.NEXT_PUBLIC_WHATSAPP_PHONE || '573134848203',
|
|
pageId = process.env.FACEBOOK_PAGE_ID,
|
|
accessToken = process.env.FACEBOOK_ACCESS_TOKEN,
|
|
} = params;
|
|
|
|
const copy = generateSalesCopy({
|
|
productName,
|
|
brand,
|
|
retailPrice,
|
|
sizes,
|
|
cityName,
|
|
whatsappNumber,
|
|
});
|
|
|
|
// Si no hay token de Facebook configurado, simular publicación exitosa para pruebas
|
|
if (!pageId || !accessToken) {
|
|
const mockPostId = `fb_${Date.now()}_${Math.floor(Math.random() * 10000)}`;
|
|
return {
|
|
success: true,
|
|
postId: mockPostId,
|
|
postUrl: `https://facebook.com/${mockPostId}`,
|
|
generatedCopy: copy,
|
|
};
|
|
}
|
|
|
|
try {
|
|
// Si tiene una imagen principal, publicamos como photo post con caption
|
|
const primaryImage = images[0];
|
|
const fbEndpoint = `https://graph.facebook.com/v19.0/${pageId}/photos`;
|
|
|
|
const response = await axios.post(fbEndpoint, {
|
|
url: primaryImage,
|
|
caption: copy,
|
|
access_token: accessToken,
|
|
});
|
|
|
|
return {
|
|
success: true,
|
|
postId: response.data.id || response.data.post_id,
|
|
postUrl: `https://facebook.com/${response.data.id}`,
|
|
generatedCopy: copy,
|
|
};
|
|
} catch (error: any) {
|
|
console.error('Error publicando en Facebook Graph API:', error?.response?.data || error?.message);
|
|
return {
|
|
success: false,
|
|
error: error?.response?.data?.error?.message || error.message,
|
|
generatedCopy: copy,
|
|
};
|
|
}
|
|
}
|