AI-система проактивных уведомлений клиентам до обращения в поддержку

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
AI-система проактивных уведомлений клиентам до обращения в поддержку
Средняя
~2-4 недели
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1240
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1167
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    867
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1084
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    563
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    829

AI-система проактивных уведомлений клиентов

Реактивная поддержка дорого стоит: один звонок в контакт-центр = $5-15. Проактивное уведомление предотвращает проблему до того, как клиент её заметил = $0.02-0.05. AI определяет, кому, когда и о чём сообщить, чтобы снизить входящие обращения и повысить NPS.

Система обнаружения потенциальных проблем

import pandas as pd
import numpy as np
from anthropic import Anthropic
import json

class ProactiveNotificationEngine:
    """Детекция событий, требующих проактивного уведомления"""

    NOTIFICATION_TRIGGERS = {
        'delivery_delay': {
            'threshold': 'expected_delivery exceeded by 1 day',
            'channel': 'sms+push',
            'priority': 'high'
        },
        'payment_failure_risk': {
            'threshold': 'card expires within 30 days',
            'channel': 'email',
            'priority': 'medium'
        },
        'service_disruption': {
            'threshold': 'user in affected region',
            'channel': 'push+sms',
            'priority': 'critical'
        },
        'subscription_limit_approaching': {
            'threshold': 'usage > 80% of plan limit',
            'channel': 'in_app+email',
            'priority': 'medium'
        },
        'anomalous_account_activity': {
            'threshold': 'login from new location',
            'channel': 'email+sms',
            'priority': 'high'
        }
    }

    def detect_delivery_issues(self, orders: pd.DataFrame,
                                logistics_data: pd.DataFrame) -> pd.DataFrame:
        """Детекция заказов с риском задержки"""
        merged = orders.merge(logistics_data, on='tracking_id', how='left')
        today = pd.Timestamp.now()

        # Заказы, где прогноз доставки > ожидаемая дата
        merged['days_delayed'] = (
            merged['estimated_delivery_updated'] - merged['expected_delivery']
        ).dt.days

        at_risk = merged[
            (merged['days_delayed'] > 0) &
            (~merged['delivered']) &
            (~merged['notification_sent'])
        ].copy()

        at_risk['urgency'] = pd.cut(
            at_risk['days_delayed'],
            bins=[-np.inf, 1, 3, np.inf],
            labels=['minor', 'moderate', 'significant']
        )

        return at_risk

    def detect_usage_limit_alerts(self, subscriptions: pd.DataFrame) -> pd.DataFrame:
        """Клиенты, приближающиеся к лимитам подписки"""
        subscriptions = subscriptions.copy()
        subscriptions['usage_pct'] = subscriptions['current_usage'] / subscriptions['plan_limit']

        return subscriptions[
            (subscriptions['usage_pct'] > 0.80) &
            (subscriptions['usage_pct'] < 1.0) &
            (~subscriptions['upsell_shown'])
        ].sort_values('usage_pct', ascending=False)

    def generate_notification(self, trigger_type: str,
                               customer: dict,
                               event_data: dict) -> dict:
        """Персонализированный текст уведомления"""
        llm = Anthropic()

        trigger_config = self.NOTIFICATION_TRIGGERS.get(trigger_type, {})

        response = llm.messages.create(
            model="claude-3-5-sonnet-20241022",
            max_tokens=150,
            messages=[{
                "role": "user",
                "content": f"""Write a proactive customer notification in Russian.

Trigger: {trigger_type}
Customer: {customer.get('first_name', 'Клиент')}
Event details: {json.dumps(event_data, ensure_ascii=False)[:200]}

Write:
1. Short subject/title (push notification style, max 50 chars)
2. Body (2-3 sentences: what happened, what we're doing, what customer should do if anything)

Be empathetic and solution-focused. No corporate speak.
Return JSON: {{"title": "...", "body": "..."}}"""
            }]
        )

        try:
            content = json.loads(response.content[0].text)
        except Exception:
            content = {'title': 'Важная информация о вашем заказе', 'body': ''}

        return {
            'customer_id': customer.get('id'),
            'channel': trigger_config.get('channel', 'email'),
            'priority': trigger_config.get('priority', 'normal'),
            'title': content.get('title'),
            'body': content.get('body'),
            'trigger_type': trigger_type
        }

    def prioritize_notifications(self, pending_notifications: pd.DataFrame) -> pd.DataFrame:
        """Приоритизация с учётом усталости от уведомлений"""
        # Не спамим: не более 2 уведомлений в день на клиента
        priority_order = {'critical': 0, 'high': 1, 'medium': 2, 'low': 3}
        pending_notifications['priority_num'] = pending_notifications['priority'].map(priority_order)

        # Сортируем и лимитируем
        sorted_notifs = pending_notifications.sort_values(
            ['customer_id', 'priority_num']
        )

        # Первые 2 на клиента
        result = sorted_notifs.groupby('customer_id').head(2)
        return result

Проактивные уведомления снижают inbound контакты в поддержку на 20-35% при правильном внедрении. ROI считается просто: (уведомлений отправлено × стоимость отправки) vs (предотвращённых звонков × стоимость звонка). При стоимости звонка $8 и уведомления $0.03 — достаточно предотвратить 0.4% звонков, чтобы выйти в плюс.