0

0

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

心靈之曲

心靈之曲

发布时间:2025-12-04 13:12:25

|

987人浏览过

|

来源于php中文网

原创

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免费学习笔记(深入)”;

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

关键点

Spacely AI
Spacely AI

为您的房间提供AI室内设计解决方案,寻找无限的创意

下载
  • :启用呼叫录音。
  • 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脚本根据内部人员的输入决定呼叫的去向。

<?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系统等。

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1942

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2117

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

1156

2024.11.28

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

431

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

373

2023.10.25

点击input框没有光标怎么办
点击input框没有光标怎么办

点击input框没有光标的解决办法:1、确认输入框焦点;2、清除浏览器缓存;3、更新浏览器;4、使用JavaScript;5、检查硬件设备;6、检查输入框属性;7、调试JavaScript代码;8、检查页面其他元素;9、考虑浏览器兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

196

2023.11.24

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

382

2023.06.29

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2107

2023.08.14

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

4

2026.03.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 13万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.3万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号