revert: bot-side media pacing weg — pacing zit nu bridge-breed
De seriële send-keten + MEDIA_SEND_DELAY_MS in de bot teruggedraaid; de wwebjs-api bridge serialiseert + throttle de media-sends nu zelf (zie build-p25). Bot verstuurt weer direct. Docs/.env.example bijgewerkt.
This commit is contained in:
parent
2498380b41
commit
5d3683a8a0
5 changed files with 11 additions and 36 deletions
|
|
@ -68,8 +68,8 @@ 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.
|
||||
// Media-pacing voor opeenvolgende sends gebeurt bridge-breed (wwebjs-api
|
||||
// serialiseert + throttle de media-sends; MEDIA_SEND_DELAY_MS in bridge-.env).
|
||||
const pngPaths = getPngFilePaths(dienst)
|
||||
if (!pngPaths || pngPaths.length === 0) {
|
||||
await sendTextMessage(author, `Geen pagina's gevonden voor dienst ${dienstnummer}.`)
|
||||
|
|
|
|||
|
|
@ -19,19 +19,6 @@ async function sleep(ms) {
|
|||
return new Promise(resolve => setTimeout(resolve, ms))
|
||||
}
|
||||
|
||||
// Media-send seriële keten: de wwebjs-media-pipeline is EÉN chromium-tab. Zonder
|
||||
// serialisatie overlappen opeenvolgende media-sends — pagina's van één dienst óf
|
||||
// afbeeldingen naar verschillende ontvangers bij gelijktijdige webhook-requests.
|
||||
// Daarom loopt élke media-send door deze ene keten en eindigt elke send met
|
||||
// MEDIA_SEND_DELAY_MS, zodat de tab tussen twee sends rust krijgt.
|
||||
let mediaSendChain = Promise.resolve()
|
||||
|
||||
function enqueueSend(run) {
|
||||
const job = mediaSendChain.then(run, run)
|
||||
mediaSendChain = job.catch(() => {}) // keten levend houden, ook als een send faalt
|
||||
return job
|
||||
}
|
||||
|
||||
function isRetryableError(error) {
|
||||
if (error.response) {
|
||||
const status = error.response.status
|
||||
|
|
@ -69,10 +56,6 @@ async function sendTextMessage(chatId, text) {
|
|||
}
|
||||
|
||||
async function sendImageMessage(chatId, filePath, filename) {
|
||||
return enqueueSend(() => sendImageMessageInner(chatId, filePath, filename))
|
||||
}
|
||||
|
||||
async function sendImageMessageInner(chatId, filePath, filename) {
|
||||
return withRetry(async () => {
|
||||
const fileBuffer = fs.readFileSync(filePath)
|
||||
const base64Data = fileBuffer.toString('base64')
|
||||
|
|
@ -88,14 +71,6 @@ async function sendImageMessageInner(chatId, filePath, filename) {
|
|||
})
|
||||
const messageId = response.data?.message?._data?.id?.id
|
||||
registerSend(messageId, chatId, filename)
|
||||
// Pacing ná é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}`)
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue