GE wants the Topcoder community to work with Predix and to create sample applications that emulate various devices interoperating with Predix services over the network. This challenge is a part of a series of Predix contests with the total prize pool over $10,000. We hope you will take time to register for Predix, read about the services they provide, and configure your environment. Other challenges in this series may use different technology stacks and approach very different problems, but all of them will utilize Predix account and different services provided by the platform.
SetupIf you have not registered already, go to http://predix.topcoder.com and join Topcoder Predix Community. Fill out the registration form and confirm your email address. Once completed, you will receive community welcome email with a link to register your Predix developer account.
During registration of the Predix dev account, state Topcoder as your company. Be aware that approval of the Predix account can take a few days at the Predix side. To facilitate the process, please message in the challenge forum your Topcoder Handle / First and Last Name / Email that you have used for registration of Predix account. We will pass these data to GE Predix team to speed-up the process.
Eligibility: As of now, residents of the following countries are not allowed to register in Predix, hence they won’t be able to participate in this challenge: China, Cuba, Iran, North Korea, Russia, Sudan, Syria.
Challenge ScopeIn this challenge we will build a sample webapp, that integrates Predix with Amazon Alexa Voice Service (AVS) (https://developer.amazon.com/alexa, https://developer.amazon.com/public/solutions/alexa/alexa-voice-service/content/avs-api-overview). AVS allows developers to add smart voice-related functionality to their products having a microphone and speaker. You will use its capabilities to create a simple survey App:
- Backend. Based on NodeJS and ExpressJS, it should be hosted in Predix cloud (locally for development). It will communicate with AVS to handle voice-related functionality and with Predix Asset Service to get survey questions and to store user answers. It will also serve a simple frontend. It should follow our usual best practices (well-documented, AirBnB linter to control the code quality, configuration, etc.).
When the visitor starts survey in the frontend, the backend will take a question from the survey stored in assets service, send it to AVS to synthesize the speech, and then proxy the AVS response to play the resulting speech at the frontend side. Once the visitor has listened the question, he will answer to it, using his voice and microphone. User’s voice input will be proxied by the backend into AVS to recognize the answer. Once the answer is recognized, the backend will store the answer into Predix Asset, and will go to the next question, until all questions are completed.
- Frontend. We need a very simple frontend for this challenge, you may use any framework you feel comfortable with, but be sure you should adhere the best practices for that framework. The frontend should provide very simple controls to start the survey, complete an answer to a question, to do any related operations; and visual aids to facilitate understanding, when user is supposed to listen a question, and when he is supposed to answer. Obviously, the frontend should utilize the microphone and speakers.
- AVS and Predix Assets. These are provided by Amazon and Predix platforms. Be sure to document in details how to set up and configure them to work smoothly with your app.
Assets service should hold both the surveys and replies to the survey. For a survey we need to store: title, uri (by which the the survey will be actually referenced in all APIs), and a set of questions, each with its own id. You should provide a convenient way to load such surveys to the assets service, and provide a couple of sample surveys with 5 - 10 questions each.
A single user response to a survey should hold uri of the response, user name, uri of the survey that was answered, and a set of responses. Each answer, beside the answer itself, should hold a reference to the answered question (think from the perpective that if we are to implement editing of the surveys, and a survey is changed at some point, we want to be sure, that the previous survey responses still can be interpreted correctly, and holding references to the answered question helps here).