ребята. Мы разработали пару чат-ботов с использованием Dialogflow, и нам нужно хранить все сообщения между ботами и пользователями в elasti c. Сообщения отправляются в Stackdriver, откуда мы их читаем. Мы получаем что-то вроде этого:
Запрос:
{"insertId":"sdfgsdfgsdfg","labels":{"protocol":"V2_BETA1","request_id":"26e57863-387f-4b93-b5fb-135bc83bcd25-dd2bbea9","type":"dialogflow_request"},"logName":"projects/projectname/logs/dialogflow_agent","receiveTimestamp":"2020-03-27T11:57:58.150171409Z","resource":{"labels":{"project_id":"projectname"},"type":"global"},"severity":"INFO","textPayload":"Dialogflow Request : {\"session\":\"10001000061585310270\",\"query_input\":\"{\\n \\\"text\\\": {\\n \\\"textInputs\\\": [{\\n \\\"text\\\": \\\"user input here\\\"\\n }]\\n }\\n}\",\"timezone\":\"Europe/Madrid\"}","timestamp":"2020-03-27T11:57:58.096Z","trace":"10001000061585310270"}
Ответ:
{
"insertId":"116tnvwg3zk2dlm"
"labels":{
"protocol":"V2_BETA1"
"request_id":"25676788-5663-b5fb-135b-c83bcd25fghf-dfgdr545"
"type":"dialogflow_response"
}
"logName":"projects/myprojectid/logs/dialogflow_agent"
"receiveTimestamp":"2020-03-10T10:35:58.150171409Z"
"resource":{
"labels":{
"project_id":"myprojectid"
}
"type":"global"
}
"severity":"INFO"
"textPayload":"Dialogflow Response : id: \"25676788-5663-b5fb-135b-c83bcd25fghf-dfgdr545\"\nlang: \"es\"\nsession_id: \"12126565412631623162\"\ntimestamp: \"2020-03-10T10:35:58.134Z\"\nresult {\n source: \"agent\"\n resolved_query: \"user request here\"\n score: 0.676\n parameters {\n fields {\n key: \"medida\"\n value {\n list_value {\n values {\n string_value: \"grande\"\n }\n }\n }\n }\n fields {\n key: \"sabores\"\n value {\n list_value {\n values {\n string_value: \"fresa\"\n }\n }\n }\n }\n }\n contexts {\n name: \"haveorder\"\n lifespan: 5\n parameters {\n fields {\n key: \"medida\"\n value {\n list_value {\n values {\n string_value: \"grande\"\n }\n }\n }\n }\n fields {\n key: \"medida.original\"\n value {\n list_value {\n values {\n string_value: \"grande\"\n }\n }\n }\n }\n fields {\n key: \"sabores\"\n value {\n list_value {\n values {\n string_value: \"fresa\"\n }\n }\n }\n }\n fields {\n key: \"sabores.original\"\n value {\n list_value {\n values {\n string_value: \"fresa\"\n }\n }\n }\n }\n }\n }\n contexts {\n name: \"promptedpayment\"\n lifespan: 5\n parameters {\n fields {\n key: \"medida\"\n value {\n list_value {\n values {\n string_value: \"grande\"\n }\n }\n }\n }\n fields {\n key: \"medida.original\"\n value {\n list_value {\n values {\n string_value: \"grande\"\n }\n }\n }\n }\n fields {\n key: \"sabores\"\n value {\n list_value {\n values {\n string_value: \"fresa\"\n }\n }\n }\n }\n fields {\n key: \"sabores.original\"\n value {\n list_value {\n values {\n string_value: \"fresa\"\n }\n }\n }\n }\n }\n }\n metadata {\n intent_id: \"6685717b-381b-4ce5-8947-52d0080abf67\"\n intent_name: \"0 - getOrder\"\n webhook_used: \"false\"\n webhook_for_slot_filling_used: \"false\"\n is_fallback_intent: \"false\"\n }\n fulfillment {\n speech: \"¡Claro! Uno de fresa grande ahora mismo. ¿Cómo vas a pagar? ¿Con efectivo o con tarjeta?\"\n messages {\n lang: \"es\"\n type {\n number_value: 0.0\n }\n speech {\n string_value: \"¡Claro! Uno de fresa grande ahora mismo. ¿Cómo vas a pagar? ¿Con efectivo o con tarjeta?\"\n }\n }\n }\n}\nstatus {\n code: 200\n error_type: \"success\"\n}\n"
"timestamp":"2020-03-10T10:35:58.14Z"
"trace":"12126565412631623162"
}
Информация, которая нас интересует, находится внутри textPayload, но я не могу ' Не могу найти способ превратить textPayload во что-то, чем я могу манипулировать, используя Java.
Применяя несколько регулярных выражений, я могу (не всегда) превратить этот текст в json и работать с ним, но решение кажется не очень надежным. Можете ли вы найти лучшее решение?
Большое спасибо!