使用.call文件对同一号码进行多次通话

时间:2019-09-30 15:02:11

标签: node.js asterisk

我需要帮助,我创建了一个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);
});

1 个答案:

答案 0 :(得分:0)

首先我要说的是,即使对于专家来说,编写自己的拨号程序内核也是一个坏主意。它需要特殊的拨号核心经验,这会引起很多问题。 推荐的方法是使用其他一些核心,例如vicidial。

一个电话是

MaxRetries: 0

如果您使用

MaxRetries: 1

这意味着两次会以标准的重试时间进行通话。