
本教程详细指导如何构建一个完整的twilio呼叫处理系统。内容涵盖来电配置、呼叫筛选、将拒接电话转接至语音邮件,并最终实现将录制的语音邮件自动发送至指定邮箱。通过学习,您将掌握如何利用twilio的twiml和php webhook,创建高效且无缝的通信流程,确保重要信息不被遗漏,提升业务沟通效率。
在现代业务通信中,高效的呼叫处理机制至关重要。Twilio作为领先的云通信平台,提供了强大的API和TwiML(Twilio Markup Language),使得开发者能够灵活地定制呼叫流程。本文将深入探讨如何利用Twilio构建一个智能呼叫系统,实现客户来电的筛选、拒接电话自动转接至语音邮件,并将录制的语音邮件链接通过电子邮件发送给业务负责人,从而确保即使在无法接听电话时,也能及时获取重要信息。
一个典型的Twilio呼叫处理流程涉及多个环节,通过一系列XML和PHP文件协同工作。以下是我们将要实现的呼叫路径:
接下来,我们将详细介绍每个环节的实现细节。
当Twilio号码接到呼叫时,会向此Webhook URL发送请求。此文件通常只负责将请求重定向到更复杂的处理逻辑。
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Redirect>handle-extension.php</Redirect>
</Response>此PHP文件负责播放欢迎语,并尝试将呼叫转接给业务负责人。关键在于<Dial>动词的action属性,它定义了当拨号失败(例如,被叫方未接听、忙线或被主动拒绝)时Twilio应该执行的TwiML URL。同时,url属性用于在拨号前对被叫方进行筛选。
<?php
header('Content-type: text/xml');
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<Response>';
// 播放欢迎语
echo '<Say voice="alice">感谢您致电我的公司</Say>';
// 尝试拨号给业务负责人
// record="true" 启用录音(如果业务方接听并通话)
// timeout="15" 设置拨号超时时间
// action="voicemail.php" 定义当拨号失败时(如无人接听或被拒绝),Twilio将请求发送到此URL
echo '<Dial record="true" timeout="15" action="voicemail.php">';
// url="screen-caller.xml" 定义在连接被叫方之前,先执行此TwiML进行呼叫筛选
echo '<Number url="screen-caller.xml">+10000000000</Number>'; // 替换为您的业务电话号码
echo '</Dial>';
echo '</Response>';
?>此TwiML文件在handle-extension.php尝试拨号给业务负责人时被执行。它使用<Gather>动词收集业务负责人的按键输入,以决定是否接受来电。
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Gather action="handle-screen-input.php" numDigits="1">
<Say voice="alice">您的公司有来电。</Say>
<Say voice="alice">要接听电话,请按1。</Say>
<Say voice="alice">要拒接电话,请按2。</Say>
</Gather>
</Response>此PHP文件接收screen-caller.xml中收集到的按键输入。如果业务负责人按1,则连接呼叫;如果按2,则执行<Hangup />。关键在于,当在<Dial>的url中执行<Hangup />时,Twilio会认为被叫方拒绝了呼叫,从而触发<Dial>的action属性指向的URL(即voicemail.php)。
<?php
header('Content-type: text/xml');
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<Response>';
$user_pushed = (int) $_REQUEST['Digits']; // 获取用户按键
if ($user_pushed == 1)
{
echo '<Say voice="alice">正在连接,请说“你好”。</Say>';
// Twilio将自动连接来电者与业务负责人
}
else {
// 如果按2,挂断当前连接尝试。
// 这将触发 handle-extension.php 中 <Dial> 的 action 属性,转到 voicemail.php
echo '<Hangup />';
}
echo '</Response>';
?>当handle-extension.php中的<Dial>动词因无人接听或被handle-screen-input.php中的<Hangup />拒绝而失败时,Twilio会将控制权转交给action属性指定的voicemail.php。
此文件负责播放语音邮件提示语,并使用<Record>动词录制客户的留言。核心改动在于<Record>的action属性,它指定了录音完成后Twilio将请求发送到的URL,以便处理录音文件。
<?php
header('content-type: text/xml');
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
// 记录请求参数,方便调试
file_put_contents('incoming_voicemail.log', "\n" .json_encode($_REQUEST) . "\n", FILE_APPEND);
?>
<Response>
<Say voice="alice">您好,您的电话暂时无人接听。请在提示音后留言。</Say>
<!-- 录制语音邮件。录制完成后,Twilio会将请求发送到 mail.php -->
<Record action="mail.php"></Record>
</Response>录音完成后,Twilio会将包含录音链接的请求发送到voicemail.php中<Record>动词的action属性指定的mail.php。
mail.php文件将接收Twilio发送的Webhook请求,其中包含RecordingUrl参数。我们可以利用此参数构建一封电子邮件,并发送给指定的收件人。
<?php
// 确保Twilio能够接收到TwiML响应,即使我们不返回任何内容
header('Content-type: text/xml');
echo '<?xml version="1.0" encoding="UTF-8"?><Response></Response>';
// 接收Twilio发送的参数
$recordingUrl = $_REQUEST['RecordingUrl'] ?? null;
$callSid = $_REQUEST['CallSid'] ?? 'N/A';
$fromNumber = $_REQUEST['From'] ?? 'N/A';
$duration = $_REQUEST['RecordingDuration'] ?? 'N/A';
if ($recordingUrl) {
$to = 'your_email@example.com'; // 替换为您的收件邮箱
$subject = '新的Twilio语音邮件 - 来自 ' . $fromNumber;
$message = "您收到一条新的语音邮件。\n\n";
$message .= "来自号码: " . $fromNumber . "\n";
$message .= "录音时长: " . $duration . " 秒\n";
$message .= "录音链接: " . $recordingUrl . ".mp3\n"; // Twilio录音链接通常是MP3格式
$message .= "Call SID: " . $callSid . "\n\n";
$message .= "请点击链接收听。\n";
$headers = 'From: noreply@yourdomain.com' . "\r\n" .
'Reply-To: noreply@yourdomain.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
// 发送邮件
if (mail($to, $subject, $message, $headers)) {
// 邮件发送成功,可以记录日志
file_put_contents('mail_log.log', "语音邮件通知邮件发送成功到 $to (Call SID: $callSid)\n", FILE_APPEND);
} else {
// 邮件发送失败,记录错误
file_put_contents('mail_log.log', "语音邮件通知邮件发送失败到 $to (Call SID: $callSid)\n", FILE_APPEND);
}
} else {
// 未获取到录音链接,记录错误
file_put_contents('mail_log.log', "mail.php 未收到 RecordingUrl (Call SID: $callSid)\n", FILE_APPEND);
}
?>注意:
通过以上步骤,我们成功构建了一个功能完善的Twilio呼叫处理系统。它不仅能够智能地筛选来电,还能在业务负责人无法接听时,自动将电话转接至语音邮件,并将录音文件通过电子邮件及时通知。这种自动化流程大大提高了通信效率,确保了重要信息的传递,是现代企业不可或缺的通信解决方案。您可以根据自身业务需求,在此基础上进行进一步的定制和扩展。
以上就是Twilio呼叫拒接与语音邮件转发及邮件通知实现教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号