Wednesday 3 December 2014

Integrating NiftyQuoter with Zoho CRM

NiftyQuoter is an awesome tool for creating beautiful looking sales proposals/quotes. It has some out of the box integration with Zoho CRM but it's pretty rubbish to be honest:P You have to click on "Refresh contacts from Zoho" each time you want to do a sync and then wait 10-30 seconds for the sync to happen. What salesperson has time for that?

A better flow would be to click on a link in Zoho CRM and automatically load up a proposal in NiftyQuoter with the client's details pre-loaded.

I've written some code to allow that. Just upload the below HTML file to your server and set up Zoho CRM links accordingly. Here's a screencast showing it in action.



If you need any help implementing this, drop me a line at info@nuanced.it

Make sure you change the API details at the start of the code.
 <html>  
 <head>  
 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>  
 </head>  
 <body>  
 Adding proposal to NiftyQuoter...You'll be redirected to the new proposal in 15 seconds or less  
 <script type="text/javascript">  
 //CHANGE THIS  
 //needed for API  
 var nifty_API_key = "CHANGE";  
 var nifty_account_email = "CHANGE";  
 /**  
 * Reads URL parameters into array for easy access  
 * Courtesy Quentin: http://stackoverflow.com/a/979995  
 */  
 var QueryString = function () {  
  // This function is anonymous, is executed immediately and   
  // the return value is assigned to QueryString!  
  var query_string = {};  
  var query = window.location.search.substring(1);  
  var vars = query.split("&");  
  for (var i=0;i<vars.length;i++) {  
   var pair = vars[i].split("=");  
   // If first entry with this name  
   if (typeof query_string[pair[0]] === "undefined") {  
    query_string[pair[0]] = decodeURIComponent(pair[1]);  
        // If second entry with this name  
   } else if (typeof query_string[pair[0]] === "string") {  
    var arr = [ query_string[pair[0]], pair[1] ];  
    query_string[pair[0]] = arr;  
        // If third or later entry with this name  
   } else {  
    query_string[pair[0]].push(decodeURIComponent(pair[1]));  
   }  
  }   
   return query_string;  
 } ();  
 //get URL parameters  
 //example URL: http://www.nuancedi.wwwss10.a2hosted.com/client_jobs/mesh_direct/add_niftyquoter_proposal.html?client_first_name=testing%204&client_last_name=testing%204&client_company_name=Testing%20company&client_email=test%40testing.it  
 console.log(QueryString);  
 var client_first_name = QueryString.client_first_name;  
 var client_last_name = QueryString.client_last_name;  
 var client_company_name = QueryString.client_company_name;  
 var client_email = QueryString.client_email;  
 if (client_first_name == "" || client_first_name === "undefined")  
   alert("Please supply the client's first name" + client_first_name);  
 else if (client_last_name == "" || client_last_name === "undefined")  
   alert("Please supply the client's last name");  
 else if (client_company_name == "" || client_company_name === "undefined" )  
   alert("Please make sure you fill out the Company name in Zoho");  
 else if (client_email == "" || client_email === "undefined")  
   alert("Please make sure you fill out the client's email address in Zoho");  
 else{  
      add_proposal();  
 }  
 /**  
 * Adds a new proposal to Nifty Quoter with the client's name pre-filled in the proposal name. E.g. Proposal for <client name>  
 **/  
 function add_proposal(){  
      var proposal_id = 0;  
      $.ajax({  
         url: 'https://api.niftyquoter.com/api/v1/proposals?key=' + nifty_API_key + '&email=' + nifty_account_email,  
         type: 'POST',  
         data: {proposal: {name: 'Proposal for ' + client_company_name}},  
         success: function(result) {  
           console.log("add proposal");  
           console.log(result);  
           proposal_id = result.proposal.id;  
           add_client(proposal_id);  
         },  
         error: function(result) {  
          alert('error');  
         }  
        });  
 }  
 /**  
 * Adds a new client to Nifty Quoter with the details from Zoho (supplied in URL parameters)  
 **/  
 function add_client(proposal_id){  
      var added_client_id = 0;  
      //add client  
      $.ajax({  
         url: 'https://api.niftyquoter.com/api/v1/clients?key=' + nifty_API_key + '&email=' + nifty_account_email,  
         type: 'POST',  
         data: {client: {first_name: client_first_name, last_name: client_last_name, email: client_email, company_name: client_company_name}},  
         success: function(result) {  
           added_client_id = result.client.id;  
           add_client_to_proposal(added_client_id, proposal_id);  
         },  
         error: function(result) {  
          alert('error');  
         }  
        });  
 }  
 /**  
 * Adds the client to the proposal  
 * @param added_client_id The ID of the client in Nifty that we added via add_client()  
 * @param proposal_id The ID of the proposal in Nifty that we added via add_proposal()  
 **/  
 function add_client_to_proposal(added_client_id, proposal_id){       
      var proposal_url = 'https://api.niftyquoter.com/api/v1/proposals/' + proposal_id + '/contacts?key=' + nifty_API_key + '&email=' + nifty_account_email;  
      var payload = {contact: {client_id: added_client_id}};   
      $.ajax({  
         url: proposal_url,  
         type: 'POST',  
         data: payload,  
         success: function(result) {  
           console.log(result);  
          window.location.href = "http://mesh-direct.niftyquoter.com/proposals/" + proposal_id + "/edit";  
         },  
         error: function(result) {  
          console.log(result);  
           console.log(payload);  
         }  
        });  
 }  
 </script>  
 </body>  
 </html>  

4 comments:

Unknown said...

I dont get the "link" option in my dashboard, any ideas why is that?

Emma Mark said...

zoho crm integration
Thanks for sharing this informative article. This content is very useful.
NETsuite customization

Emma Mark said...

Zoho Partners in USA
Thanks for sharing this informative article. This content is very useful.
zoho partners in uk
Zoho Partners NYC

Emma Mark said...

Zoho partner
Thanks for sharing this informative article. This content is very useful.
Zoho Partner
Zoho Partner