TCO16 Bonus - Hercules Slack Integration - Updates and device management

Key Information

The challenge is finished.

Challenge Overview

Hercules uses Slack internally for communication between teams.  We also have built a large Node library that integrates with internal Hercules services.  A previous challenge has started work on some basic account management with the bots and the base libraries.  This challenge will fix up some issues and expand the functionality a bit.


For this app, we'd like to use Botkit:

For this challenge, we will just be targeting Slack and Slack Buttons.  The Botkit repo contains examples for both.

Customer information display changes

* In the output of a search, the name of accounts sometimes comes back as all-caps, ie. "JOHN SMITH".  We need to make sure this is cased correctly, like "John Smith".  
* In the output of a search, the address sometimes comes back as all-caps as well, like "123 MAIN ST., CITY, STATE, ZIP ZIP+4".  We want to remove the zip+4 and case this like "123 Main St. City, ST, ZIP"

Device list change

In the list of devices, we show "Set-top Box" and each device.  We want to change this to show the following information:

 Device ID: 8664135822108310219
 Device Type: QamIpStb
 Make: Pace
 Model: PX001ANM
 DVR Tuners: 5
 eCMMAC: B4:F2:E8:21:7C:5B
 DVR Storage: 500 GB
 MOCA MAC: B4:F2:E8:21:7C:5E

Or this:

 Device ID: 486002735902929929
 Device Title: nDvr device
 Make: NDvrRecorder
 Model: NDvrRecorder
 DVR Storage: 500 GB

Device recordings

For a device, we want a button that allows the user to view recordings for that device.  A Ruby script is available in the forum to show how to pull the device list.

For each recording, we want a button called "Delete" that removes the recording from the user's account.

Recording display:

For a TV show (program type is "Series" or "Episode" or "SportingEvent"), we will display like this:

Bones S11 Ep22 - The Nightmare in the Nightmare
Recorded Friday July 22nd, 2016 12:00AM - 1:00 AM

So this is:

"{Title} S{season number} Ep{episode number} - {episode title}
 Recorded {recording date start} - {recording date end}

For a movie (program type is "Movie"), we will display like this:

Movie - Avengers Age of Ultron 
Recorded Friday July 22nd, 2016 12:00AM - 2:00AM

Delete a recording

A test Ruby script will be provided that shows the call to delete a recording.  Note that it will likely not be runnable because the recording will have been deleted, but it will show how the call works.

Heroku deploy

We will be targeting Heroku for the deployment, so please make sure your deployment guide covers how to not only configure the app, but also deploy it to Heroku.

Ideally, anything configurable, like the Slack hook, should come from the environmental variables, so we can set them on Heroku like "heroku config:set ...."

Base libraries

The Node base libraries we have existing will be available in the forum.  The changes from the last challenge have been checked into Git.  If you need additional changes, it's fine to provide a patch file for the base libraries - just make sure that if you add functionality that basic unit tests are also provided.

Final Submission Guidelines

Please see above


2016 TopCoder(R) Open


Final Review:

Community Review Board


User Sign-Off


ID: 30054956