
本教程详细指导如何构建一个完整的twilio呼叫处理系统。内容涵盖来电配置、呼叫筛选、将拒接电话转接至语音邮件,并最终实现将录制的语音邮件自动发送至指定邮箱。通过学习,您将掌握如何利用twilio的twiml和php webhook,创建高效且无缝的通信流程,确保重要信息不被遗漏,提升业务沟通效率。
引言
在现代业务通信中,高效的呼叫处理机制至关重要。Twilio作为领先的云通信平台,提供了强大的API和TwiML(Twilio Markup Language),使得开发者能够灵活地定制呼叫流程。本文将深入探讨如何利用Twilio构建一个智能呼叫系统,实现客户来电的筛选、拒接电话自动转接至语音邮件,并将录制的语音邮件链接通过电子邮件发送给业务负责人,从而确保即使在无法接听电话时,也能及时获取重要信息。
Twilio呼叫流程概览
一个典型的Twilio呼叫处理流程涉及多个环节,通过一系列XML和PHP文件协同工作。以下是我们将要实现的呼叫路径:
- 客户来电: 客户拨打Twilio号码。
- Webhook触发: Twilio将呼叫事件发送到预设的Webhook URL(例如,handle-incoming-call.xml)。
- 初始重定向: handle-incoming-call.xml将请求重定向到核心处理逻辑(例如,handle-extension.php)。
- 欢迎语与拨号尝试: handle-extension.php播放欢迎语,并尝试将呼叫转接到业务负责人。在此过程中,会先进行呼叫筛选。
- 呼叫筛选: 业务负责人在接听前会听到一段提示,选择接受或拒绝来电。
- 处理筛选结果: 根据业务负责人的选择,决定是连接电话还是执行其他操作(如挂断)。
- 语音邮件转接: 如果呼叫被拒绝或无人接听,系统将自动转接到语音邮件。
- 语音邮件录制与邮件通知: 客户留言后,录音文件将生成,并通过电子邮件发送给业务负责人。
接下来,我们将详细介绍每个环节的实现细节。
核心文件与TwiML配置
1. handle-incoming-call.xml - 初始呼叫入口
当Twilio号码接到呼叫时,会向此Webhook URL发送请求。此文件通常只负责将请求重定向到更复杂的处理逻辑。
handle-extension.php
2. handle-extension.php - 欢迎语与拨号逻辑
此PHP文件负责播放欢迎语,并尝试将呼叫转接给业务负责人。关键在于
';
echo '';
// 播放欢迎语
echo '感谢您致电我的公司 ';
// 尝试拨号给业务负责人
// record="true" 启用录音(如果业务方接听并通话)
// timeout="15" 设置拨号超时时间
// action="voicemail.php" 定义当拨号失败时(如无人接听或被拒绝),Twilio将请求发送到此URL
echo '';
// url="screen-caller.xml" 定义在连接被叫方之前,先执行此TwiML进行呼叫筛选
echo '+10000000000 '; // 替换为您的业务电话号码
echo ' ';
echo ' ';
?>3. screen-caller.xml - 呼叫筛选界面
此TwiML文件在handle-extension.php尝试拨号给业务负责人时被执行。它使用
您的公司有来电。 要接听电话,请按1。 要拒接电话,请按2。
4. handle-screen-input.php - 处理筛选结果
此PHP文件接收screen-caller.xml中收集到的按键输入。如果业务负责人按1,则连接呼叫;如果按2,则执行
';
echo '';
$user_pushed = (int) $_REQUEST['Digits']; // 获取用户按键
if ($user_pushed == 1)
{
echo '正在连接,请说“你好”。 ';
// Twilio将自动连接来电者与业务负责人
}
else {
// 如果按2,挂断当前连接尝试。
// 这将触发 handle-extension.php 中 的 action 属性,转到 voicemail.php
echo ' ';
}
echo ' ';
?>实现呼叫拒接转语音邮件
当handle-extension.php中的
voicemail.php - 语音邮件录制
此文件负责播放语音邮件提示语,并使用
\n";
// 记录请求参数,方便调试
file_put_contents('incoming_voicemail.log', "\n" .json_encode($_REQUEST) . "\n", FILE_APPEND);
?>
您好,您的电话暂时无人接听。请在提示音后留言。
语音邮件录音的邮件通知
录音完成后,Twilio会将包含录音链接的请求发送到voicemail.php中
mail.php - 发送语音邮件通知邮件
mail.php文件将接收Twilio发送的Webhook请求,其中包含RecordingUrl参数。我们可以利用此参数构建一封电子邮件,并发送给指定的收件人。
'; // 接收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); } ?>
注意:
- 请将your_email@example.com替换为实际的收件邮箱。
- noreply@yourdomain.com应替换为有效的发件邮箱地址。
- PHP的mail()函数依赖于服务器的邮件配置(如sendmail)。在生产环境中,建议使用更健壮的邮件库,如PHPMailer或SwiftMailer,它们支持SMTP认证,提供更好的可靠性和错误处理。
- Twilio提供的RecordingUrl通常是一个链接,直接访问即可下载或播放,添加.mp3后缀可以确保某些邮件客户端正确识别为音频文件。
注意事项与最佳实践
- Webhook URL配置: 确保在Twilio控制台中正确配置您的电话号码的"A CALL COMES IN" Webhook URL,指向handle-incoming-call.xml的公开可访问地址。
- HTTPS: 出于安全考虑,强烈建议所有Twilio Webhook URL都使用HTTPS。
- 错误处理与日志记录: 在每个PHP文件中加入适当的错误处理和日志记录机制,以便在出现问题时能够快速诊断。例如,使用file_put_contents()记录请求参数或错误信息。
- 邮件内容优化: 邮件内容可以根据需求进行定制,例如包含来电者号码、通话ID、语音邮件持续时间等更多信息。
- 安全性: 在处理邮件发送时,请确保发件箱配置安全,避免垃圾邮件问题。
- 可扩展性: 随着业务增长,可以考虑将配置参数(如收件邮箱、欢迎语文本、业务号码)外部化到配置文件或数据库中,以便于管理。
- Twilio TwiML Bin/Functions: 对于简单的逻辑,也可以考虑使用Twilio的TwiML Bin或Functions服务,避免自己维护服务器。
总结
通过以上步骤,我们成功构建了一个功能完善的Twilio呼叫处理系统。它不仅能够智能地筛选来电,还能在业务负责人无法接听时,自动将电话转接至语音邮件,并将录音文件通过电子邮件及时通知。这种自动化流程大大提高了通信效率,确保了重要信息的传递,是现代企业不可或缺的通信解决方案。您可以根据自身业务需求,在此基础上进行进一步的定制和扩展。










