Я хотел бы создать намерение, используя Dialogflow java-sdk. Проблема в том, что я могу создавать обучающие фразы и слоты, но не могу выделить конкретное слово для обучающей фразы, как мы делаем в консоли диалогового потока.
Я проверил, и Dialogflow также не делает это сам по себе.
Ниже я записал код, который я сейчас использую, и функции, которые я использовал. Это может не помочь, но может помочь в предоставлении информации в текущий метод, который я использую.
Есть ли какая-либо функция в Java-API диалогового потока, которая поможет мне достичь этого.
public OutputResponseDTO createIntent(CreateIntentInputDTO createIntentInputDTO)
{
// Instantiates a client
try (IntentsClient intentsClient = IntentsClient.create()) {
// Set the project agent name using the projectID (my-project-id)
ProjectAgentName parent = ProjectAgentName.of(createIntentInputDTO.getProjectId());
//first check if intent already exists
for (Intent intent : intentsClient.listIntents(parent).iterateAll()) {
//logger.error(intent.getDisplayName()+"Inside delete!!!!!!"+createIntentInputDTO.getIntentName());
if (intent.getDisplayName().equals(createIntentInputDTO.getDisplayName())) {
logger.error("Inside delete!!!!!!");
deleteIntent(createIntentInputDTO.getIntentName(),createIntentInputDTO.getProjectId());
}
}
List<String> trainingPhrasesIP=new ArrayList<String>();
for(int l=0;l<createIntentInputDTO.getTrainingPhrasesParts().size();l++)
{
trainingPhrasesIP.add(createIntentInputDTO.getTrainingPhrasesParts().get(l).getPhraseName());
}
// Build the trainingPhrases from the trainingPhrasesParts
List<TrainingPhrase> trainingPhrases = new ArrayList<>();
for (String trainingPhrase : trainingPhrasesIP) {
trainingPhrases.add(
TrainingPhrase.newBuilder().addParts(
Part.newBuilder().setText(trainingPhrase).build())
.build());
}
// Build the message texts for the agent's response
Message messages = Message.newBuilder()
.setText(
Text.newBuilder()
.addAllText(createIntentInputDTO.getMessageTexts()).build()
).build();
List<Parameter> parameters=new ArrayList<Intent.Parameter>();
for(int j=0;j<createIntentInputDTO.getSlotsInputDTOs().size();j++)
{
//String firstFourChars = createIntentInputDTO.getSlotsInputDTOs().get(j).getEntityDisplayName().substring(0, 5);
//System.out.println(firstFourChars);
String paraNameWithoutAtTwo;
String paraNameWithoutAtOne;
String paraNameWithoutAtAndWithDollar;
String paraNameWithAt;
try
{
paraNameWithoutAtOne=createIntentInputDTO.getSlotsInputDTOs().get(j).getEntityDisplayName().replace("@sys.", "");
paraNameWithoutAtTwo=paraNameWithoutAtOne.replace("@", "");
}
catch(Exception e)
{
paraNameWithoutAtTwo=createIntentInputDTO.getSlotsInputDTOs().get(j).getEntityDisplayName();
logger.info("Something happended when removing stuff");
}
paraNameWithoutAtAndWithDollar="$"+paraNameWithoutAtTwo;
paraNameWithAt="@"+paraNameWithoutAtTwo;
paraNameWithoutAt=createIntentInputDTO.getSlotsInputDTOs().get(j).getEntityDisplayName();
Parameter parameter=Parameter.newBuilder()
.setValue(createIntentInputDTO.getSlotsInputDTOs().get(j).getValue())
.setDisplayName(paraNameWithoutAtTwo)
.setValue(paraNameWithoutAtAndWithDollar)
.setEntityTypeDisplayName(createIntentInputDTO.getSlotsInputDTOs().get(j).getEntityDisplayName())
.build();
parameters.add(parameter);
}
// Build the intent
Intent intent = Intent.newBuilder()
.setDisplayName(createIntentInputDTO.getDisplayName())
.addMessages(messages)
// .addParameters(p)
.addAllParameters(parameters)
.addAllTrainingPhrases(trainingPhrases)
.build();
// Performs the create intent request
Intent response = intentsClient.createIntent(parent, intent);
// System.out.format("Intent created: %s\n", response);
try
{
IntentMasterCollection intentMasterCollection=new IntentMasterCollection();
intentMasterCollection.setName(createIntentInputDTO.getDisplayName());
intentActionMaster.save(intentMasterCollection);
}
catch(Exception e)
{
logger.error("Error adding in DB intent master");
}
try
{
//we gonna put the data again!(Training phrases only)
String[] splitName = response.getName().split("/");
// intentIds.add(splitName[splitName.length - 1]);
//finally setting all the values
updateIntent(splitName[splitName.length - 1]);
}
catch(Exception e)
{
logger.error("Error in writing to intent");
}
return new OutputResponseDTO(true, message.getStatusCode("success.message.createIntent.id"),
message.get("success.message.createIntent"), null, null,requestBean.getTraceId());
}
catch(Exception e)
{
logger.error("Error Creating Intent:"+e.getMessage());
return new OutputResponseDTO(false, message.getStatusCode("error.message.generalError.id"),
message.get("error.message.generalError"), null, e.getMessage(),requestBean.getTraceId());
}
}