Twilio呼叫拒接与语音留言邮件通知:PHP与TwiML实现教程


Twilio呼叫拒接与语音留言邮件通知:PHP与TwiML实现教程

本教程详细指导如何使用twilio、php和twiml实现一个智能呼叫处理系统。该系统能够筛选来电,在用户拒接时自动将来电转接到语音留言,并将录制的语音留言链接通过电子邮件发送给指定邮箱,确保重要留言不会遗漏,从而提升企业通信效率和客户服务体验。

一、系统架构与呼叫流程概述

本系统旨在为企业提供一个灵活的来电处理机制。当客户拨打Twilio号码时,系统将首先播放欢迎语,然后尝试将来电转接给内部人员进行筛选。如果内部人员选择拒接,或者未能在规定时间内接听,系统将自动将来电转接到语音留言服务,并在留言录制完成后,将录音文件的链接通过电子邮件发送给预设的邮箱。

整个呼叫流程通过一系列Twilio TwiML(Twilio Markup Language)文件和PHP脚本协同完成,其核心步骤如下:

  1. 来电触发: 客户拨打Twilio号码,Twilio向配置的Webhook URL发送请求。
  2. 主入口处理: Handle-Incoming-Call.XML 文件作为入口,将请求重定向到PHP脚本。
  3. 呼叫路由与筛选准备: Handle-Extension.PHP 脚本播放欢迎语,并尝试通过动词将来电转接给内部号码。在此阶段,我们配置了呼叫录音功能 (record="true"),并指定了当转接失败或被叫方挂断时,Twilio应调用的回调URL (action="voicemail.php")。同时,通过动词的url属性,我们实现了呼叫筛选功能,即在内部人员接听前播放筛选提示。
  4. 来电筛选: Screen-Caller.XML 文件在内部人员接听前播放提示,要求其输入数字来决定是否接听。
  5. 处理筛选结果: Handle-Screen-Input.PHP 脚本根据内部人员的输入,决定是连接呼叫还是挂断。
  6. 语音留言录制: 如果呼叫被拒接或未接通,Twilio将调用 voicemail.php。此脚本会播放留言提示,并使用动词录制客户留言。关键在于,的action属性被设置为 mail.php,这意味着录音完成后,Twilio将向 mail.php 发送包含录音链接的请求。
  7. 语音留言邮件通知: mail.php 脚本接收到Twilio的请求后,提取录音链接,并将其通过电子邮件发送到指定邮箱。

二、详细实现步骤与代码示例

2.1 主入口:Handle-Incoming-Call.XML

此XML文件是Twilio Webhook的第一个响应,它简单地将控制权重定向到 handle-extension.php。

<?xml version="1.0" encoding="UTF-8"?>
<Response>
    <Redirect>handle-extension.php</Redirect>
</Response>

2.2 呼叫路由与筛选准备:Handle-Extension.PHP

此PHP脚本负责播放欢迎语,并尝试将呼叫转接给内部号码。

<?php
    header('Content-type: text/xml');
    echo '<?xml version="1.0" encoding="UTF-8"?>';
    echo '<Response>';

    // 播放欢迎语
    echo '<Say voice="alice">感谢您的来电,我的业务</Say>';

    // 尝试拨号给内部号码,并开启录音。
    // timeout: 拨号等待时间
    // action: 如果拨号失败或被叫方挂断,Twilio将请求此URL
    echo '<Dial record="true" timeout="15" action="voicemail.php">';
    // 内部号码,url属性用于呼叫筛选
    echo '<Number url="screen-caller.xml">+10000000000</Number>'; // 替换为你的内部号码
    echo '</Dial>';

    echo '</Response>';
?>

关键点

  • :启用呼叫录音。
  • action="voicemail.php":当拨号失败(如无人接听、忙线)或被叫方(即内部人员)挂断时,Twilio会将控制权交给 voicemail.php。
  • :在内部人员接听电话之前,Twilio会向 screen-caller.xml 发送请求,播放提示语并等待输入。

2.3 来电筛选:Screen-Caller.XML

此XML文件在内部人员接听前播放提示,询问是否接听。

<?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>

关键点

  • gits="1">:收集一个数字输入,并将其发送到 handle-screen-input.php 进行处理。

2.4 处理筛选结果:Handle-Screen-Input.PHP

此PHP脚本根据内部人员的输入决定呼叫的去向。

Krikey AI Krikey AI

Krikey AI 113 查看详情 Krikey AI
<?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) {
        // 如果按下1,连接呼叫
        echo '<Say voice="alice">正在连接,请说你好。</Say>';
    } else {
        // 如果按下2,挂断电话。此时,由于Handle-Extension.PHP中的Dial action,
        // 呼叫将转到 voicemail.php。
        echo '<Hangup />';
    }

    echo '</Response>';
?>

关键点

  • 如果内部人员按下 2 选择拒接,Handle-Screen-Input.PHP 会发送 指令。此时,Handle-Extension.PHP 中 动词的 action="voicemail.php" 将被触发,呼叫流转到语音留言。

2.5 实现语音留言功能:voicemail.php

此脚本负责播放留言提示并录制客户的语音留言。

<?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>
  <!--
    关键改动:将 recordingStatusCallback 改为 action。
    action 属性在录音完成后立即触发,并将控制权交给 mail.php。
    Twilio 会向 mail.php 发送包含 RecordingUrl 等参数的请求。
  -->
  <Record action="mail.php"></Record>
</Response>

关键点

  • :这是实现邮件通知的关键。当客户完成语音留言录制后,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语音留言。\n\n";
        $message .= "录音链接: " . $recordingUrl . ".mp3\n"; // Twilio录音URL默认不带扩展名,通常需要手动添加.mp3
        $message .= "录音SID: " . $recordingSid . "\n";
        $message .= "呼叫SID: " . $callSid . "\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)) {
            // 邮件发送成功,可以记录日志或不作处理
            error_log("语音留言邮件发送成功到: " . $to);
        } else {
            // 邮件发送失败
            error_log("语音留言邮件发送失败到: " . $to);
        }
    }

    // 响应Twilio,通常不需要返回TwiML,但可以返回一个空Response
    header('Content-type: text/xml');
    echo '<?xml version="1.0" encoding="UTF-8"?><Response/>';
?>

关键点

  • $_REQUEST['RecordingUrl']:Twilio会通过POST请求将录音文件的URL传递给此脚本。
  • .mp3 扩展名:Twilio提供的 RecordingUrl 默认不带文件扩展名,为了方便某些邮件客户端或播放器识别,通常手动添加 .mp3。
  • mail() 函数:此处使用PHP内置的 mail() 函数发送邮件。在生产环境中,建议使用更健壮的邮件库(如PHPMailer)或专业的SMTP服务,以确保邮件的送达率和可靠性。

三、注意事项与最佳实践

  1. Webhook URL配置: 确保在Twilio控制台为你的号码正确配置了Webhook URL,指向 Handle-Incoming-Call.XML 或其所在的PHP脚本。所有PHP和XML文件都应部署在可公开访问的Web服务器上。
  2. 安全性: 在生产环境中,强烈建议验证Twilio请求的签名,以确保请求确实来自Twilio,防止恶意请求。
  3. 错误处理与日志记录: 在PHP脚本中加入错误处理机制和日志记录,以便在出现问题时能够追踪和调试。例如,file_put_contents('error.log', ...) 可以用于记录错误信息。
  4. 邮件发送可靠性: PHP的 mail() 函数依赖服务器的邮件配置,可能存在送达率问题。对于重要的通知,推荐使用第三方SMTP服务(如SendGrid, Mailgun等)或PHPMailer等库进行邮件发送。
  5. TwiML动词理解: 深入理解Twilio TwiML动词(如, , , , , ) 的作用及其属性,是构建复杂呼叫流程的基础。特别是 action 和 statusCallback 属性,它们控制着Twilio在事件发生后的下一步行为。
  6. 文件路径: 确保所有XML和PHP文件之间的相对路径是正确的,或者使用完整的URL路径。

四、总结

通过本教程,我们成功构建了一个Twilio呼叫处理系统,它不仅能够实现来电筛选和语音留言功能,还能够将录制的语音留言链接通过电子邮件自动发送给指定邮箱。这极大地提升了企业在处理未接来电时的效率和响应速度,确保了客户的重要留言能够及时被处理。您可以根据业务需求,在此基础上进一步扩展功能,例如将留言存储到数据库、集成CRM系统等。

以上就是Twilio呼叫拒接与语音留言邮件通知:PHP与TwiML实现教程的详细内容,更多请关注php中文网其它相关文章!


# 在内部  # 云南seo软件方案  # 第三方支付推广营销策略  # 绍兴建设网站托管  # 郑州关键词搜索排名技术  # 网站推广网站优化方法  # 网站优化快速排名品牌  # 酒店网站推广案例  # 外包网站建设什么意思  # 响水盐城网站建设  # 如何注册好的网站推广平台  # 发送到  # 并将  # 发送给  # 扩展名  # php  # 在此  # 您的  # 电子邮件  # 按下  # 邮件发送  # red  # php脚本  # 邮箱  # 路由  # ai  # app  # json  # git  # js 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 睡觉时心跳快是什么原因 夜间心悸如何应对  MySQL多重JOIN技巧:高效关联同一表获取多角色信息  百度小说看书时如何翻页_百度小说手动翻页与自动翻页设置  Sublime怎么格式化HTML代码_Sublime前端代码美化插件使用指南  解决C#跨线程访问XML对象的异常 安全的并发XML处理模式  word邮件合并怎么插入个性化图片_Word邮件合并插入个性化图片方法  除了Copilot,还有哪些值得一试的VS Code AI插件?  我的世界官方网址入口 我的世界游戏主页直达入口  漫蛙官网(首页入口)_漫蛙漫画稳定访问教程分享  Lar*el Eloquent:高效删除多对多关系中无关联子记录的父模型  招商淘客入门指南  苹果手机怎么合并照片_苹果手机合并多张照片的操作方法  猫眼app抢票快还是小程序快  在PySimpleGUI中实现键盘按键绑定按钮事件  J*aScript装饰器_元编程实战  J*a实现任务清单管理_集合框架综合入门练手  QQ邮箱PC端登录页面_QQ邮箱网页版登录界面  荣耀Magic6 Pro拍照成像偏暗_荣耀Magic6 Pro夜景优化  mysql导入sql文件能分批导入吗_mysql分批次导入大sql文件的实用技巧  QQ网站入口直接登录 QQ官方正版登录页面  《桃源记2》资源采集攻略  《大周列国志》皇帝律令功能介绍  Golang如何实现HTTP请求重试机制_Golang HTTP请求错误处理策略  TikTok搜索结果不显示怎么办 TikTok搜索刷新与优化方法  《华夏千秋》龙女试炼功法获取方法  Excel宏怎么删除_Excel中删除宏的详细操作流程  济南公交卡手机充值指南  从J*a应用程序中导出MySQL表数据的技术指南  2025SNH48年度青春盛典门票价格及购买方式  CodeIgniter 3 中基于 MySQL 数据高效生成动态图表教程  《oppo商城》维修服务位置  基于键值条件高效映射 Pandas DataFrame 多列数据  PHP 4 函数中引用参数的默认值限制与解决方案  J*aScript对象中深度嵌套URL键的查找与更新策略  优化响应式标题底部边框:CSS实现技巧与最佳实践  b站如何管理订阅_b站订阅标签分类管理  圆通快递包裹轨迹查询 圆通速递快件实时位置跟踪  BunnyStream TUS视频上传指南:解决401认证错误与参数配置  在J*a中如何实现在线问答与评分系统_问答评分项目开发方法说明  Leaflet地图弹出窗口图片动态显示:避免缺失图标的专业指南  win11怎么设置默认终端为Windows Terminal Win11替代CMD和PowerShell【技巧】  Lar*el 关联查询:同时筛选父表与子表数据的高效策略  酷狗音乐多音轨设置教程  Dagster资产间数据传递与用户配置管理教程  yandex网页版直接登录 yandex官方入口平台访问方法  德邦物流在线查询系统 德邦快递货物运输追踪  冬季去寒冷地区旅游,以下哪种做法有助于缓解冻伤  《梦想世界:长风问剑录》药师一图流分享  Git命令与VS Code UI操作的对应关系解析  c++中的const关键字用法大全_c++ const正确使用指南 

 2025-12-04

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.