feat(WAI): 设置WhatsApp离线

dev/voice
Lei OT 7 months ago
parent 5e347c0dd6
commit 51d867d3a5

@ -6,6 +6,7 @@ const { getConnection } = require('../../services/connections.service');
const { isEmpty } = require('../../utils/commons.util');
const { getUserLogger } = require('../../utils/logger.util');
const { domain } = require('../../config').server;
const waEmitter = require('../../core/emitter');
const newConnect = async ctx => {
const { phone } = ctx.query;
@ -36,11 +37,44 @@ const getSessions = async () => {
return Array.from(sessionStore.sessions);
};
const offline = async ctx => {
const { phone } = ctx.query;
const existsSession = sessionStore.getSession(phone);
ctx.assert(existsSession, 400, `WhatsApp ${phone} 已离线`);
try {
getUserLogger(phone).info(`WhatsApp ${phone} 准备离线`);
// existsSession.stop(); // todo:
// sessionStore.removeSession(existsSession.channelId);
waEmitter.emit('connection:close', { phone, whatsAppNo: phone, status: 'offline', channelId: existsSession.channelId });
return ''; // { wsToSend, ret: 'Message sent successfully' };
} catch (error) {
console.error('set offline error', error);
ctx.assert(null, 500, 'Failed to set offline');
}
};
/**
* @deprecated
*/
const setStatus = async (ctx) => {
const { phone, status } = ctx.request.body;
const existsSession = sessionStore.getSession(phone);
ctx.assert(existsSession, 400, `WhatsApp ${phone} 已离线`);
try {
// existsSession.stop(); // todo:
waEmitter.emit('connection:close', { phone, status: 'offline', channelId: existsSession.channelId });
} catch (error) {
console.error('close connection error', error);
ctx.assert(null, 500, 'Failed to close connection');
}
};
const test = async () => {};
module.exports = {
newConnect,
getAll,
getSessions,
offline,
test,
};

@ -12,6 +12,7 @@ module.exports = Router => {
.get('/qrcode', controller.newConnect)
// .get('/qrcode', controller.qrcode)
.get('/sessions', controller.getSessions)
.get('/offline', controller.offline)
.get('/test', controller.test)
.get('/', controller.getAll);

@ -8,10 +8,10 @@ const { callWebhook } = require('../webhook');
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 { getOutboundMessage, upsertOutboundMessage, createOutboundMessage } = require('../../services/outbound_messages.service');
const { objectMapper, pick, isEmpty, omitEmpty } = require('../../utils/commons.util');
const { logger, getUserLogger } = require('../../utils/logger.util');
const { DbData, waiContentToDB, uploadMediaFile } = require('../../helper/wai.msg.helper');
const { DbData, waiContentToDB, uploadMediaFile, ctxToSendBuilder, ctxToDB } = require('../../helper/wai.msg.helper');
const connectionEventNames = ['connection:connect', 'connection:open', 'connection:close'];
const messageEventNames = ['message:received', 'message:updated'];
@ -227,6 +227,9 @@ const setupMessageHandler = async () => {
const readyUpsert = omitEmpty({ ...timeFields, ...pusher, ...waiContentFieldsToDB, ...record });
const msgRow = await upsertOutboundMessage({ ...upsertFields, ...readyUpsert, ...typeField, ...msgOrigin }, targetUpsert);
whatsappEvents.emit(`user:${eventName}`, msgRow);
if (_type !== 'unresolvable') {
// 把内容加上, 否则前端没显示
await callWebhook(webhookBodyFill(webhookBody, { ...msgRow, status: msgRow.msg_status || '' }));
@ -254,6 +257,18 @@ function setupWhatsappHandler() {
setupMessageHandler();
}
/**
* 发送消息
* @param {*} _data { from, to, msgtype, msgcontent: { body, image, }, actionId }
*/
async function sendMessage(_data) {
const { from } = _data;
const toUpsert = ctxToDB(_data);
await createOutboundMessage({ ...toUpsert });
const messagePayload = ctxToSendBuilder(_data);
whatsappEvents.emit('request.' + from + '.send.message', messagePayload);
}
/**
* 登出: 当前服务的所有连接
*/
@ -275,4 +290,4 @@ async function loginCurrentConnections() {
}
}
module.exports = { setupWhatsappHandler, resetCurrentConnections, loginCurrentConnections };
module.exports = { setupWhatsappHandler, resetCurrentConnections, loginCurrentConnections, sendMessage };

Loading…
Cancel
Save