我需要帮助,我创建了一个Nodejs应用程序,以使用Asterisk每隔15秒从Web进行一次自动调用,但是,当我创建.call文件并将其移至文件夹/ outoging时,一些数字会多次调用虽然我有MaxRetries:1选项
const interval = setInterval(function () {
Registers.findOneAndUpdate({state: "READY"}, {state: "SEND"}, (err, registerDB) => {
if (err) {
return res.status(400).json({
ok: false,
err
});
}
if (registerDB) {
if (typeCampaign === "audio") {
console.log("Audio Campaign selected");
fileContent = `Channel: SIP/outgoing/${registerDB.number} \nMaxRetries: 1 \nRetryTime: 60 \nWaitTime: 30 \nContext: automatic-calls \nExtension: ${extAudio} \nSetvar: NUMBER=${registerDB.number} \nSetvar: CAMPAIGN=${registerDB.campaign}`;
} else if (typeCampaign === "dynamic") {
console.log("Dynamic Campaign selected");
fileContent = `Channel: SIP/outgoing/${registerDB.number} \nMaxRetries: 1 \nRetryTime: 60 \nWaitTime: 30 \nContext: automatic-calls \nExtension: ${extDynamic} \nSetvar: NAME=${registerDB.name} \nSetvar: NUMBER=${registerDB.number} \nSetvar: CAMPAIGN=${registerDB.campaign}`;
}
let oldPath = __dirname + sourcePath + registerDB.number + ".call";
console.log(oldPath);
let writeStream = fs.createWriteStream(__dirname + sourcePath + registerDB.number + ".call");
writeStream.write(fileContent);
fs.rename(oldPath, dstPath + registerDB.number + ".call", function (err) {
if (err) {
console.log(err);
return res.status(500).json({
ok: false,
message: "No se pudo generar la llaamda"
});
}
});
writeStream.on('finish', () => {
console.log("Archivo Creado");
});
} else {
return res.status(200).json({
ok: true,
message: "Tarea Finalizada"
});
}
});
counter++;
if (counter === parseInt(req.body.number)) {
clearInterval(interval);
}
}, 15000);
});
答案 0 :(得分:0)
首先我要说的是,即使对于专家来说,编写自己的拨号程序内核也是一个坏主意。它需要特殊的拨号核心经验,这会引起很多问题。 推荐的方法是使用其他一些核心,例如vicidial。
一个电话是
MaxRetries: 0
如果您使用
MaxRetries: 1
这意味着两次会以标准的重试时间进行通话。