从PHP脚本进行SIP注册

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (212)

目标:使用LAMP服务器注册为SIP服务器和端点。

原因:拦截特定分机的电话,因为它们碰巧与PHP CRM交互。

SIP服务器不使用Asterisk,因为必须使其足够通用以处理任何SIP服务。

我正在使用Level7Systems编写的一个方便的PHP SIP库 - 虽然这个特定的包没有很多例子或支持。

我的代码是:

  $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我看不到任何UDP数据包命中端口5060或5061到目标服务器。

代码将在等待来自SIP服务器的回复时运行10秒,因为它应该返回404响应。但它永远不会。

可以肯定的是,我也禁用了我的防火墙。

任何人都有使用PHP注册SIP端点的经验吗?

有没有更好的方法呢?

提问于
用户回答回答于

事实证明,这@sip-server.com实际上并不是一个活跃的SIP服务器。

这更像@sip.sip-server.com是需要被ping,并且一旦发生这种变化,一切都按预期工作。

谢谢。

用户回答回答于

我的建议是添加一个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。这是一个很好的指南,了解如何使用它们。

扫码关注云+社区

领取腾讯云代金券