123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326 |
- if ("MozWebSocket" in window) {
- WebSocket = MozWebSocket;
- }
- var ola = {
- version : '2.0.1',
- ws: undefined,
- uuid: "73836387-0000-0000-0000-0000-0000000000",
- connected: false,
- socket_connected: false,
- onConnect: undefined,
- onMessage: undefined,
- onClose: undefined,
- _connectSuccess: undefined,
- _connectError: undefined,
- _username: undefined,
- _password: undefined,
- _extn: undefined,
- connect: function(url, username, password, success, error) {
- if (!url) url = "ws://" + document.location.hostname + ':' + document.location.port + "/ola_socket";
- if ("WebSocket" in window) {
- // browser supports websockets
- this.ws = new WebSocket(url);
- if (this.ws) {
- this.ws.onclose = ola.onClose;
- this.ws.onopen = ola._onOpen;
- this.ws.onmessage = ola._onMessage;
- this._connectSuccess = success;
- this._connectError = error;
- this._username = username;
- this._password = password;
- }
- } else {
- // browser does not support websockets
- if ("console" in window) {
- console.log("you don't have websocket");
- }
- return false;
- }
- return this;
- },
- close: function() {
- ola.ws.close();
- },
- _onOpen: function() {
- ola.auth(ola._username, ola._password);
- },
- _onMessage: function (evt) {
- console.log(evt.data);
- var msg = JSON.parse(evt.data);
- if (msg.event_name == "command/reply" && msg.code == 200) {
- ola.ws.onmessage = this.onMessage;
- }
- ola.ws.onmessage = ola.onMessage;
- ola.onConnect();
- },
- auth: function(username, password) {
- return ola.send({cmd: "auth", args:{username:username, password:password, accept:"application/json"}});
- },
- get_agent_state: function() {
- return this.send({action:"api", cmd:"get_agent_state", args:{extn: this._extn}});
- },
- get_trunk_state: function() {
- return this.send({action:"api", cmd:"get_trunk_state"});
- },
- login : function(queue, extn, params) {
- var args = {queue:queue, extn: extn};
- this.merge(args, params);
- this._extn = extn;
- return ola.send({action:"api", cmd:"login", args: args });
- },
- logout: function() {
- return this.send({action:"api", cmd:"logout", args:{extn: this._extn}});
- },
- ping: function() {
- return ola.send({cmd: "ping"})
- },
- subscribe: function(k) {
- return ola.send({cmd:"subscribe", args:{key:k}});
- },
- unsubscribe: function(k) {
- return ola.send({cmd:"unsubscribe", args:{key:k}});
- },
- go_ready: function() {
- return this.send({action:"api", cmd:"go_ready", args:{extn: this._extn}});
- },
-
- go_ready2: function(extn) {
- return this.send({action:"api", cmd:"go_ready", args:{extn: extn}});
- },
-
- go_break: function(reason) {
- return this.send({action:"api", cmd:"go_break", args:{extn: this._extn, reason: reason}});
- },
-
- go_break2: function(extn) {
- return this.send({action:"api", cmd:"go_break", args:{extn: extn, reason: ""}});
- },
- toggle_ready : function() {
- return this.send({action:"api", cmd:"toggle_ready", args:{extn: this._extn}});
- },
- answer : function() {
- return this.send({action:"api", cmd:"answer", args:{extn: this._extn}});
- },
- hangup : function() {
- return this.send({action:"api", cmd:"hangup_other", args:{extn: this._extn}});
- },
- dial : function(dst, gateway) {
- return this.send({action:"api", cmd:"dial", args:{extn: this._extn, dest: dst, gateway: gateway}});
- },
- transfer : function(dst, src) {
- var extn = src;
- if (extn == null || typeof(extn) == "undefined") {
- extn = this._extn;
- }
- return this.send({action:"api", cmd:"transfer", args:{extn:extn, dest:dst}});
- },
- transfer_uuid : function(uuid, dst) {
- return this.send({action:"api", cmd:"transfer", args:{channel_uuid:uuid, dest:dst}});
- },
- monitor : function(dst, src) {
- var extn = src;
- if (extn == null || typeof(extn) == "undefined") {
- extn = this._extn;
- }
- return this.send({action:"api", cmd:"monitor", args:{extn: extn, dest: dst}});
- },
- monitor_uuid: function(uuid) {
- return this.send({action:"api", cmd:"monitor", args:{extn: this._extn, channel_uuid: uuid}});
- },
- intercept: function(dst, src) {
- var extn = src;
- if (extn == null || typeof(extn) == "undefined") {
- extn = this._extn;
- }
- return this.send({action:"api", cmd:"intercept", args:{extn: extn, dest: dst}});
- },
- intercept_uuid: function(uuid) {
- return this.send({action:"api", cmd:"intercept", args:{extn: this._extn, channel_uuid: uuid}});
- },
- three_way : function(dst, src) {
- var extn = src;
- if (extn == null || typeof(extn) == "undefined") {
- extn = this._extn;
- }
- return this.send({action:"api", cmd:"monitor", args:{extn: extn, dest: dst, three_way:"true"}});
- },
- three_way_uuid : function(uuid) {
- return this.send({action:"api", cmd:"monitor", args:{extn: this._extn, channel_uuid: uuid, three_way:"true"}});
- },
- unmonitor : function(ext) {
- return this.send({action:"api", cmd:"unmonitor", args:{extn: ext}});
- },
- whisper : function(w) {
- // who = "agent" / "caller" / "both" / "none"
- return this.send({action:"api", cmd:"whisper", args:{extn: this._extn, who: w}});
- },
- consult : function(dst) {
- return this.send({action:"api", cmd:"consult", args:{extn: this._extn, dest: dst}});
- },
- hold : function() {
- return this.send({action:"api", cmd:"hold", args:{extn: this._extn}});
- },
- unhold : function(dst) {
- return this.send({action:"api", cmd:"unhold", args:{extn: this._extn}});
- },
- toggle_hold : function() {
- return this.send({action:"api", cmd:"toggle_hold", args:{extn: this._extn}});
- },
- take_call : function(channel_uuid) {
- return this.send({action:"api", cmd:"take_call", args:{extn: this._extn, channel_uuid:channel_uuid}});
- },
- conference : function(dst) {
- return this.send({action:"api", cmd:"conference", args:{extn: this._extn, dest: dst}});
- },
- conference_uuid : function(uuid) {
- return this.send({action:"api", cmd:"conference", args:{extn: this._extn, channel_uuid: uuid}});
- },
- broadcast : function(numbers, mute) {
- return this.send({action:"api", cmd:"broadcast", args:{extn: this._extn, numbers: numbers, mute:mute}});
- },
- /* send chat to a queue or an agent
- to = queue send to queue
- to = queue.agent send to agent
- */
- chat: function (to, message, content_type) {
- return this.send({action:"api", cmd:"chat", args:{to:to, message:message, content_type:content_type}});
- },
- message: function (from, to, message, content_type) {
- return this.send({action:"api", cmd:"message", args:{from:from, to:to, message:message, content_type:content_type}});
- },
- alarm: function (queue, state) {
- return this.send({action:"api", cmd:"alarm", args:{queue:queue, state:state}});
- },
- /* dispatching apis */
- dlogin: function (ext) {
- return this.send({action:"api", cmd:"dlogin", args:{extn: ext}});
- },
- dlogout: function (ext) {
- return this.send({action:"api", cmd:"dlogout", args:{extn: ext}});
- },
- inject: function (ext, uuid) {
- return this.send({action:"api", cmd:"inject", args:{extn: ext, channel_uuid: uuid}});
- },
- kill: function(uuid, cause) {
- return this.send({action:"api", cmd:"kill", args:{channel_uuid: uuid, cause: cause}});
- },
- eavesdrop: function(uuid) {
- return this.send({action:"api", cmd:"eavesdrop", args:{channel_uuid: uuid}});
- },
- conf: function(name, action, member) {
- return this.send({action:"api", cmd:"conf", args:{name: name, action:action, member:member}});
- },
- answer_all: function(ext, queue) {
- return this.send({action:"api", cmd:"answer_all", args:{extn: ext, queue:queue}});
- },
- group_call: function(ext, queue, numbers, batch_accept) {
- return this.send({action:"api", cmd:"group_call", args:{extn: ext, queue:queue, numbers:numbers, batch_accept:batch_accept}});
- },
- sip_gateway: function (profile, gateway, op) {
- return this.send({action:"api", cmd:"sip_gateway", args:{profile:profile, gateway:gateway, op:op}});
- },
- play: function (conference, filename) {
- return this.send({action:"api", cmd:"play", args:{conference:conference, filename:filename}});
- },
- stop_play: function (conference, filename) {
- return this.send({action:"api", cmd:"play", args:{conference:conference, filename:filename}});
- },
- merge_call: function(ext1, ext2) {
- return this.send({action:"api", cmd:"merge_call", args:{extn1:ext1, extn2:ext2}});
- },
- /* common apis*/
- /*phone control api, only yealink support for now*/
- api_handfree: function (ext) {
- return this.send({action:"api", cmd:"api_handfree", args:{extn: ext}});
- },
- send : function(msg) {
- msg.uuid = ola.next_uuid();
- // log(JSON.stringify(msg));
- ola.ws.send(JSON.stringify(msg));
- return msg.uuid;
- },
- merge: function(target, additional){
- for (var i in additional) {
- if (additional.hasOwnProperty(i)) {
- target[i] = additional[i];
- }
- }
- },
- next_uuid : function() {
- var u = (parseFloat(ola.uuid.substring(29)) + 1).toString();
- u = u == "2147483647" ? "0" : u;
- while(u.length < 12) { u = "0" + u; }
- ola.uuid = "73836387-0000-0000-0000-0000-" + u;
- return ola.uuid;
- }
- };
- if ('jQuery' in this) jQuery.ola = this.ola;
|