如何使用 PHP 和您的 MySQL 数据库处理约会和发送自动提醒电话






4.96/5 (10投票s)
本文介绍了一个简单的示例,说明如何借助 PHP 将关于预约和会议的自动提醒插入到 MySQL 表中。
引言
在本文中,我将通过一个简单的示例,展示如何借助 PHP 将关于预约和会议的提醒插入到 MySQL 表中。然后,在需要时,可以发起提醒电话给指定的电话号码。我假设您已具备 PHP 和 SQL 的基本知识。要测试电话功能,您还需要一个软电话。
背景
我将通过一个简单的示例向您展示本文将要执行的操作。在此示例中,将有三个参与者。您的应用程序,它读取 — 并借助 PHP 代码 — 将您的提醒存储到数据库中。一个包含提醒的数据库。一个 PBX,它从数据库读取数据,发起呼叫,并为被呼叫者播报提醒信息。
准备您的数据库服务器
在此示例中,您将需要两个表。一个表用于存储您的提醒(电话号码、提醒时间、呼叫数据),另一个表用于存储在呼叫期间应读取的消息或其他可能的命令(播放音频文件、录制呼叫、发送短信或电子邮件等)。让我们来看第一个表,您可以使用 MySQL 并运行以下 SQL 脚本来创建它。
CREATE TABLE `ozmlout` (
`ID` int(10) NOT NULL AUTO_INCREMENT,
`DialedNumber` varchar(40) NOT NULL,
`Status` varchar(40) DEFAULT NULL,
`Duration` int(10) DEFAULT NULL,
`ScriptId` int(10) DEFAULT NULL,
`RecordUrl` varchar(150) DEFAULT NULL,
`StartTime` datetime DEFAULT NULL,
`ScheduledTime` datetime DEFAULT NULL,
PRIMARY KEY (`ID`))
代码示例 1 – 创建 ozmlout 表
正如您所见,它不仅包含被呼叫者的电话号码和提醒时间,还包含其他呼叫数据。这些呼叫数据包括:
Status
:它指示您的提醒的实际状态(Init
、InCall
、Completed
等)Duration
:呼叫的总时长ScriptID
:一旦呼叫被接通,将从ozmlscrpit
表中执行Extension
具有该 ID 的OzML
脚本。RecordUrl
:如果命令中包含呼叫录音,此参数将指示可以在何处收听对话。StartTime
:呼叫开始的时间。ScheduledTime
:如果实际时间已过日期,将发起呼叫。
然后,让我们生成第二个表。在此表中,将包含在配置呼叫后将执行的 OzML 脚本。所有脚本都有一个 ID,我们可以参考它在先前生成的表中。包含 OzML
脚本本身的列也在这里,我们可以在接听电话时指定要运行的内容。通过运行以下 SQL 脚本,可以创建该表。
CREATE TABLE `ozmlscripts` (
`ID` int(10) NOT NULL AUTO_INCREMENT,
`Ozml` varchar(10000) NOT NULL,
PRIMARY KEY (`ID`))
代码示例 2 – 创建 ozmlscripts 表
配置 PBX
数据库构建完成后,也要配置 PBX。在本文中,我们使用 Ozeki Phone System XE 作为 PBX。您可以从 www.ozekiphone.com 下载。当然,也有类似的 PBX,但对于实际练习的执行,我认为这个是最方便和可靠的。此外,处理和配置系统组件也相当容易。作为第一步,让我们创建 SQL OzML 扩展。
初始步骤 & SQL OzML
- 步骤 1:下载并安装 Ozeki Phone System XE 到您的 PC
- 步骤 2:在浏览器中打开 http://127.0.0.1:7777 地址,并使用您在安装过程中提供的用户名/密码组合登录。
- 步骤 3:在主屏幕上,单击“扩展”部分顶部(右侧)的“添加”按钮。
- 步骤 4:在出现的列表中,借助“安装”按钮选择“SQL OzML”。
- 步骤 5:填写“数据库连接”选项卡上的注册信息。
- 步骤 6:单击顶部的“呼出呼叫”选项卡。将“SQL 语句模板”块的以下部分更改为:
SELECT id, dialednumber, scriptid FROM ozmlout WHERE Status='call'至此
SELECT Id, DialedNumber, ScriptId FROM ozmlout WHERE Status='call' and (ScheduledTime < Now() or ScheduledTime IS NULL)
完成这些步骤后,您就完成了 OzML SQL 扩展的创建。现在,请连接一个软电话到将转发提醒电话的 PBX。我们将使用 X-Lite 软电话,因为它很简单,但您当然也可以使用其他可用的软电话。
将软电话连接到 PBX
- 步骤 1:下载并安装 X-Lite 到您的 PC(http://www.counterpath.com/x-lite.html)
- 步骤 2:启动它,然后选择“软电话/账户设置”菜单。
- 步骤 3:填写“用户信息”块。域应该是先前安装并运行的 Ozeki Phone System XE 的 IP 地址(例如 127.0.0.1)。用户 ID 应该是 888,这将是您的 X-Lite 电话号码。
- 步骤 4:保存。如果您正确完成了所有设置,您将在 Ozeki Phone System XE 扩展列表中看到“软电话 888”出现。
Using the Code
您已经完成了数据库的构建,并且已经安装了 PBX 和软电话。您可以开始使用手中的设备了。
首先,您应该创建两个 HTML 表单,用于将数据发送到数据库。
预约表单
此 HTML 表单用于存储和发送
- 应将呼叫提醒发送到哪个电话号码
- 提醒应该在何时发送
- 挂断电话时应运行哪个 OzML 脚本(脚本 ID)。
为此,您只需创建以下表单即可。
<form action="https:///HandleAppointments.php">
<label>DialedNumber:</label> <input name="DialedNumber"
type="text" value="+3670123456789"/>
<label>ScheduledDate:</label> <input name="ScheduledDate"
type="date" value="2013-10-03"/>
<label>ScheduledTime:</label> <input name="ScheduledTime"
type="time" value="10:00"/>
<label>Script ID:</label> <input name="ScriptId"
type="number" value="1"/>
<input id="ResultDiv" type="hidden" value="resultDivOfInsert" />
<input type="submit" />
</form>
代码示例 3 – 预约表单
正如您所见,在提交表单时将调用 HandleAppoinment.php 文件。此 PHP 文件将处理您的查询并将给定的预约数据插入到数据库中。这样的 PHP 文件可能如下所示。
<?php
if(isset($_POST['DialedNumber']) && isset($_POST['ScheduledDate'])
&& isset($_POST['ScheduledTime']) && isset($_POST['ScriptId']) )
{
$con=mysqli_connect("127.0.0.1","root","","mysql");
//check the state of the connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
exit();
}
$tableExist = mysqli_query($con,"SELECT 1 FROM 'ozmlout'");
//create table, if it is not exist
if ($tableExist !== true)
{
if(mysqli_query($con,"CREATE TABLE ozmlout(
ID int(10) NOT NULL AUTO_INCREMENT,
DialedNumber varchar(40) NOT NULL,
Status varchar(40) DEFAULT NULL,
Duration int(10) DEFAULT NULL,
ScriptId int(10) DEFAULT NULL,
RecordUrl varchar(150) DEFAULT NULL,
StartTime datetime DEFAULT NULL,
ScheduledTime datetime DEFAULT NULL,
PRIMARY KEY (ID))"))
{
echo "Table ozmlout created. ";
}
}
//insert data
$state = mysqli_query($con,"INSERT INTO ozmlout (ID, DialedNumber,
Status, Duration, ScriptId, RecordUrl, StartTime, ScheduledTime)
VALUES (NULL, '".$_POST['DialedNumber']."',
'call', NULL, ".$_POST['ScriptId'].", NULL,
NULL, '".$_POST['ScheduledDate']." ".
$_POST['ScheduledTime']."')");
mysqli_close($con);
if ($state == 1)
echo "Success";
else
echo "Unsuccess";
}
else
echo "Unsuccess";
?>
代码示例 4 – 将预约插入 ozmlout 表
它尝试使用默认数据连接到 MySQL 数据库。如果您有其他设置,也请在此处使用。当您成功连接后,它将使用 mysqli_query
命令在先前创建的 ozmlout
表上执行一个简单的 insert
。此外,如果不存在这样的表,它会在 insert
之前创建它。
它以 Echo 的形式向调用表单提供成功反馈。我注意到,在我们插入 NULL
值的地方,该值将在稍后的处理阶段进行更改,例如 State
列。当发起呼叫时,其 PBX SQL OzML 扩展将对表执行修改,将其值更改为 Calling
状态。通过此措施,我们实现了扩展不会(至少根据基本 SQL 模板)重复呼叫一个电话号码。
此外,您还可以通过一个简单的 PHP 文件来获取数据库中的当前设置的提醒。如果您想进一步了解这方面的信息,请下载示例代码,并查看 GetData.php 的工作原理。
脚本表单
通过此 HTML 表单,您可以将 OzML
脚本插入数据库。如果将其正确连接到每个 ozmlout
行,则脚本中的命令将在接听电话时运行。我举一个示例以更好地理解。
<Response>
<Speak >
This text will be read to the called user
</Speak>
</Response>
代码示例 5 – 用于向被呼叫者说出文本的 OzML 命令
这只是一个简单的 Speak
命令。此外,Ozeki Phone System XE 系统中还有许多 其他命令,例如用于发送短信和电子邮件、录制呼叫、转发呼叫以及其他许多功能。
您的表单可以如下所示。
<form action="https://:8080/HandleScripts.php">
<label>OzML Commands</label>
<input type="text" size="80"
name="OzMLCommands" value="<Speak>
This text will read to the called user</Speak>"/>
<input id="ResultDiv" type="hidden"
value="resultDivOfInsert" />
<input type="submit" />
</form>
代码示例 6 – 脚本表单
在提交事件运行时,PHP 文件将与前一个情况类似地运行。区别仅在于现在您将数据插入 ozmlscripts
表。
在附加的示例代码中,数据通过 JQuery 异步发布,并使用 ID 为 ResultDiv
的输入。这仅仅是因为实际站点不会重新加载,而是通过 Ajax post,我们将 PHP 文件的返回值加载到一个为此目的保留的 div
中。
使用程序
您已经完成了最困难的练习,现在只需要尝试您创建的应用程序。
首先,您需要检查以下程序是否正在运行:
- MySql
- Ozeki Phone System XE
- X-Lite
完成这些后,在您的 Web 服务器上运行您编写的两个表单 — 或者下载示例代码并通过您的 Web 服务器在每个浏览器窗口中运行它们。
首先,我们应该使用 Scripts
表单在 ozmlscripts
记录中添加新行。
单击“提交”按钮。您将看到关于插入成功的消息。如果此消息是“Unsuccess”,您应该查看 HandleScripts.php 文件,并检查您的登录数据是否正确。
查看数据库,此 OzML 脚本获得了什么 ID(默认为 1,并且每次插入一行时都会增加)记住 ID,然后转到预约表单!
输入您想要接收提醒的电话号码。在这种特定情况下,这将是 X-Lite 软电话的注册线路的电话号码。在我们的示例中,它是 888。
输入提醒的日期和时间。当该时间到来时,SQL OzML 扩展会发起呼叫。您可以在扩展的配置界面上设置它检查数据库内容的频率。
最后一步是输入您之前创建的脚本 ID。一旦呼叫者接听,那里指定的命令就会运行。
单击“提交”按钮。您可以从返回的消息中看到插入的成功。如果此消息是“Unsuccess”,请查看 HandleAppointment.php 文件,并检查是否正确输入了所有登录数据。
在此之后,示例记录将存在于 Script
和 Appointment
表中。如果您一切顺利,您将在指定的时间收到一个电话,并在电话中播放设置好的文本。
如果未发生这种情况,我建议您检查 SQL OzML 扩展的日志。您可以从中轻松得出问题所在。通过单击“主页”上 SQL OzML 扩展旁边的“打开”按钮,可以访问此日志。如果您仍然感到困惑,可以通过选择顶部菜单中的“PBX 功能/日志”菜单来获取更多信息。
至此,您就完成了自己的预约提醒应用程序。如果您觉得有必要,当然可以对所创建的应用程序进行任何进一步的免费开发。
参考文献
- 您可以免费下载 Wampserver,其中包含 MySQL,并且可以借助它在您自己的 PC 上运行您编写的应用程序:http://www.wampserver.com/en/
- 您可以下载 Ozeki Phone System XE,并在 www.ozekiphone.com 找到更多帮助。
- X-Lite 软电话可以从这个网站下载:http://www.counterpath.com/x-lite.html
祝您好运!