← Назад к вопросам
Что делать дальше аналитику с данными о звонках и чатах и целевыми сценариями для создания метрики сделки?
2.7 Senior🔥 61 комментариев
#Метрики продукта#Процессы и планирование
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Как использовать данные о звонках и чатах для создания метрики сделки
Проблема
У вас есть данные:
- Звонки: дата, длительность, исход (успешно/отклонено)
- Чаты: дата, количество сообщений, статус (closed/unresolved)
- Целевые сценарии: последовательность действий которая ведёт к сделке
Нужно понять: когда произошла сделка и что её вызвало.
Подход: Event-based attribution
Шаг 1: Определить что такое "сделка"
Сначала нужно согласовать определение:
Вариант A: Payment received
- Простой
- Но может быть refund или спор
Вариант B: Lead generated
- Человек дал контакты
- Но ещё не купил
Вариант C: Lead + Follow-up call booked
- Более сильный сигнал
- Person активно interested
Вариант D: Contract signed
- Самый сильный сигнал
- Но может быть медленно
Рекомендация: Выберите Вариант C или D в зависимости от цикла продаж.
Шаг 2: Структурируйте данные
Таблица звонков:
CREATE TABLE calls (
call_id UUID,
user_id UUID,
agent_id UUID,
call_date TIMESTAMP,
duration_minutes INT,
outcome VARCHAR (success, no_answer, declined),
reason VARCHAR (pricing_inquiry, complaint, sales),
PRIMARY KEY (call_id)
);
Таблица чатов:
CREATE TABLE chats (
chat_id UUID,
user_id UUID,
agent_id UUID,
start_time TIMESTAMP,
end_time TIMESTAMP,
message_count INT,
status VARCHAR (resolved, unresolved, escalated),
PRIMARY KEY (chat_id)
);
Таблица целевых сценариев:
CREATE TABLE deal_events (
event_id UUID,
user_id UUID,
event_type VARCHAR (call_success, chat_resolved, contact_submitted),
event_date TIMESTAMP,
sequence_order INT,
PRIMARY KEY (event_id)
);
Шаг 3: Привязать звонки/чаты к сделкам
Логика: Если произошла серия событий в определённом порядке → это паттерн для сделки
WITH user_interaction_sequence AS (
-- Объединяем все interactions в хронологическом порядке
SELECT
user_id,
'call' as interaction_type,
call_date as event_date,
outcome,
duration_minutes,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY call_date) as sequence_num
FROM calls
WHERE outcome = 'success'
UNION ALL
SELECT
user_id,
'chat' as interaction_type,
end_time as event_date,
status as outcome,
message_count,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY end_time) as sequence_num
FROM chats
WHERE status IN ('resolved', 'escalated')
)
SELECT
user_id,
STRING_AGG(interaction_type, ' → ') as interaction_path,
COUNT(*) as total_interactions,
MAX(event_date) as last_interaction_date,
-- Если есть успешный вызов, за которым идёт чат, это паттерн
CASE
WHEN STRING_AGG(interaction_type, ' → ') LIKE '%call%chat%' THEN 'potential_deal'
WHEN STRING_AGG(interaction_type, ' → ') LIKE '%call → call%' THEN 'nurturing'
ELSE 'single_contact'
END as interaction_pattern
FROM user_interaction_sequence
GROUP BY user_id
HAVING COUNT(*) > 0;
Шаг 4: Создать метрику "Deal Completion"
Определение: Сделка = user прошёл целевой сценарий
WITH deal_completion AS (
SELECT
user_id,
-- Для каждого сценария проверяем все события
-- Сценарий 1: Call → Chat → Lead submission
CASE
WHEN EXISTS (
SELECT 1 FROM calls c
WHERE c.user_id = u.user_id
AND c.outcome = 'success'
)
AND EXISTS (
SELECT 1 FROM chats ch
WHERE ch.user_id = u.user_id
AND ch.status = 'resolved'
AND ch.start_time > (SELECT MAX(call_date) FROM calls WHERE user_id = u.user_id)
)
THEN 1 ELSE 0
END as completed_scenario_1,
-- Сценарий 2: Quick chat → Immediate escalation to agent
CASE
WHEN EXISTS (
SELECT 1 FROM chats ch
WHERE ch.user_id = u.user_id
AND ch.message_count < 5
AND ch.status = 'escalated'
)
THEN 1 ELSE 0
END as completed_scenario_2,
-- Это и есть "сделка" если хотя бы один сценарий выполнен
MAX(
CASE WHEN EXISTS (SELECT 1 FROM calls WHERE user_id = u.user_id AND outcome = 'success') THEN 1 ELSE 0 END,
CASE WHEN EXISTS (SELECT 1 FROM chats WHERE user_id = u.user_id AND status = 'resolved') THEN 1 ELSE 0 END
) as is_deal
FROM users u
)
SELECT
DATE(completion_date) as deal_date,
COUNT(DISTINCT user_id) as deals_completed,
COUNT(DISTINCT CASE WHEN completed_scenario_1 = 1 THEN user_id END) as scenario_1_count,
COUNT(DISTINCT CASE WHEN completed_scenario_2 = 1 THEN user_id END) as scenario_2_count
FROM deal_completion
WHERE is_deal = 1
GROUP BY DATE(completion_date)
ORDER BY deal_date DESC;
Шаг 5: Attribution — какой channel привёл к сделке?
WITH first_touch AS (
-- Какое первое взаимодействие было?
SELECT
user_id,
CASE
WHEN MIN(event_date) IN (SELECT call_date FROM calls WHERE user_id = ...) THEN 'call'
WHEN MIN(event_date) IN (SELECT start_time FROM chats WHERE user_id = ...) THEN 'chat'
END as first_channel,
MIN(event_date) as first_interaction_date
FROM (
SELECT user_id, call_date as event_date FROM calls
UNION ALL
SELECT user_id, start_time FROM chats
)
GROUP BY user_id
)
SELECT
first_channel,
COUNT(DISTINCT CASE WHEN is_deal = 1 THEN user_id END) as deals,
ROUND(100.0 * COUNT(DISTINCT CASE WHEN is_deal = 1 THEN user_id END) / COUNT(DISTINCT user_id), 2) as conversion_rate
FROM first_touch ft
LEFT JOIN deal_completion dc ON ft.user_id = dc.user_id
GROUP BY first_channel;
Шаг 6: Монитор метрики в дашборде
KPI для tracking:
Daily Deal Completion
├─ Total deals: 150 (+10% vs yesterday)
├─ By channel:
│ ├─ Call-initiated: 90 (+8%)
│ ├─ Chat-initiated: 60 (+15%)
├─ By scenario:
│ ├─ Scenario 1 (Call→Chat): 100
│ ├─ Scenario 2 (Escalation): 50
├─ Time to deal:
│ └─ Median: 3 days (от первого контакта)
Шаг 7: Отладка (Debug problematic data)
Проблемы которые могут возникнуть:
Проблема 1: Дублирование events
-- Проверка
SELECT user_id, call_date, COUNT(*)
FROM calls
GROUP BY user_id, call_date
HAVING COUNT(*) > 1;
Проблема 2: Пропущенные звонки vs контакты
-- Контроль качества
SELECT
outcome,
COUNT(*) as count,
ROUND(100.0 * COUNT(*) / SUM(COUNT(*)) OVER (), 2) as pct
FROM calls
GROUP BY outcome;
Проблема 3: Долгие чаты (может быть broken conversations)
SELECT
PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY DATEDIFF(MINUTE, start_time, end_time)) as p95_duration
FROM chats;
Рекомендации
1. Вовлеките domain experts
- Sales team: какой path обычно ведёт к сделке?
- CS team: какие interactions indicative of good deal?
2. Validate сценарии
- Возьмите 50 реальных сделок
- Посмотрите их историю звонков/чатов
- Выведите паттерны
3. Итеративно улучшайте
- V1: Simple definition (есть call + есть chat = deal)
- V2: Add timing (chat должен быть в течение 7 дней после call)
- V3: Add quality (call должен быть > 5 минут)
4. Monitor false positives/negatives
- False positive: система говорит deal, но это не deal
- False negative: реальная сделка не поймана
- Нужно достичь ~90% accuracy