RISOLTO Node.js => libreria whatsapp-web.js => errore all'invio del messaggio e anomalie durante l'autenticazione.

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.

Giulio95

Nuovo Utente
Messaggi
37
Reazioni
4
Punteggio
26
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:

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:
usando appunto il package whatsapp-web.js
Premetto che non lo conosco ma vedo che è stato aggiornato alla 1.16.6.
Che versione risulta nel package.json?
Perchè npm i aggiorna il pacchetto in base a cosa è specificato là, meglio fare un npm update
 
Ciao Mursey, grazie della risposta, in effetti non ho confrontato la versione installata con l'ultima disponibile su npm, ed erroneamente usavo il comando npm install per aggiornare i pacchetti.

Avevo la versione 1.16.5, pero' stranamente non mi aggiornava il pacchetto neanche con il comando npm update.

A risolvere questo dilemma e' stato il comando npm install whatsapp-web.js@latest.

Ho effettuato qualche test veloce, i messaggi sono stati sempre inviati, penso fosse solo quello il problema, quindi grazie per avermi orientato verso la soluzione e un caro saluto.
 
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top