From eceec840d6a69b7fb8de56087abd404cf7be5b49 Mon Sep 17 00:00:00 2001 From: Lei OT Date: Mon, 6 Jan 2025 09:19:51 +0800 Subject: [PATCH 1/3] . --- .gitignore | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 452a266..1e13aea 100644 --- a/.gitignore +++ b/.gitignore @@ -14,7 +14,8 @@ dist-ssr distTest dev-dist tmp -schema +schema* +.gitkeep # Editor directories and files .vscode/* @@ -32,3 +33,5 @@ schema **/LexicalEditor0 *.zip + +.env.* From ad6f28ef8568494d0fb825c66a09feea59a21385 Mon Sep 17 00:00:00 2001 From: Lei OT Date: Mon, 6 Jan 2025 10:20:17 +0800 Subject: [PATCH 2/3] =?UTF-8?q?perf(wai):=20=E6=B6=88=E6=81=AF=E5=8F=91?= =?UTF-8?q?=E9=80=81=E4=BA=8B=E4=BB=B6=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wai-server/api/messages/message.controller.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wai-server/api/messages/message.controller.js b/wai-server/api/messages/message.controller.js index 598c7b8..47aa348 100644 --- a/wai-server/api/messages/message.controller.js +++ b/wai-server/api/messages/message.controller.js @@ -74,7 +74,7 @@ const send = async ctx => { await createOutboundMessage({ ...toUpsert }); // wsToSend.sendTextMessage(to, content, actionId); const messagePayload = ctxToSendBuilder(_data); - waEmitter.emit('request.' + from + '.send.' + msgtype, messagePayload); + waEmitter.emit('request.' + from + '.send.message', messagePayload); return 'Message sent successfully'; // { wsToSend, ret: 'Message sent successfully' }; } catch (error) { console.error('Error sending message:', error); From 4a1284579d6548c1cef2e33341b713466051f83b Mon Sep 17 00:00:00 2001 From: Lei OT Date: Mon, 6 Jan 2025 10:21:28 +0800 Subject: [PATCH 3/3] =?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(() => {