Вопрос или проблема
Итак, что я пытаюсь сделать, так это настроить связь между Dialogflow CX, телефонным шлюзом, проектом на React и бэкендом на Python. Что я пытаюсь добиться: когда я загружаю страницу фронтенда, она вызывает бэкенд, который получает аналитические данные из Dialogflow и передает их в React JS, который использует библиотеку React Flow для отображения потока и аналитических данных на этих потоках/страницах.
Под аналитическими данными я подразумеваю: какие потоки были наиболее популярны во время звонка, какие потоки были пропущены, какие намерения/вопросы задавались чаще всего и где пользователи чаще всего завершали звонок и т.д.
Что я пытался сделать, так это вызывать вебхук на каждой странице и записывать путь пользователя в базу данных. Затем, когда страница загружается, я получаю потоки и страницы Dialogflow CX на Python,
def get_dialogflow_flows(parent):
try:
print("Потоки и намерения вызваны")
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = current_app.config['GOOGLE_APPLICATION_CREDENTIALS']
flow_client = dialogflowcx.FlowsClient()
page_client = dialogflowcx.PagesClient()
start_time = time.time()
flows = flow_client.list_flows(parent=parent)
print("Потоки получены --- %s секунд ---" % (time.time() - start_time))
flow_data = []
# start_time = time.time()
for flow in flows:
# Получаем страницы для каждого потока с помощью PagesClient
pages = list(page_client.list_pages(parent=flow.name))
flow_pages = []
for page in pages:
# Получаем полные детали страницы, включая маршруты переходов
page_details = page_client.get_page(name=page.name)
transitions = []
for route in page_details.transition_routes:
transitions.append({
'target_page': route.target_page,
'target_flow': route.target_flow,
'condition': route.condition
})
flow_pages.append({
'page_name': page.display_name,
'page_id': page.name,
'transitions': transitions # Включаем маршруты переходов
})
flow_data.append({
'flow': flow.display_name,
'flow_id': flow.name,
'pages': flow_pages
})
# print("Второй --- %s секунд ---" % (time.time() - start_time))
return make_response(message="Данные успешно получены", success=True, data=flow_data, status=200)
except Exception as e:
current_app.logger.error(e)
return make_response(message=str(e), success=False, data=None, status=500)
Используя эти данные, я пытаюсь отобразить поток из консоли Dialogflow CX в своем фронтенде на React, используя библиотеку React Flow. Но это делается нескладно, потому что мне нужно управлять вызовами вебхуков и записями в базу данных для каждой страницы/потока.
Итак, есть ли способ сделать это лучше? Я знаю, что в консоли Dialogflow CX есть страница аналитики, есть ли способ получить эти данные?
Ответ или решение
Чтобы получить аналитику Dialogflow CX и улучшить ваш проект, вам нужно будет использовать API для доступа к аналитическим данным, которые предоставляет Google. В приведенной вами реализации вы собираете данные о вызовах, но если вас интересует аналитика на более высоком уровне, вы можете рассмотреть возможность использования Google Cloud Monitoring или Google Analytics для сбора и анализа необходимой информации.
Шаги для улучшения вашего подхода:
-
Использование Dialogflow CX API для аналитики:
Хотя Dialogflow CX не предоставляет API конкретно для извлечения аналитических данных, вы можете использовать Google Cloud Monitoring для получения информации о производительности вашего агента. Убедитесь, что у вас включена учетная запись Google Cloud Monitoring и Kubernetes Engine. Затем вы сможете настроить метрики и логи для получения необходимой информации о вызовах. -
Сбор пользовательских событий:
Вы правильно начали с ведения журнала каждого действия пользователя через вебхуки. Но вместо того, чтобы хранить данные в базе, вы можете отправлять их в Google Analytics или Firebase Analytics. Это позволит вам собирать и анализировать данные о том, какие потоки посещаются чаще всего, какие намерения вызываются и на каком моменте пользователи обычно завершают звонок.Пример кода отправки события в Google Analytics на стороне клиента (React):
import ReactGA from 'react-ga'; // инициализация ReactGA.initialize('UA-XXXXXXXXX-X'); // отправка события const logEvent = (category, action) => { ReactGA.event({ category: category, action: action, }); }; // Вызовите logEvent на каждом шаге взаимодействия logEvent('Flow Interaction', 'Flow A started');
-
Использование Cloud Functions для автоматизации:
Вместо вызова вебхуков на каждой странице, вы можете использовать Google Cloud Functions для создания функции, которая будет обрабатывать автоматическую аутентификацию и запись данных в базу только один раз в определенные моменты. Например, сбор данных в определенные точки потока, а не на каждой странице. -
Аналитика в консоли Dialogflow:
Если вы хотите получить данные о производительности потока прямо из консоли Dialogflow CX, вам нужно регулярно проверять панель аналитики, чтобы понять, какие потоки и намерения наиболее популярны. Программа не предоставляет API для получения этих отчетов напрямую, поэтому придется полагаться на ручной просмотр отчета или работать с Google Data Studio для визуализации данных. -
Интеграция Data Studio:
Вы можете настроить Google Data Studio, чтобы визуализировать ваши данные из BigQuery (если вы их туда загружаете), а затем связать это с вашими пользовательскими событиями, отправленными в Google Analytics. Это обеспечит высокоуровневую аналитику и покажет, как пользователи взаимодействуют с вашим голосовым интерфейсом.
Заключение:
Ваш текущий подход является неплохим, но для более надежного и масштабируемого решения стоит рассмотреть вышеизложенные методы. Это не только упростит процесс сбора данных, но и обеспечит более глубокое понимание взаимодействия пользователей с вашим ботом через Dialogflow CX. Помните о необходимости соблюдения политики конфиденциальности данных при сборе и обработке пользовательских событий.