如何在通话过程中将 Twilio 调用转发到不同的 URL? (使用节点)

How do you forward Twilio calls to different URLs in the middle of a call? (Using Node)

我想要 Twilio/Node 的以下功能:

  1. 我的服务器收到来电,并且在我们的自定义客户端上响铃;在通话期间的某个时刻(理想情况下可以在接听之前或接听之后工作)或者如果客户端没有人接听电话,则呼叫将转移到另一台服务器(我的 CRM 提供商)上的 webhook,以便 CRM 可以处理它。或者
  2. 与上面相同,但是来电将来电请求发布到我的服务器和我的 CRM webhook 以获取来电;我认为这可能是不可能的,不确定

我能够在我的服务器上毫无问题地接收 Twilio 呼叫,并且能够在我的 CRM 中毫无问题地接收 Twilio 呼叫。但是,当我在自定义 server/client 上首次收到呼叫后尝试将呼叫转接到 CRM 时,它似乎总是突然断开连接。请帮助!

我用来更新调用的代码如下。如果将调用直接发送到 CRM webhook,url 工作正常。 CallSid 来自来电的自定义客户端

client.calls(req.body.CallSid)
.update({method: 'POST', url: 'https://crm.crmprovider.com/ctiapi/xml/cticall/twilio?authtoken=abc'})

感谢任何帮助!

我想我找到了正确的方法。应该使用带有“拨号”的“操作”,然后检查操作端点中的“DialCallStatus”并酌情处理各种状态。示例代码:

// On server, receive call. This is the url Twilio is 
// set to post webhook to when call comes in

app.post('/incomingCall', (req, res) => {
  const twiml = new VoiceResponse();
  // Dial client first; after, call /callAction
  // I believe this will call /callAction if call is unanswered for 10 seconds or after a completed call or if there's no client open
  const dial = twiml.dial({timeout:10, action: '/callAction'});
  const client = 'whateverClientName'
  dial.client(client)
  res.type('text/xml')
  res.send(twiml.toString())
})

app.post('/callAction',(req,res)=>{
  const twiml = new VoiceResponse();
  // Can set below if for other things like if call not completed, answered, or cancelled
  // In this example we say if call's not completed, route call to 3rd party site's webhook to further deal with the ongoing call
  if(req.body.DialCallStatus!=='completed'){
    twiml.redirect({method: 'POST'},'https://thirdpartywebhook.com/abc')}
  else {twiml.hangup()}
  res.type('text/xml')
  res.send(twiml.toString()) 
})

我没有发现 Twilio 文档对此非常直接,所以希望这对将来的人有所帮助!