Skip navigation
1 2 3 4 5 Previous Next

Jive Developers

170 posts

extension-128.pngAnother year, and another Stars Wars day has gone by!  I don't know how many of you chose to spend your day, but I took some time to embrace my inner-nerd and dive a bit deeper into Java SpringBoot to see just how fast I could stand up a Jive add-on project.  In part because I've been fascinated with all the work being contributed to that project, but also as a reminder to myself about the Jive SDK Your Way Initiative announced at JiveWorld16.


Need to learn more about the Jive SDK Your Way Initiative?

Getting Started with SpringBoot

So with the Force as my guide (a.k.a. Google), I set out to learn all that I could about Java + SpringBoot, how it differs from traditional Spring that I had become accustomed to building Jive Plugins  I'm happy to say that most of that knowledge carried over like a top, but it took a few moments to get re-adjusted to IoC after a long sabbatical.


In about an hour, I had a rough outline of the project structure ... and some basic components up and running as I expected them to.  Now all I needed to do was implement the Jive specific elements, which according to Building Jive Add-Ons Your Way presentation by Drew/Butch (see above), are the following:

  • Jive Signature Validation (primarily Jive Add-On Registration only)
  • Signed Fetch Validation (impacts any service that is called from an App, Tile, Webhook or other signed means.


When it comes to building web applications, I'm a big fan of the concept of "fail fast", which implies that if a request is going to be bad ... get rid of it ASAP.  This is the primary reason I choose to embed Jive Signed Fetch Validation into a ServletFilter.  It's an easy way to separate the concerns of validation and service execution without polluting code downstream.    Since Jive Signature Validation is mainly only used in a single instance, I decided to move that to a utility class for simple inclusion.  You'll notice that most of the code was lifted from the Jive SDK - Java & Jersey Edition ... which is what makes this doable.   Once I got these two things in place, the rest just fell into place!

Bonus - One of the pleasant surprises I ran into was just how dead simple it is to setup JPA persistence with SpringBoot.  Setting up the Entity and Repository classes (and using a little JPQL) were absolutely dead simple, and coupled with the JPA auto data/schema loading means that I can have a reproducible environment no matter which database I'm using (Postgres, MySql, HSQL or any other JPA compliant).

Let's See Some of the Code

Here is an example of what a web service would look like that is protected by the Jive Signed Fetch Validator ...

public class ExampleSignedFetchController {
  private JiveTrustedUserDetails userDetails;

  private JiveInstanceDetails jiveInstanceDetails;

  public ResponseEntity<String> test(@RequestBody String body) {
  StringBuilder output = new StringBuilder("Request Details:").append("\n");
  return new ResponseEntity<String>(output.toString(),HttpStatus.OK);

... that's it!  You can see the full code here, but there really isn't much else to it!  Very clean and to the point, and easy to abstract away the Jive nuances of the solution.


You can clone/fork the repo here:

GitHub - jivesoftware/jive-sdk-java-springboot: This is an example implementation of a Jive add-on server built and writ…


Overall, I must say that I am very pleased with the results of this exercise, and think that any Java developers out there interested in building Jive add-ons, should definitely give this a try!  Not only was the platform a quick learn, but it also keep the coding footprint extremely small (by Java standards).  It took about 12 hours to get it right, but was functioning around 6 hours in.  Most of the time spent was simply (re)learning the nuances of the SpringBoot environment.

Reminder:  With those 12 hours spent, I can now spin up a Jive + Java w/SpringBoot project in under 5-10 minutes and be read to go .. which is time well spent IMO!

Note:  I haven't had a chance to finish some of the stuff I was working on, such as Webhooks and Tile Pushers; however, there is functioning code in the jivesoftware/jive-sdk-java-jersey that can easily be ported over to complete these requirements.  My focus was to keep this time boxed to a single day.

Next Steps

  • What languages are you interested to write Jive add-ons services in?  The Jive SDK Your Way Initiative is here to help!
    Let Rashed Talukder or myself know if you are interested in putting together an example implementation in our GitHub repository to share with others.  Currently, we have basic support for:
  • Let's work co-operatively to bring our Jive expertise and your language/library knowledge together to build something awesome!
  • And as always, ...




extension-128.pngWhat is Swagger (a.k.a. The Open API Initiative)

Swagger is a growing REST API documentation standard that comprises multi-stages of the software development life-cycle.  The standard is designed to allow architects, developers and business users to collaborate at early stages about capabilities of the API, while enabling developers to continue that momentum into the software developer stages with tools like auto code and documentation generation.


For more details about Swagger, you can check out the following links:


Why Swagger for Jive

When you look at what Swagger is trying to accomplish with bringing teams together, enabling faster productivity and creating awesome user experiences with documentation ... there seemed to be a natural alignment with what Jive does best.  This observations was supported by conversation at JiveWorld16, (see: JiveWorld16 Developer Conference ... It's a Wrap!), where there was a lot of expressed interest about Jive, developer documentation and specifically Swagger.  I must have talked to at-least 10 developers about this very use-case, and as a result of these conversations...a lot of really cool ideas bubbled to the surface.  In standard Ryan fashion, I started to tinker.   Tinkering led to coding, deploying and then testing. Before I knew it, I was putting the final touches on an early version of an add-on I like to call, Swagger for Jive!


What Does It Do

In general, the current version of Swagger for Jive add-on makes it such that the Swagger UI view of a given Swagger specification file can be viewed in-context in a Jive community. 


One of the biggest requires for this solution that I wanted to impose, was that it had to NOT require middleware!  This was to make it easier for developers to give it a try!


Some of those experiences are listed below:


Canvas View (Apps Menu > Swagger for Jive)Custom View TileSimple Stream w/External Object Support


  • Creates a link on the navigation bar (Apps > Swagger for Jive) to view a (non-place) Swagger specification.
  • Pass it Gadget URL Parameters to render a different Swagger specification URL.
  • For practical uses, this experience will most likely change to a list of API specifications to navigate to and view.


  • Embed a Swagger UI specification into a Custom View Tile located on a Tile Page. 
  • Configure the Swagger specification URL via the Tile Configuration experience.
  • Decorate your documentation page with additional information using other Tiles to customize the experience.


  • Using a Simple Stream Tile, create activity in a Jive place with a simple HTTP POST with meta-data that points to specific Swagger specification file(s).
    • Great for automated build integrations into Jive
  • Can push in either a Swagger specification URL or the entire Swagger specification JSON.

Other Use-Cases

  • Place "App" Tab - Configure a Place (Manage > Settings > Configure) to map to a specific Swagger specification which will be presented in a "Documentation" tab on the Place.
    • This option creates a place-specific URL that is "bookmarkable" to navigate straight to the documentation (includes Gadget URL Parameter overrides)
    • If not defined, the tab will not appear. 


But That's Not All

Embedding documentation in-context in Jive is just the first step, next up is building in the scaffolding to enable collaboration around the documentation, and to answer those scenarios, I'll share some ideas that I have in mind.


  • Mouse-over a specific method, and ask a question to the linked community.
  • Decorate methods in the documentation with indicators that show which are the most popular, or ones with the most questions.
  • Easily embed links to specific methods into collaboration via a !app experience
  • and much much more I am sure based on your feedback!


Another idea I was kicking around was to port the add-on to support different themes, or in some cases, new layouts to resemble TripIt's Slate interface!


Using Swagger?  Give It a Try!

Visit our Github repo and follow the instructions to give it a try.  This is an open source effort, so the solution is not fully supported; however, Swagger has a vibrant community and the solution is a pretty straight forward app integration, so maintenance should not be that hard.  Plus, all the source code is at your finger tips, and it's not that much. =)


Hope you enjoy, and looking forward to the feedback ... contributions and overall collaboration around this project!


The Developer Days are Coming!


You guys have been asking for it, and we've listened! Taking your feedback from JiveWorld16, we're going take our hackathon materials on the road in a 4 hour workshop + hack day event to a few major cities around the nation. So be sure to bookmark this page and stay up to date on events! Below are some answers to questions you might have until we do our official announcement.


Official announcements with final details coming soon!


What is it?

It's a hour-long workshop for creating middleware-less add-ons for Jive, then a ~4 hour hack sessions where you work together in a team on an idea YOU come up with, based on given criteria or use some of the pre-defined examples.


Why are you doing it?

Because an overwhelming number of Developers asked, and we thought it was a great idea, and we love great ideas just as much as we love watching people come up with really cool solutions to real world problems & use-cases using Jive. At the end of the day, we want you to not only know how powerful Jive is, we want you to know how to harness the power yourselves.


Who is going to be there?

If you're reading this, then hopefully YOU! We want every developer to go to this very developer-centric event to get trained and learn more in depth about how you can do more for your community with hands-on coverage of middleware-less solutions. Both myself and Ryan Rutan will be at each of these events to help steer you in the right path and show best practices


How much is it going to cost me to attend an event?

All you need to bring is curiosity. The events are free, you'll just need to register (to be announced, TBA).


When and where are the events?

Good question! We're working all of that out, but until we do, we'd love to hear in the comments below of where you'd like us to go and how may people from your team you think would be interested.

It was an interesting year for the JiveWorld16 Developer Conference.  We had quite the pre-conference buzz going around JiveWorld,

and while we are glad we tried a lot of new things this year, we are excited to start working on next year's conference and agenda to make it even better!  We wanted to take a moment to share some of these quick updates, so developers could start watching the videos and trying all the new goodies revealed at the conference!


Walkthrough 360* Video

View around with mouse/touch


Developer Breakout Sessions

Catch up on sessions you missed and/or re-live the sessions to pick up that extra detail.  These videos with slides are available to make sure that no detail is missed and you walk away fully informed about the latest developer platform enhancements!

Reach out in the Developer community or in the comments section of the respective videos if you have any follow-up questions.  We are here to help!



Ryan Rutan

Yuval Twig

2016 Jive Developer Platfom Keynote (video)

Technologies are ever-changing, and so are platforms.  With the release of Jive 8 and the latest version of Jive Cloud, Jive has added simpler and more powerful ways to build integrations that harness the social context that drives your business.


In this session, you will get an overview of Jive’s integration architecture, new techniques for constructing business applications, and proven strategies to help developers maximize time while expediting return on investment.   Coupled with an unparalleled user experience and off the charts user engagement, it is easy to see why more and more customers are turning to Jive as their go-to enterprise development platform.

Yuval Twig

Getting Started with the Jive iPaaS (video)

Formerly known as Project Iris, Jive iPaaS has been built to streamline developer solutions from conception, to testing and on through deployment.  With a creation wizard, project templates, service management and rapid testing options, developing Jive add-ons with middleware has never been easier.  In this session, you will hear Jive Product Management discuss the capabilities of the Jive iPaaS SDK and and how you can start building your solutions on it today.


Give it a try today at



What's New: Jive REST API & Analytics Integrations (video)

Whether it’s running ad-hoc commands to your local machine or hardened solutions for repeatable results, integrations built using Jive’s APIs are a principal part of developing on the Jive platform.  In this interactive session, Jive engineers will cover the latest enhancements and features to the REST and Analytics APIs for Jive 8 and Cloud, as well as patterns to help developers maximize their enterprise solutions using the Jive platform.


butch (TemboSocial)

Building Jive Add-Ons Your Way (video)

When it comes to building the best enterprise solutions, creating things your way is hard to beat. With the emergence of the add-on framework, Jive has opened the doors for developers to build solutions in their preferred languages. In this session, Jive experts will share experiences building add-on solutions in Java and Ruby from the ground up. Learn strategies and best practices on how to build a Jive add-ons using your preferred web-ready programming language and get ready to build something awesome.




Be sure to check out our open source jive-sdk-* repos on and get started today!



What's New: Integrated User Experiences in Jive (video)

Building amazing user experiences is the cornerstone for any successful social system integration.  In this interactive session, Jive engineers will navigate the latest improvements to the App, Add-On and Tile frameworks, in both Jive 8 and Cloud, that enable developers to integrate solutions into Jive’s amazing user-experience.

Gal Oppenheimer (

Tech Talk:  Future of Microservices & iPaaS (video)

As we look to the future of the Jive platform, it is hard to not recognize emerging technologies that will have a foreseeable impact on how developers integrate with Jive.  Two such technologies are microservices architecture and iPaaS (Internet Platform as a Service).




In this session, you will hear from Gal Oppenheimer at, share his views about growing microservice & iPaaS trends and what it means for the future of building scalable Jive integrations in the cloud.

Rashed Talukder

Unleashing the Power of Simple Stream Integrations in Jive (video)

Socializing third-party system activity in Jive is a powerful integration pattern, especially if you can enrich the activity from all the right systems.  In this session, Jive’s Developer Evangelist will walk you through the progressive power behind Jive’s Simple Stream Integrations.  Learn strategies and best practices on how to effectively scale this powerful, yet simple capability in your enterprise without middleware.

saturnism (Google)

amirh1 (Google)

Tech Talk: Developing and deploying Java-based microservices in Kubernetes (video)

A quick overview on Docker containers, usages, and how to scale up from a single container to a fleet of containers working together with Kubernetes for real-life workloads, such as running java-based applications! Join this session to see how to use Kubernetes to launch, manage, and rolling-upgrade a fleet of Java application instances with session replication.


Kubernetes builds on top of Docker to construct a clustered container scheduling service. Kubernetes enables users to ask a cluster to run a set of containers. The system will automatically pick worker nodes to run those containers on, which we think of more as “scheduling” than “orchestration”. Kubernetes also provides ways for containers to find and communicate with each other and ways to manage both tightly coupled and loosely coupled sets of cooperating containers.


In this session, you’ll learn: – How to containerize different Java-based microservice workloads using Docker and different build tool plugins – Deploying and managing a fleet of Java-based microservices in Kubernetes – Service discovery 101 in Kubernetes – Perform critical DevOps steps, such as canary, rolling update, roll backs… – Tips and tricks!

pawans (ThoughtWorks)

Old Dog, New Tricks: Adding Features to Jive Cloud (video)

The Jive platform has a lot to offer developers. Everything from add-ons, to apps, stream integrations, to webhooks and even data services for analytics are at the developers disposal to build feature rich enterprise solutions. In this session, Pawan will demonstrate how ThoughtWorks utilizes the Jive add-on framework and Jive’s open source Node.js SDK to add new features and capabilities to Jive Cloud. If you are looking to uncap the true power of the Jive platform using the add-on framework, this is a session you do not want to miss!

smoghe (ThoughtWorks)

mikhalchuk (411 Labs)


Developer Tips: Building Quick Solutions on the Jive Platform (video)

Bigger isn’t always better.  In fact, sometimes the most valuable solutions you can build are the simplest and easiest to roll-out.  With the latest improvements to the Jive platform, it has never been easier to develop and deploy quick solutions that add real value to the business.  In this session, you will learn tips, tricks and best practices from Jive experts on how to build fast and effective solutions on the Jive platform.  If you are interested in learning about low-friction quick wins with Jive development, then this session is for you!


Yuval Twig




Developer Town Hall (no video available)

This session was very informal, but very interactive.  We had Jive engineering/product executives and architects in attendance to answer questions directly from the audience.  Lots of features were suggested and many have been already been noted for internal consideration.  Overall, the session was very well received and we plan to do it again next year!


JiveWorld16 Tri-Hackathon

jw16-dev-trihackathon-logo-teal-small.pngThe inaugural launch of our new hackathon format was a glowing success.  All those who participated loved the breakout of the hackathon experience; however, we had some work to do to polish some of the edges.  This was to be expected, but we are glad that those who could attend enjoyed their experience and learned some new things in Jive along the way.  Below are the winners from each stage of the Tri-Hackathon.


Hackathon StageWinner


Check out the Developer Coding challenges to see how you would do!



Dominating performance across all level of coding,
including the best in show award!




When it comes to arcade games, do not mess with this guy.

He scored a scorching 72,650 on GunSmoke to claim the prize!




A true tri-hackathon dark horse.  He came out of nowhere and scored a conference high 34k points to win the Hacker Trivia Challenge!




"Andrey the Rockstar" created created a expansive logic flow with multiple activity integrations into Jive with's Flow.




In between rounds of dominating the arcade, Patrick put together some awesome Flow integrations!




Wow, stop being so incredibly good at everything! Andrey showed incredible mastery with a Jive Inbox Pebble WatchApp that he put together in almost no time at all using Pebble Cloud IDE. Congrats on creating such a thorough app!


Here are just a few more of the updates from the conference:

CdYmhHcUkAA7Cdi.jpg:largeCdsf1qSUEAAjaQU.jpg:large CdsO7pCUMAA_HrL.jpg:large CdsJHRyUEAABcF9.jpg

Be sure to check out more of our updates on @jivedev on Twitter.

I know the competition is all over, but I thought I would toss up one final blog post to speak to the relationship aspect.  It was very cool to see some gadgets and prizes from Pebble, nice work Rashed Talker.  It was also excellent to see the guys from sitting at the tables, our their at their booth, and providing their own set of challenges and prizes.  Sure, we have a ringer in the audience who kind of swept the dev challenges, but hey I'm all for a single player dominating the games


The introduction is going to have me looking at what I can do with, I don't think there is any better correlation with their objectives than that.


We had a long list of challenges to get through, I haven't even read through the whole list, but I was about to comment to the effect of "next year it would be great to see iPaaS, Docker Containers, Google Cloud etc (didn't see Kubernetes).  Well guess what, we had those challenges, and now post event we can complete them at any time.  It's really kind a free dev training course if you think about it.

Now not only do you have a Jive focus, but a DevOps focus.  Perhaps times are changing, but when I first started in development, getting your hands on this kind of stuff was impossible if it even existed at all.

Tri-Hack Day 3

Posted by roguen Mar 16, 2016

This marks the end of the Tri-Hackathon.  An exciting conclusion to an equally exciting setup.  I didn't cut the mustard on our three challenges unfortunately, but it was a nice close race for those at the top of the board and I know we all had fun.

I'm also excited to see the new direction and forms the hackathon takes in the future.  There is some talk of taking it on the road to meet the developers, perhaps as part of local meet ups.  If they could work out the format just right I think that would be amazing.


A great combination of the challenges.  Be it Jive itself or, there were plenty of things to hack and plenty of experts in the house before.  I believe I said it during the first day post, but it really made an excellent bookend to the talks and live sessions where they would go through the demos themselves, giving plenty of your own context into the fast moving tech (hey, they only had an hour in most cases).


Also interesting to see will be how they prevent the bit of gaming the system we say with the trivia challenge.  Funny to see, though I still think there should have been a dishonorable mention.


Great fun everyone!  Congrats to our winners and I hope to see you all at the challenge next year should I be able to make it.

Tri-Hackathon Day 2

Posted by roguen Mar 15, 2016

Day 2 is in the books, and with it a couple of completed hacking challenges.  I needed a bit more help from the Jive team, even on these easy ones.  A few great lessons in debugging for sure.


I actually really liked the multi-day aspect of this over a single long stretching event.  It gave me some time to think over which challenges to take, and extend what I was hearing during the technical speaking sessions.  If anything, there might be a few too many coding challenges, you feel compelled to complete them all or none at all, but I understand that it speaks to the myriad of ways we can actually approach development in the environment: in turn it makes it all that much more important to have a technical expert on your side, because there are a million ways to skin a cat.


My approach has been to focus on the easier challenges to get the badge early, but with it now obtained I'm going to change over to the harder for the final day.  I'm wondering if I'll even be able to wrap up one given the amount of slogging that this day included.

JiveWorld TriHackathon Day 1

Posted by roguen Mar 14, 2016

Day 1 of the JiveWorld Tri-Hackathon is cleared.  Once again, the Jive team has evolved the formula around how they conduct it, and I found myself learning a lot.

For comparison I'll use 2 things: some thoughts from my own organization on hackathon activities, and the 2013 JiveWorld event.


It's worth noting that aside form learning about what is coming down the pipe for Jive communities, I'm actually going to be conducting my own event of this type with HDS later this year.  When we talked with some others within our organization, they stated that anything less than 24 hours couldn't be considered a hackathon.  It needed to have teams self organize, design and come up with a product which may or may not get produced fully throughout the event.   If that is the definition, perhaps Jive's version doesn't hold strictly, but I found the purpose more in alignment with what I needed for our event which is also not solely developer focused:

  • Attached to a larger vendor training and community activity (a hackathon wears participate out for anything outside of itself)
  • Focused on showing others possibilities around the platform, not asking them to be the outright innovators (though I surprise is always welcome)
  • Planned activities which demonstrate those capabilities versus a greenfield


With this short, 5 hour event, the team did something interesting by introducing a couple of other distractions to the activity: a technology quiz and a video game cabinet.  Sure, I think the timer on the quiz made most of the answers a guess, and the sticks on the game machine are a bit hit or miss (I'm a vintage game connoisseur after all), but it seemed to me more in alignment with having a bit of fun, versus a focused self driven training walk through.


This was a contrast to what I observed during the 2013 event. There we had some cool gadgets to play around with, but it seemed to devolve quickly into a genius bar kind of experience, where developers were bringing up their own tasks for some free advice and troubleshooting.  It didn't have the same kind of energy or direction that this one now had.


Bottom line, great event so far.  Perhaps it's better that they didn't go Galaga for the cabinet game. It would have been very discouraging for everyone else.  I'll be there tomorrow as well to continue my experience... and check on my score.  See you there!

Ok, so this year's JiveWorld Developer Conference is really going to be like nothing you've experienced before! We've got an amazing theme this year that Ryan Rutan posted up some details in Announcing a Tri-Hackathon at JiveWorld16 Developer Conference w/Limited Edition T-Shirt. Since it's literally right around the corner, I wanted to tease some of the great prizes you can win this year from Jive and this year's hackathon sponsors—as well as some things that can really get you a head start!




You can win up to $200 in gift cards from Jive for finishing challenges, developing something awesome, playing some video games, and testing your knowledge of some hacker trivia!


Get Ahead on Jive Add-on's, API's, Analytics








Complete the Sponsored Challenges from and win an Amazon Echo or other great prizes!


Get Ahead on Flow







Build a Pebble WatchApp or WatchFace that integrates Pebble and Jive to win a Pebble Time Steel (multiple colors to choose from)!


Get Ahead on Pebble

As we prepare to launch into JiveWorld16, we wanted to do all we could to make sure that developers understood the power that exists at their finger tips with the Jive developer platform!


One of the more difficult concepts to communicate has been around the value and pervasiveness of app integrations.  A while ago, we assembled the App Action Contribution Reference as a single source for information on all the locations where developers can weave app experiences into Jive.  One thing that was missing in this was a bit of the glue that brings it all together, such as understanding exactly how apps understand the core tenants of rendering a "contextual experience", such as:

  • Who is the Viewer?
  • What is my app context?
  • Where is my app being viewed?
  • How is my app being displayed?
  • How to target app delivery to only key points in the Jive UX?


[Enter, Stage Left] Jive Developer App Reference "App"


Overview of Features


  • Implements every action contribution in the App Action Contribution Reference, including distinct actions for "All Places", "All Content" and their individual content/place type specifics.
  • Includes a clean Jive App Javascript structure (if developers do not have one already) for structuring their Jive App JS.  Note how simple the app structure is that supports all these use-cases, for easy to follow
    • 1 app.xml, 1 canvas.html, 1 main.js, and 1 main.css


Includes sample code implementations for:

  • Who is the current viewer?
  • What is my current view name & context?
  • What is my current action name & context?
  • Get/Setting View Params for in-app linking.
  • !app artifact creation
    • Simple App Links to initiate in-content contextual app-views
    • Simple HTML Markup (instead of App Link)


App Screenshots

  1. Canvas View
  2. Group Tab View w/Params
  3. Content Action View


Give it a Try for Yourself

We've updated the Getting Started > Creating an App with the Jive Node SDK tutorial with details on how you can generate this app for yourself to get started on your own.


Simply follow the tutorial yourself, or use these quick steps if you already have the Node.js jive-sdk installed:

  • jive-sdk create app
  • jive-sdk build --apphosting="jive"
  • Upload the to the Developer Sandbox


Once installed, simply cross reference the App Action Contribution Reference to find all the hidden gems in this app. =)


As always, I hope this helps ... and enjoy!


So for the past several years, I've tested and/or owned almost every type of smartwatch there is on the market—from the Nike Fuel Band, Fitbits', Garmins', Apple Watch, Samsung Gears', Microsoft Bands'—and none of them have captured by heart and wrist like the Pebble watches have. Where most watches are too complicated, uncomfortable, and unattractive, the Pebble has nailed it since Day 1 with the Pebble Classic. Now, I'll admit that I'm an uber techie who loves having the latest toys, the smartwatch has never been my thing. At this moment I'm wearing a watch from 1987; what I wear most days. So it's really a testament that I'm advocating and promoting a smartwatch—especially the Pebble Time Round . I'm not the only one that's saying it, check out Gizmodo's article on their take on The Best Smartwatch For Every Wrist.




So what did I build here and why?

Well, Jive provides Jive REST API v3.14 → Action entity  to be sent to a user that they can respond to and take "action" on. There are somewhere around 40 verbs that Jive has for the /actions endpoint, and one of them is "" created by this: Jive REST API v3.14 → Activity Creation #Sending Actions. The smart watch is the perfect low commitment method to increase awareness and engagement from your community's users. In today's workplace and in the future, I see smartwatches more commonplace and Pebble's no muss, no fuss, clear as day UI is a great tool for enterprise.


Also, if you're always building enterprise software, it's kind of fun to do something different .


How can my organization use this?

  • From a Jive-X and marketing perspective, we can use a Marketo campaign that gets triggered and sends a action to a user and they can effectively move forward in a funnel. Check out this great blog by timesync on a great and easy way to set this up: Flow: Caffeinate Complex Workflows (2 of 3)
  • From a workflow and security perspective, if a user requests access to a private group, the group admin can either approve or reject that request right from their wrist without ever needing to pull out their phone or laptop.
  • For HR, company RSVP's to events to get a proper headcount is fast and easy.



The Repo




/appinfo.jsonMeta properties for app. Also includes resource identifiers for images and our config appKey enums. All params can be set in your Cloud Pebble's project settings.
/src/app.jsOur main execution script. Pebble by default looks for and runs this file on launch.
/src/base64.jsBase64 encode/decode library from
/src/captionImages.jsReally a JSON file that assigns Jive Action caption values to images and buttons.
/src/clay.jsThe Clay library -- for offline config pages on Pebble and provides some minimal jQuery functions
/src/config.jsConfiguration for Clay. We create the form fields and assign the corresponding appKey (set in the appinfo.json) for storage on the watch. A JSON file.
/resources/images/*Icons used by the app



Code Explained

The repo contains most of the comments inline, so this an overview explanation with links to documentation. This is written entirely in Pebble.js though it can be done in a C and JS combo but for ease of understanding, we're using Pebble.js only and going to refer you to the Cloud Pebble IDE .




Screen Shot 2016-03-01 at 10.11.31 AM.pngScreen Shot 2016-03-01 at 8.59.56 AM.png

Since the JIve /actions/ endpoint is dependent on the user, we only need Basic Auth. Pebble typically requires an externally hosted page for configuration of an app, however we used a new API just released called pebble/clay: Pebble Config Framework for an offline config. This lets us avoid having to set up a new service to then store the credentials into the watch.


Since Basic Auth requests need to be Base64 encoded and Pebble.js doesn't have that as a built-in library, I imported one from:



GET Jive /actions

Screen Shot 2016-03-01 at 8.46.00 AM.png

The user is originally displayed a pre-defined Window of type Card. That gives feedback to the user of the Pebble app requesting the endpoint from Jive. On anything but success the body field of the Card object is replaced with a error dialog. On success the data is then sorted for Jive Action verbs that we wish to display and filter out those that we don't. The array contains the title and subtitle we want to display in each menu item of the Menu object.



Displaying Actions

Screen Shot 2016-03-01 at 8.46.15 AM.png

The sorted array of action items are displayed in a Menu window. The Menu window has specific properties that handles button presses, the UP and DOWN buttons for scrolling and the SELECT button to select the item. When a Menu Item  is selected, the "menu.on" handler's callback displays a new Card object that has the related information we want to show the user, and the icons that corresponds to our pre-defined list of captions for window's actionDef property.

Since the Pebble only has 3 buttons, you should not create actions with more than 3 options.



Responding to Action

Screen Shot 2016-03-01 at 9.00.37 AM.png

With the iconography displayed, when a user clicks an associated button, the sendAction() function is called and we make a POST request to the /actions/<action id>/actions/<captions> endpoint with the caption associated with the button. On success or error we display a UI card to notify the user. Success retrieves an updated actions array from Jive.

Pay attention to the cards in memory and removing the associated cards. When the user clicks the BACK button, he/she will be taken to the Window layer just before the current layer.



What's next?

  • Stay tuned for a special post about JiveWorld16 and Pebble!
  • Add a case for health actions and sending Pebble Health data back to Jive
  • Rewrite the app in C/Pebble.js to be compatible with the Pebble Time Round
Kryo and Bad Surprises


Jive uses the Kryo Framework to serialize and deserialize objects, typically serialization happens when objects are transferred to the remote Voldemort cache and back. Unfortunately serialization troubles caused by bad implementation mostly occur at runtime, which is a surprise I'd like to avoid.




My colleague lars.kreisz wrote a short Unittest to test the serialization of a single class, which was a good start. And so I thought "Why not test all the instances implementing Serializable automagically?". All we need for this is a Reflection library, and I chose Google Reflections, which can be added through the following dependency with scope test in your projects pom.xml:



And now for the JUnit test case, which works very well so far. What it does, briefly:

  • init Reflections library with the package name you want to scan for objects (line 22)
  • filter out only types Implementing Serializable (line 23)
  • iterate over every class, filter out the abstract types which can't be instantiated (line 29)
  • instantiate the class (line 31)
  • Serialize, Deserilze and check class


When there are any problems with the serialization (like included types that are not serializable them selfs, or missing default constructors), an exception from kryo is thrown and the test case is getting red.


import static org.junit.Assert.*;

import java.lang.reflect.Modifier;
import java.util.Set;

import org.junit.Test;
import org.reflections.Reflections;

import com.esotericsoftware.kryo.Kryo;

public class ExperimentalSerializableTest {

  public void test() throws Exception {
  Reflections r = new Reflections("");
  Set<Class<? extends Serializable>> classes = r.getSubTypesOf(Serializable.class);

  for (Class<? extends Serializable> clazz : classes) {

  System.out.println("Checking class " + clazz.getName());

  if (!Modifier.isAbstract(clazz.getModifiers())) {

  Object instance = clazz.newInstance();

  // Serialize to a byte array in ram.
      ByteArrayOutputStream bos = new ByteArrayOutputStream();
      Output ko = new Output(bos);
      Kryo kry = new Kryo();
      kry.writeObject(ko, instance);
      // Deserialize.
      ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
      Input ki = new Input(bis);
      Object deserialiedInstance = kry.readObject(ki, clazz);
      // check casting once more
      Object castedObject = clazz.cast(deserialiedInstance);
      // this has to be true then



Happy to hear your thoughts at the comments. Cheers,



This fall, we'd released a new update to the Jive Cloud platform (2015.3) and along with that comes a couple of great new features and updates to our REST API. We also brought a couple of new posts and tools to make your integrations richer, built easier and faster than ever before. We did a lot of tidying up with this release and squashed quite a few bugs while we're working hard on the next major release that's sure to completely WOW you—release 2016.1.


REST API Improvements

Jive REST API v3.14 → EventCalendarCount entity - Get the event calendar of a place. (added)

Jive REST API v3.14 → EventCategoryType entity - Create, Destroy, Get, Update event category types.  (added)

Jive REST API v3.14 → EventInvite service - Create, Delete, Get, Update invite(s) for an event. (added)

Jive REST API v3.14 → Event service - Create, Cancel, Update an event. (added)

Jive REST API v3.14 → Oembed service - Retrieve an embed code for a URL that is used by the Video Object creation to validate an embed-type video. (added)

Jive REST API v3.14 → Person entity - Delete and Set a users avatar. Update the visibility of a field in a user's profile.(added)

Jive REST API v3.14 → Rsvp service - Get RSVP's and invitees/attendees as well as RSVP to an event. (added)

Jive REST API v3.14 → Video service - Get the download options for a video (added)

Jive REST API v3.14 → ProfileFieldPrivacy entity - Profile field privacy now returns a string for type (updated)



New Documentation & Posts

One Stop for the Jive-n/Jive-x 2016.1 Cloud Release <-- Highly recommended you take a look.

UX Widgets

Content Manager App - The idea into reality Flow: Caffeinate Complex Workflows (1 of 3) Flow: Caffeinate Complex Workflows (2 of 3)


Stay tuned for more news and updates on our next release and keep yourself checking the Jive Developer community often on new guides, documents, blogs, and great support!




Coming Up: JiveWorld16 Developer Conference

Las Vegas - Aria Resort & Casino

March 14-16, 2016



We're very excited to be heading to Las Vegas for JiveWorld16! This year, the experience will be very unique with games, prizes, and of course great sessions to keep you ahead in all things Jive. Be sure to review our survival guide well before you go to maximize your experience: A Hacker's Guide to Prepare for the JiveWorld16 Developer Conference



Re-Introducing Flow


Rashed Talukder wrote up an excellent primer on how to start out using Flow with Jive; if you haven't read it, stroll on over to read Flow: Caffeinate Complex Workflows (2 of 3) . Automating complex workflows with Flow makes some of those repetitive tasks a lot easier while opening your eyes to some of the new things you might be able to accomplish. However, rather than rehash what's already been said, let's jump right into our progression by building an integration between Marketo and Jive.




What We're Building


We're going to get a little more complex than the first Flow that was built. However, we're still going to take it a little easy. There may be times when you want to communicate with your Marketo leads and give them an easy call to action in Jive. Let's build something that gets a list of leads from Marketo and then pushes an Inbox Action in Jive to the first lead on the list. This will allow us to get a brief introduction to arrays in Flow as well as show you what it's like to actually integrate multiple services and activities together.



Getting Started

If you haven't already done so (and you're not familiar with Flow), please take a moment and read Flow: Caffeinate Complex Workflows (2 of 3) . The next thing we're going to need, though, is for you to have a Group List in Marketo you're willing to experiment with. This tutorial won't go over a step-by-step on how to create that. Simply go to Marketo, create a new Group List (I named mine "Jive List"), and put one Lead inside of it. Make sure that lead has the following attributes:

  • First Name
  • Last Name
  • Email Address – Make sure this is an email with an active Jive account associated with it (I used my own).

Once you've created that list, just go to Flow and create a new Flow. Name it whatever you want. And then we're ready to move on to the meat and potatoes.


Get Everything On The Canvas

Now let's get everything we're going to use onto the canvas. I generally prefer to do this just because it helps me organize my thoughts on exactly how the data is going to Flow. For this particular Flow there are five activities you're going to need to get onto the canvas and connect them in the following order:

  1. Marketo -> Get Multiple Lists. While the name of this activity suggests that we're getting more than one list, in point of fact, this activity allows you to search for a particular Group List in Marketo. For example: I am going to search for the list I created named "Jive List". While this activity returns an array, in our particular use case, it will just be returning an array with one element.
  2. Marketo -> Get Leads Using List ID. After performing a search for the list you want, you then need to get the leads out of that particular list.
  3. Marketo -> Get Lead Details. This activity will allow you to get the lead details for a specific lead. For the purposes of simplicity, we're just going to get the lead details for the first lead on the list.
  4. Jive -> Get Person ID by Email. The last activity gave us access to the person's email address. However, before we can push a Jive Inbox Action, we need to know the individual's Person ID. This activity will get us that ID.
  5. Jive -> Create Action. And finally, now we can create an action specifically for the individual we got from the previous activity.

Once you connect them all together, it should look something like this:


Configure The Activities

You can ignore the warning icons you see because we're about to go in and address those right now; one after another.


Marketo -> Get Multiple Lists configuration

The first thing you're going to have to do is set up your Marketo Connection. You can do that by going to edit the settings of the "Get Multiple Lists" activity and selecting the "Marketo Connection" dropdown. If you don't have one already set up that you want to use (as I do in the screenshot below), then go ahead and click on "Add new", type in a name for your new Marketo connection and follow the instructions.


Screen Shot 2016-02-20 at 03.36.51.png


Now that we've got the connection situation straightened out, we want to search for a specific Group List we created in Marketo. I named my Group List "Jive List", so I'm going to enter that name in the "List name" text box:


Screen Shot 2016-02-20 at 03.41.15.png


Once you've done that, we're done setting up this particular activity and we can move on to the next one. Click done and go back to the Flow canvas.

Marketo -> Get Leads Using List ID

Now go ahead and edit the next activity in the chain: Get Leads Using List ID. Now this is where arrays start to come into play. We're not going to do iteration this time around (although this is possible with Flow). Instead, let's just focus on getting the first Group List returned by the "Get Multiple Lists" activity we just finished configuring. First, make sure to choose the Marketo connection you created in step one from the "Marketo Connection" dropdown. Then click on the green [+] symbol next to {{$a0.result}} array and that will give you an idea of all of the objects available to you in each element of the returned array.This activity is asking us to give it a List ID so we can get the leads from that particular list. Because we want to get the leads from the first list in the array, we want to put {{$a0.result[0].id}} in the "List ID" text box as is shown below. That will get us the ID of the first Group List returned in the array.


Built_io_Flow_-_Marketo_List_to_Jive_Inbox_Action.pngNow that you're done configuring this activity, let's move on to the next one.

Marketo -> Get Lead Details

This is the last Marketo activity we have to configure. Again, make sure to choose your Marketo connection. This activity will get us the details for a specific lead in Marketo. The objective of the last activity was to get us the Lead ID we needed here. The objective of this activity is to get the name and email address of the Lead we're going to be contacting in Jive. So, similar to what we did before with the array of Group Lists returned, we're going to just get the first lead from the "Get Leads Using List ID" activity; that's the lead we want the details for. Just enter {{$a1.result[0].id}} in the "Lead ID" field and we're good to go.


Built_io_Flow_-_Marketo_List_to_Jive_Inbox_Action 2.png


Once we're done here, we can move on to the configure the first Jive activity.

Jive -> Get Person ID by Email

First things first: set up your Jive connection. If you've already gone through the first tutorial in this series, then you should already have a connection set up. If you haven't gone through that tutorial, then you can just choose "Add new" from the "Jive Connection" drop-down, choose a name for your new Jive connection, and follow the resulting instructions.This activity is going to allow us to get a Jive Person ID given a particular email address. We would have gotten that email address from the previous activity: "Get Lead Details". So now all we have to do is grab the email from the returned objects in that activity and put it in the "Email" field.


Built_io_Flow_-_Marketo_List_to_Jive_Inbox_Action 3.png

Jive -> Create Action

This is the last activity that needs to be configured. As before, first set up your Jive connection by selecting your Jive connection from the drop-down.Then let's go ahead and just fill out the first three text boxes as seen below. Since we pulled the Jive user's information from the "Get Person ID by Email" activity, we can put their name in the "Title" text box.

  • Try putting the following in the "Title" text box: {{$}}: An Awesome Message From Our Marketo! (Note: we could have also pulled similar information from the "Get Lead Details" activity.)
  • Then go ahead and write some content in the "Content" text box. I chose to write: I'm sending you something pretty awesome.
  • And last, but not least, make sure to put a Person URI in the next text box: https://<jive_url>/api/core/v3/people/{{$}}. In this case, we're getting the Person ID from the "Get Person ID by Email" activity to make sure we have a complete Person URI.


Built_io_Flow_-_Marketo_List_to_Jive_Inbox_Action 4.png

Let's Run It, Already!

We're done. There's nothing more to do but see if this thing works. So once you're done editing the "Create Action" activity, just head back to the canvas and hit the "Test" button in the top right-hand corner. That should execute the Flow.


Built_io_Flow_-_Marketo_List_to_Jive_Inbox_Action 5.png



What's Next?

For the next and final iteration, we'll be completing the iteration to a fulfill a common use-case; initiating a Flow through a trigger, initiating another flow from within a flow, and taking a user's action response and calling another Flow.


If you've been following any of our recent blog posts, such as:

then you might know that we have an amazing agenda planned for you, see the full agenda here, at the JiveWorld16 Developer Conference.


But knowing the agenda and being ready for the conference are two completely different things.  Our goal for the JiveWorld Developer Conference is to be extremely interactive and hands-on, that way developers can head back to their jobs with momentum to start their next Jive integration using their new skills.  To help achieve this goal, we've put together a quick guide for developers (old and new) on how to best to prepare for the best Jive developer event of the year!




Getting Ready for the Tri-Hackathon



The Tri-Hackathon will test your skills in the following hacker disciplines:  coding, trivia and video games.  While trivia and video games will be difficult to suggest recommended training programs, the coding challenge is a bit easier.


  1. Register for the Jive Developer Sandbox, see instructions: How to Access the *NEW* Jive Developer Sandbox
  2. Install the Jive SDK for Node.js ... or familiarize yourself with one of our open-source in-progress SDKs on GitHub.
  3. Install ngrok on your laptop.  This will give you ultimate flexibility on the conference WiFi allowing the Jive Developer Sandbox to communicate with your local dev environment.


<hint>Take a look and maybe try some of the node.js tutorials, this might come in handy.  </hint>



JiveWorld14 Presentation Videos

If you are new to the Jive platform, it is a good idea to get up to speed before attending the conference.  Don't worry!  You can revisit all the exceptional presentations from JiveWorld14 below to get started on the right foot!




Developer Prizes / Awards

Per the previously mentioned blog post, there will be some prizes and badges awarded.  Here is a breakdown of all the opportunities to win, big and small!



Complete at-least 4 coding challenges to earn this badge in the Jive Community

Each coding challenge you complete will earn you tickets.

You do not need to be a developer to participate! (but it helps)


Most Completed Challenges: 
$100 Gift Card


All participants will earn 400 tickets and this badge in the Jive Community

You do not need to be a developer to participate!


Best Trivia Score:

$100 Gift Card


All participants will earn 400 tickets and this badge in the Jive Community

You do not need to be a developer to participate!


Best Score:

$100 Gift Card



Complete all phases of the JiveWorld16 Tri-Hackathon, 
and get this badge in the Jive Community.



Blog about your JiveWorld16 Developer Conference experience,

and get this badge in the Jive Community and 500 tickets!



Win any of the tri-hackathon top prizes or be selected
by our featured hack sponsors (Pebble &,

and get this badge in the Jive Community.




Tickets can be traded in at the end of the conference for
$$$ gift cards, video arcade chachkies and hackathon t-shirts.

Other Awards for Developer Participation


Check-in to at-least 2 Developer Conference sessions,
and get this badge in the Jive Community.



Check-in to at-least 4 Developer Conference sessions,

and get this badge in the Jive Community.

Filter Blog

By date: By tag: