Implementation of the Gigya gamification platform with Luminis V and Salesforce. Design and creation of 6 Java portlets, 2 Web Services to aid in the gamification of the student experience at USD.
Planning implementation and achieving results
The start of this project was a bit nerve-wrecking, to be honest. I was handed a Powerpoint that summarized what Gigya does and told to implement something. Nobody seemed to know what that something was and it seemed like the more I asked the more questions I had.
Nonetheless, we succeeded in getting everyone on the table and ended up creating a rough timeline. I fairly quickly implemented their Social Login feature, but I soon ran into issues (see below). Luckily, I was able to find a good workaround.
Overall, we created the following portlets:
- GigyaLoginPortlet: Logs in the user to Gigya and creates a session cookie.
- GigyaAchievementsPortlet: Enables users to view their currently achieved level, badge image and title per challenge.
- GigyaChallengesPortlet: Enables users to view all the badges, both locked and unlocked, of the "My Community Status" challenge.
- GigyaStatusPortlet: Enables users to view their current status in a specific challenge, and control their privacy settings.
- GigyaLeaderboardPortlet: Displays the top ranking users in a specific challenge.
- GigyaBankPortlet: Allows users to redeem their Gigya points.
Those portlets were mostly created and completed in the month of February. Users were pleased with the results (if anything, they wanted more... leading to some scope creep that we had to manage).
Next on the list was the Salesforce integration. Users expressed interest in awarding students points for attending events on campus. Those events are stored in Salesforce. We had to find a way to award Gigya points to users whenever they attended an event.
They way I managed it is as follows:
1. Events are created in the Gigya platform. This allows business users to predefine how many points each event is worth. We also created a catch-all "generic_event" action for events that are not pre-defined.
2. Student attends an event that gets recorded into Salesforce.
3. I created a trigger that fires whenever a Contact gets saved into an Event object in Salesforce.
4. The trigger will then in turn call a Web Service I created. It will pass the name of the event and the student ID as parameters.
5. The Web Service receives the Event name and Student ID.
6. If the event exists in Gigya, all we have to do is call gm.notifyAction with the Student ID and event name. If not, we do the same but with the generic_event. The Gigya Java APIs handles authentication and wrapping the requests correctly.
The end result is a seamless integration between Salesforce, Gigya, and Luminis. As a student attends an event, the event automatically notifies Gigya and awards them the correct amount of points. They can then log in to the Luminis portal and see that their balance has increased and they can spend their points on the "Bank". Hopefully this leads to more student engagement in the long run.
Influencing, communication and teamwork
Worked with Gigya Implementation Services and attended weekly meetings and ensured that project kept on schedule. Worked with Business users to make sure their needs where met. Informed my manager at every step of the process.
Analysis, problem solving and creative thinking
One major technical issue we had to resolve had to do with account creation. In a standard Gigya implementation, you create or log in the user at a site's sign up page. At USD, this is a process is not so straight-forward. We use CAS SSO to log in users to the portal, and users are created from several different data sources. Therefore, it was impossible to catch all users and send them to Gigya at our login page using their standard sign up flow.
After some though, I ended up creating a portlet inside the Welcome page. The Welcome page is a special landing page that every user of our portal lands on after they log in. Thus, by putting this portlet there, I can validate the user against the Gigya service and if they don't exist, I can create them and sign them in. If they do exist, I can just log them.
Another fun little technical challenge was the creation of the "Bank" portlet. The Bank portlet allows user to redeem points earned by playing the games. I wanted to make it fun and mysterious, so I designed this little card game. The cards are locked/greyed out until the user has earned enough points. At that point, the cards become "flippable" with some custom CSS transformations. The front of the card displays a picture/preview of the reward. The back of the card has more details on the reward and gives them a button to redeem their points. Upon clicking "Redeem", a service call is made to Gigya and points are subtracted accordingly. The portlet stores their reward for the remainder on the session. The portlet is updated with information notifying the user that their action was succesful and further redeeming instructions are presented if necessary. User can keep redeeming points as long as their balance stays positive. I think I enjoyed this a lot because it is rare that I am given free range to my creativity and I enjoy making and playing games. The end users seem to enjoy it too!