2014-10-09 55 views
0

我需要在瀏覽器上生成一個動態SIP地址,以便我的星號服務器可以將呼叫置於相同的SIP地址上。 這樣,我的網頁瀏覽器將成爲可以接聽電話的SIP客戶端。如何使用星號在瀏覽器上生成SIP地址

我可以看到webrtc是這種方式,但我不知道如何在瀏覽器上生成sip地址?

感謝

回答

1

您需要創建星號SIP用戶就像在任何其他情況下,並通過註冊的WebRTC它,但首先你必須啓用它的配置。聽到你有tutorial that I use to start

如果你想創建動態SIP用戶,你必須使用實時的星號,那麼你的配置將從數據庫中讀取。相關鏈接如何啓動與實時:https://wiki.asterisk.org/wiki/display/AST/Realtime+Database+Configuration https://wiki.asterisk.org/wiki/display/AST/SIP+Realtime,+MySQL+table+structure

+0

感謝我能做到這一點使用。 realTime DB,因此可以實時生成sip。這些字段的順序非常重要。 – 2014-11-18 05:17:41

1

您可以查看星號12我的崗位+實時+的WebRTC:Websocket connection fails with asterisk 11

最重要的是,添加一個WebService插入同行到表sippeers。您的系統將調用此Webservice以創建可立即用於使用SIP或任何其他註冊的對等點(SIP over WS/WSS,WebRTC ...)

如果您在使用Unix並需要.Net WebService ,你可以使用的NuSOAP和這樣的:(須藤納米的/ var/HTML/WWW/mywebservice.php`這是我用於測試的基本實現

<?php 
require_once("nusoap.php"); 


$namespace = "http://yourdomain.com"; 
// create a new soap server 
$server = new soap_server(); 
// configure your WSDL 
$server->configureWSDL("AsteriskRealtime"); 
// set your namespace 
$server->wsdl->schemaTargetNamespace = $namespace; 
// register your WebMethod 
$server->register(
       // method name: 
       'HelloWorld', 
      // parameter list: 
       array('name'=>'xsd:string'), 
       // return value(s): 
       array('return'=>'xsd:string'), 
       // namespace: 
       $namespace, 
       // soapaction: (use default) 
       false, 
       // style: rpc or document 
       'rpc', 
       // use: encoded or literal 
       'encoded', 
       // description: documentation for the method 
       'A simple hello world'); 



$server->wsdl->addComplexType(
    'AsteriskExtensions', 
    'complexType', 
    'struct', 
    'all','', 
    array(
     'name' => array('name' => 'name', 'type' => 'xsd:string'), 
     'custom_id' => array('name' => 'custom_id', 'type' => 'xsd:string') 
    ) 
); 

$server->wsdl->addComplexType(
    'AsteriskExtensionsArray', 
    'complexType', 
    'array','', 
    'SOAP-ENC:Array',array(), 
    array(
     array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:AsteriskExtensions[]') 
    ), 
    'tns:AsteriskExtensions' 
); 


$server->register(
       // method name: 
       'GetRegisteredExtensions', 
       // parameter list: 
       array(), 
       // return value(s): 
       array('AsteriskExtensions' => 'tns:AsteriskExtensionsArray'), 
       // namespace: 
       $namespace, 
       // soapaction: (use default) 
       false, 
       // style: rpc or document 
       'rpc', 
       // use: encoded or literal 
       'encoded', 
       // description: documentation for the method 
       'List the extensions registered in AsteriskRealtime database.'); 


$server->register(
       // method name: 
       'AddUpdateExtension', 
       // parameter list: 
       array('name' => 'xsd:string', 'password' => 'xsd:string', 'custom_id' => 'xsd:string'), 
       // return value(s): 
       array('return' => 'xsd:string'), 
       // namespace: 
       $namespace, 
       // soapaction: (use default) 
       false, 
       // style: rpc or document 
       'rpc', 
       // use: encoded or literal 
       'encoded', 
       // description: documentation for the method 
       'Add or Update an extension in AsteriskRealtime database. NAME is the PRIMARY KEY. Returns OK for success or ERR for failure.'); 



$server->register(
       // method name: 
       'DeleteExtension', 
       // parameter list: 
       array('name' => 'xsd:string'), 
       // return value(s): 
       array('return' => 'xsd:string'), 
       // namespace: 
       $namespace, 
       // soapaction: (use default) 
       false, 
       // style: rpc or document 
       'rpc', 
       // use: encoded or literal 
       'encoded', 
       // description: documentation for the method 
       'Delete an extension registered in AsteriskRealtime database. Returns OK for success or ERR for failure. '); 

$server->register(
       // method name: 
       'GetByCustomId', 
       // parameter list: 
       array('name' => 'xsd:string'), 
       // return value(s): 
       array('AsteriskExtensions' => 'tns:AsteriskExtensionsArray'), 
       // namespace: 
       $namespace, 
       // soapaction: (use default) 
       false, 
       // style: rpc or document 
       'rpc', 
       // use: encoded or literal 
       'encoded', 
       // description: documentation for the method 
       'Gets an extension or a list of extensions for a CustomID. '); 






function HelloWorld($sName) 
{ 
    return 'Hello ' . $sName . '! Hello world!'; 
} 

function GetRegisteredExtensions() 
{ 
    $conn=odbc_connect('your-asterisk-connector-as-in-odbcinst.ini','your-mysql-user','your-mysql-password'); 
    $result = array(); 
    $req="SELECT * FROM `sippeers`"; 
    $res=odbc_exec($conn,$req); 
    while($obj=odbc_fetch_object($res)) { 
     $result[] = array('name' => $obj->name, 'custom_id' => $obj->custom_id); 
    } 
    return $result; 
} 

function AddUpdateExtension($name,$password,$custom_id) 
{ 
     $conn=odbc_connect('your-asterisk-connector-as-in-odbcinst.ini','your-mysql-user','your-mysql-password'); 
    $req="DELETE FROM `sippeers` WHERE `name` = '" . $name . "'"; 
     $res=odbc_exec($conn,$req); 
     $req="insert into `sippeers` (`name`, `ipaddr`, `port`, `regseconds`, `defaultuser`, `fullcontact`, `regserver`, `useragent`, `lastms`, `host`, `type`, `context`, `permit`, `deny`, `secret`, `md5secret`, `remotesecret`, `transport`, `dtmfmode`, `directmedia`, `nat`, `callgroup`, `pickupgroup`, `language`, `disallow`, `allow`, `insecure`, `trustrpid`, `progressinband`, `promiscredir`, `useclientcode`, `accountcode`, `setvar`, `callerid`, `amaflags`, `callcounter`, `busylevel`, `allowoverlap`, `allowsubscribe`, `videosupport`, `maxcallbitrate`, `rfc2833compensate`, `mailbox`, `session-timers`, `session-expires`, `session-minse`, `session-refresher`, `t38pt_usertpsource`, `regexten`, `fromdomain`, `fromuser`, `qualify`, `defaultip`, `rtptimeout`, `rtpholdtimeout`, `sendrpid`, `outboundproxy`, `callbackextension`, `timert1`, `timerb`, `qualifyfreq`, `constantssrc`, `contactpermit`, `contactdeny`, `usereqphone`, `textsupport`, `faxdetect`, `buggymwi`, `auth`, `fullname`, `trunkname`, `cid_number`, `callingpres`, `mohinterpret`, `mohsuggest`, `parkinglot`, `hasvoicemail`, `subscribemwi`, `vmexten`, `autoframing`, `rtpkeepalive`, `call-limit`, `g726nonstandard`, `ignoresdpversion`, `allowtransfer`, `dynamic`, `path`, `supportpath`, `avpf`, `encryption`, `dtlsenable`, `dtlsverify`, `dtlscertfile`, `dtlsprivatekey`, `dtlssetup`, `force_avp`, `custom_id`) values('" . $name . "',NULL,NULL,NULL,'" . $name . "','','',NULL,'0','dynamic','friend','default',NULL,NULL,'" . $password . "',NULL,NULL,'udp,ws,wss','auto','no',NULL,NULL,NULL,NULL,NULL,'ulaw,alaw,g729,h264,g719,opus,vp8,gsm',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'no',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'yes','',NULL,'yes','yes','yes','no','/etc/asterisk/keys/asterisk.pem','/etc/asterisk/keys/asterisk.pem','actpass','yes','" . $custom_id . "')"; 
     $res=odbc_exec($conn,$req); 

     return 'OK'; 
} 


function DeleteExtension($name) 
{ 
     $conn=odbc_connect('your-asterisk-connector-as-in-odbcinst.ini','your-mysql-user','your-mysql-password'); 
     $req="DELETE FROM `sippeers` WHERE `name` = '" . $name . "'"; 
     $res=odbc_exec($conn,$req); 
     return 'OK'; 
} 

function GetByCustomId($name) 
{ 
    $conn=odbc_connect('your-asterisk-connector-as-in-odbcinst.ini','your-mysql-user','your-mysql-password'); 
     $result = array(); 
     $req="SELECT * FROM `sippeers` WHERE `custom_id` = '" . $name . "'"; 
     $res=odbc_exec($conn,$req); 
     while($obj=odbc_fetch_object($res)) { 
       $result[] = array('name' => $obj->name, 'custom_id' => $obj->custom_id); 
     } 
     return $result; 
} 


// Get our posted data if the service is being consumed 
// otherwise leave this data blank. 
$POST_DATA = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : ''; 

// pass our posted data (or nothing) to the soap service 
$server->service($POST_DATA); 
exit(); 
?>