目标:使用LAMP服务器注册为SIP服务器并作为其端点。
原因::在碰巧与PHP CRM交互时拦截特定扩展的电话。
SIP服务器未使用Asterisk,因为必须使其足够通用以处理任何SIP服务。
我使用的是方便的PHP SIP Library written by Level7Systems-尽管此特定程序包没有很多示例或支持。
我的代码是:
$api1 = new PhpSIP('x.x.x.x'); //My Servers public IP
$api1->setMethod('REGISTER');
$api1->setFrom('sip:111@my-dns.com');
$api1->setUri('sip:111@sip-server.com');
$api1->setUsername('12345');
$api1->setPassword('abc123');
$res = $api1->send();
代码成功执行,创建一个套接字(和一个锁定文件),绑定到一个端口,并应该将UDP数据包发送到SIP服务器...尽管,当我运行tcpdump
时,我没有查看到达目标服务器端口5060或5061的所有UDP数据包。
等待SIP服务器的回复时,该代码将运行10秒钟,因为它应返回404响应。但这从来没有。
当然,我也禁用了防火墙。
任何人都具有使用PHP注册SIP端点的经验吗?
有更好的方法吗?
答案 0 :(得分:1)
我的建议是添加一个try ... catch以查看例程中发生的情况。
try {
$api1 = new PhpSIP('x.x.x.x'); //My Servers public IP
$api1->setMethod('REGISTER');
$api1->setFrom('sip:111@my-dns.com');
$api1->setUri('sip:111@sip-server.com');
$api1->setUsername('12345');
$api1->setPassword('abc123');
$res = $api1->send();
echo "res: $res\n";
} catch (Exception $e) {
echo $e->getMessage()."\n"; }
但是,如果您使用的是SIP电话,另一种解决方案是尝试使用操作URL /活动URI。这里是一个很好的guide,以了解如何使用它们。
答案 1 :(得分:0)
因此,事实证明@sip-server.com
实际上不是活动的SIP服务器。
更像@sip.sip-server.com
,需要对其进行ping操作,一旦发生更改,一切都会按预期进行。
谢谢。