perf: 增加发送消息成功和失败事件通知

dev/supplier-email-drawer
LiaoYijun 6 months ago
parent 789ab4a8b2
commit ae9217b833

@ -33,7 +33,7 @@ node_modules/
*.bak *.bak
wa-logs.txt wa-logs*.txt
baileys_store_multi.json baileys_store_multi.json
baileys_auth_info_*/ baileys_auth_info_*/

@ -17,8 +17,6 @@ const generateId = require('../../utils/generateId.util');
const NodeCache = require('node-cache'); const NodeCache = require('node-cache');
const P = require('pino'); const P = require('pino');
const msgRetryCounterCache = new NodeCache();
waEmitter.on('message:updated', event => { waEmitter.on('message:updated', event => {
console.info('msg:evt:updated', event); console.info('msg:evt:updated', event);
}); });
@ -37,8 +35,11 @@ const createWhatsApp = async phone => {
let qrCode = null; let qrCode = null;
const channelId = generateId(); const channelId = generateId();
const whatsAppNo = phone; const whatsAppNo = phone;
const logger = P({ timestamp: () => `,"time":"${new Date().toJSON()}"` }, P.destination('./wa-logs-' + phone + '.txt'));
logger.level = 'trace';
const logger = P({ timestamp: () => `,"time":"${new Date().toJSON()}"` }, P.destination('./wa-logs-' + phone + '_' + channelId + '.txt'));
logger.level = 'trace';
const msgRetryCounterCache = new NodeCache();
const storeFilename = './baileys_auth_info/baileys_store_' + phone + '_' + channelId + '.json' const storeFilename = './baileys_auth_info/baileys_store_' + phone + '_' + channelId + '.json'
const store = makeInMemoryStore({ logger }); const store = makeInMemoryStore({ logger });
store?.readFromFile(storeFilename); store?.readFromFile(storeFilename);
@ -54,38 +55,34 @@ const createWhatsApp = async phone => {
const sendTextMessage = async (number, content, externalId) => { const sendTextMessage = async (number, content, externalId) => {
const jid = formatPhoneNumber(number); const jid = formatPhoneNumber(number);
if (number === whatsAppNo) { return new Promise(() => {
// whatsAppNo waSocket.sendMessage(jid, { text: content })
} .then(msg => {
waEmitter.emit('message:updated', {
try { id: msg.key.id,
return new Promise((resolve, reject) => { externalId,
waSocket.sendMessage(jid, { text: content }) status: 'saved',
.then(msgInfo => { direction: 'outbound',
resolve({
messageId: msgInfo?.key?.id ?? generateId(),
externalId
});
})
.catch(ex => {
waEmitter.emit('message.error', {
messge: `[${whatsAppNo}->${number}]发送文本消息出错`,
from: whatsAppNo, from: whatsAppNo,
to: number, to: number,
error: ex eventSource: 'sendMessage.promise.then',
updateTime: formatTimestamp(new Date().getTime() / 1000),
}) })
console.error(`[${whatsAppNo}->${number}]发送文本消息出错: `, ex); })
.catch(ex => {
waEmitter.emit('message:updated', {
id: generateId(),
externalId,
status: 'failed',
direction: 'outbound',
from: whatsAppNo,
to: number,
errro: `发送文本消息出错 ` + ex,
eventSource: 'sendMessage.promise.catch',
updateTime: formatTimestamp(new Date().getTime() / 1000),
}); });
}); });
} catch (ex) { });
waEmitter.emit('message.error', {
messge: `[${whatsAppNo}->${number}]发送文本消息出错`,
from: whatsAppNo,
to: number,
error: ex
})
console.error(`[${whatsAppNo}->${number}]发送文本消息出错: `, ex);
}
}; };
const sendImageMessage = async (number, imageUrl) => { const sendImageMessage = async (number, imageUrl) => {
@ -131,18 +128,6 @@ const createWhatsApp = async phone => {
const messageType = Object.keys(msg.message)[0]; const messageType = Object.keys(msg.message)[0];
console.log('messageType', messageType); console.log('messageType', messageType);
// if (messageType === 'imageMessage') {
// const buffer = await downloadMediaMessage(
// msg,
// 'buffer',
// {},
// {
// logger,
// reuploadRequest: waSocket.updateMediaMessage,
// },
// );
// await writeFile('d:/my-download.jpeg', buffer);
// }
const fromWhatsAppNo = parsePhoneNumber(msg.key.remoteJid); const fromWhatsAppNo = parsePhoneNumber(msg.key.remoteJid);
@ -253,7 +238,7 @@ const createWhatsApp = async phone => {
} }
} }
const handleCredsUpdate = async messageUpdate => { const handleCredsUpdate = async () => {
await saveCreds(); await saveCreds();
} }
@ -266,13 +251,13 @@ const createWhatsApp = async phone => {
creds: state.creds, creds: state.creds,
keys: makeCacheableSignalKeyStore(state.keys, logger), keys: makeCacheableSignalKeyStore(state.keys, logger),
}, },
connectTimeoutMs: 1000*10, connectTimeoutMs: 1000*60*1,
defaultQueryTimeoutMs: 1000*10, defaultQueryTimeoutMs: 1000*60*1,
keepAliveIntervalMs: 1000*10, keepAliveIntervalMs: 1000*60*1,
retryRequestDelayMs: 1000*10, //retryRequestDelayMs: 1000*25,
// https://github.com/WhiskeySockets/Baileys/blob/31bc8ab/src/Utils/generics.ts#L21 // https://github.com/WhiskeySockets/Baileys/blob/31bc8ab/src/Utils/generics.ts#L21
// https://github.com/WhiskeySockets/Baileys/blob/31bc8ab4e2c825c0d774875701ed07e20d05bdb6/WAProto/WAProto.proto // https://github.com/WhiskeySockets/Baileys/blob/31bc8ab4e2c825c0d774875701ed07e20d05bdb6/WAProto/WAProto.proto
browser: Browsers.macOS('SAFARI'),//Browsers.ubuntu('IOS_PHONE'),//Browsers.baileys('WEAR_OS'),//Browsers.baileys('WEAR_OS'),// browser: Browsers.baileys('WEAR_OS'),//Browsers.macOS('SAFARI'),//Browsers.ubuntu('IOS_PHONE'),//Browsers.baileys('WEAR_OS'),//
msgRetryCounterCache, msgRetryCounterCache,
generateHighQualityLinkPreview: false, generateHighQualityLinkPreview: false,
syncFullHistory: false, syncFullHistory: false,
@ -288,7 +273,6 @@ const createWhatsApp = async phone => {
if((lastDisconnect?.error)?.output?.statusCode !== DisconnectReason.loggedOut) { if((lastDisconnect?.error)?.output?.statusCode !== DisconnectReason.loggedOut) {
start(); start();
} else { } else {
console.log('Connection closed: ', lastDisconnect);
waEmitter.emit('connection:close', { waEmitter.emit('connection:close', {
whatsAppNo, channelId, whatsAppNo, channelId,
@ -297,7 +281,7 @@ const createWhatsApp = async phone => {
}); });
} }
} else if (connection === 'open') { } else if (connection === 'open') {
// 扫码成功后向这个群发消息,后续就能使用 API 发送了。 // 扫码成功后向这个群('120363363417115199@g.us')发消息,后续就能使用 API 发送了。
sendTextMessage('120363363417115199@g.us', whatsAppNo + ' 登录成功:' + new Date().toString()); sendTextMessage('120363363417115199@g.us', whatsAppNo + ' 登录成功:' + new Date().toString());
waEmitter.emit('connection:open', { waEmitter.emit('connection:open', {
status: 'open', whatsAppNo, channelId, status: 'open', whatsAppNo, channelId,

Loading…
Cancel
Save