From 4a1284579d6548c1cef2e33341b713466051f83b Mon Sep 17 00:00:00 2001 From: Lei OT Date: Mon, 6 Jan 2025 10:21:28 +0800 Subject: [PATCH] =?UTF-8?q?perf(wai):=20=E6=9C=8D=E5=8A=A1=E5=90=AF?= =?UTF-8?q?=E5=8A=A8:=20=E5=90=AF=E5=8A=A8=E6=89=80=E6=9C=89=E8=B4=A6?= =?UTF-8?q?=E6=88=B7=E8=BF=9E=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wai-server/core/handler/whatsappHandler.js | 37 ++++++++++++++++------ wai-server/index.js | 5 +-- 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/wai-server/core/handler/whatsappHandler.js b/wai-server/core/handler/whatsappHandler.js index 064072e..be78f73 100644 --- a/wai-server/core/handler/whatsappHandler.js +++ b/wai-server/core/handler/whatsappHandler.js @@ -4,11 +4,11 @@ const generateId = require('../../utils/generateId.util'); const { domain, name: domainName } = require('../../config').server; const whatsappEvents = require('../emitter'); const { callWebhook } = require('../webhook'); -const { updateConnection, addCurrentConnection, resetConnection } = require('../../services/connections.service'); -const { objectMapper, pick } = require('../../utils/commons.util'); const { sessionStore } = require('..'); +const { createWhatsApp } = require('../../core/baileys'); +const { updateConnection, addCurrentConnection, resetConnection, getConnection } = require('../../services/connections.service'); const { getOutboundMessage, upsertOutboundMessage } = require('../../services/outbound_messages.service'); - +const { objectMapper, pick } = require('../../utils/commons.util'); const { logger, getUserLogger } = require('../../utils/logger.util'); const { DbData } = require('../../helper/wai.msg.helper'); @@ -45,6 +45,7 @@ const webhookBodyBuilder = (messageData, messageType) => { ...defaultContent, ...messageData, ...(messageData.updateTime ? { [timeField[messageData.status]]: messageData.updateTime } : {}), + type: messageData.type || messageData.msgtype || '', id: uniqueMsgId(messageData) || messageData.id || generateId(), wamid: messageData.id || '', // direction: directionField[messageType], @@ -63,9 +64,11 @@ const webhookBodyFill = (webhookBody, messageData) => { /** * WhatsApp 连接事件 + * * connection:connect + * * connection:open + * * connection:close */ const setupConnectionHandler = () => { - // connectionEventNames.forEach(eventName => { whatsappEvents.on('connection:connect', async connectionData => { try { getUserLogger(connectionData.phone).info({ msg: `连接https://web.whatsapp.com/`, connectionData }); @@ -114,11 +117,11 @@ const setupConnectionHandler = () => { logger.error({ connectionData, error }, 'error close connection'); } }); - // }); }; /** * 监听 Creds 更新事件 + * * creds:update */ const setupCredsHandler = () => { whatsappEvents.on('creds:update', async creds => { @@ -134,8 +137,8 @@ const setupCredsHandler = () => { /** * WhatsApp 消息事件 - * pending ⏰ -> saved ⏰ -> sent(*) ✔ -> delivered ✔✔ -> read ✅ - * saved -> pending -> sent(*) -> delivered -> read + * * pending ⏰ -> saved ⏰ -> sent(*) ✔ -> delivered ✔✔ -> read ✅ + * * saved -> pending -> sent(*) -> delivered -> read */ const setupMessageHandler = () => { messageEventNames.forEach(eventName => { @@ -175,7 +178,7 @@ const setupMessageHandler = () => { targetUpsert, ); // console.log('upsert=========================', upsert); - // todo: 把内容加上, 否则前端没显示 + // 把内容加上, 否则前端没显示 await callWebhook(webhookBodyFill(webhookBody, msgRow)); } catch (error) { logger.error({ messageData, error }, 'error call webhook'); @@ -193,8 +196,22 @@ function setupWhatsappHandler() { /** * 登出: 当前服务的所有连接 */ -async function resetCurrentConnection() { +async function resetCurrentConnections() { await resetConnection(); } -module.exports = { setupWhatsappHandler, resetCurrentConnection }; +/** + * 登录: 当前服务的所有连接 + */ +async function loginCurrentConnections() { + const currents = await getConnection({ connect_domain: domain, connect_name: domainName }); + for (const user of currents) { + const { wa_id: waId } = user; + const phone = waId.replace('+', ''); + const whatsApp1 = await createWhatsApp(phone); + whatsApp1.start(); + sessionStore.createSession(phone, whatsApp1); + } +} + +module.exports = { setupWhatsappHandler, resetCurrentConnections, loginCurrentConnections }; diff --git a/wai-server/index.js b/wai-server/index.js index 6a73757..f7bfd17 100644 --- a/wai-server/index.js +++ b/wai-server/index.js @@ -5,7 +5,7 @@ const server = require('./server'); const { port } = require('./config').server; -const { setupWhatsappHandler, resetCurrentConnection } = require('./core/handler/whatsappHandler'); +const { setupWhatsappHandler, resetCurrentConnections, loginCurrentConnections } = require('./core/handler/whatsappHandler'); async function bootstrap() { /** @@ -22,7 +22,8 @@ async function bootstrap() { bootstrap() .then(server => { console.log(`🚀 Server listening on port ${server.address().port}!`); - resetCurrentConnection(); + // resetCurrentConnections(); + loginCurrentConnections(); }) .catch(err => { setImmediate(() => {