dialogflow-java-client-v2 icon indicating copy to clipboard operation
dialogflow-java-client-v2 copied to clipboard

java.lang.IllegalArgumentException: FieldDescriptor does not match message type.

Open Kamatam opened this issue 4 years ago • 0 comments

Hi I am trying to build the following WebhookResponse payload using apis but getting into "FieldDescriptor does not match message type" issue. Please find the following code snippet and correct me if i am missing anything.

import com.google.cloud.dialogflow.v2.Intent; import com.google.cloud.dialogflow.v2.Intent.Message; import com.google.cloud.dialogflow.v2.Intent.Message.BasicCard; import com.google.cloud.dialogflow.v2.Intent.Message.Image; import com.google.cloud.dialogflow.v2.QueryResult; import com.google.cloud.dialogflow.v2.WebhookResponse; import com.google.protobuf.Descriptors.FieldDescriptor; import com.google.protobuf.ListValue; import com.google.protobuf.Struct; import com.google.protobuf.Value;

/* * * http://googleapis.github.io/googleapis/java/all/latest/apidocs/index.html?com/google/cloud/dialogflow/v2/WebhookResponse.Builder.html * * { "google": { "expectUserResponse": true, "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "this is a simple response" } } ] } } } */

public static void buildWebhookPayload(String apiResponse)
		throws ConversationException {
	
	
	Struct.Builder payload = Struct.newBuilder();
	Struct.Builder google = Struct.newBuilder();
	ListValue.Builder messageList = ListValue.newBuilder();
	Message.Builder message = Message.newBuilder();
	BasicCard.Builder basicCard = BasicCard.newBuilder();
	basicCard.setFormattedText(apiResponse); // api response, 
	basicCard.setTitle("Card title");
	Image.Builder image = Image.newBuilder();
	image.setImageUri("http://test.jpg");
	basicCard.setImage(image);
	message.setBasicCard(basicCard);
	
	FieldDescriptor fieldDesc = Message.getDescriptor()
			.findFieldByNumber(Message.BASIC_CARD_FIELD_NUMBER);	
	messageList.addValuesBuilder().setField(fieldDesc, message.build()); // java.lang.IllegalArgumentException: FieldDescriptor does not match message type.
	google.putFields("richResponse", Value.newBuilder().setListValue(messageList).build());
	payload.putFields("google", Value.newBuilder().setStructValue(google).build());
	WebhookResponse webhookResp = WebhookResponse.newBuilder().setPayload(payload).build();	
}

Kamatam avatar May 07 '20 11:05 Kamatam