<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://docs.yate.ro/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://docs.yate.ro/wiki/index.php?action=history&amp;feed=atom&amp;title=Api_PHP_to_Javascript</id>
		<title>Api PHP to Javascript - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://docs.yate.ro/wiki/index.php?action=history&amp;feed=atom&amp;title=Api_PHP_to_Javascript"/>
		<link rel="alternate" type="text/html" href="https://docs.yate.ro/wiki/index.php?title=Api_PHP_to_Javascript&amp;action=history"/>
		<updated>2026-05-13T09:19:50Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.19.1</generator>

	<entry>
		<id>https://docs.yate.ro/wiki/index.php?title=Api_PHP_to_Javascript&amp;diff=7707&amp;oldid=prev</id>
		<title>Ximik777: Created page with &quot;Api script to call functions in Yate Javascript.  ==Usage== ===Use api from yate javascript=== init.js    #require &quot;api.js&quot;    var a = 'b';  var b = 1;  var ...&quot;</title>
		<link rel="alternate" type="text/html" href="https://docs.yate.ro/wiki/index.php?title=Api_PHP_to_Javascript&amp;diff=7707&amp;oldid=prev"/>
				<updated>2014-03-28T13:25:21Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;Api script to call functions in Yate Javascript.  ==Usage== ===Use api from yate javascript=== init.js    #require &amp;quot;&lt;a href=&quot;#Code:_api.js&quot;&gt;api.js&lt;/a&gt;&amp;quot;    var a = &amp;#039;b&amp;#039;;  var b = 1;  var ...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Api script to call functions in Yate Javascript.&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
===Use api from yate javascript===&lt;br /&gt;
init.js&lt;br /&gt;
 &lt;br /&gt;
 #require &amp;quot;[[#Code: api.js|api.js]]&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 var a = 'b';&lt;br /&gt;
 var b = 1;&lt;br /&gt;
 var c = ['1',2,'3'];&lt;br /&gt;
 var d = {'str':'test', 'num':b, 'arr':c, 'obj':{'test':'test'}};&lt;br /&gt;
    &lt;br /&gt;
 function apiOnCommand(req){&lt;br /&gt;
    if(!req.act) return false;&lt;br /&gt;
    switch (req.act){&lt;br /&gt;
       case 'autodial':&lt;br /&gt;
    &lt;br /&gt;
          return createAllAD();&lt;br /&gt;
    &lt;br /&gt;
       break;&lt;br /&gt;
       case 'test0':&lt;br /&gt;
    &lt;br /&gt;
          return a;&lt;br /&gt;
    &lt;br /&gt;
       break;&lt;br /&gt;
       case 'test1':&lt;br /&gt;
    &lt;br /&gt;
          return b;&lt;br /&gt;
    &lt;br /&gt;
       break;&lt;br /&gt;
       case 'test2':&lt;br /&gt;
    &lt;br /&gt;
          return c;&lt;br /&gt;
    &lt;br /&gt;
       break;&lt;br /&gt;
       case 'test3':&lt;br /&gt;
    &lt;br /&gt;
          return d;&lt;br /&gt;
    &lt;br /&gt;
       break;&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===Use api from php===&lt;br /&gt;
api.php&lt;br /&gt;
&lt;br /&gt;
 require_once('./[[#Code: yate.api.class.php|yate.api.class.php]]');&lt;br /&gt;
 &lt;br /&gt;
 $yate = new YateApi();&lt;br /&gt;
 &lt;br /&gt;
 $res = $yate-&amp;gt;api(array('act'=&amp;gt;'test0'));&lt;br /&gt;
 print_r($res);&lt;br /&gt;
&lt;br /&gt;
result:&lt;br /&gt;
 string(1) b&lt;br /&gt;
&lt;br /&gt;
 $res = $yate-&amp;gt;api(array('act'=&amp;gt;'test1'));&lt;br /&gt;
 print_r($res);&lt;br /&gt;
&lt;br /&gt;
result:&lt;br /&gt;
 int(1) 1&lt;br /&gt;
&lt;br /&gt;
 $res = $yate-&amp;gt;api(array('act'=&amp;gt;'test2'));&lt;br /&gt;
 print_r($res);&lt;br /&gt;
&lt;br /&gt;
result:&lt;br /&gt;
 Array&lt;br /&gt;
 (&lt;br /&gt;
    [0] =&amp;gt; 1 - string(1)&lt;br /&gt;
    [1] =&amp;gt; 2 - int(1)&lt;br /&gt;
    [2] =&amp;gt; 3 - string(1)&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
 $res = $yate-&amp;gt;api(array('act'=&amp;gt;'test3'));&lt;br /&gt;
 print_r($res);&lt;br /&gt;
&lt;br /&gt;
result:&lt;br /&gt;
 Array&lt;br /&gt;
 (&lt;br /&gt;
    [str] =&amp;gt; test&lt;br /&gt;
    [num] =&amp;gt; 1&lt;br /&gt;
    [arr] =&amp;gt; Array&lt;br /&gt;
        (&lt;br /&gt;
            [0] =&amp;gt; 1&lt;br /&gt;
            [1] =&amp;gt; 2&lt;br /&gt;
            [2] =&amp;gt; 3&lt;br /&gt;
        )&lt;br /&gt;
 &lt;br /&gt;
    [obj] =&amp;gt; Array&lt;br /&gt;
        (&lt;br /&gt;
            [test] =&amp;gt; test&lt;br /&gt;
        )&lt;br /&gt;
 &lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
===Yate Setup===&lt;br /&gt;
&lt;br /&gt;
javascript.conf&lt;br /&gt;
&lt;br /&gt;
 [general]&lt;br /&gt;
 scripts_dir=/your/dir/where/js/files/&lt;br /&gt;
&lt;br /&gt;
 [scripts]&lt;br /&gt;
 init=init.js&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Code: api.js==&lt;br /&gt;
&lt;br /&gt;
    function qs2obj(str){&lt;br /&gt;
        str = str.trim();&lt;br /&gt;
        var vsks = str.split(&amp;quot;&amp;amp;&amp;quot;);&lt;br /&gt;
        var ret = {};&lt;br /&gt;
        for(var kv in vsks){&lt;br /&gt;
            var s = vsks[kv];&lt;br /&gt;
            s = s.split(&amp;quot;=&amp;quot;);&lt;br /&gt;
            ret[s[0]] = s[1];&lt;br /&gt;
        }&lt;br /&gt;
        return ret;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    function json2str(obj){&lt;br /&gt;
        var res = '';&lt;br /&gt;
        var prolog = '{';&lt;br /&gt;
        var epilog = '}';&lt;br /&gt;
        var type = 0;&lt;br /&gt;
        var e = [];&lt;br /&gt;
        switch (typeof(obj)) {&lt;br /&gt;
            case 'string':&lt;br /&gt;
                res += '&amp;quot;'+obj+'&amp;quot;';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'number':&lt;br /&gt;
                res = obj;&lt;br /&gt;
                break;&lt;br /&gt;
            case 'object':&lt;br /&gt;
                for(var i in obj){&lt;br /&gt;
                    if(i==0){&lt;br /&gt;
                        prolog = '[';&lt;br /&gt;
                        epilog = ']';&lt;br /&gt;
                        type = 1;&lt;br /&gt;
                    }&lt;br /&gt;
                    if(type){&lt;br /&gt;
                        var o = json2str(obj[i]);&lt;br /&gt;
                    } else {&lt;br /&gt;
                        var o = '&amp;quot;'+i+'&amp;quot;:'+json2str(obj[i]);&lt;br /&gt;
                    }&lt;br /&gt;
                    e.push(o);&lt;br /&gt;
                }&lt;br /&gt;
                res = prolog+e.join(',')+epilog;&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
        return res;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //function apiOnCommand(res){}&lt;br /&gt;
    &lt;br /&gt;
    function apiCommand(msg){&lt;br /&gt;
        if(!msg.line) return false;&lt;br /&gt;
        var obj = qs2obj(msg.line);&lt;br /&gt;
        var res = apiOnCommand(obj);&lt;br /&gt;
        if(!res) return false;&lt;br /&gt;
        msg.retValue('[' + json2str(res) + ']' + &amp;quot;\r\n&amp;quot;);&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
    Message.install(apiCommand, 'engine.command', 150);&lt;br /&gt;
&lt;br /&gt;
==Code: yate.api.class.php==&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?&lt;br /&gt;
    class YateApi extends Socket&lt;br /&gt;
    {&lt;br /&gt;
        /**&lt;br /&gt;
        Commands&lt;br /&gt;
        status&lt;br /&gt;
        uptime&lt;br /&gt;
        reload&lt;br /&gt;
        restart&lt;br /&gt;
        stop&lt;br /&gt;
        .... -&amp;gt; will be mapped into an engine.command&lt;br /&gt;
         */&lt;br /&gt;
        function stop()&lt;br /&gt;
        {&lt;br /&gt;
            return self::command('stop');&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        function restart()&lt;br /&gt;
        {&lt;br /&gt;
    &lt;br /&gt;
            return self::command('restart');&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        function reload()&lt;br /&gt;
        {&lt;br /&gt;
            return self::command('reload');&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        function api($arr = array())&lt;br /&gt;
        {&lt;br /&gt;
            $res = self::command(http_build_query($arr));&lt;br /&gt;
            $arr = json_decode($res, true);&lt;br /&gt;
            if(!json_last_error()) return $arr[0];&lt;br /&gt;
            return array('error'=&amp;gt;true, 'message'=&amp;gt;'invalid-json', 'response'=&amp;gt;$res);&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        function status()&lt;br /&gt;
        {&lt;br /&gt;
            return self::command('status');&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        function daytime($sec)&lt;br /&gt;
        {&lt;br /&gt;
            $arr = array();&lt;br /&gt;
            $arr['d'] = floor($sec / 86400);&lt;br /&gt;
            $arr['H'] = floor(($sec % 86400) / 3600);&lt;br /&gt;
            $arr['i'] = floor(($sec % 3600) / 60);&lt;br /&gt;
            $arr['s'] = $sec % 60;&lt;br /&gt;
            return $arr;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        function uptime()&lt;br /&gt;
        {&lt;br /&gt;
            $return = self::command('uptime');&lt;br /&gt;
            if(preg_match(&amp;quot;/\((.*)\)/&amp;quot;,$return, $arr))&lt;br /&gt;
            {&lt;br /&gt;
                $sec = (int)$arr[1];&lt;br /&gt;
                return array(&lt;br /&gt;
                    'start' =&amp;gt; date('d.m.Y H:i:s', time()-$sec),&lt;br /&gt;
                    'seconds' =&amp;gt; $sec,&lt;br /&gt;
                    'daytime' =&amp;gt; $this-&amp;gt;daytime($sec)&lt;br /&gt;
                );&lt;br /&gt;
    &lt;br /&gt;
            }&lt;br /&gt;
            return false;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    class Socket&lt;br /&gt;
    {&lt;br /&gt;
        var $error = array();&lt;br /&gt;
        var $socket = false;&lt;br /&gt;
    &lt;br /&gt;
        function __construct($ip = '127.0.0.1', $port = '5038', $ssl = false)    // default settings&lt;br /&gt;
        {&lt;br /&gt;
            if($ssl &amp;amp;&amp;amp; !in_array(&amp;quot;ssl&amp;quot;, stream_get_transports()))&lt;br /&gt;
            {&lt;br /&gt;
                $this-&amp;gt;error[] = 'No support ssl protocol';&lt;br /&gt;
                return false;&lt;br /&gt;
            }&lt;br /&gt;
    &lt;br /&gt;
            if(!$this-&amp;gt;socket = @fsockopen($ip,$port,$errno,$errstr,30))&lt;br /&gt;
            {&lt;br /&gt;
                $this-&amp;gt;error[] = &amp;quot;Web page can't connect to ip=$ip, port=$port [$errno]  \&amp;quot;&amp;quot;.$errstr.&amp;quot;\&amp;quot;&amp;quot;;&lt;br /&gt;
                return false;&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                $line1 = $this-&amp;gt;read();&lt;br /&gt;
            }&lt;br /&gt;
            return true;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        function read($marker_end = &amp;quot;\r\n&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(!$this-&amp;gt;socket) return false;&lt;br /&gt;
            $keep_trying = true;&lt;br /&gt;
            $line = &amp;quot;&amp;quot;;&lt;br /&gt;
            while($keep_trying)&lt;br /&gt;
            {&lt;br /&gt;
                $line .= fgets($this-&amp;gt;socket,8192);&lt;br /&gt;
                if($line === false)	continue;&lt;br /&gt;
                if(substr($line, -strlen($marker_end)) == $marker_end) $keep_trying = false;&lt;br /&gt;
            }&lt;br /&gt;
            $line = str_replace(&amp;quot;\r\n&amp;quot;, &amp;quot;&amp;quot;, $line);&lt;br /&gt;
            return $line;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        function write($str)&lt;br /&gt;
        {&lt;br /&gt;
            if(!$this-&amp;gt;socket) return false;&lt;br /&gt;
            return fwrite($this-&amp;gt;socket, $str.&amp;quot;\r\n&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        function close()&lt;br /&gt;
        {&lt;br /&gt;
            if(!$this-&amp;gt;socket) return false;&lt;br /&gt;
            return fclose($this-&amp;gt;socket);&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        function __destruct()&lt;br /&gt;
        {&lt;br /&gt;
            return $this-&amp;gt;close();&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        function command($command, $marker_end = &amp;quot;\r\n&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(!$this-&amp;gt;socket) return false;&lt;br /&gt;
            $this-&amp;gt;write($command);&lt;br /&gt;
            return $this-&amp;gt;read($marker_end);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''See also:'''&lt;br /&gt;
* [[Javascript]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Javascript]] [[Category:PHP]]&lt;/div&gt;</summary>
		<author><name>Ximik777</name></author>	</entry>

	</feed>