Журнал Dialogflow дает мне JSON без запятых в стекдрайвере - PullRequest
0 голосов
/ 10 июня 2019

Я работаю с диалоговым потоком для создания чат-ботов, я хочу восстановить все сообщения и отправить их в bigquery, после того как я свяжу bigquery с datastudio, чтобы показать панель данных моему клиенту.

Диалоговый поток фактически отправляет весь журнал в стекдрайвер, но когда открыта textPayload, у него нет запятых, чтобы использовать его как обычный JSON.

¿Есть идеи?

Журнал Stackdriver

Dialogflow Response : id: "3f6c4006-e8fd-4c59-af75-1f62e5785c3c-2dd8e723"
lang: "es"
session_id: "d1eea2ea-3dcc-447c-8883-a23a89d9e570"
timestamp: "2019-06-09T20:21:24.465Z"
result {
  source: "agent"
  resolved_query: "Comunidad"
  score: 1.0
  parameters {
  }
  contexts {
    name: "generic"
    lifespan: 4
    parameters {
      fields {
        key: "facebook_sender_id"
        value {
          string_value: "2665762213453771"
        }
      }
    }
  }
  metadata {
    intent_id: "843d151c-ffaa-43a5-b1af-7537947aeb98"
    intent_name: "CommunityIntent"
    webhook_used: "false"
    webhook_for_slot_filling_used: "false"
    is_fallback_intent: "false"
  }
  fulfillment {
    speech: "Nuestra comunidad busca vincular desarrolladores para crecer como un ecosistema tecnol\303\263gico. Puedes checar m\303\241s sobre nuestros eventos en http://cloudmex.io/servicios/workshops-y-meetups/"
    messages {
      lang: "es"
      type {
        number_value: 0.0
      }
      speech {
        string_value: "Nuestra comunidad busca vincular desarrolladores para crecer como un ecosistema tecnol\303\263gico. Puedes checar m\303\241s sobre nuestros eventos en http://cloudmex.io/servicios/workshops-y-meetups/"
      }
    }
  }
}
status {
  code: 200
  error_type: "success"
}

** ОБНОВЛЕНИЕ: журнал Stackdriver **

{
insertId:  "qd0nynfxfz53o"  
 labels: {
  protocol:  "V2"   
  request_id:  "7034b4ec-3b54-4f0c-9cee-8a37eb117f66-2dd8e723"   
  source:  "facebook"   
  type:  "dialogflow_response"   
 }
 logName:  "projects/cloudy-76f21/logs/dialogflow_agent"  
 receiveTimestamp:  "2019-06-09T19:32:53.416394429Z"  
 resource: {
  labels: {
   project_id:  "cloudy-76f21"    
  }
  type:  "global"   
 }
 severity:  "INFO"  
 textPayload:  "Dialogflow Response : id: "7034b4ec-3b54-4f0c-9cee-8a37eb117f66-2dd8e723"
lang: "es"
session_id: "d1eea2ea-3dcc-447c-8883-a23a89d9e570"
timestamp: "2019-06-09T19:32:53.334Z"
result {
  source: "agent"
  resolved_query: "Prueba"
  action: "input.unknown"
  score: 1.0
  parameters {
  }
  contexts {
    name: "generic"
    lifespan: 4
    parameters {
      fields {
        key: "facebook_sender_id"
        value {
          string_value: "2665762213453771"
        }
      }
    }
  }
  metadata {
    intent_id: "25d76718-8282-47ae-999e-55c40baba860"
    intent_name: "Default Fallback Intent"
    webhook_used: "false"
    webhook_for_slot_filling_used: "false"
    is_fallback_intent: "true"
  }
  fulfillment {
    speech: "Si es necesario puedes pedirme ayuda con solo mencionarlo."
    messages {
      lang: "es"
      type {
        number_value: 0.0
      }
      speech {
        string_value: "Si es necesario puedes pedirme ayuda con solo mencionarlo."
      }
    }
  }
}
status {
  code: 200
  error_type: "success"
}
"  
 timestamp:  "2019-06-09T19:32:53.416394429Z"  
 trace:  "d1eea2ea-3dcc-447c-8883-a23a89d9e570"  
}

1 Ответ

0 голосов
/ 10 июня 2019

Когда приложение записывает журнал в Stackdriver, оно может записать либо строку текста, либо структурированную полезную нагрузку.Это зависит от написания заявления о том, что оно хочет написать.Похоже, что поток диалога записывает строку текста в форме:

Dialogflow Request : <Rest of text>

, где <Rest of text> представляется строкой JSON.Если это так, то можно утверждать, что Dialogflow не воспроизводит прекрасно с записью Stackdriver, но могут быть истории, с которыми мы не знакомы.В любом случае, у нас есть то, что у нас есть.

Теперь нам нужно подумать о преобразовании этих данных в форму, которую вы можете использовать.Если мы предполагаем, что все, что вам нужно, - это JSON-представление запроса Dialogflow, то мы будем извлекать записи из Stackdriver и находить строки textPayload.Если они начинаются с Dialogflow Request :, тогда мы отбрасываем это после анализа остатка строки как JSON, и у нас есть наши данные.

Есть много способов сделать это, и выбор будет зависеть от того, как вы хотитеобрабатывать данные.Предполагая, что вам не требуется анализ в реальном времени в реальном времени, я бы экспортировал журналы Stackdriver в виде объектов (файлов) GCS и передавал их через инструмент ETL, такой как Datafusion (или ваш собственный рукописный анализатор).Полученные данные затем можно записать в новые файлы GCS и импортировать в BigQuery.

Если вам потребуется обработка в реальном времени, можно будет записать сообщения журнала Stackdriver в PubSub, а облачная функция получит каждую запись.как написано.Эта функция может анализировать ваши данные и записывать их в BigQuery.

...