
本教程详细指导如何使用twilio、php和twiml实现一个智能呼叫处理系统。该系统能够筛选来电,在用户拒接时自动将来电转接到语音留言,并将录制的语音留言链接通过电子邮件发送给指定邮箱,确保重要留言不会遗漏,从而提升企业通信效率和客户服务体验。
一、系统架构与呼叫流程概述
本系统旨在为企业提供一个灵活的来电处理机制。当客户拨打Twilio号码时,系统将首先播放欢迎语,然后尝试将来电转接给内部人员进行筛选。如果内部人员选择拒接,或者未能在规定时间内接听,系统将自动将来电转接到语音留言服务,并在留言录制完成后,将录音文件的链接通过电子邮件发送给预设的邮箱。
整个呼叫流程通过一系列Twilio TwiML(Twilio Markup Language)文件和PHP脚本协同完成,其核心步骤如下:
来电触发: 客户拨打Twilio号码,Twilio向配置的Webhook URL发送请求。主入口处理: Handle-Incoming-Call.XML 文件作为入口,将请求重定向到PHP脚本。呼叫路由与筛选准备: Handle-Extension.PHP 脚本播放欢迎语,并尝试通过动词将来电转接给内部号码。在此阶段,我们配置了呼叫录音功能 (record=”true”),并指定了当转接失败或被叫方挂断时,Twilio应调用的回调URL (action=”voicemail.php”)。同时,通过动词的url属性,我们实现了呼叫筛选功能,即在内部人员接听前播放筛选提示。来电筛选: Screen-Caller.XML 文件在内部人员接听前播放提示,要求其输入数字来决定是否接听。处理筛选结果: Handle-Screen-Input.PHP 脚本根据内部人员的输入,决定是连接呼叫还是挂断。语音留言录制: 如果呼叫被拒接或未接通,Twilio将调用 voicemail.php。此脚本会播放留言提示,并使用动词录制客户留言。关键在于,的action属性被设置为 mail.php,这意味着录音完成后,Twilio将向 mail.php 发送包含录音链接的请求。语音留言邮件通知: mail.php 脚本接收到Twilio的请求后,提取录音链接,并将其通过电子邮件发送到指定邮箱。
二、详细实现步骤与代码示例
2.1 主入口:Handle-Incoming-Call.XML
此XML文件是Twilio Webhook的第一个响应,它简单地将控制权重定向到 handle-extension.php。
handle-extension.php
2.2 呼叫路由与筛选准备:Handle-Extension.PHP
此PHP脚本负责播放欢迎语,并尝试将呼叫转接给内部号码。
立即学习“PHP免费学习笔记(深入)”;
<?php header('Content-type: text/xml'); echo ''; echo ''; // 播放欢迎语 echo '感谢您的来电,我的业务'; // 尝试拨号给内部号码,并开启录音。 // timeout: 拨号等待时间 // action: 如果拨号失败或被叫方挂断,Twilio将请求此URL echo ''; // 内部号码,url属性用于呼叫筛选 echo '+10000000000'; // 替换为你的内部号码 echo ''; echo '';?>
关键点:
:启用呼叫录音。action=”voicemail.php”:当拨号失败(如无人接听、忙线)或被叫方(即内部人员)挂断时,Twilio会将控制权交给 voicemail.php。:在内部人员接听电话之前,Twilio会向 screen-caller.xml 发送请求,播放提示语并等待输入。
2.3 来电筛选:Screen-Caller.XML
此XML文件在内部人员接听前播放提示,询问是否接听。
您的业务有来电。 要接听请按1。 要拒接请按2。
关键点:
gits=”1″>:收集一个数字输入,并将其发送到 handle-screen-input.php 进行处理。
2.4 处理筛选结果:Handle-Screen-Input.PHP
此PHP脚本根据内部人员的输入决定呼叫的去向。
<?php header('Content-type: text/xml'); echo ''; echo ''; $user_pushed = (int) $_REQUEST['Digits']; // 获取用户按下的数字 if ($user_pushed == 1) { // 如果按下1,连接呼叫 echo '正在连接,请说你好。'; } else { // 如果按下2,挂断电话。此时,由于Handle-Extension.PHP中的Dial action, // 呼叫将转到 voicemail.php。 echo ''; } echo '';?>
关键点:
如果内部人员按下 2 选择拒接,Handle-Screen-Input.PHP 会发送 指令。此时,Handle-Extension.PHP 中 动词的 action=”voicemail.php” 将被触发,呼叫流转到语音留言。
2.5 实现语音留言功能:voicemail.php
此脚本负责播放留言提示并录制客户的语音留言。
<?php header('content-type: text/xml'); echo "n"; // 可选:记录请求日志 // file_put_contents('incoming_voicemail.log', "n" .json_encode($_REQUEST) . "n", FILE_APPEND);?> 您拨打的电话暂时无人接听。请在滴声后留言。
关键点:
:这是实现邮件通知的关键。当客户完成语音留言录制后,Twilio会立即向 mail.php 发送一个HTTP POST请求。这个请求中会包含录音的URL (RecordingUrl)、录音的SID (RecordingSid) 等重要信息。
2.6 实现语音留言邮件通知:mail.php
此脚本接收Twilio发送的录音信息,并将其通过电子邮件发送。
<?php // 确保Twilio请求是POST方法 if ($_SERVER['REQUEST_METHOD'] === 'POST') { // 获取Twilio发送的录音URL $recordingUrl = $_REQUEST['RecordingUrl']; $recordingSid = $_REQUEST['RecordingSid']; $callSid = $_REQUEST['CallSid']; // 配置邮件接收者和主题 $to = 'your_email@example.com'; // 替换为你的接收邮箱 $subject = '新的Twilio语音留言 - ' . date('Y-m-d H:i:s'); // 构造邮件内容 $message = "您收到一条新的Twilio语音留言。nn"; $message .= "录音链接: " . $recordingUrl . ".mp3n"; // Twilio录音URL默认不带扩展名,通常需要手动添加.mp3 $message .= "录音SID: " . $recordingSid . "n"; $message .= "呼叫SID: " . $callSid . "n"; $message .= "请点击链接收听语音留言。n"; // 设置邮件头部 $headers = 'From: noreply@yourdomain.com' . "rn" . 'Reply-To: noreply@yourdomain.com' . "rn" . 'X-Mailer: PHP/' . phpversion(); // 发送邮件 if (mail($to, $subject, $message, $headers)) { // 邮件发送成功,可以记录日志或不作处理 error_log("语音留言邮件发送成功到: " . $to); } else { // 邮件发送失败 error_log("语音留言邮件发送失败到: " . $to); } } // 响应Twilio,通常不需要返回TwiML,但可以返回一个空Response header('Content-type: text/xml'); echo '';?>
关键点:
$_REQUEST[‘RecordingUrl’]:Twilio会通过POST请求将录音文件的URL传递给此脚本。.mp3 扩展名:Twilio提供的 RecordingUrl 默认不带文件扩展名,为了方便某些邮件客户端或播放器识别,通常手动添加 .mp3。mail() 函数:此处使用PHP内置的 mail() 函数发送邮件。在生产环境中,建议使用更健壮的邮件库(如PHPMailer)或专业的SMTP服务,以确保邮件的送达率和可靠性。
三、注意事项与最佳实践
Webhook URL配置: 确保在Twilio控制台为你的号码正确配置了Webhook URL,指向 Handle-Incoming-Call.XML 或其所在的PHP脚本。所有PHP和XML文件都应部署在可公开访问的Web服务器上。安全性: 在生产环境中,强烈建议验证Twilio请求的签名,以确保请求确实来自Twilio,防止恶意请求。错误处理与日志记录: 在PHP脚本中加入错误处理机制和日志记录,以便在出现问题时能够追踪和调试。例如,file_put_contents(‘error.log’, …) 可以用于记录错误信息。邮件发送可靠性: PHP的 mail() 函数依赖服务器的邮件配置,可能存在送达率问题。对于重要的通知,推荐使用第三方SMTP服务(如SendGrid, Mailgun等)或PHPMailer等库进行邮件发送。TwiML动词理解: 深入理解Twilio TwiML动词(如, , , , , ) 的作用及其属性,是构建复杂呼叫流程的基础。特别是 action 和 statusCallback 属性,它们控制着Twilio在事件发生后的下一步行为。文件路径: 确保所有XML和PHP文件之间的相对路径是正确的,或者使用完整的URL路径。
四、总结
通过本教程,我们成功构建了一个Twilio呼叫处理系统,它不仅能够实现来电筛选和语音留言功能,还能够将录制的语音留言链接通过电子邮件自动发送给指定邮箱。这极大地提升了企业在处理未接来电时的效率和响应速度,确保了客户的重要留言能够及时被处理。您可以根据业务需求,在此基础上进一步扩展功能,例如将留言存储到数据库、集成CRM系统等。
以上就是Twilio呼叫拒接与语音留言邮件通知:PHP与TwiML实现教程的详细内容,更多请关注php中文网其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1340849.html
微信扫一扫
支付宝扫一扫