Try it out
Apps
Blog
About
Contact
Developers
Docs
Login
Developers
yammer@obindo.com
Written by
Alex
Post the contents of an email message to the Yammer newsfeed.
/* Documentation REST Messages: https://developer.yammer.com/restapi/#rest-messages Authentication: https://developer.yammer.com/authentication/ */ var oauth2Credentials = {}; //#region PRIVATE set my oauth2 credentials var requestUrl= 'https://www.yammer.com/oauth2/authorize?'; var tokenUrl= 'https://www.yammer.com/oauth2/access_token'; var apiRoot = 'https://www.yammer.com/api/v1/'; var regBrackets= /\[([^\]]+?)\]/g; oauth2.getAuthRedirectUrl= function(q) { if (q) tokens.requestToken= util.getObjectFromQueryArgs(q); var args = { client_id: oauth2Credentials.clientID, response_type: 'code', state: tokens.getId(), redirect_uri: oauth2.getCallbackUrl(true) }; return requestUrl + util.getQueryArgsFromObject(args); } oauth2.onAuthResponse= function(q) { var qArgs= util.getObjectFromQueryArgs(q); var args = { client_id: oauth2Credentials.clientID, client_secret: oauth2Credentials.clientSecret, code: qArgs.code, grant_type: 'authorization_code' }; var response= post({url: tokenUrl, args: args}); tokens.loadFromId(qArgs.state); tokens.accessToken= util.jsonify(response.text); if (tokens.requestToken && tokens.requestToken.redirect_uri) return tokens.requestToken.redirect_uri; } function getAuthHeader() { return{ 'Authorization': 'Bearer ' + tokens.accessToken.access_token.token }; } //get tags in a string (just bracketed phrases) function getTags(m) { if (m.selections && m.selections.groupName) { //from selections! var fname= util.trim(m.selections.groupName); return (fname.length > 0) ? [fname] : []; } var s= m.subject; var arr= []; if (!s) return arr; var match; while (match= regBrackets.exec(s)) { var tag= match[1].replace(/^\s+|\s+$/g,''); if (tag.length > 0) arr.push(tag); } return arr; } function getUserGroups() { var args= { include_group_memberships: true }; var response= get({url: apiRoot + 'users/current.json', header: getAuthHeader(), args: args}); var groups= util.jsonify(response.text).group_memberships; return (groups) ? groups : []; } function getGroup(name) { var lname= name.toLowerCase(); //check 1: check groups with membership var groups= getUserGroups(); for (var i=0; i < groups.length; i++) if (groups[i].full_name.toLowerCase() == lname) return groups[i]; //check 2: search (esp for public groups not a member of) var args= { search: name }; var response= get({url: apiRoot + 'search.json', args: args, header: getAuthHeader() }); var searchGroups= util.jsonify(response.text).groups; for (var i=0; i < searchGroups.length; i++) { var group= searchGroups[i]; if (group.full_name.toLowerCase() != lname) continue; if (group.privacy == 'public' || group.show_in_directory == 'false') return group; } return null; } function getUploadFiles(files) { var uploads= []; if (!files) return uploads; for (var i=0; i < files.length; i++) if (files[i].contentType.indexOf('image') < 0 || !files[i].embedId) { //no embedded images files[i].name= files[i].name.replace(/;/g,','); //doesn't like semicolons uploads.push(files[i]); } return uploads; } function postToYammer(text, files, group) { var args = [{ name: 'body', value: text, contentType: 'text/plain' }]; if (group != null) args.push({ name: 'group_id', value: group.id }); for (var i = 0; i < files.length; i++) args.push({ name: 'attachment' + (i + 1), value: files[i] }); var postArgs= { url: apiRoot + 'messages.json', header: getAuthHeader(), args: args }; if (files.length > 0) postArgs.multipartMode= 'RFC6532'; post(postArgs); } function sendConfirm(email, postedText, files, group, tags) { var text= ''; var emailArgs= { to: email, templateFields: { recipientName: message.from.name } }; if (postedText.length == 0 && files.length == 0) { var src= message.source; if (src && src.type && src.type == 'getstarted') //no empty message from other source return; text= 'Sorry, we didn\'t see any text or file to post to Yammer.' + ' Please try again, and add some text next time!' + '\n\nThanks for using Obindo!'; emailArgs.subject= 'Obindo couldn\'t find anything to post to Yammer'; emailArgs.text= text; sendEmail(emailArgs); return; } if (tags.length > 0 && !group) { message.appUrl= tokens.accessToken.network.web_url; text= 'Sorry, we couldn\'t find a good place to post to yammer for you,' + ' so we posted it to the ' + tokens.accessToken.network.name + ' feed.'; } else if (group) { message.appUrl= group.web_url; text= 'We posted your email to the group: '+ group.full_name; } else { message.appUrl= tokens.accessToken.network.web_url; text= 'We posted your email to the ' + tokens.accessToken.network.name + ' feed.'; } if (files.length > 0) { text+= '\n\nWe also uploaded ' + files.length + ' file' + ((files.length > 1) ? 's:' : ':'); for (var i=0; i < files.length; i++) text+= '\n' + files[i].name; } text+= '\n\nThanks for using Obindo!'; emailArgs.subject= 'Obindo posted your email to Yammer!'; emailArgs.text= text; emailArgs.templateFields.buttonText= 'View in Yammer'; emailArgs.templateFields.buttonLink= message.appUrl; sendEmail(emailArgs); } $(function() { var sel= message.selections; var tags= getTags(message); var group= (tags.length > 0) ? getGroup(tags[0]) : null; var text= ''; if (sel && sel.text) text= sel.text; else if (message.strippedText) text= message.strippedText; else if (message.text) text= message.text; var files= getUploadFiles(message.files); if (sel && sel.postPrefix) text= message.selections.postPrefix + text; if (text.length > 0 || files.length > 0) postToYammer(text, files, group); sendConfirm(message.from.emailAddress, text, files, group, tags); });