Challenge Overview

Welcome to IBM Cognitive ChatBot - Backend API Development challenge! We are working on adding ChatBot, based on IBM Watson Conversation Service, to Topcoder Connect - our customer-facing platform that allows business users of any skill to interact with Topcoder community to get great solutions for their challenging problems. Topcoder Connect is the place where our customers input their business needs and technical requirements, and the ChatBot will help them to do conveniently and efficiently.

Cognitive Community

This challenge is a part of Topcoder Cognitive Community challenge series. Along with the cash prizes you will win Cognitive points towards the Leaderboard, and the leader at the end of the challenge series wins an all expenses paid trip to TCO17.

The placement you earn in these challenges (non-F2F) will determine how many Cognitive points will be added to your total on the Leaderboard:
1-st place = 500 pts
2-nd place = 350 pts
3-rd place+ = 100 pts

If you have not already, go to http://cognitive.topcoder.com/ and join the community.

Challenge Scope

In other challenges we have implemented the ChatBot itself and the UI Prototype. In this challenge you will create API backend, which will serve as a proxy between the frontend (AngularJS v4) and the ChatBot.

1. You will create NodeJS v8 backend, using best code practices, ESLint, etc.
2. In the forum you will find a link to the ChatBot implementation. You will import it and use NodeJS SDK to communicate between backend and ChatBot.
3. You will create Websocket interface to communicate between the frontend and backend. The interface should allow to:
  - Start conversation between authenticated user and the ChatBot (the actual authentication-related logic IS NOT in the scope of this challenge. For this challenge we just assume the user has been authenticated already and we need to pass his user id, name and email to the ChatBot);
  - Send messages from the frontend to the ChatBot;
  - Send messages from the ChatBot to the frontend;
  - Finalize the conversation. When convesation ends we want the ChatBot to ask whether the conversation was helpful. If not, we want to further ask what was wrong, how it can be improved, and flag the conversation as unhelpful, so that we can review it in future and make necessary adjustements to our system.
4. The backend should use Cloudant DB to record all conversations, and provide services for retrieval of past conversations by ID, by helpful / unhelpful flag, etc.
5. In future we will like to add additional processing of the messages between the frontend and ChatBot. You should provide a way to execute arbitrary hooks when specific messages are passing in one or another direction. For a hook we want to:
  - Execute a function when a message matching some criteria goes from the frontend to the ChatBot, or other way around;
  - Optionally. To prevent propagation of the original message to the destination (so that hook can do either sync or async processing);
  - Optionally. To send a message from the hook to the frontend or to the ChatBot once hook execution is finished.
  - To set multiple hooks that can react on the same message in sequence or in parallel.
6. Document how to deploy your solution locally and to IBM Bluemix. Document how to add hooks to the messages between the frontend and ChatBot.

Final Submission Guidelines

Submit your code with all necessary verification instructions. The video is optional.

Review style

Final Review

Community Review Board

Approval

User Sign-Off

ID: 30058056