我在whatsappWebSession
文件中有一个类。
import { Client, LocalAuth } from "whatsapp-web.js";
class WhatsappWebSession {
constructor(callback, readyCallback) {
this.client = new Client({
puppeteer: {
headless: true,
args: \[
'--no-sandbox',
\]
},
authStrategy: new LocalAuth({
clientId: 'client-id',
dataPath: './session.json',
})
});
this.client.on('qr', (qr) =\> {
this.qr = qr;
callback(qr);
});
this.client.on('ready', () =\> {
console.log('Client is ready!');
readyCallback();
});
this.client.initialize();
}
getQr() {
return this.qr;
}
getClient() {
return this.client;
}
async destroy() {
await this.client.destroy();
}
async restart() {
await this.destroy();
this.client = new Client();
this.client.on('qr', (qr) => {
this.qr = qr;
});
this.client.initialize();
}
}
export default WhatsappWebSession;
现在,对于一个express API调用,例如/new-client?id=client-id
,我为这个类创建了一个新对象。
我想要的是创建这个类的几个对象,它们在后台运行,我可以得到任何带有client-id的客户端,类似于session. getClient(client-id)。
如何做到这一点?
我尝试过使用authstrategy每次创建一个新对象,然后在API响应关闭后销毁它,但是速度非常慢。
1条答案
按热度按时间kupeojn61#
我已经修复了这个问题,创建了一个单独的客户端管理器示例,负责根据唯一标识符存储客户端示例。每次我们需要从特定客户端发送消息时,管理器将根据客户端的唯一密钥返回客户端。
为方便起见,我使用
express-session
中间件的会话id作为示例的uniqueId。经理代码:
createWAClient-用于创建Whatsapp Web会话的新示例
getClientFromSessionId-用于根据示例的唯一键检索示例
restorePreviousSessions-当服务器重新启动时,使用此功能加载以前登录的会话,以便轻松使用它们。
通过这种方法,我们将始终拥有一个
WhatsappSessionManager
的示例,它将用于记录每个会话。对于每个相应的get message-send请求,我们将能够使用所需的WhatsApp会话。