Написать пост

Как я создаю аналитический инструмент для групповых чатов Telegram — конкурс пет-проектов

Аватарка пользователя MacArty

Делаю на Python инструмент, который позволяет анализировать эффективность работы сотрудников в Telegram-чатах.

 

Обо мне

Привет ✌

Я аналитик в IT и телекоммуникационной компании. Так сложилось, что в текущий момент работаю над своим проектом, который позволяет анализировать эффективность работы сотрудников в Telegram-чатах. И, возможно, местная аудитория даст полезные советы для развития инструмента.

Ну и еще было бы здорово получить худи от Tproger)

Идея проекта

Не нужно рассказывать о популярности Telegram и постоянном увеличении аудитории. В РФ используется порядка 60к групповых чатов, по статистике TGStat на август 2023.

Групповые чаты использует и бизнес для коммуникации со своими клиентами, по опыту, больше для поддержки продукта, чем для продажи. Соответственно руководителю отдела поддержки важно понимать, как эффективно сотрудники работают в Telegram, а именно интересуют метрики:

  • время ответа сотрудника на сообщения клиента;
  • время, которое сотрудник тратит на общение в чатах с клиентами;
  • качество работы сотрудников, то есть насколько предоставленные ответы сотрудником закрывают вопросы клиентов;
  • сегментация обращений от клиентов;
  • какие клиенты больше генерят обращений.

Это только часть метрик, которые необходимы для анализа.

Моя коллега — руководитель отдела поддержки, пришла ко мне с задачей разработки инструмента, который позволит анализировать эффективность сотрудников в чатах Telegram.

Первоначальная и основная задача: быстро и дешево запустить инструмент + проверить, а точно ли он приносит пользу. Так как на рынке нет подходящих решений*, то я решил создать такой инструмент самостоятельно. Который на текущий момент и является моим пет-проектом.

*наиболее подходящий вариант быстро и недорого: Telegram-бот @combot

Да, он собирает статистику по участникам группового чата:

  • количество сообщение
  • активность пользователей;
  • активность по времени суток;
  • дополнительные инструменты за платную подписку.

Однако все равно не хватает метрик, чтобы оценить эффективность сотрудников и качество поддержки.

Развитие проекта.

Быстро и бесплатно запускаем MVP инструмента.

Чтобы собирать данные, нужно создать обычный Telegram-бот. Также нужно хранилище для собранных данных. Для этой цели использовал Google Sheets. Чтобы подключить Telegram-бота к гугл-таблицам и собирать данные, нашел в открытом доступе код:

			const botToken = 'string';
const webAppUrl = 'string';
const telegramUrl = 'https://api.telegram.org/bot' + botToken;

function setWebhook() {
  var response = UrlFetchApp.fetch(telegramUrl + '/setWebhook?url=' + webAppUrl);
  Logger.log(response.getContentText());
}

function deleteWebhook() {
  var response = UrlFetchApp.fetch(telegramUrl + '/deleteWebhook?url=' + webAppUrl);
  Logger.log(response.getContentText());
}

function doPost(e) {
  try {
    e = convert(JSON.parse(e.postData.contents));
    const msg = e.msg_text;
    const username = e.from_username;
    const firstname = e.from_firstname;
    const lastname = e.from_lastname;
    const fromChatId = e.from_user_id;
    const chatId = e.chat_id;
    const chatUsername = e.chat_username;
    const chatTitle = e.chat_title;
    const replyMsg = e.reply_text;
    const replyUsername = e.reply_username;
    const file = e.document || e.video || e.audio || e.photo?.[1];
    var fileId, fileMime, fileName;
    if (file) {
      fileId = file.file_id;
      fileMime = file.mime_type;
      fileName = file.file_name;
    };
    log(fromChatId, username, firstname, lastname, msg, chatId, chatUsername, chatTitle, fileId, fileMime, fileName, replyMsg, replyUsername, e)
  } catch (err) {
    const ss = SpreadsheetApp.getActive();
    const sh = ss.getSheetByName('ошибки');
    sh.appendRow([e, new Date(), err.message])
  }
}

function log(fromChatId, username, firstname, lastname, msg, chatId, chatUsername, chatTitle, fileId, fileMime, fileName, replyMsg, replyUsername, e) {
  const ss = SpreadsheetApp.getActive()
  const sheet = ss.getSheetByName("Лог сообщений") || ss.insertSheet("Лог сообщений");
  const fileUrl = fileId ? saveFile(fileId, 'telegram_files', fileName, fileMime) : '';
  const data = [[new Date(), fromChatId, username, firstname, lastname, msg, chatId, chatUsername, chatTitle, replyMsg, replyUsername, fileName, fileUrl, e]];
  sheet.getRange(sheet.getLastRow() + 1, 1, 1, data[0].length).setValues(data);
  SpreadsheetApp.flush();
}
		

Для получения необходимых руководителю метрик, использовались формулы в гугл-таблицах. И чтобы делать какие-то выводы на основе собранных данных, их нужно визуализировать. Для этой задачи используется Yandex DataLens.

Итог — MVP

В течение полного месяца протестировали на семи групповых чатах Telegram. Все работает корректно, и только одна ошибка при загрузке данных. Удалось вывести следующие метрики:

  • Количество всего сообщений в разбивке по чатам, чтобы понимать, какой клиент генерирует наибольшее количество обращений.
  • Количество сообщений в рабочее и нерабочее время.
  • Время ответа клиенту в чате, в разрезе по сотрудникам и по отделу.
  • Время, потраченное сотрудниками на переписку с клиентом.
  • Количество сообщений по часам, чтобы оптимизировать график сотрудников, в зависимости от пиковых часов.
  • Количество пропущенных чатов. В формулах задается определенное время ответа клиенту. Если время было превышено, то руководитель в дашборде увидит какому клиенту долго не отвечают.

И самое главное, что руководитель может видеть информацию почти в реалтайм (лаг обновления данных в Yandex DataLens — 30 минут) и на мобильном устройстве.

Вывод: продукт закрывает потребности, но, разумеется, требует доработок.

Возникшие трудности

После тестирования MVP, решили использовать инструмент на всех клиентах отдела, с которыми ведется коммуникация в групповых Telegram-чатах.

Добавили бота в 100+ чатов, начали собирать новые метрики, то есть усложнять формулы в гугл-таблицах. Объем собираемых данных вырос в разы, а сложные формулы увеличивали скорость обработки запросов. Это привело к тому, что данные могли подгружаться с некоторой задержкой, что в итоге сказывалось на вычислении метрик, и у руководителя в дашборде формировались неточные данные.

Изначально было понятно, что для большого объема данных такое костыльное хранилище в виде гугл-таблиц рано или поздно приведет к ошибкам. Как раз в текущий момент, мой пет-проект в стадии трансформации, чтобы избавиться от возникших трудностей:

  • Создалась БД на MySQL.
  • Telegram-бота пишу на Python, не только для наполнения БД, но и для формирования необходимых метрик. Пользуюсь наиболее популярной библиотекой telebot.
  • В планах еще разработать GUI для управления и контроля работы ботом.

Заключение

Я ввязался в ту еще авантюру с разработкой данного проекта. Однако с его помощью я повышаю свои скиллы в разработке на Python, продуктовому менеджменту и аналитике данных. Самое главное, что все это меня драйвит и заряжает, поэтому я и считаю это своим пет-проектом.

Буду рад любым комментариям, лайкам и вопросам. Спасибо за внимание)

Следите за новыми постами
Следите за новыми постами по любимым темам
363 открытий1К показов