ajamdemo.html 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. <script src="prototype.js"></script>
  2. <script src="astman.js"></script>
  3. <link href="astman.css" media="all" rel="Stylesheet" type="text/css" />
  4. <script>
  5. var logins = new Object;
  6. var logoffs = new Object;
  7. var channels = new Object;
  8. var pongs = new Object;
  9. var loggedon = -1;
  10. var selectedchan = null;
  11. var hungupchan = "";
  12. var transferedchan = "";
  13. var demo = new Object;
  14. function loggedOn() {
  15. if (loggedon == 1)
  16. return;
  17. loggedon = 1;
  18. updateButtons();
  19. $('statusbar').innerHTML = "<i>Retrieving channel status...</i>";
  20. astmanEngine.pollEvents();
  21. astmanEngine.sendRequest('action=status', demo.channels);
  22. }
  23. function clearChannelList() {
  24. $('channellist').innerHTML = "<i class='light'>Not connected</i>";
  25. }
  26. function loggedOff() {
  27. if (loggedon == 0)
  28. return;
  29. loggedon = 0;
  30. selectedchan = null;
  31. updateButtons();
  32. astmanEngine.channelClear();
  33. clearChannelList();
  34. }
  35. function updateButtons()
  36. {
  37. if ($(selectedchan)) {
  38. $('transfer').disabled = 0;
  39. $('hangup').disabled = 0;
  40. } else {
  41. $('transfer').disabled = 1;
  42. $('hangup').disabled = 1;
  43. selectedchan = null;
  44. }
  45. if (loggedon) {
  46. $('username').disabled = 1;
  47. $('secret').disabled = 1;
  48. $('logoff').disabled = 0;
  49. $('login').disabled = 1;
  50. $('refresh').disabled = 0;
  51. } else {
  52. $('username').disabled = 0;
  53. $('secret').disabled = 0;
  54. $('logoff').disabled = 1;
  55. $('login').disabled = 0;
  56. $('refresh').disabled = 1;
  57. }
  58. }
  59. demo.channelCallback = function(target) {
  60. selectedchan = target;
  61. updateButtons();
  62. }
  63. demo.channels = function(msgs) {
  64. resp = msgs[0].headers['response'];
  65. if (resp == "Success") {
  66. loggedOn();
  67. } else
  68. loggedOff();
  69. for (i=1;i<msgs.length - 1;i++)
  70. astmanEngine.channelUpdate(msgs[i]);
  71. $('channellist').innerHTML = astmanEngine.channelTable(demo.channelCallback);
  72. $('statusbar').innerHTML = "Ready";
  73. }
  74. demo.logins = function(msgs) {
  75. $('statusbar').innerHTML = msgs[0].headers['message'];
  76. resp = msgs[0].headers['response'];
  77. if (resp == "Success")
  78. loggedOn();
  79. else
  80. loggedOff();
  81. };
  82. demo.logoffs = function(msgs) {
  83. $('statusbar').innerHTML = msgs[0].headers['message'];
  84. loggedOff();
  85. };
  86. demo.hungup = function(msgs) {
  87. $('statusbar').innerHTML = "Hungup " + hungupchan;
  88. }
  89. demo.transferred = function(msgs) {
  90. $('statusbar').innerHTML = "Transferred " + transferredchan;
  91. }
  92. function doHangup() {
  93. hungupchan = selectedchan;
  94. astmanEngine.sendRequest('action=hangup&channel=' + selectedchan, demo.hungup);
  95. }
  96. function doStatus() {
  97. $('statusbar').innerHTML = "<i>Updating channel status...</i>";
  98. astmanEngine.channelClear();
  99. astmanEngine.sendRequest('action=status', demo.channels);
  100. }
  101. function doLogin() {
  102. $('statusbar').innerHTML = "<i>Logging in...</i>";
  103. astmanEngine.sendRequest('action=login&username=' + $('username').value + "&secret=" + $('secret').value, demo.logins);
  104. }
  105. function doTransfer() {
  106. var channel = astmanEngine.channelInfo(selectedchan);
  107. var exten = prompt("Enter new extension for " + selectedchan);
  108. var altchan;
  109. if (exten) {
  110. if (channel.link) {
  111. if (confirm("Transfer " + channel.link + " too?"))
  112. altchan = channel.link;
  113. }
  114. if (altchan) {
  115. transferredchan = selectedchan + " and " + altchan + " to " + exten;
  116. astmanEngine.sendRequest('action=redirect&channel=' + selectedchan + "&priority=1&extrachannel=" + altchan + "&exten=" + exten, demo.transferred);
  117. } else {
  118. transferredchan = selectedchan + " to " + exten;
  119. astmanEngine.sendRequest('action=redirect&channel=' + selectedchan + "&priority=1&exten=" + exten, demo.transferred);
  120. }
  121. }
  122. }
  123. function doLogoff() {
  124. $('statusbar').innerHTML = "<i>Logging off...</i>";
  125. astmanEngine.sendRequest('action=logoff', demo.logoffs);
  126. }
  127. demo.pongs = function(msgs) {
  128. resp = msgs[0].headers['response'];
  129. if (resp == "Pong") {
  130. $('statusbar').innerHTML = "<i>Already connected...</i>";
  131. loggedOn();
  132. } else {
  133. $('statusbar').innerHTML = "<i>Please login...</i>";
  134. loggedOff();
  135. }
  136. }
  137. demo.eventcb = function(msgs) {
  138. var x;
  139. if (loggedon) {
  140. for (i=1;i<msgs.length - 1;i++) {
  141. astmanEngine.channelUpdate(msgs[i]);
  142. }
  143. $('channellist').innerHTML = astmanEngine.channelTable(demo.channelCallback);
  144. astmanEngine.pollEvents();
  145. }
  146. updateButtons();
  147. }
  148. function localajaminit() {
  149. astmanEngine.setURL('../rawman');
  150. astmanEngine.setEventCallback(demo.eventcb);
  151. //astmanEngine.setDebug($('ditto'));
  152. clearChannelList();
  153. astmanEngine.sendRequest('action=ping', demo.pongs);
  154. }
  155. </script>
  156. <title>Asterisk&trade; AJAM Demo</title>
  157. <body onload="localajaminit()">
  158. <table align="center" width=600>
  159. <tr valign="top"><td>
  160. <table align="left">
  161. <tr><td colspan="2"><h2>Asterisk&trade; AJAM Demo</h2></td>
  162. <tr><td>Username:</td><td><input id="username"></td></tr>
  163. <tr><td>Secret:</td><td><input type="password" id="secret"></td></tr>
  164. <tr><td colspan=2 align="center">
  165. <div id="statusbar">
  166. <span style="margin-left: 4px;font-weight:bold">&nbsp;</span>
  167. </div>
  168. </td></tr>
  169. <tr><td><input type="submit" id="login" value="Login" onClick="doLogin()"></td>
  170. <td><input type="submit" id="logoff" value="Logoff" disabled=1 onClick="doLogoff()"></td></tr>
  171. </table>
  172. </td><td valign='bottom'>
  173. <table>
  174. <div style="margin-left:10;margin-right:50;margin-top:10;margin-bottom:20">
  175. <i>This is a demo of the Asynchronous Javascript Asterisk Manager interface. You can login with a
  176. valid, appropriately permissioned manager username and secret.</i>
  177. </div>
  178. <tr>
  179. <td><input type="submit" onClick="doStatus()" id="refresh" value="Refresh"></td>
  180. <td><input type="submit" onClick="doTransfer()" id="transfer" value="Transfer..."></td>
  181. <td><input type="submit" onClick="doHangup()" id="hangup" value="Hangup"></td>
  182. </tr>
  183. </table>
  184. </td></tr>
  185. <tr><td colspan=2>
  186. <div id="channellist" class="chanlist">
  187. </div>
  188. </td></tr>
  189. <tr><td align="center" colspan=2>
  190. <font size=-1><i>
  191. Copyright (C) 2006 Digium, Inc. Asterisk and Digium are trademarks of Digium, Inc.
  192. </i></font>
  193. </td></tr>
  194. </table>
  195. </body>