Buongiorno, ho fatto un progettino node.js per inviare stringhe di testo via whatsapp da codice, usando appunto il package whatsapp-web.js, che di solito viene utilizzato per creare dei bot.
E' un progetto personale, che voglio regalare ad una persona per farle inviare dei messaggi whatsapp a partire da un foglio Excel.
Niente di complicato, il file viene chiamato da prompt, passando come parametri la lista dei numeri con i corrispettivi messaggi da inviare.
Il fatto e' che all'inizio funzionava bene, dopo un po di tempo mi ha dato problemi proprio il metodo che invia il messaggio, restituendomi il seguente errore:
Error: Evaluation failed: TypeError: Cannot read properties of undefined (reading 'features')
at Object.window.WWebJS.sendMessage (__puppeteer_evaluation_script__:92:39)
at __puppeteer_evaluation_script__:10:45
at ExecutionContext._evaluateInternal (C:\Users\Giulio\Desktop\sviluppo\Progetti\whatsupp-utility-message\node_modules\puppeteer\lib\cjs\puppeteer\common\ExecutionContext.js:221:19)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async ExecutionContext.evaluate (C:\Users\Giulio\Desktop\sviluppo\Progetti\whatsupp-utility-message\node_modules\puppeteer\lib\cjs\puppeteer\common\ExecutionContext.js:110:16)
at async Client.sendMessage (C:\Users\Giulio\Desktop\sviluppo\Progetti\whatsupp-utility-message\node_modules\whatsapp-web.js\src\Client.js:594:28)
La libreria crea un istanza di whatsapp web quindi all'avvio del processo, se non hai una sessione salvata in locale o tale sessione e' scaduta, viene richiesto di scannerizzare un codice qr con il cellulare, ho notato che all'inizio richiedeva la scansione di due codici qr, ora me ne sta chiedendo uno solo la maggior parte delle volte, e in quelle volte l'invio del messaggio va in errore, non ho capito perche' succede e perche' ne serva piu' di uno.
Qualora ne chiedesse due, l'invio va a buon fine ma se rilancio il processo una seconda volta avendo quella sessione memorizzata, l'invio andra' comunque in errore.
Ho verificato che i dati passati al metodo per l'invio del messaggio sono sempre corretti.
Ho provato ad aggiornare con npm install ma non va.
Mi auguro di trovare qualcuno con esperianza al riguardo, in ogni caso saluto e ringrazio tutti.
Di seguito il codice che ho scritto:
E' un progetto personale, che voglio regalare ad una persona per farle inviare dei messaggi whatsapp a partire da un foglio Excel.
Niente di complicato, il file viene chiamato da prompt, passando come parametri la lista dei numeri con i corrispettivi messaggi da inviare.
Il fatto e' che all'inizio funzionava bene, dopo un po di tempo mi ha dato problemi proprio il metodo che invia il messaggio, restituendomi il seguente errore:
Error: Evaluation failed: TypeError: Cannot read properties of undefined (reading 'features')
at Object.window.WWebJS.sendMessage (__puppeteer_evaluation_script__:92:39)
at __puppeteer_evaluation_script__:10:45
at ExecutionContext._evaluateInternal (C:\Users\Giulio\Desktop\sviluppo\Progetti\whatsupp-utility-message\node_modules\puppeteer\lib\cjs\puppeteer\common\ExecutionContext.js:221:19)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async ExecutionContext.evaluate (C:\Users\Giulio\Desktop\sviluppo\Progetti\whatsupp-utility-message\node_modules\puppeteer\lib\cjs\puppeteer\common\ExecutionContext.js:110:16)
at async Client.sendMessage (C:\Users\Giulio\Desktop\sviluppo\Progetti\whatsupp-utility-message\node_modules\whatsapp-web.js\src\Client.js:594:28)
La libreria crea un istanza di whatsapp web quindi all'avvio del processo, se non hai una sessione salvata in locale o tale sessione e' scaduta, viene richiesto di scannerizzare un codice qr con il cellulare, ho notato che all'inizio richiedeva la scansione di due codici qr, ora me ne sta chiedendo uno solo la maggior parte delle volte, e in quelle volte l'invio del messaggio va in errore, non ho capito perche' succede e perche' ne serva piu' di uno.
Qualora ne chiedesse due, l'invio va a buon fine ma se rilancio il processo una seconda volta avendo quella sessione memorizzata, l'invio andra' comunque in errore.
Ho verificato che i dati passati al metodo per l'invio del messaggio sono sempre corretti.
Ho provato ad aggiornare con npm install ma non va.
Mi auguro di trovare qualcuno con esperianza al riguardo, in ogni caso saluto e ringrazio tutti.
Di seguito il codice che ho scritto:
JavaScript:
const args = require('minimist')(process.argv.slice(2));
const comunicazioni = eval(args.dati);
const qrcode = require('qrcode-terminal');
const fs = require('fs');
const { Client, LocalAuth } = require('whatsapp-web.js');
const client = new Client({
authStrategy: new LocalAuth()
});
client.on('qr', (qr) => {
qrcode.generate(qr, { small: true });
});
const esito = (numero, messaggio, esito) => {
console.log({
numero: numero,
messaggio: messaggio,
esito: esito
});
}
const destroyClient = async (starter) => {
console.log(`(${starter}) Shutting down...`);
await client.destroy();
process.exit(0);
}
client.on('ready', () => {
console.log('Client ready');
comunicazioni.forEach(comunicazione => {
client.getNumberId(comunicazione[0]).then(detail => {
client.sendMessage(detail._serialized, comunicazione[1]).then(msg => {
comunicazione.push(msg._data.id.id);
}).catch(error => {
console.log(error);
esito( comunicazione[0], comunicazione[1], 'Non inviato (Send error)' );
comunicazione.push(null, null);
tryTerminate();
});
}).catch(error => {
esito( comunicazione[0], comunicazione[1], 'Non inviato (Invalid number)' );
comunicazione.push(null, null);
tryTerminate();
});
});
});
client.on('message_ack', async (msg, ack) => {
comunicazioni.forEach(comunicazione => {
if (comunicazione.length === 3) {
if (comunicazione[2] === msg._data.id.id && msg._data.ack === 1) {
esito(msg._data.to, msg._data.body, 'Inviato');
comunicazione.push(msg._data.ack);
tryTerminate();
}
}
})
})
const tryTerminate = () => {
let comunicati = 0;
comunicazioni.forEach(comunicazione => {
if (comunicazione[3] === 1 || comunicazione[3] === null) comunicati++;
if (comunicati === comunicazioni.length) destroyClient('COMPLETED');
})
}
process.on('SIGINT', async () => {
destroyClient('SIGINT');
})
/*
client.on('message', message => {
if (message.body === 'ciao') {
message.reply('Ciao amore');
}
})
*/
client.initialize();
Ultima modifica: