Journal‎ > ‎

Posting to Salesforce Chatter using Google Apps Script

posted Feb 20, 2012 8:43 PM by Saqib Ali   [ updated Feb 20, 2012 8:59 PM ]
The following Google Apps Script illustrates the use of Chatter REST API to make posts to Salesforce Chatter. The example include the use of @mention function.

function postToChatter() {

  // Consumer key and consumer secret must be obtained from http://developer.force.com/.
  // Instruction at http://wiki.developerforce.com/page/Chatter_API

  var consumerKey = "";    // Enter OAuth Consumer Key here
  var consumerSecret = ""; // Enter OAuth Consumer Secret here
  
  
  
  // Begin boilerplate
  var oauth = UrlFetchApp.addOAuthService("Chatter user data");
  oauth.setAccessTokenUrl("https://login.salesforce.com/_nc_external/system/security/oauth/AccessTokenHandler");
  oauth.setRequestTokenUrl("https://login.salesforce.com/_nc_external/system/security/oauth/RequestTokenHandler");
  oauth.setAuthorizationUrl("https://login.salesforce.com/setup/secur/RemoteAccessAuthorizationPage.apexp?oauth_consumer_key="+encodeURIComponent(consumerKey));
  oauth.setConsumerKey(consumerKey);
  oauth.setConsumerSecret(consumerSecret);
  
  
  var loginUrl = "https://login.salesforce.com/services/OAuth/u/23.0";
  var options = { method : "POST", oAuthServiceName : "Chatter user data", oAuthUseToken : "always" };
  var result = UrlFetchApp.fetch(loginUrl, options);
  
  var sfResponse = Xml.parse(result.getContentText(), true).getElement();
  
  var sessionId = sfResponse.getElement("sessionId").getText();
  var serverUrl = sfResponse.getElement("serverUrl").getText();
  var instanceUrl = serverUrl.match(/^https?:\/\/[^\/]+/)[0];
  
  // End boilerplate
  
  
  // Begin Chatter post text
  var payload =  Utilities.jsonStringify(
  { "body" : 
   { 
      "messageSegments" : [ 
        
         { 
           "type": "text", 
           "text" : "Check out the new analytics functions in Salesforce \n\n cc:" 
         },
         
         { 
           "type": "mention", 
           "id" : "{Chatter user ID}"
         }
         
         
      ]
    }
  }
  
  
  );

  // End Chatter post text
  
  var contentType = "application/json; charset=utf-8";
//  var feedUrl = instanceUrl + "/services/data/v23.0/chatter/feeds/record/{Chatter Group ID}/feed-items"; // For posting to a Chatter Group
  var feedUrl = instanceUrl + "/services/data/v23.0/chatter/feeds/news/me/feed-items"; // For posting to your own feed.
  var response = UrlFetchApp.fetch(feedUrl, { method : "POST", headers : { "Authorization" : "OAuth " + sessionId }, payload : payload, contentType: contentType });
  
  var feed = JSON.parse(response.getContentText());
  
  Logger.log(response.getContentText());
  
}