How to get parameters from DialogFlow in Java (Android Studio)

爷,独闯天下 提交于 2020-12-15 03:27:08

问题


I need to get parameters from DialogFlow to my Android app.
I tried using getQueryResult().getParameters().getFieldsMap()
but the result is the following.

{type=list_value {
      values {
        string_value: "pizza"
      }
    }
    , ristorante=string_value: ""
    }

I would like to get just the string value "pizza" and not the entire FieldMap. I have already seen this topic, but it didn't help me, because I don't know what protobuf is and seems a bit complicated.

Is there a simple way to get a parameter's value?


回答1:


I see two possibilities:

  1. Try to access the Map values directly.

The getFieldsMap() method returns a java.util.Map class. You can try to retrieve the values by getting first a collection of Values, then iterate:

Collection colletion = <Detect_Intent_Object>.getQueryResult().getParameters().getFieldsMap().values():
for (iterable_type iterable_element : collection)

From my humble point of view the bucle is necesary because there could be more than one parameter.

  1. Transform the protobuf response into a json and access the values.

Sample code:

import com.google.protobuf.util.JsonFormat;
String jsonString = JsonFormat.printToString(<Detect_Intent_Object>.getQueryResult().getParameters());
// Then use a json parser to obtain the values
import org.json.*;
JSONObject obj = new JSONObject(jsonString);
JSONArray jsonnames = obj.names(); 

Method names() will let you know the string names you want to access.




回答2:


If you use Dialogflowv2

public String getParameter(GoogleCloudDialogflowV2WebhookRequest request, String parameterName) {
  try {
        GoogleCloudDialogflowV2QueryResult queryResult = request.getQueryResult();
        Map<String, Object> parameters = queryResult.getParameters();
        String parameter = (String) parameters.get(parameterName);
        if(parameter != null && !parameter.equals("")) {
            return parameter;
        }
    } catch (ClassCastException  e) {
            logger.error("Error");
        }
    return null;
}

If you use GoogleActions

public String getParameter(ActionRequest request, String parameterName) {
        try {
            Map<String, Object> parameters =  request.getWebhookRequest().getQueryResult().getParameters();
            String parameter = (String) parameters.get(parameterName);
            if(parameter != null && !parameter.equals("")) {
                return parameter;
            }
        } catch (ClassCastException  e) {
            logger.error("Error");
        }
        return null;
    }


来源:https://stackoverflow.com/questions/64651027/how-to-get-parameters-from-dialogflow-in-java-android-studio

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!