<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Fop2 Realtime PBX support]]></title><description><![CDATA[<p dir="auto">I run my own Asterisk PBX software and make use of Realtime databases.<br />
I have created the engine code to create my buttons from the realtime tables. I hope its useful to other users.<br />
/var/www/html/fop2/admin/functions.php<br />
....<br />
} else if($config_engine == 'realtime') {<br />
$return = realtime_check_extension_usage();<br />
.....</p>
<p dir="auto">/var/www/html/fop2/admin/functions-realtime.php<br />
&lt;?php<br />
function realtime_populate_contexts_from_tenants() {<br />
$panelcontexts[0]='GENERAL';<br />
return $panelcontexts;<br />
}<br />
// Same as functions-astdb but querying the asterisk database for sip peers and voicemail tables<br />
function realtime_check_extension_usage() {<br />
global $db, $astman, $conf;<br />
$extenlist = array();</p>
<pre><code>        $dbtablesip       = "asterisk.ps_endpoints AS ps_endpoints";
        $dbtableiax       = "asterisk.iaxfriends AS iaxfriends";
        $dbtablevoicemail = "asterisk.voicemail AS voicemail";
        $dbtablequeues = "asterisk.queues AS queues";
    
        // Extensions
        $fields= "CONCAT('PJSIP/',ps_endpoints.id) as dial,ps_endpoints.id as extension,ps_endpoints.context as context,callerid as name,ps_endpoints.id as mailbox,voicemail.password as vmpin,email";
        $results = $db-&gt;select($fields,$dbtablesip,"LEFT JOIN $dbtablevoicemail on ps_endpoints.id=voicemail.mailbox","","","","");
        if(is_array($results)) {
            $trunkcount=0;
            foreach ($results as $result) {
    
                if(preg_match("/[,&amp;]/",$result['dial'])) {
                    $partes = preg_split("/[,&amp;]/",$result['dial']);
                    $result['dial']=$partes[0];
                }
    
                $thisexten = $result['extension'];
                $vmpin     = $result['vmpin'];
                $vmemail   = $result['email'];
                $data = array();
                $data['name'] = $result['name'];
                $data['channel'] = $result['dial'];
                $data['mailbox'] = $result['mailbox'];
    
                if( $result['name'] != "") {
                   $data['type']='extension';
                   $data['exten']   = $thisexten;
                } else {
                   $trunkcount++;
                   $data['type']='trunk';
                   $data['exten']=$thisexten;
                }
    
                $data['context'] = $result['context'];
                $data['vmpin']   = $vmpin;
                $data['email']   = $vmemail;
                $data['customastdb'] = 'CF/'.$thisexten;
                $data['context_id'] = 0;
    
                $extenlist[$data['channel']]  = $data;
    
            }
        }
    
        //IAX2
        $fields= "CONCAT('IAX2/',name) as dial,name,context";
        $results = $db-&gt;select($fields,$dbtableiax);
        if(is_array($results)) {
            $trunkcount=0;
            foreach ($results as $result) {
    
                if(preg_match("/[,&amp;]/",$result['dial'])) {
                    $partes = preg_split("/[,&amp;]/",$result['dial']);
                    $result['dial']=$partes[0];
                }
    
                $thisexten = $result['name'];
                $vmpin     = "";
                $vmemail   = "";
                $data = array();
                $data['name'] = $result['name'];
                $data['channel'] = $result['dial'];
                $data['mailbox'] = "";
    
                $trunkcount++;
                $data['type']='trunk';
                $data['exten']=$thisexten;
    
                $data['context'] = $result['context'];
                $data['vmpin']   = $vmpin;
                $data['email']   = $vmemail;
                $data['customastdb'] = 'CF/'.$thisexten;
                $data['context_id'] = 0;
    
                $extenlist[$data['channel']]  = $data;
            }
        }
    
        // Queues
        $fields= "name";
        $results = $db-&gt;select($fields,$dbtablequeues,"","","","","");
        if(is_array($results)) {
            foreach ($results as $result) {
               $thisexten = $result['name'];
               $data = array();
               $data['channel'] = "QUEUE/$thisexten";
               $data['type']    = "queue";
               $data['context'] = "queue-$thisexten";
               $data['name']    = $thisexten;
               $data['exten']   = $thisexten;
               $data['context_id'] = 0;
               $extenlist[$data['channel']] = $data;
            }
        }
    
        return $extenlist;
    
    }
</code></pre>
]]></description><link>http://localhost:4567/topic/2921/fop2-realtime-pbx-support</link><generator>RSS for Node</generator><lastBuildDate>Tue, 27 Oct 2026 11:20:40 GMT</lastBuildDate><atom:link href="http://localhost:4567/topic/2921.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 23 Nov 2020 07:24:29 GMT</pubDate><ttl>60</ttl></channel></rss>