通过PHP脚本进行SIP注册

时间:2018-07-08 10:31:54

标签: php sip voip sip-server

目标:使用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端点的经验吗?

有更好的方法吗?

2 个答案:

答案 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操作,一旦发生更改,一切都会按预期进行。

谢谢。