如何在通话过程中将 Twilio 调用转发到不同的 URL? (使用节点)
How do you forward Twilio calls to different URLs in the middle of a call? (Using Node)
我想要 Twilio/Node 的以下功能:
- 我的服务器收到来电,并且在我们的自定义客户端上响铃;在通话期间的某个时刻(理想情况下可以在接听之前或接听之后工作)或者如果客户端没有人接听电话,则呼叫将转移到另一台服务器(我的 CRM 提供商)上的 webhook,以便 CRM 可以处理它。或者
- 与上面相同,但是来电将来电请求发布到我的服务器和我的 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 文档对此非常直接,所以希望这对将来的人有所帮助!
我想要 Twilio/Node 的以下功能:
- 我的服务器收到来电,并且在我们的自定义客户端上响铃;在通话期间的某个时刻(理想情况下可以在接听之前或接听之后工作)或者如果客户端没有人接听电话,则呼叫将转移到另一台服务器(我的 CRM 提供商)上的 webhook,以便 CRM 可以处理它。或者
- 与上面相同,但是来电将来电请求发布到我的服务器和我的 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 文档对此非常直接,所以希望这对将来的人有所帮助!