feat: media-send pacing na élke send (niet alleen tussen pagina's)

MEDIA_SEND_DELAY_MS pauzeert nu centraal in sendImageMessage ná elke
media-send, zodat ook afbeeldingen naar verschillende ontvangers niet
overlappen in de ene chromium-tab (staged-ghost race-risico). Per-pagina
delay uit messageHandler verwijderd.
This commit is contained in:
Eddy de Vink 2026-09-26 22:26:18 +02:00
commit 7673239933
5 changed files with 83 additions and 20 deletions

View file

@ -68,20 +68,16 @@ async function handleWebhook(payload) {
return
}
// Pacing gebeurt nu centraal in sendImageMessage (na élke media-send), zodat óók
// afbeeldingen naar verschillende ontvangers niet overlappen in de ene chromium-tab.
const pngPaths = getPngFilePaths(dienst)
if (!pngPaths || pngPaths.length === 0) {
await sendTextMessage(author, `Geen pagina's gevonden voor dienst ${dienstnummer}.`)
return
}
// Defensieve spreiding tussen pagina's (niet vóór de eerste): verlaagt de kans op
// gelijktijdige storage/upload-conflicten in de wwebjs-media-pipeline.
const mediaSendDelayMs = parseInt(process.env.MEDIA_SEND_DELAY_MS, 10) || 500
for (let i = 0; i < pngPaths.length; i++) {
const pngPath = pngPaths[i]
if (i > 0 && mediaSendDelayMs > 0) {
await new Promise(resolve => setTimeout(resolve, mediaSendDelayMs))
}
const filename = pngPath.split('/').pop()
try {
await sendImageMessage(author, pngPath, filename)

View file

@ -71,6 +71,14 @@ async function sendImageMessage(chatId, filePath, filename) {
})
const messageId = response.data?.message?._data?.id?.id
registerSend(messageId, chatId, filename)
// Pacing na élke media-send: de wwebjs-media-pipeline is EEN chromium-tab. Twee
// opeenvolgende media-sends (pagina's van één dienst óf afbeeldingen naar
// verschillende ontvangers) mogen niet overlappen — dat veroorzaakt de staged-
// ghost-race (2e send verliest). Wacht dus altijd MEDIA_SEND_DELAY_MS ná een send.
const mediaSendDelayMs = parseInt(process.env.MEDIA_SEND_DELAY_MS, 10) || 500
if (mediaSendDelayMs > 0) {
await sleep(mediaSendDelayMs)
}
return response.data
}, `sendImageMessage ${filename} to ${chatId}`)
}