我如何使用 Twilio 的 <dial> 动词处理到达语音邮件
How can I handle reaching voicemail using Twilio's <dial> verb
我知道在拨打电话时,Twilio 可以检测到应答机,并做出不同的反应。
然而,如果我使用 <dial>
动词,则没有明显的地方可以添加此功能,即使它本质上是一样的。
我的预期流程是:
- 客户输入他们的 phone 号码
- Twilio 呼叫客户并播放语音消息
- Twilio 拨打代理号码,可能是手机
- 如果代理接听,将客户连接到代理
- 如果客服忙于通话或未接听电话,呼叫可能会转至客服的语音信箱。
- 终止对代理的调用
- 录制来自客户的语音邮件
- 通过电子邮件将语音邮件发送给代理
来自 <Dial>
动词上的 official docs (强调我的):
This is the simplest case for Dial. Twilio will dial 415-123-4567. If someone answers, Twilio will connect the caller to the called party. If the caller hangs up, the Twilio session ends. If the line is busy, if there is no answer, or if the called party hangs up, <Dial>
exits and the <Say>
verb is executed for the caller before the call flow ends.
<?xml version="1.0" encoding="UTF-8"?>
<!-- page located at http://example.com/simple_dial.xml -->
<Response>
<Dial>415-123-4567</Dial>
<Say>Goodbye</Say>
</Response>
在 <Say>
动词之后放置一个 <Record>
动词听起来就像您正在寻找的那样。您可以像这样更改默认值 30 秒的超时:
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Dial timeout="9001">415-123-4567</Dial>
<Say>Please leave a message</Say>
<Record action="/process_new_voicemail" />
</Response>
我确定这已经晚了,但希望它能帮助一些人。听起来您可能只需要屏蔽来电。
基本上,您可以让您拨打的 "agent" 接听电话,如果没有收到输入则挂断。
我不确定你使用的是什么语言,但这里有一个很好的 php/Laravel 教程来解释:
https://www.twilio.com/docs/tutorials/walkthrough/ivr-screening/php/laravel
关键部分在这里:
$dialCommand = $response->dial(
['action' => route('agent-voicemail', ['agent' => $agent->id], false),
'method' => 'POST']
);
$dialCommand->number(
$numberToDial,
['url' => route('screen-call', [], false)]
);
请注意,拨号命令使用 'action' 指定发送 POST 请求的位置,如果呼叫结束,即 POST 到 /agent-voicemail。
然后,该号码连同 'url' 参数一起拨号 这是在代理接听之后但在连接双方之前请求的位置。
然后 /screen-call 路由要求代理接受呼叫,如果没有收到输入,它将挂断并向初始设置 /agent-voicemail 发出 POST 请求路线.
此方法将处理您的情况,因为如果转到语音信箱,将不会收到任何输入并且通话将结束。
我知道在拨打电话时,Twilio 可以检测到应答机,并做出不同的反应。
然而,如果我使用 <dial>
动词,则没有明显的地方可以添加此功能,即使它本质上是一样的。
我的预期流程是:
- 客户输入他们的 phone 号码
- Twilio 呼叫客户并播放语音消息
- Twilio 拨打代理号码,可能是手机
- 如果代理接听,将客户连接到代理
- 如果客服忙于通话或未接听电话,呼叫可能会转至客服的语音信箱。
- 终止对代理的调用
- 录制来自客户的语音邮件
- 通过电子邮件将语音邮件发送给代理
来自 <Dial>
动词上的 official docs (强调我的):
This is the simplest case for Dial. Twilio will dial 415-123-4567. If someone answers, Twilio will connect the caller to the called party. If the caller hangs up, the Twilio session ends. If the line is busy, if there is no answer, or if the called party hangs up,
<Dial>
exits and the<Say>
verb is executed for the caller before the call flow ends.
<?xml version="1.0" encoding="UTF-8"?>
<!-- page located at http://example.com/simple_dial.xml -->
<Response>
<Dial>415-123-4567</Dial>
<Say>Goodbye</Say>
</Response>
在 <Say>
动词之后放置一个 <Record>
动词听起来就像您正在寻找的那样。您可以像这样更改默认值 30 秒的超时:
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Dial timeout="9001">415-123-4567</Dial>
<Say>Please leave a message</Say>
<Record action="/process_new_voicemail" />
</Response>
我确定这已经晚了,但希望它能帮助一些人。听起来您可能只需要屏蔽来电。 基本上,您可以让您拨打的 "agent" 接听电话,如果没有收到输入则挂断。
我不确定你使用的是什么语言,但这里有一个很好的 php/Laravel 教程来解释: https://www.twilio.com/docs/tutorials/walkthrough/ivr-screening/php/laravel
关键部分在这里:
$dialCommand = $response->dial(
['action' => route('agent-voicemail', ['agent' => $agent->id], false),
'method' => 'POST']
);
$dialCommand->number(
$numberToDial,
['url' => route('screen-call', [], false)]
);
请注意,拨号命令使用 'action' 指定发送 POST 请求的位置,如果呼叫结束,即 POST 到 /agent-voicemail。
然后,该号码连同 'url' 参数一起拨号 这是在代理接听之后但在连接双方之前请求的位置。
然后 /screen-call 路由要求代理接受呼叫,如果没有收到输入,它将挂断并向初始设置 /agent-voicemail 发出 POST 请求路线.
此方法将处理您的情况,因为如果转到语音信箱,将不会收到任何输入并且通话将结束。