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 Kurt Collins 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