def api(): requestJson = request.get_json(silent=True) resultJson = requestJson if requestJson: context = {} context["context"] = requestJson["context"] if app.config["DEFAULT_WELCOME_INTENT_NAME"] in requestJson.get( "input"): story = Story.objects( intentName=app.config["DEFAULT_WELCOME_INTENT_NAME"]).first() resultJson["complete"] = True resultJson["intent"]["name"] = story.storyName resultJson["intent"]["storyId"] = str(story.id) resultJson["input"] = requestJson.get("input") template = Template(story.speechResponse, undefined=SilentUndefined) resultJson["speechResponse"] = template.render(**context) logger.info(requestJson.get("input"), extra=resultJson) return buildResponse.buildJson(resultJson) intentClassifier = IntentClassifier() storyId = intentClassifier.predict(requestJson.get("input")) story = Story.objects.get(id=ObjectId(storyId)) if story.parameters: parameters = story.parameters else: parameters = [] if ((requestJson.get("complete") is None) or (requestJson.get("complete") is True)): resultJson["intent"] = { "name": story.intentName, "storyId": str(story.id) } if parameters: extractedParameters = sequenceLabeler.predict( storyId, requestJson.get("input")) missingParameters = [] resultJson["missingParameters"] = [] resultJson["extractedParameters"] = {} resultJson["parameters"] = [] for parameter in parameters: resultJson["parameters"].append({ "name": parameter.name, "type": parameter.type, "required": parameter.required }) if parameter.required: if parameter.name not in extractedParameters.keys(): resultJson["missingParameters"].append( parameter.name) missingParameters.append(parameter) resultJson["extractedParameters"] = extractedParameters if missingParameters: resultJson["complete"] = False currentNode = missingParameters[0] resultJson["currentNode"] = currentNode["name"] resultJson["speechResponse"] = currentNode["prompt"] else: resultJson["complete"] = True context["parameters"] = extractedParameters else: resultJson["complete"] = True elif (requestJson.get("complete") is False): if "cancel" not in story.intentName: storyId = requestJson["intent"]["storyId"] story = Story.objects.get(id=ObjectId(storyId)) resultJson["extractedParameters"][requestJson.get( "currentNode")] = requestJson.get("input") resultJson["missingParameters"].remove( requestJson.get("currentNode")) if len(resultJson["missingParameters"]) == 0: resultJson["complete"] = True context = {} context["parameters"] = resultJson["extractedParameters"] context["context"] = requestJson["context"] else: missingParameter = resultJson["missingParameters"][0] resultJson["complete"] = False currentNode = [ node for node in story.parameters if missingParameter in node.name ][0] resultJson["currentNode"] = currentNode.name resultJson["speechResponse"] = currentNode.prompt else: resultJson["currentNode"] = None resultJson["missingParameters"] = [] resultJson["parameters"] = {} resultJson["intent"] = {} resultJson["complete"] = True if resultJson["complete"]: if story.apiTrigger: isJson = False parameters = resultJson["extractedParameters"] urlTemplate = Template(story.apiDetails.url, undefined=SilentUndefined) renderedUrl = urlTemplate.render(**context) if story.apiDetails.isJson: isJson = True requestTemplate = Template(story.apiDetails.jsonData, undefined=SilentUndefined) parameters = requestTemplate.render(**context) try: result = callApi(renderedUrl, story.apiDetails.requestType, parameters, isJson) except Exception as e: print(e) resultJson["speechResponse"] = "Service is not available. " else: print(result) context["result"] = result template = Template(story.speechResponse, undefined=SilentUndefined) resultJson["speechResponse"] = template.render(**context) else: context["result"] = {} template = Template(story.speechResponse, undefined=SilentUndefined) resultJson["speechResponse"] = template.render(**context) logger.info(requestJson.get("input"), extra=resultJson) return buildResponse.buildJson(resultJson) else: return abort(400)
def api(): requestJson = request.get_json(silent=True) resultJson = requestJson if requestJson: context = {} context["context"] = requestJson["context"] if app.config["DEFAULT_WELCOME_INTENT_NAME"] in requestJson.get("input"): story=Story.objects( intentName=app.config["DEFAULT_WELCOME_INTENT_NAME"]).first() resultJson["complete"] = True resultJson["intent"]["name"] = story.storyName resultJson["intent"]["storyId"] = str(story.id) resultJson["input"] = requestJson.get("input") template = Template(story.speechResponse, undefined=SilentUndefined) resultJson["speechResponse"] = template.render(**context) logger.info(requestJson.get("input"), extra=resultJson) return buildResponse.buildJson(resultJson) intentClassifier = IntentClassifier() storyId = intentClassifier.predict(requestJson.get("input")) story = Story.objects.get(id=ObjectId(storyId)) if story.parameters: parameters = story.parameters else: parameters = [] if ((requestJson.get("complete") is None) or (requestJson.get("complete") is True)): resultJson["intent"] = { "name": story.intentName, "storyId": str(story.id) } if parameters: extractedParameters = sequenceLabeler.predict(storyId, requestJson.get("input") ) missingParameters = [] resultJson["missingParameters"] = [] resultJson["extractedParameters"] = {} resultJson["parameters"] = [] for parameter in parameters: resultJson["parameters"].append({ "name": parameter.name, "required": parameter.required }) if parameter.required: if parameter.name not in extractedParameters.keys(): resultJson["missingParameters"].append(parameter.name) missingParameters.append(parameter) resultJson["extractedParameters"] = extractedParameters if missingParameters: resultJson["complete"] = False currentNode = missingParameters[0] resultJson["currentNode"] = currentNode["name"] resultJson["speechResponse"] = currentNode["prompt"] else: resultJson["complete"] = True context["parameters"] = extractedParameters try: if story.apiTrigger: isJson = False parameters = extractedParameters urlTemplate = Template(story.apiDetails.url, undefined=SilentUndefined) renderedUrl = urlTemplate.render(**context) if story.apiDetails.isJson: isJson = True requestTemplate = Template(story.apiDetails.jsonData, undefined=SilentUndefined) parameters = requestTemplate.render(**context) result = callApi(renderedUrl, story.apiDetails.requestType, parameters,isJson) else: result = {} context["result"] = result resultTemplate = Template(story.speechResponse, undefined=SilentUndefined) resultJson["speechResponse"] = resultTemplate.render(**context) except Exception as e: print(e) resultJson["speechResponse"] = "Service is not available." else: resultJson["complete"] = True resultTemplate = Template(story.speechResponse, undefined=SilentUndefined) resultJson["speechResponse"] = resultTemplate.render(**context) elif (requestJson.get("complete") is False): if "cancel" not in story.intentName: storyId = requestJson["intent"]["storyId"] story = Story.objects.get(id=ObjectId(storyId)) resultJson["extractedParameters"][requestJson.get("currentNode")] = requestJson.get("input") resultJson["missingParameters"].remove(requestJson.get("currentNode")) if len(resultJson["missingParameters"]) == 0: resultJson["complete"] = True context = {} context["parameters"] = resultJson["extractedParameters"] context["context"] = requestJson["context"] try: if story.apiTrigger: isJson = False parameters = resultJson["extractedParameters"] urlTemplate = Template(story.apiDetails.url, undefined=SilentUndefined) renderedUrl = urlTemplate.render(**context) if story.apiDetails.isJson: isJson = True requestTemplate = Template(story.apiDetails.jsonData, undefined=SilentUndefined) parameters = requestTemplate.render(**context) result = callApi(renderedUrl, story.apiDetails.requestType, parameters,isJson) print(result) else: result = {} context["result"] = result template = Template(story.speechResponse, undefined=SilentUndefined) resultJson["speechResponse"] = template.render(**context) except Exception as e: print(e) resultJson["speechResponse"] = "Service is not available. " else: missingParameter = resultJson["missingParameters"][0] resultJson["complete"] = False currentNode = [node for node in story.parameters if missingParameter in node.name][0] resultJson["currentNode"] = currentNode.name resultJson["speechResponse"] = currentNode.prompt else: resultJson["currentNode"] = None resultJson["missingParameters"] = [] resultJson["parameters"] = {} resultJson["intent"] = {} resultJson["complete"] = True template = Template(story.speechResponse, undefined=SilentUndefined) resultJson["speechResponse"] = template.render(**context) logger.info(requestJson.get("input"), extra=resultJson) return buildResponse.buildJson(resultJson) else: return abort(400)
def api(): requestJson = request.get_json(silent=True) resultJson = requestJson print "DATA:", requestJson if requestJson: intentClassifier = IntentClassifier() storyId = intentClassifier.predict(requestJson.get("input")) story = Story.objects.get(id=ObjectId(storyId)) if story.parameters: parameters = story.parameters else: parameters = [] if ((requestJson.get("complete") is None) or (requestJson.get("complete") is True)): resultJson["intent"] = { "name": story.intentName, "storyId": str(story.id) } if parameters: extractedParameters = sequenceLabeler.predict( storyId, requestJson.get("input")) missingParameters = [] resultJson["missingParameters"] = [] resultJson["extractedParameters"] = {} resultJson["parameters"] = [] for parameter in parameters: resultJson["parameters"].append({ "name": parameter.name, "required": parameter.required }) if parameter.required: if parameter.name not in extractedParameters.keys(): resultJson["missingParameters"].append( parameter.name) missingParameters.append(parameter) resultJson["extractedParameters"] = extractedParameters if missingParameters: resultJson["complete"] = False currentNode = missingParameters[0] resultJson["currentNode"] = currentNode["name"] resultJson["speechResponse"] = currentNode["prompt"] else: resultJson["complete"] = True resultJson["speechResponse"] = story.speechResponse else: resultJson["complete"] = True resultJson["speechResponse"] = story.speechResponse elif (requestJson.get("complete") is False): if "cancel" not in story.intentName: storyId = requestJson["intent"]["storyId"] story = Story.objects.get(id=ObjectId(storyId)) resultJson["extractedParameters"][requestJson.get( "currentNode")] = requestJson.get("input") resultJson["missingParameters"].remove( requestJson.get("currentNode")) if len(resultJson["missingParameters"]) == 0: resultJson["complete"] = True resultJson["speechResponse"] = story.speechResponse else: missingParameter = resultJson["missingParameters"][0] resultJson["complete"] = False currentNode = [ node for node in story.parameters if missingParameter in node.name ][0] resultJson["currentNode"] = currentNode.name resultJson["speechResponse"] = currentNode.prompt else: resultJson["currentNode"] = None resultJson["missingParameters"] = [] resultJson["parameters"] = {} resultJson["intent"] = {} resultJson["complete"] = True resultJson["speechResponse"] = story.speechResponse try: extract_data = resultJson["extractedParameters"] if extract_data['url'] and extract_data['mail'] and extract_data[ 'tag']: url = extract_data['url'] mail_to = extract_data['mail'] tag = extract_data['tag'] # os.chdir('./AIspider') # print("PWD:",os.getcwd()) # cmd=['scrapy crawl auto -a link='+str(url)+' -a mail_to='+str(mail_to)+'-a tag='+str(tag)] # with open('mylog.log', 'w') as logfile: # pgm=[subprocess.Popen(c.split()) for c in cmd] # os.chdir("../") except: print "NO URL" else: resultJson = errorCodes.emptyInput print "RESULT:", resultJson return buildResponse.buildJson(resultJson)
def api(): print("Inside /api/.v1") requestJson = request.get_json(silent=True) resultJson = requestJson print("Test.....", requestJson) print("Bot Iddddddddddddddddddddddddddddddd",requestJson.get("botId")) if requestJson: context = {} context["context"] = requestJson["context"] if app.config["DEFAULT_WELCOME_INTENT_NAME"] in requestJson.get( "input"): print("--------------insideif------------------") story = Story.objects( intentName=app.config["DEFAULT_WELCOME_INTENT_NAME"]).first() print("Story" , story) resultJson["complete"] = True # resultJson["intent"]["name"] = story.storyName resultJson["intent"]["storyId"] = str(story.id) resultJson["input"] = requestJson.get("input") template = Template( story.speechResponse, undefined=SilentUndefined) resultJson["speechResponse"] = template.render(**context) logger.info(requestJson.get("input"), extra=resultJson) return buildResponse.buildJson(resultJson) print("OutSide if") intentClassifier = IntentClassifier() try: storyId = intentClassifier.predict(requestJson.get("input")) print("Story Id",storyId) except AttributeError: resultJson["speechResponse"]="Question not available" return buildResponse.buildJson(resultJson) story = Story.objects.get(id=ObjectId(storyId)) if story.parameters: print("Inside story.params") parameters = story.parameters else: print("No paramters") parameters = [] if ((requestJson.get("complete") is None) or ( requestJson.get("complete") is True)): print("Check whether complete is none or true") resultJson["intent"] = { "name": story.intentName, "storyId": str(story.id) } print(resultJson["intent"]) if parameters: print("Check whether parametrs are present are not") extractedParameters = sequenceLabeler.predict( storyId, requestJson.get("input")) print("Extracted parameters",extractedParameters) missingParameters = [] resultJson["missingParameters"] = [] resultJson["extractedParameters"] = {} resultJson["parameters"] = [] for parameter in parameters: print("If parameters are present") resultJson["parameters"].append({ "name": parameter.name, "type": parameter.type, "required": parameter.required }) print("Result JSON...",resultJson) if parameter.required: print("Check whether parameter is required are not") if parameter.name not in extractedParameters.keys(): print("Check whether paramter name is present in extracted paramters") resultJson["missingParameters"].append( parameter.name) missingParameters.append(parameter) print("Result JSON2",resultJson) resultJson["extractedParameters"] = extractedParameters print("F Result json",resultJson) if missingParameters: print("Check whether missing parameters is present or not") resultJson["complete"] = False currentNode = missingParameters[0] resultJson["currentNode"] = currentNode["name"] resultJson["speechResponse"] = currentNode["prompt"] print("Inside missingparameters if ",resultJson) else: resultJson["complete"] = True context["parameters"] = extractedParameters else: resultJson["complete"] = True elif (requestJson.get("complete") is False): if "cancel" not in story.intentName: storyId = requestJson["intent"]["storyId"] story = Story.objects.get(id=ObjectId(storyId)) resultJson["extractedParameters"][requestJson.get( "currentNode")] = requestJson.get("input") resultJson["missingParameters"].remove( requestJson.get("currentNode")) if len(resultJson["missingParameters"]) == 0: resultJson["complete"] = True context = {} context["parameters"] = resultJson["extractedParameters"] context["context"] = requestJson["context"] else: missingParameter = resultJson["missingParameters"][0] resultJson["complete"] = False currentNode = [ node for node in story.parameters if missingParameter in node.name][0] resultJson["currentNode"] = currentNode.name resultJson["speechResponse"] = currentNode.prompt else: resultJson["currentNode"] = None resultJson["missingParameters"] = [] resultJson["parameters"] = {} resultJson["intent"] = {} resultJson["complete"] = True if resultJson["complete"]: if story.apiTrigger: isJson = False isHeader=False parameters = resultJson["extractedParameters"] urlTemplate = Template(story.apiDetails.url, undefined=SilentUndefined) renderedUrl = urlTemplate.render(**context) if story.apiDetails.isJson and story.apiDetails.isHeader: isJson = True isHeader= True requestTemplate = Template(story.apiDetails.jsonData,story.apiDetails.headerData, undefined=SilentUndefined) parameters = requestTemplate.render(**context) elif story.apiDetails.isJson: isJson = True requestTemplate = Template(story.apiDetails.jsonData, undefined=SilentUndefined) parameters = requestTemplate.render(**context) elif story.apiDetails.isHeader: isHeader = True requestTemplate = Template(story.apiDetails.headerData, undefined=SilentUndefined) parameters = requestTemplate.render(**context) try: result = callApi(renderedUrl, story.apiDetails.requestType, parameters,story.apiDetails.headerData,isJson,isHeader) except Exception as e: print(e) resultJson["speechResponse"] = "Service is not available. " else: print(result) context["result"] = result template = Template(story.speechResponse, undefined=SilentUndefined) resultJson["speechResponse"] = template.render(**context) else: context["result"] = {} template = Template(story.speechResponse, undefined=SilentUndefined) resultJson["speechResponse"] = template.render(**context) logger.info(requestJson.get("input"), extra=resultJson) return buildResponse.buildJson(resultJson) else: return abort(400)