Users can create their own private skill which corresponds to their susi bot in SUSI Server. We store these private skills inside the susi_private_skill_data directory. We also store the information of the chatbots of each user in chatbot.json file inside the local storage of the server. It contains the list of chatbots created by each user against their UUIDs. This makes it easier and more organised to retrieve the chatbots of the users and their associated settings. This blog explains how the chatbots are being saved in the chatbot.json file in the SUSI server.
Receiving Private Skill from client
The client can create a private skill by accessing the /cms/createSkill.txt API. Along with the other parameters used to create a skill, it also has to send private=1 so that the server can recognise that this is a private skill. The private skills are stored in the folder susi_private_skill_data. The API is made by the CreateSkillService.java file.
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setHeader("Access-Control-Allow-Origin", "*"); // enable CORS String userEmail = null; JSONObject json = new JSONObject(); Part imagePart = req.getPart("image"); if (req.getParameter("access_token") != null) { if (imagePart == null) { json.put("accepted", false); json.put("message", "Image not given"); }
Getting skill parameters and Saving skill locally
The client sends various parameters related to the skill. Such as the group name, language, skill name, image, etc. Also to identify the skill as a private skill, it needs to send private=1 parameter. If it is a private skill, then we call the function storePrivateSkillBot().
if(privateSkill != null){ this.storePrivateSkillBot(userId, skill_name, group_name, language_name); try (Git git = DAO.getPrivateGit()) { git.add().addFilepattern(".").call(); // commit the changes DAO.pushCommit(git, "Created " + skill_name, userEmail); json.put("accepted", true); } catch (IOException | GitAPIException e) { e.printStackTrace(); json.put("message", "error: " + e.getMessage()); } }
Creating the chatbot.json file and saving user’s bot
Inside the function storePrivateSkillBot(), we create the json file in the local storage and save the user’s bot along with their user ids. If the bot with the same name already exists, then we update it or else create a new one.
private static void storePrivateSkillBot(String userId, String skillName, String group, String language) { JsonTray chatbot = DAO.chatbot; JSONArray userBots = new JSONArray(); JSONObject botObject = new JSONObject(); JSONObject userChatBotsObject = new JSONObject(); if (chatbot.has(userId)) { userBots = chatbot.getJSONObject(userId).getJSONArray("chatbots"); } // save a new bot botObject.put("name",skillName); botObject.put("group",group); botObject.put("language",language); userBots.put(botObject); userChatBotsObject.put("chatbots",userBots); chatbot.put(userId,userChatBotsObject,true); }
In chatbot.json file, on creating private skills, the following json gets stored:
Resources
- JSON Object in Java: https://docs.oracle.com/javaee/7/api/javax/json/JsonObject.html
- File operations in Java: https://docs.oracle.com/javase/tutorial/essential/io/file.html
- JGit documentation: https://git-scm.com/book/en/v2/Appendix-B%3A-Embedding-Git-in-your-Applications-JGit