UNPKG

plazbot-cli

Version:
83 lines (70 loc) 3.09 kB
import { Command } from 'commander'; import { Message } from 'plazbot'; import { getStoredCredentials } from '../../utils/credentials'; import { logger } from '../../utils/logger'; import { createSpinner } from '../../utils/ui'; export const sendTemplateCommand = new Command('send-template') .description('Envia un mensaje de template de WhatsApp con variables') .requiredOption('-p, --phone <number>', 'Numero de telefono (con codigo de pais)') .requiredOption('-t, --template <name>', 'Nombre del template') .option('--var <vars...>', 'Variables del body (formato: name=valor)') .option('--header-var <vars...>', 'Variables del header (formato: name=valor)') .option('--file-url <url>', 'URL del archivo adjunto') .option('--file-name <name>', 'Nombre del archivo adjunto') .option('--dev', 'Usar ambiente de desarrollo', false) .action(async (options: any) => { try { const credentials = await getStoredCredentials(); const messageClient = new Message({ workspaceId: credentials.workspace, apiKey: credentials.apiKey, zone: credentials.zone, ...(options.dev && { customUrl: "http://localhost:5090" }) }); // Parsear variables const variablesBody = parseVariables(options.var); const variablesHeader = parseVariables(options.headerVar); // Archivo adjunto const file = options.fileUrl ? { fileUrl: options.fileUrl, fileName: options.fileName || 'archivo', } : undefined; logger.title('Enviando template WhatsApp'); logger.label('Destino', options.phone); logger.label('Template', options.template); if (variablesBody.length > 0) { logger.label('Variables body', variablesBody.map(v => `${v.variable}=${v.value}`).join(', ')); } if (variablesHeader.length > 0) { logger.label('Variables header', variablesHeader.map(v => `${v.variable}=${v.value}`).join(', ')); } if (file) { logger.label('Archivo', file.fileUrl); } const spinner = createSpinner('Enviando...'); spinner.start(); const params: any = { to: options.phone, template: options.template, }; if (variablesBody.length > 0) params.variablesBody = variablesBody; if (variablesHeader.length > 0) params.variablesHeader = variablesHeader; if (file) params.file = file; const response = await messageClient.onConversation(params); spinner.succeed('Template enviado exitosamente'); if (options.dev) { logger.warning('Ambiente: desarrollo'); } } catch (error: unknown) { const message = (error as Error)?.message || 'Error desconocido al enviar el template'; logger.error(message); process.exit(1); } }); function parseVariables(vars: string[] | undefined): { variable: string; value: string }[] { if (!vars) return []; return vars.map(v => { const [variable, ...rest] = v.split('='); return { variable: variable.trim(), value: rest.join('=').trim() }; }).filter(v => v.variable && v.value); }