Migreer naar WuzAPI (send via chat/send, payload via event.Info) + multiplexer
This commit is contained in:
parent
da621b52d9
commit
49d6fe15d6
3 changed files with 121 additions and 32 deletions
|
|
@ -10,6 +10,18 @@ const ALLOWED_GROUP_NAMES = (process.env.ALLOWED_GROUP_NAME || '')
|
|||
.filter(Boolean)
|
||||
const ALLOWED_CHAT_IDS = new Set([ALLOWED_GROUP, ...ALLOWED_GROUP_NAMES].filter(Boolean))
|
||||
|
||||
// WuzAPI-webhook-payload-mapping. WuzAPI stuurt (WEBHOOK_FORMAT=json) het volledig
|
||||
// whatsmeow-event als { "event": {...}, "type": "Message", ... }. De relevante
|
||||
// velden (uit whatsmeow-types): event.Info.Chat/Sender = {User, Server},
|
||||
// event.Info.IsFromMe (bool), event.Info.ID, event.Message.conversation.
|
||||
function jidFromObject(jid) {
|
||||
// whatsmeow-JID serialiseert als {User, RawAgent, Device, Integrator, Server}
|
||||
if (!jid || typeof jid !== 'object') return String(jid || '')
|
||||
const server = jid.Server || 's.whatsapp.net'
|
||||
const device = jid.Device ? `:${jid.Device}` : ''
|
||||
return `${jid.User}${device}@${server}`
|
||||
}
|
||||
|
||||
function normalizeChatId(chatId) {
|
||||
return (chatId || '')
|
||||
.replace(/^\u200e/, '')
|
||||
|
|
@ -23,26 +35,36 @@ function extractDienstnummer(body) {
|
|||
}
|
||||
|
||||
async function handleWebhook(payload) {
|
||||
if (payload.dataType !== 'message') return
|
||||
if (payload.sessionId !== process.env.WHATSAPP_SESSION) return
|
||||
if (payload.type !== 'Message') return
|
||||
|
||||
const message = payload.data?.message
|
||||
if (!message) return
|
||||
if (message.fromMe) return
|
||||
if (!ALLOWED_CHAT_IDS.has(normalizeChatId(message.from))) return
|
||||
const event = payload.event
|
||||
if (!event || !event.Info) return
|
||||
|
||||
const dienstnummer = extractDienstnummer(message.body || '')
|
||||
const chatId = jidFromObject(event.Info.Chat)
|
||||
const author = jidFromObject(event.Info.Sender)
|
||||
if (event.Info.IsFromMe) return
|
||||
if (!ALLOWED_CHAT_IDS.has(normalizeChatId(chatId))) return
|
||||
|
||||
const messageId = event.Info.ID
|
||||
// Tekst: conversation of extendedTextMessage.text; protobuf-veldnamen kunnen
|
||||
// zowel lowerCamel (protojson) als Go-vorm (Conversation) zijn — beide afdekken.
|
||||
const msg = event.Message || {}
|
||||
const body = msg.conversation || msg.Conversation ||
|
||||
msg.extendedTextMessage?.text || msg.ExtendedTextMessage?.Text || ''
|
||||
|
||||
const dienstnummer = extractDienstnummer(body)
|
||||
if (!dienstnummer) return
|
||||
|
||||
incrementDaily()
|
||||
|
||||
sendChatSeen(ALLOWED_GROUP).catch(err =>
|
||||
console.error('Failed to mark chat as seen:', err.message)
|
||||
)
|
||||
if (messageId) {
|
||||
sendChatSeen(chatId, messageId).catch(err =>
|
||||
console.error('Failed to mark chat as seen:', err.message)
|
||||
)
|
||||
}
|
||||
|
||||
console.log(`Processing dienst ${dienstnummer} for ${message.author}`)
|
||||
console.log(`Processing dienst ${dienstnummer} for ${author}`)
|
||||
|
||||
const author = message.author || message.from
|
||||
if (!author) return
|
||||
|
||||
const limit = checkLimit(author)
|
||||
|
|
|
|||
Loading…
Reference in a new issue