|
|
|
'use strict';
|
|
|
|
|
|
|
|
const { sessionStore } = require('../../core');
|
|
|
|
const { createOutboundMessage } = require('../../services/outbound_messages.service');
|
|
|
|
|
|
|
|
const waEmitter = require('../../core/emitter');
|
|
|
|
const logger = require('../../utils/logger.util');
|
|
|
|
const { ctxToSendBuilder, ctxToDB } = require('../../helper/wai.msg.helper');
|
|
|
|
|
|
|
|
const send = async ctx => {
|
|
|
|
const { msgtype, from, to, msgcontent, content: _content } = ctx.request.body;
|
|
|
|
const content = _content || msgcontent.body || '';
|
|
|
|
logger.info('send', msgtype, from, to, content);
|
|
|
|
if (!from) {
|
|
|
|
ctx.assert(from, 400, '请先到个人资料页扫码登录WhatsApp');
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
const wsToSend = sessionStore.getSession(from);
|
|
|
|
// console.log('find wsToSend', wsToSend)
|
|
|
|
if (!wsToSend) {
|
|
|
|
ctx.assert(wsToSend, 401, '未登录WhatsApp, 请到个人资料页扫码登录'); // 404
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
try {
|
|
|
|
const _data = ctx.request.body;
|
|
|
|
_data.to = _data.to.trim();
|
|
|
|
const toUpsert = ctxToDB(_data);
|
|
|
|
await createOutboundMessage({ ...toUpsert });
|
|
|
|
// wsToSend.sendTextMessage(to, content, actionId);
|
|
|
|
const messagePayload = ctxToSendBuilder(_data);
|
|
|
|
waEmitter.emit('request.' + from + '.send.message', messagePayload);
|
|
|
|
return 'Message sent successfully'; // { wsToSend, ret: 'Message sent successfully' };
|
|
|
|
} catch (error) {
|
|
|
|
console.error('Error sending message:', error);
|
|
|
|
ctx.assert(null, 500, 'Failed to send message');
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
send,
|
|
|
|
};
|