设置Twilio呼叫树

时间:2017-07-27 01:23:36

标签: node.js twilio

我想设置twilio来呼叫A,如果A人没有回答我想打电话给B等等。

根据我的理解,twilio将通过机器或人员(如果启用了机器检测)请求一旦接听电话时提供的URL。

目前我进行了设置,以便在检测到应答机时,它会提供TWIML XML以进行挂断,如果有人应答,则提供TWIML XML消息。但我无法找到一种方法来呼叫名单上的下一个人。

`

client.calls.create({
  to: "+1" + numbers[i],
  from: process.env.TWILIO_NUMBER,
  url: "https://publically.accessable/url-of_mine",
  machineDetection: "Enabled",
  method: "GET"
})
.catch((err) => {
  console.log(err)
})

这是我公开网址

中的功能

const params = event.queryStringParameters;
    if (params.AnsweredBy == "machine_start") {
        let xml = `
            <?xml version="1.0" encoding="UTF-8"?>
            <Response>
                <Hangup/>
            </Response>`
    
        return Response(xml, mimetype = 'text/xml')
    } else{
        let xml = `
            <?xml version="1.0" encoding="UTF-8"?>
            <Response>
                <Say voice="alice" loop='3'>Wildfire Alert. """ + memberCount + """  PURE members are within 15 miles of """ + fireName + """ fire. Please refer to Incident Monitor for further information.</Say>
            </Response>`
        return Response(xml, mimetype='text/xml')
    }

`

1 个答案:

答案 0 :(得分:0)

Twilio开发者传道者在这里。

我投票结束的道歉,我发现现在这是一个不同的用例。

要在未接听上一个电话时接听新电话,或接听电话接听电话,您需要做几件事。

首先,对于未应答呼叫,失败,收到忙音或被取消的情况,您需要为呼叫设置statusCallbackstatusCallback是您在initial API call to make the phone call中设置为另一个公开可访问网址的参数。默认情况下,当您设置statusCallback时,Twilio会在

时向URL发出请求
client.calls.create({
  to: "+1" + numbers[i],
  from: process.env.TWILIO_NUMBER,
  url: "https://publicly.accessable/url-of_mine",
  machineDetection: "Enabled",
  method: "GET",
  statusCallback: "https://another.publicly.accessible/url-of_yours?currentIndex=" + i,
  statusCallbackMethod: "GET"
})

您可能希望在URL中添加一些额外信息,例如当前索引(我在上面的示例中已经这样做了。

当您收到statusCallback网址的请求时,您应该检查通话的实际状态。基本上,completed以外的任何内容都表示呼叫未通过,您需要拨打列表中的下一个号码。这是您可以再次使用该索引的地方。

const params = event.queryStringParameters;
if (params.CallStatus != 'completed') {
  let i = parseInt(params.currentIndex, 10) + 1;
  client.calls.create({
    to: "+1" + numbers[i],
    from: process.env.TWILIO_NUMBER,
    url: "https://publicly.accessable/url-of_mine",
    machineDetection: "Enabled"
    method: "GET",
    statusCallback: "https://another.publicly.accessible/url-of_yours?currentIndex=" + i,
    statusCallbackMethod: "GET"
  })
}
return Response('')

我无法测试,但我的预感是,当您将<Hangup/>返回到应答机检测到的呼叫时,这也将被视为已完成的呼叫。处理此问题的最佳方法是在您使用<Hangup/>

回复时启动新的通话
const params = event.queryStringParameters;
if (params.AnsweredBy == "machine_start") {
    let xml = `
        <?xml version="1.0" encoding="UTF-8"?>
        <Response>
            <Hangup/>
        </Response>`

    client.calls.create( callParameters )

    return Response(xml, mimetype = 'text/xml')
} else{ .. } 

让我知道这是否有帮助。