簡體   English   中英

通過PHP腳本進行SIP注冊

[英]SIP Registration from PHP Script

目標:使用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端點的經驗嗎?

有更好的方法嗎?

我的建議是添加一個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。 這里是了解如何使用它們的好指南

因此,事實證明@sip-server.com實際上不是活動的SIP服務器。

需要更像@sip.sip-server.com ,一旦發生更改,一切都會按預期進行。

謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM