1 <script src=
"prototype.js"></script>
2 <script src=
"astman.js"></script>
3 <link href=
"astman.css" media=
"all" rel=
"Stylesheet" type=
"text/css" />
6 var logins
= new Object
;
7 var logoffs
= new Object
;
8 var channels
= new Object
;
9 var pongs
= new Object
;
11 var selectedchan
= null;
13 var transferedchan
= "";
15 var demo
= new Object
;
22 $('statusbar').innerHTML
= "<i>Retrieving channel status...</i>";
23 astmanEngine
.pollEvents();
24 astmanEngine
.sendRequest('action=status', demo
.channels
);
27 function clearChannelList() {
28 $('channellist').innerHTML
= "<i class='light'>Not connected</i>";
31 function loggedOff() {
37 astmanEngine
.channelClear();
41 function updateButtons()
43 if ($(selectedchan
)) {
44 $('transfer').disabled
= 0;
45 $('hangup').disabled
= 0;
47 $('transfer').disabled
= 1;
48 $('hangup').disabled
= 1;
52 $('username').disabled
= 1;
53 $('secret').disabled
= 1;
54 $('logoff').disabled
= 0;
55 $('login').disabled
= 1;
56 $('refresh').disabled
= 0;
58 $('username').disabled
= 0;
59 $('secret').disabled
= 0;
60 $('logoff').disabled
= 1;
61 $('login').disabled
= 0;
62 $('refresh').disabled
= 1;
66 demo
.channelCallback = function(target
) {
67 selectedchan
= target
;
71 demo
.channels = function(msgs
) {
72 resp
= msgs
[0].headers
['response'];
73 if (resp
== "Success") {
78 for (i
=1;i
<msgs
.length
- 1;i
++)
79 astmanEngine
.channelUpdate(msgs
[i
]);
80 $('channellist').innerHTML
= astmanEngine
.channelTable(demo
.channelCallback
);
81 $('statusbar').innerHTML
= "Ready";
84 demo
.logins = function(msgs
) {
85 $('statusbar').innerHTML
= msgs
[0].headers
['message'];
86 resp
= msgs
[0].headers
['response'];
87 if (resp
== "Success")
94 demo
.logoffs = function(msgs
) {
95 $('statusbar').innerHTML
= msgs
[0].headers
['message'];
99 demo
.hungup = function(msgs
) {
100 $('statusbar').innerHTML
= "Hungup " + hungupchan
;
103 demo
.transferred = function(msgs
) {
104 $('statusbar').innerHTML
= "Transferred " + transferredchan
;
107 function doHangup() {
108 hungupchan
= selectedchan
;
109 astmanEngine
.sendRequest('action=hangup&channel=' + selectedchan
, demo
.hungup
);
112 function doStatus() {
113 $('statusbar').innerHTML
= "<i>Updating channel status...</i>";
114 astmanEngine
.channelClear();
115 astmanEngine
.sendRequest('action=status', demo
.channels
);
119 $('statusbar').innerHTML
= "<i>Logging in...</i>";
120 astmanEngine
.sendRequest('action=login&username=' + $('username').value
+ "&secret=" + $('secret').value
, demo
.logins
);
123 function doTransfer() {
124 var channel
= astmanEngine
.channelInfo(selectedchan
);
125 var exten
= prompt("Enter new extension for " + selectedchan
);
129 if (confirm("Transfer " + channel
.link
+ " too?"))
130 altchan
= channel
.link
;
133 transferredchan
= selectedchan
+ " and " + altchan
+ " to " + exten
;
134 astmanEngine
.sendRequest('action=redirect&channel=' + selectedchan
+ "&priority=1&extrachannel=" + altchan
+ "&exten=" + exten
, demo
.transferred
);
136 transferredchan
= selectedchan
+ " to " + exten
;
137 astmanEngine
.sendRequest('action=redirect&channel=' + selectedchan
+ "&priority=1&exten=" + exten
, demo
.transferred
);
142 function doLogoff() {
143 $('statusbar').innerHTML
= "<i>Logging off...</i>";
144 astmanEngine
.sendRequest('action=logoff', demo
.logoffs
);
147 demo
.pongs = function(msgs
) {
148 resp
= msgs
[0].headers
['response'];
149 if (resp
== "Pong") {
150 $('statusbar').innerHTML
= "<i>Already connected...</i>";
153 $('statusbar').innerHTML
= "<i>Please login...</i>";
158 demo
.eventcb = function(msgs
) {
161 for (i
=1;i
<msgs
.length
- 1;i
++) {
162 astmanEngine
.channelUpdate(msgs
[i
]);
164 $('channellist').innerHTML
= astmanEngine
.channelTable(demo
.channelCallback
);
165 astmanEngine
.pollEvents();
170 function localajaminit() {
171 astmanEngine
.setURL('../rawman');
172 astmanEngine
.setEventCallback(demo
.eventcb
);
173 //astmanEngine.setDebug($('ditto'));
175 astmanEngine
.sendRequest('action=ping', demo
.pongs
);
179 <title>Asterisk
™ AJAM Demo
</title>
180 <body onload=
"localajaminit()">
181 <table align=
"center" width=
600>
182 <tr valign=
"top"><td>
184 <tr><td colspan=
"2"><h2>Asterisk
™ AJAM Demo
</h2></td>
185 <tr><td>Username:
</td><td><input id=
"username"></td></tr>
186 <tr><td>Secret:
</td><td><input type=
"password" id=
"secret"></td></tr>
187 <tr><td colspan=
2 align=
"center">
189 <span style=
"margin-left: 4px;font-weight:bold"> </span>
193 <tr><td><input type=
"submit" id=
"login" value=
"Login" onClick=
"doLogin()"></td>
194 <td><input type=
"submit" id=
"logoff" value=
"Logoff" disabled=
1 onClick=
"doLogoff()"></td></tr>
196 </td><td valign='bottom'
>
198 <div style=
"margin-left:10;margin-right:50;margin-top:10;margin-bottom:20">
199 <i>This is a demo of the Asynchronous Javascript Asterisk Manager interface. You can login with a
200 valid, appropriately permissioned manager username and secret.
</i>
203 <td><input type=
"submit" onClick=
"doStatus()" id=
"refresh" value=
"Refresh"></td>
204 <td><input type=
"submit" onClick=
"doTransfer()" id=
"transfer" value=
"Transfer..."></td>
205 <td><input type=
"submit" onClick=
"doHangup()" id=
"hangup" value=
"Hangup"></td>
210 <div id=
"channellist" class=
"chanlist">
213 <tr><td align=
"center" colspan=
2>
215 Copyright (C)
2006 Digium, Inc. Asterisk and Digium are trademarks of Digium, Inc.