Calls from Firefox

Discussion in '3CX Phone System - General' started by ice, Apr 14, 2009.

Thread Status:
Not open for further replies.
  1. ice

    ice New Member

    Joined:
    Jun 11, 2008
    Messages:
    108
    Likes Received:
    0
    I modified Greasemonkey script for Skype.
    Now it working with 3CX HTTP API.
    Phone numbers shown as a links.

    Add your:
    <3CX IP ADDRESS>
    <YOUR EXTENSION>
    <PIN>
    defaultPrefix= '9';

    To download Greasemonkey: https://addons.mozilla.org/ru/firefox/addon/748

    Code:
    // Sip: Linkify (for 3CX)
    // Author: Boris Yim (modified by Vladimir Afanasiev,  www.icepartners.ru)
    // License: GNU GPL v2 or later
    // Modified from: Skype Linkify (http://www.questar.it/blog/developer/skypelinkify.user.js)
    // which was inspired by SunRocket VoIP Dial Linkify (http://www.muehlen.com/projects/voip/voip_dial.user.js)
    // which in turn was inspired by UPS Tracking Linkify (http://plutor.org/files/upslinkify.user.js)
    //
    // Match these patterns:
    //  800-555-1212
    //  (800) 555-1212
    //  (800)555-1212
    //  800-555-1212
    //  800-555-1212
    //  800 555 1212
    //  800.555.1212
    //  800/555/1212
    //  8005551212
    //  +1 (number)
    //  + (international number)
    //
    // Link to "http:<formated number>" ("3CX VoIP Client:" also OK)
    //
    // ==UserScript==
    // @name           sip: Linkify (for 3CX VoIP Client)
    // @namespace      http://userscripts.org/scripts/show/5935 (original Skype source)
    // @description    Looks for phone numbers in pages and makes hyperlinks out of them. When clicking on the link, your 3CX Voip Client will ring and be dialing the number / link you clicked on.
    // @include        *
    // ==/UserScript==
    //default country prefix
    const defaultPrefix= '9';
    
    (function () {
                    const trackRegex = /(\+\d\d?)?[\-\s\/\.]?[\(]?(\d){2,4}[\)]?[\-\s\/\.]?\d\d\d[\-\s\/\.]?(\d){3,5}\b/ig;
    
                    function trackUrl(t) {
                                   if (String(t).charAt(0)!= '+') t= defaultPrefix + String(t);
                                   return "http://<3CX IP ADDRESS>:5484/PbxAPI.aspx?func=make_call&from=<YOUR EXTENSION>&pin=<PIN>&to=" + (String(t).replace(/[\-\s\/\(\)\.]/g, ""));
                    }
        // tags we will scan looking for un-hyperlinked urls
    
        var allowedParents = [
            "abbr", "acronym", "address", "applet", "b", "bdo", "big", "blockquote", "body",
            "caption", "center", "cite", "code", "dd", "del", "div", "dfn", "dt", "em",
            "fieldset", "font", "form", "h1", "h2", "h3", "h4", "h5", "h6", "i", "iframe",
            "ins", "kdb", "li", "nobr", "object", "pre", "p", "q", "samp", "small", "span", "strike",
            "s", "strong", "sub", "sup", "td", "th", "tt", "u", "var"
            ];
       
        var xpath = "//text()[(parent::" + allowedParents.join(" or parent::") + ")" + "]";
        var candidates = document.evaluate(xpath, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
        for (var cand = null, i = 0; (cand = candidates.snapshotItem(i)); i++) {
    
            if (trackRegex.test(cand.nodeValue)) {
                var span = document.createElement("span");
                var source = cand.nodeValue;       
                cand.parentNode.replaceChild(span, cand);
                trackRegex.lastIndex = 0;
    
                for (var match = null, lastLastIndex = 0; (match = trackRegex.exec(source)); ) {
                    span.appendChild(document.createTextNode(source.substring(lastLastIndex, match.index)));          
                    var a = document.createElement("a");
                    a.setAttribute("href", trackUrl(match[0]));
                    a.appendChild(document.createTextNode(match[0]));
                    span.appendChild(a);
                    lastLastIndex = trackRegex.lastIndex;
                }
                span.appendChild(document.createTextNode(source.substring(lastLastIndex)));
                span.normalize();
            }
        }
    })();
     
    Stop hovering to collapse... Click to collapse... Hover to expand... Click to expand...
  2. Nick Galea

    Nick Galea Site Admin

    Joined:
    Jun 6, 2006
    Messages:
    1,926
    Likes Received:
    241
    Excellent, good tip!
     
    Stop hovering to collapse... Click to collapse... Hover to expand... Click to expand...
Thread Status:
Not open for further replies.