(function () { var URL_GET_SIP_ACCOUNT_PARAMS = ''; var URL_MAKE_OUTCALL = "https://admin.graam.com/cors/api/callcenter/make_outcall"; URL_GET_SIP_ACCOUNT_PARAMS = "https://admin.graam.com/ws-v2/d/lempire/cors/api/sip-account-params/[:email]"; URL_MAKE_OUTCALL = "https://admin.graam.com/xapi/lempire/cors/api/callcenter/make_outcall"; BASE_URL = "https://admin.graam.com"; var self = { session_info: { state: { has_call: false } }, start_listening: function () { window.addEventListener("message", function (event) { if (event.origin != BASE_URL) { console.debug("Received message from unknown source ", event.origin); return; } console.debug("received session data: ", event.data); self.session_info = event.data; }); }, get_session_info: function () { return self.session_info; }, create_cors_request: function (method, url) { var xhr = new XMLHttpRequest(); if ("withCredentials" in xhr) { // Check if the XMLHttpRequest object has a "withCredentials" property. // "withCredentials" only exists on XMLHTTPRequest2 objects. xhr.open(method, url, true); } else if (typeof XDomainRequest != "undefined") { // Otherwise, check if XDomainRequest. // XDomainRequest only exists in IE, and is IE's way of making CORS requests. xhr = new XDomainRequest(); xhr.open(method, url); } else { // Otherwise, CORS is not supported by the browser. xhr = null; } return xhr; }, make_call: function (called_number, calling_number, queue_id, queue_name, custom_data, success_cb, error_cb) { var xhr = self.create_cors_request('POST', URL_MAKE_OUTCALL); if (!xhr) { throw new Error('CORS not supported'); } xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.withCredentials = true; var _onsuccess_cb = function (e) { if (e.target.status != 200) { if (error_cb) { var error_msg = ""; try { error_msg = JSON.parse(e.target.responseText); error_msg = error_msg.error.message; } catch (e) { error_msg = e.target.responseText; } error_cb(e.target.status, error_msg); } } else if (success_cb) { success_cb(JSON.parse(e.target.responseText)); } } var _onerror_cb = function (e) { error_cb(e.target.status, e.target.responseText); } xhr.onload = _onsuccess_cb; xhr.onerror = _onerror_cb; var data = ''; data += 'called_number=' + encodeURIComponent(called_number); if (calling_number) { data += '&calling_number=' + encodeURIComponent(calling_number); } if (queue_id) { data += '&queue_id=' + encodeURIComponent(queue_id); } if (queue_name) { data += '&queue_name=' + encodeURIComponent(queue_name); } if (custom_data) { data += '&custom_data=' + encodeURIComponent(custom_data); } xhr.send(data); }, /** * transferred_number:number Number to be transferred * assisted_transfer:boolean {0:blind transferred, 1:assisted tranfferred} */ transfer_call: function (transferred_number, assisted_transfer) { var m = JSON.stringify({ "function": "call_transfer", "number": transferred_number, "assisted": assisted_transfer }); window.parent.postMessage(m, '*'); }, /** * app_name: Name of the application to which transfer the call * app_params:The parameters for the application */ transfer_call_to_application: function (app_name, app_params) { var m = JSON.stringify({ function: "call_transfer", transfer_type: "application", app_name: app_name, app_params: app_params }); window.parent.postMessage(m, '*'); }, /** * email: Email of the user to which get the sip params */ get_sip_account_params: function (email, success_cb, error_cb) { if (!URL_GET_SIP_ACCOUNT_PARAMS) { throw new Error('CORS URL invlid'); } // TODO check email var xhr = self.create_cors_request('GET', URL_GET_SIP_ACCOUNT_PARAMS.replace('[:email]', email)); if (!xhr) { throw new Error('CORS not supported'); } // xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.withCredentials = true; var _onsuccess_cb = function (e) { console.error('_onsuccess_cb', e); if (e.target.status != 200) { if (error_cb) { var error_msg = ""; // try { // error_msg = JSON.parse(e.target.responseText); // error_msg = error_msg.error.message; // } // catch (e) { // console.error('error_cb', e); // // error_msg = e.target.responseText; // } // error_cb(e.target.status, error_msg); } } else if (success_cb) { // success_cb(JSON.parse(e.target.responseText)); } } var _onerror_cb = function (e) { console.error('_onerror_cb', e); // error_cb(e.target.status, e.target.responseText); } xhr.onload = _onsuccess_cb; xhr.onerror = _onerror_cb; xhr.send(); } }; self.start_listening(); this.wePhoneCallCenter = self; return this.wePhoneCallCenter; }).call(this);