dialogflow-java-client-v2
dialogflow-java-client-v2 copied to clipboard
java.lang.IllegalArgumentException: FieldDescriptor does not match message type.
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();
}