Thursday, May 28, 2015

How to use Yammer Embed: Part 2

Yammer Embed JavaScript library and Yammer Open-Graph are very powerful combination. With simple JavaScript, we can achieve a lot.

While the Yammer team has provided API documentation, there are little examples published on internet today which explain its simplicity and potential. I will try to fill the gap in this blog post by taking an example of how it can be used.

If you have never used Yammer Embed before, you may want to read my previous post.
http://vinaybhatia.blogspot.com/2014/08/how-to-use-yammer-embed_27.html


For Yammer Open Graph commenting and Open Graph buttons, I will recommend to first read documentation on Yammer Website.
https://developer.yammer.com/v1.0/docs/commenting
https://developer.yammer.com/v1.0/docs/open-graph-buttons

What you may not realize at first is that you can pass page url's to opengraph.
And if you change the query string parameter for same page url, it is treated as another open graph object in Yammer.

Now lets put 2 and 2 together and make it 5 (actually 10).

I will use a simple example of a SharePoint Online blog site. However, the same concepts can be extended to any web based platform like SalesForce or ASP.Net.

In SharePoint Online blog site, there are only 2 pages, Home page and details page. The blog post id is passed in the querysting and associated blog post displayed. Example Page URL's:
Summary Home Page:
https://wipromspractice.sharepoint.com/sites/YammerDemo1/CEOBlog/default.aspx

Details Post Page: Note that only ID in query string changes.
https://wipromspractice.sharepoint.com/sites/YammerDemo1/CEOBlog/Lists/Posts/Post.aspx?ID=1
https://wipromspractice.sharepoint.com/sites/YammerDemo1/CEOBlog/Lists/Posts/Post.aspx?ID=2

Now we want to delete or hide the SharePoint social features and use Yammer embed instead.

For home page, I need to show summary of feeds from all different blog posts. I created a Yammer Group (using Yammer UI) and then used the Yammer Group ID in my code to display the Yammer Group feed.

Below is the embed script on Home Page and how the UI looks.

<div id="embedded-feed" style="height: 800px; width: 400px;">
</div>
<script src="https://assets.yammer.com/assets/platform_embed.js" type="text/javascript"></script>
<script type="text/javascript"> 
yam.connect.embedFeed({
  container: '#embedded-feed'
          , network: 'vinaybhatia.com'
        , feedType: 'group'
        , feedId: '5515127'
        , config: {
             use_sso: true
             , header: false
             , footer: true
             , showOpenGraphPreview: false
             , defaultToCanonical: false
             , hideNetworkName: false

        }
    });
</script>

Yammer Embed Screenshot on home page displaying latest comments for different blog posts:
(Click on the image to enlarge the image)


On the details blog post page, I use the following script. Note that I capture the page URL and page title  and pass to object properties. This ensures that different feed is shown for different blog posts, though my page and script remains the same. I have also thrown in a like button to illustrate how Yammer buttons can be embedded and use same concept.

<div id="embedded-like"></div>
<div id="embedded-feed" style="height:800px;width:600px;"></div>
<script type="text/javascript" src="https://assets.yammer.com/assets/platform_embed.js"></script>
<script type="text/javascript"> 
var pageUrl = document.URL;
var pageTitle = document.title;

yam.connect.actionButton({
 container: "#embedded-like",
 network: "vinaybhatia.com",
 action: "like",
 objectProperties: { 
          url: pageUrl
          , type: 'page'
   , title: pageTitle
        }
});

yam.connect.embedFeed({
  container: '#embedded-feed'
          , network: 'vinaybhatia.com'
        , feedType: 'open-graph'
        , feedId: ''
        , config: {
             use_sso: true
             , header: false
             , footer: false
             , showOpenGraphPreview: false
             , defaultToCanonical: false
             , hideNetworkName: false
             , defaultGroupId: '5515127'
             , promptText: 'Comment on this blog'
        }
        , objectProperties: { 
          url: pageUrl
          , type: 'page'
   , title: pageTitle
        }
    });
</script>

Yammer Embed screenshots displaying different comments for different blog posts:
(Click on the images to enlarge the image)

Image for a different blog post on same page:




Instead of SharePoint blog site using post id to form unique URL's, this could have been CRM system with customer ID passed in query string, or pass the DepartmentID in an ASP.Net or Java website.

Monday, November 24, 2014

Establishing Yammer Networks for Yammer Certifications


I keep getting queries regarding Yammer Admin Certifications and how to setup your own Yammer network.

To clear Yammer Admin Certification, you need to play around with Yammer Enterprise Network (not Basic) with a Verified Admin account (and not an end user account).

Yammer Verified Admin is a very powerful account. For e.g. it can view messages of a private group in Yammer. Unless you or your team are responsible for managing Yammer in your organization, it’s unlikely that you will be made Yammer Verified Admin.

If you are determined to clear Yammer Admin Certifications, suggest that you plan to establish your own Yammer Network. Your personal Yammer network which you  own and manage. Below are high level steps I followed:

·        Create an Office 365 Tenancy. (You can create free one month trial or use your MSDN account for same. If you are a .net or SharePoint developer, you should be already having MSDN subscription).

·         If you don’t already have a domain, purchase a domain (I purchased vinaybhatia.com for 10 GBP per year. Later I realized that VinayBhatia.co.in is available for much lesser price).

·         Register your domain in Office 365

·         Create user(s) with email address belonging to your newly acquired domain (e.g. user1@vinaybhatia.com )

·         Register with Yammer using your domain email address. Yammer will send an email with the verification link.

·         Go to Office 365 Inbox, and click on activation link. You have your basic Yammer network established.

·         Within Office 365, raise a request to upgrade Yammer from Basic to Enterprise. MS takes about 1-2 days for same. And Office 365 global admins become verified yammer admins.

It’s been more than six months, so I don’t remember where to click and all. However, it is well documented and you can search on Internet.

I have established www.yammer.com/vinaybhatia.com where I am the Verified Admin (Super User Account) and can do whatever I need. For e.g. I use it for configuring DSync (with AD on Azure) with different configuration settings, perform Data Exports and creating Yammer Analytics reports using Microsoft Power BI, Integrating SharePoint 2010 Web Parts for Yammer, etc.

I recommend SharePoint professionals and aspiring Yammer professionals to do same. Remember, knowledge of Yammer Administration is now becoming a pre-requisite for all Office 365 / SharePoint consultants.

Yammer is simple to learn/master. It’s not as wide in scope as SharePoint and there are limited options.

Enjoy your own Yammer network!!!

Wednesday, August 27, 2014

How to use Yammer Embed

What is Yammer Embed?
Yammer Embed is used to display data from Yammer in your HTML based applications (e.g. SharePoint 2010/2013 Intranet and Team Sites, ASP.Net or Java Web Sites, CRM Tools etc.).
The specified Yammer feeds are displayed as Widgets within your existing application.

Prerequisites
  • To use Embed you need a HTML container which is 400 pixels or larger.
  • Supported desktop browsers include IE 8 and above, latest versions of Chrome, Safari and Firefox
Usage
Using embed, you can display My Feed, a Group Feed, a Topic Feed, a User Feed or an Open Graph object feed. Yammer Embed displays a snapshot of a specified feed and functions as a scaled-down version of Yammer.com.
It is simple to use Yammer Embed and any business user with required permissions can use it.

How do I configure Yammer Embed?
Let’s take an example of a Yammer group and try to show the same on a SharePoint 2010 page.

1. In Yammer, Navigate to the group for which you want to embed the feed. On the bottom right hand side, under Access Options, you will find the link “Embed this group in your site”.
clip_image001

2. Clicking on the link will open a popup with the HTML generated for you.
clip_image002

3. Copy and paste the HTML to notepad (or any script editor tool of your choice).
clip_image003

4. Save the notepad file on your local computer (e.g. MyYammerGroupEmbed.html).

5. Navigate to your SharePoint Site, navigate to a document library, and upload the file created in previous step.
I recommended you to choose “Site Assets” library or a library you may have created to store your script and image files. This is only a recommendation and any existing or new document library can be used for this purpose.
Make a note of the document path in the SharePoint library (e.g. /SiteAssets/MyYammerGroupEmbed.html) as it will be required in the next step.

6. Navigate to the SharePoint page where you will like to embed the Yammer feed, and insert a Content Editor Web Part(CEWP) on the SharePoint 2010 page.
CEWP is available in the “Media and Content” category of web parts.

If you have never used a CEWP before, you can refer this link below:
http://office.microsoft.com/en-in/sharepoint-foundation-help/using-the-content-editor-web-part-HA101794745.aspx

7. Edit the Web Part properties and under Content Link, add the path to the .html file uploaded in previous step. Click on Test Link to ensure the path is correct.
clip_image004

8. Optionally, under Appearance, you might want to set the Chrome Type to None in the web part properties.

9. Click on OK to save the web part properties and save/publish the page.

10. If the user is not already logged in, the user may be shown the Yammer Login UI on the SharePoint page:
clip_image005

11. User can click on the Login button and authenticate with Yammer. After login, the Yammer Feed will be displayed on the page as follows.
clip_image007


Singe Sign On:
Yammer Embed supports Single Sign On. To use SSO, modify the previously generated HTML add a config section with use_sso: true and network: 'your_yammer_network.com'

<div id="embedded-feed" style="height:800px;width:400px;"></div>
<script src="https://assets.yammer.com/assets/platform_embed.js"></script>
<script>
yam.connect.embedFeed({
container: '#embedded-feed'
, network: 'vinaybhatia.com'
, feedType: 'group'
, feedId: '3903471'
, config: {
use_sso: true
, header: true
, footer: true
, showOpenGraphPreview: false
, defaultToCanonical: false
, hideNetworkName: false
}
});
</script>

Configuration Widget:

Yammer provides an easy to use configuration tool which can be used to generate and prototype the HTML.
https://www.yammer.com/widget/configure
To find a feed id for a particular Yammer group, navigate to the Yammer group and note the feedID in the URL.
https://www.yammer.com/vinaybhatia.com/#/threads/inGroup?type=in_group&feedId=3903471

Security:
Yammer Embed respects the security settings configured in Yammer. Users will need to be logged in to view the feed. The feed is shown based on users permissions in Yammer. For a private group, user will get to see the messages only if user is a member of that private group.

Troubleshooting:
Internet Explorer needs to have Yammer configured in the IE “Trusted Site Zone”.  In this setting, add https://*.yammer.com

What else is possible using Yammer Embed?
  • Open Graph Feed
Add a social commenting layer to a page by using the following script.
<div id="embedded-feed"></div>
<script src="https://assets.yammer.com/assets/platform_embed.js"></script>
<script>
yam.connect.embedFeed({
container: "#embedded-feed",
feedType: "open-graph"
});
</script>

It will display UI where users can collaborate and discuss about the page.
clip_image008
Please note that if the URL of the page changes (say while migrating from SharePoint 2010 to Office 365), the previous messages for the page will be lost.
  • Like:
We can use Yammer Embed to drop a Like button to a page. The script for same is as follows
<div id="embedded-like"></div>
<script src="https://assets.yammer.com/assets/platform_embed.js"></script>
<script> yam.connect.actionButton({
container: "#embedded-like",
network: "vinaybhatia.com",
action: "like"
});
</script>

clip_image009clip_image010
After user clicks the button, the Like button changes to Liked and it appears in the Yammer Activity Stream as “<UserName> likes <PageURL>”
clip_image011
  • Follow
Similar to Like, there is a Follow action which shows Follow and Followed button on a page.
clip_image012clip_image013
To know more about Yammer Embed, visit the following links:

Yammer Integration Options

There are different ways to integrate Yammer with your SharePoint sites, Line of Business Applications & Mobile Apps. Different options require different skill sets and have a different target audience.

Targeted for Developers:
1. REST  API
2. Yammer SDK
3. Open Graph

Targeted for Business Users & Power Users:
4. Yammer Embed
5. Yammer App for SharePoint 2013
6. SharePoint 2010 Web Part

Targeted for IT Pro:
7. SSO
8. Directory Sync(DSync)

I will cover each of the options in more details below.

REST API 
Yammer provides a REST interface to interact with data in  Yammer. A developer has to be involved to use this option. The developer needs to know basics of REST, OAuth 2.0 and a programming language like JavaScript, .Net, etc.

More details about the REST API is available on Yammer Web Site here:
https://developer.yammer.com/restapi

We can use the Yammer REST API to build custom solutions around Yammer. For e.g. leverage OAuth 2.0 flow to authenticate a user and then show the Yammer feeds within a custom Mobile or Windows 8 App. However, before putting your developer hat on and starting a new project, please check if the other freely available options described below meet your needs.

Please note that not every Yammer feature and functionality is exposed publicly via REST API and you have to live with those limitation. There are some undocumented API’s too, but I will recommend to stay away from those (as MS / Yammer can change them at any point of time in future). I believe Microsoft / Yammer team should be working on increasing the available REST API interfaces.

To prevent Denial of Service (DOS) attacks, Yammer applies rate  limits (query throttling). If you fire more than 10 queries of a particular type within a predefined period of time (10-30 seconds) using the same account, Yammer will choose to ignore and  throttle your request. Details about Rate Limits are documented on Yammer web site.
https://developer.yammer.com/restapi/#rest-ratelimits

I will not worry much about REST API Rate Limits for normal scenarios. But I will not use the  REST API for something like querying a Yammer group for messages repeatedly inside a for loop to generate group level analytics.
Note: Developers are overcoming this limitation by putting a pause for x seconds inside their code

Yammer SDK
Working with REST API can be time consuming, and the Yammer SDK provides a wrapper layer hiding the REST implementation details from the developer.  The SDK’s are available for JavaScript, Ruby, Phyton, IOS and Windows Phone 8 and meant to increase developer productivity.
https://developer.yammer.com/yammer-sdks/

Please note that at the time of writing this blog post, there is no official Yammer SDK for .Net (and it’s almost 2 years since Microsoft bought Yammer). There are couple of internet blogs and codeplex projects which try to provide a Yammer SDK for .Net, but they are not officially funded or supported by Microsoft/Yammer.

Yammer Embed
Yammer Embed is the ability to embed Yammer in your browser based applications like SharePoint 2010, SharePoint 2013, ASP.Net, Java, etc. It can be used with any browser based technology.
It is simple to use, and can be used by business users or power user (non-developers).

The data continues to reside in Yammer, and is only displayed within your other applications. Conceptually, it is similar to uploading a video on YouTube and then using  the link or HTML to display it within your  other website.

For example, the following Yammer Embed script, when added to a page shows the feed for a specific Yammer group called Office 365 within your page. It is easy to use use and show Yammer feeds as a widget within your intranet portals and line of business applications.

<div id=”embedded-feed” style=”height:800px;width:400px;"></div>
<script src="https://assets.yammer.com/assets/platform_embed.js"></script>
<script> yam.connect.embedFeed({
  container: '#embedded-feed'
        , feedType: 'group'
        , feedId: '3903471'
        , config: {
             use_sso: false
             , header: true
             , footer: true
             , showOpenGraphPreview: false
             , defaultToCanonical: false
             , hideNetworkName: false

        }
    });
</script>



I will cover more details about how to use Yammer Embed in my next blog post.

Open Graph
Yammer Open Graph provides the ability to write data into Yammer from your other applications (e.g. CRM). The same will be displayed into the Yammer Activity Stream.
More details available on Yammer Web site:
https://developer.yammer.com/opengraph/

You can also pull the feed for the Yammer Open graph object using Yammer embed.

For e.g.  the following Yammer Embed Feed for my blog URL will look like the  screenshot below:

yam.connect.embedFeed({
  container: '#embedded-feed'
        , feedType: 'open-graph'
        , feedId: ''
        , config: {
             use_sso: false
             , header: true
             , footer: true
             , showOpenGraphPreview: true
             , defaultToCanonical: false
             , hideNetworkName: false

        }
        , objectProperties: { 
          url: 'http://vinaybhatia.blogspot.in/'
          , type: 'page'
        }
    });


You can programmatically form the URL, and include the script in your master page so that each page has its unique Yammer feed. You need to ensure your URL’s remain same (even during migration from SharePoint 2010 to 2013) to retain the posts and comments.

[Update 1 27 Mar 2013]: For dynamic page URL and title,  use following in your JavaScript.
var pageUrl = document.URL;
var pageTitle = document.title;

objectProperties: { 
  url: pageUrl
, type: 'page'
, title: pageTitle
}

[Update 2 27 Mar 2013]: Microsoft is now recommending use of Yammer Embed over Yammer App and Yammer Web part. Please refer https://www.yammer.com/itpronetwork/#/Threads/show?threadId=510047230 for details.  


Yammer App for SharePoint 2013
SharePoint 2013 and Yammer are two different products now owned by the same company, Microsoft.  The SharePoint 2013 App tries to integrate the two products together, and helps in displaying the Yammer news feed within your SharePoint 2013 web sites. If your organization has embraced Yammer as the enterprise social network, you will most likely (manually or programmatically) replace the default SharePoint 2013 social newsfeed with Yammer newsfeed using this App.



 The App is freely available in the Office 365 App store.
http://office.microsoft.com/en-us/store/yammer-app-for-sharepoint-WA104090116.aspx

Work with your SharePoint Admin team to acquire the latest version of the app and make it available within your SharePoint 2013 environment.

Apart from the official Yammer App from Microsoft, there are few other Yammer Apps available in the Office 365 App store. I haven’t tried them yet, but since this blog is about available options, thought I should mention it.

SharePoint 2010 Web Part
The Yammer Web Part for SharePoint 2010 provide the ability to display user or group feeds, show Yammer Search results (besides SharePoint  or FAST Search Results), easily share a document link (from Document Library ECB Drop Down Menu) to Yammer, show  Yammer feeds for unsigned user, etc.

All the functionality is available within the same web part which offers lot of easy to use configuration UI.




The SharePoint 2010 Web Part and its related documentation  are available for free download on the Yammer Web Site:
https://about.yammer.com/success/activate/integrations/

While the web part is functionally rich, you need to consider the following:

  • Based on SharePoint Web Parts model, and not compatible with Office 365/SharePoint 2013 App Model. It’s a red flag if you have plans to migrate to Office 365 or SharePoint 2013 App Model in near future.
  • Needs a Service Account which is Yammer Verified Admin
  • Complex Installation and Activation process to be performed by SharePoint Farm Admin: Yammer provides an MSI installation package and documentation to make things easier, but a lot seems to be happening behind the scenes.
  • Performance: The Web Part seems to be designed in such a way that all requests go from page to Web Services on the SharePoint Server (deployed during installation of the SharePoint WSP solution) and then to Yammer. I found this by using Fiddler and reverse engineering the flow. I could not find any documentation around same. While on my development machine, there was no significant performance impact for a single user scenario, I will perform a Load Testing before using it in production. The way it is implemented, it has the potential to impact the performance of the entire SharePoint 2010 farm under any of the following scenarios:
    • If it is inserted on a heavily used intranet home page
    • The internet connection between SharePoint server and Yammer is slow
    • Yammer is facing any service disruptions or delays.
  • Legacy: Haven’t seen an update from Yammer since last one year.
Yammer Embed provides most (but not all) of the functionality offered by the Web Parts.
Use the Web Part only if you badly need the additional functionality (not available in Yammer Embed) and don’t have the time or expertise to custom develop the same using REST API.

SSO and Directory Sync(DSync)
IT department can integrate Yammer by configuring Single Sign On (SSO) and Directory Sync. SSO enables users to use their organization Active Directory credentials (or whatever LDAP your organization uses) to sign in to Yammer. Yammer DSync synchronizes your organization AD profiles and Yammer profiles, providing the ability to Add, Update and Suspend Yammer Accounts when they are updated in AD.

SSO and DSync are topics for another blog post, and I will try to cover them in more details some other day.

So what should we use for integrating Yammer?
It depends on what you are trying to achieve. I usually start with Yammer Embed, since it is the simplest and faster way to implement. Only if Yammer Embed is not sufficient to meet the needs, I consider the other options.

Thursday, July 31, 2014

Learnings from a successful Yammer rollout

I have been involved on a Yammer engagement for past few months. One common request I get from my colleagues / friends is to share learnings and best practices. So I thought of posting it on my blog for everyone’s reference.
  • For successful Yammer implementation and adoption, one needs to work closely with IT (AD, SMTP, Identity and Access Management), Information Security, Data Privacy, Legal, Marketing &Communication and other teams in the customer organization. Apart from this, we worked very closely and got great support from Microsoft(Yammer) Technical Architects, Support Team and Yammer Customer Success Managers.
  • Establish a Yammer test network for testing and training purposes
  • Upgrade from Yammer Basic to Yammer Enterprise (if you have the licenses available)
  • Implement AD Sync to mitigate Information Security Risk Assessment concerns, Same can be customized to your specific needs
  • Implement SSO so users don’t have to remember another set of credentials. Test and see how SSO works on your Test Network before implementing in production.
  • Merge different Yammer domains to single domain for true enterprise wide collaboration, Most large organizations may have likely acquired different companies and are likely to have multiple Yammer domains in existence. During domain merge, all existing data of child domains is lost and cannot be retained.
  • Leverage Yammer Customer Success Managers and the community by joining YCN, Yammer Developers Network, SPYam, etc.
  • Start today and integrate Yammer with SharePoint 2010 and other web applications, You don’t need to wait for SharePoint 2013 / Office 365
  • Start with Yammer Embed for integration. Unless necessary avoid all code customizations. While it has an REST API model, it is not meant to be an custom application development platform like SharePoint.
  • Use Yammer for conducting targeted events and meeting certain goals, Measure analytics and outcomes of such events.
  • Establish Yammer Governance and Support service. Users are more likely to adopt an officially approved, endorsed and supported Enterprise Social Network than an unsupported one.
  • Data Privacy laws in certain countries (e.g. Germany) are very strict and legal approvals can be delayed and time consuming process.
  • End user can be confused between Home and external Yammer networks. Apply your organization branding (logo, mast head, color) to your Home domain, Apply different branding to your external networks, so it’s easy to differentiate.
  • While Yammer provides network level usage analytics, it is currently weak at providing group level usage analytics. Hopefully, Microsoft will rectify same in future.
As a Yammer consultant, I established my own Yammer Network and upgraded it from Basic  to Enterprise. This provided me my own space where I could play around with.  I had to spend a few dollars, but that is the best investment I made this year.

What were your Yammer learnings? Please add to the comments below so the list keeps on growing.

Friday, January 17, 2014

Democratization of Education


I recently completed “An Introduction to Marketing” course from Wharton School, University of Pennsylvania. The course was offered through Coursera, an Massive Open Online Course(MOOC). The quality of the training was the best in the world. I earned the following certificate on successful completion of the course:

https://www.coursera.org/signature/certificate/HT8SNK3PRP

I have been a great fan of Online and pre-recorded video based training and education since past several years. Its gives us access to the best training material in the world at our doorstep.

I recommend you to visit https://www.coursera.org/ and other MOOC sites, and enroll for a course of your liking. There are courses on different topics including Management, Arts, Science, Humanities, Social Sciences, Computer Science, etc.

Those who are interested in  knowing more details about the course format and my experience at Coursera, feel free to write to me or call me.

Tuesday, December 31, 2013

SharePoint Decision Tree

SharePoint is Simple. :-)
 


How to keep workers productive in a BYOD world


My blog post on Windows 8 got published on Microsoft.com earlier during the year. I keep forgetting the URL, so making a note of it for my and everyone's quick reference:


The above blog is a copy of the article published on Wipro.com with small modifications. The bulk of content remains the same. Original post is here:
 

Wednesday, April 10, 2013

Windows 8: Suitability For Enterprises

One of my blogs and Point of View(PoV) documents got published recently on Wipro's website. Below are links to same:

Point of View Paper
Read about how enterprises can benefit from Windows 8 and the challenges they face in adoption.
http://www.wipro.com/Documents/insights/Windows8_suitability_for_enterprises.pdf

http://www.wipro.com/blog/default.aspx?id=488&title=The_Suitability_of_Windows_8_for_Enterprises