呼叫者从队列中移除后,Twilio 呼叫流程不再继续
Twilio Call Flow Not Continuing After Caller Removed From Queue
基于the documentation for the TwiML <Leave>
verb,当调用者退出队列时,他们的调用应该继续执行导致他们进入队列的<Enqueue>
之后的调用逻辑。在我的例子中,我的呼叫者通过处理这个 TwiML 进入队列:
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Enqueue>business</Enqueue>
<Say>Sorry, no one is currently available. Please leave a message.</Say>
<Record action="${endpoint}/hangup" timeout="10" transcribeCallback="${endpoint}/voicemailHandler"/>
</Response>
稍后,我正在执行此 Javascript 逻辑以触发从队列中删除成员:
await twilioClient
.queues(queueSid)
.members('Front')
.update({url: `${endpoint}/leave`})
/leave
端点将成员定向到 TwiML 的这一点:
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Leave />
</Response>
我 运行 遇到一个问题,一旦 Javascript 执行,而不是听到 <Say>
,呼叫就结束并且呼叫者断开连接。我误解了文档吗?如果是这样,我应该如何重组我的逻辑以达到我想要的结果?
正如 Alan 所说,您需要指定一个 waitUrl 来处理您的呼叫并发送离开指令。
例如,您可以将 waitUrl 设置为 Twilio Function that checks if the call is during business hours as shown in the blog post here,TwiML 将如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Enqueue waitUrl="https://zaffre-zorse-5224.twil.io/queue">support</Enqueue>
<Say>Unfortunately, the support line has closed. Please call again tomorrow.</Say>
</Response>
你的函数看起来像这样:
exports.handler = function(context, event, callback) {
let twiml = new Twilio.twiml.VoiceResponse();
let moment = require('moment-timezone');
let timezone = event.timezone || 'America/Los_Angeles';
const hour = moment().tz(timezone).format('H');
const dayOfWeek = moment().tz(timezone).format('d');
if ((hour >= 8 && hour < 17) && (dayOfWeek >= 1 && dayOfWeek <= 5)) {
// "open" from 8am to 5pm, PST.
twiml.play('http://com.twilio.sounds.music.s3.amazonaws.com/MARKOVICHAMP-Borghestral.mp3');
} else {
twiml.leave();
}
callback(null, twiml);
};
基于the documentation for the TwiML <Leave>
verb,当调用者退出队列时,他们的调用应该继续执行导致他们进入队列的<Enqueue>
之后的调用逻辑。在我的例子中,我的呼叫者通过处理这个 TwiML 进入队列:
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Enqueue>business</Enqueue>
<Say>Sorry, no one is currently available. Please leave a message.</Say>
<Record action="${endpoint}/hangup" timeout="10" transcribeCallback="${endpoint}/voicemailHandler"/>
</Response>
稍后,我正在执行此 Javascript 逻辑以触发从队列中删除成员:
await twilioClient
.queues(queueSid)
.members('Front')
.update({url: `${endpoint}/leave`})
/leave
端点将成员定向到 TwiML 的这一点:
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Leave />
</Response>
我 运行 遇到一个问题,一旦 Javascript 执行,而不是听到 <Say>
,呼叫就结束并且呼叫者断开连接。我误解了文档吗?如果是这样,我应该如何重组我的逻辑以达到我想要的结果?
正如 Alan 所说,您需要指定一个 waitUrl 来处理您的呼叫并发送离开指令。
例如,您可以将 waitUrl 设置为 Twilio Function that checks if the call is during business hours as shown in the blog post here,TwiML 将如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Enqueue waitUrl="https://zaffre-zorse-5224.twil.io/queue">support</Enqueue>
<Say>Unfortunately, the support line has closed. Please call again tomorrow.</Say>
</Response>
你的函数看起来像这样:
exports.handler = function(context, event, callback) {
let twiml = new Twilio.twiml.VoiceResponse();
let moment = require('moment-timezone');
let timezone = event.timezone || 'America/Los_Angeles';
const hour = moment().tz(timezone).format('H');
const dayOfWeek = moment().tz(timezone).format('d');
if ((hour >= 8 && hour < 17) && (dayOfWeek >= 1 && dayOfWeek <= 5)) {
// "open" from 8am to 5pm, PST.
twiml.play('http://com.twilio.sounds.music.s3.amazonaws.com/MARKOVICHAMP-Borghestral.mp3');
} else {
twiml.leave();
}
callback(null, twiml);
};