如何在呼叫状态更改为响铃时自动取消 Twilio 出站呼叫
Posted
技术标签:
【中文标题】如何在呼叫状态更改为响铃时自动取消 Twilio 出站呼叫【英文标题】:How do I automatically cancel Twilio outbound call as soon as the call status changes to ringing 【发布时间】:2022-01-16 14:15:17 【问题描述】:您好,我正在使用 Twilio 进行出站呼叫,我有本地节点应用程序可以发起呼叫。我也有 Twilio 状态回调函数来监控通话状态。我想在通话状态更改为“响铃”时取消/结束通话 我已尝试通过挂断方式结束通话并拒绝 TwiML。我原以为电话会自动取消,但我的电话一直在响。
用于拨打电话的节点代码
router.post('/call', async (requ, resp) =>
const accountSid = myaccoundsid;
const authToken = myauthtoken;
const client = require('twilio')(accountSid, authToken);
client.calls
.create(
to: 'to_number',
from: 'from_number',
url: 'http://demo.twilio.com/docs/voice.xml',
statusCallback: 'url_to_my_status_call_back_function',
statusCallbackMethod: 'POST',
statusCallbackEvent: ['initiated', 'ringing', 'answered', 'completed'],
)
.then((call) =>
console.log(call.status);
);
);
我的终端返回的通话状态是排队的。
我的状态回调函数
const VoiceResponse = require('twilio').twiml.VoiceResponse;
const response = new VoiceResponse();
exports.handler = function(context, event, callback)
if(event.CallStatus ==='ringing')
console.log("Call status changed: "+ event.CallStatus);
response.hangup();
console.log(response.toString());
callback(null, response);
;
Twilio 控制台
任何帮助将不胜感激,谢谢
【问题讨论】:
【参考方案1】:这里是 Twilio 开发者宣传员。
首先,您应该检查 Twilio 条款,特别是 terms related to voice calls,以确保您不会违反此规则:
在给定的月份内,客户不会有 (a) 来自单个始发电话号码的大量未应答的出站语音呼叫尝试,或 (b) 平均出站语音呼叫持续时间较短。如果客户有上述任何行为,电信提供商可以独立阻止客户使用其网络。
如果您有正当理由在电话响起后立即挂断电话,请继续阅读。
状态回调 webhook 是异步的,它们发生在调用本身之外,因此将 TwiML 返回给它们不会影响调用。相反,要使用状态回调来影响呼叫,您需要 use the REST API to modify the call 并完成它。
这方面的一个例子可能是:
exports.handler = async function(context, event, callback)
if(event.CallStatus ==='ringing')
const client = context.getTwilioClient();
await client.calls(event.CallSid).update( status: 'canceled' );
callback(null, response);
;
【讨论】:
以上是关于如何在呼叫状态更改为响铃时自动取消 Twilio 出站呼叫的主要内容,如果未能解决你的问题,请参考以下文章
如何在 react-native android 应用程序中单击时将铃声模式更改为静音/响铃/振动?
UCMA 如何在遇忙信号和终止信号之前检测呼叫响铃持续时间并转移呼叫?
Twilio - 如何通过在 NodeJs 中提供呼叫 SID 来检索语音呼叫记录媒体文件