Информацию в Redash можно посмотреть в виде графиков и таблиц
Три варианта оформления презентаций от трёх разных менеджеров
Пример запроса, по которому бот создал презентацию за одну минуту
Ещё пример запроса и результата
JSON (JavaScript Object Notation) — это текстовый формат для хранения и передачи структурированных данных в понятном для человека и компьютера виде.
{
"firstName": "Иван",
"lastName": "Петров",
"age": 30,
"isEmployed": true,
"address": {
"city": "Москва",
"street": "Ленина",
"house": 15
},
"hobbies": ["чтение", "путешествия", "программирование"]
}
Порядок формирования презентации
Что изменилось в работе
⭐ Стали создавать презентации быстрее. В команде Недвижимости удалось ускорить процесс примерно в четыре раза. Раньше менеджеры могли тратить более 20 минут на создание одной презентации, теперь процесс занимает около пяти минут. В это время сотрудник успевает написать запрос, а бот обрабатывает информацию и выгружает в чат готовый документ.
В команде Авто цифры схожие. Для части менеджеров время на создание презентации сократилось с 30 до 5–7 минут. Однако пока существуют и более сложные презентации, где нужно дополнительно собирать информацию, чтобы подготовить слайды.
⭐ Сделали доступ к генератору презентаций через чат. Чтобы собрать документ, нужно отправить в бот текстовое сообщение. Ряд параметров приходится вводить в формате JSON из-за специфики некоторых данных и расчётов. Не все менеджеры знакомы с JSON, поэтому в будущем планируем модернизировать решение, чтобы бот понимал естественный язык на 100%.
#!/usr/bin/env python
from mmpy_bot import Bot, Settings
from my_plugin import MyPlugin
bot = Bot(
settings=Settings(
MATTERMOST_URL = "http://chat.example.com",
MATTERMOST_PORT = 443,
BOT_TOKEN = "a69155mvlsobcnqpfdceqihaa",
BOT_TEAM = "test",
SSL_VERIFY = True,
), # Either specify your settings here or as environment variables.
plugins=[PresentationPlugin()], # Плагин презентации
)
bot.run()
class PresentationPlugin(Plugin):
#..........
# Здесь код контроля состояния пользователя и функции подсказок для него
#..........
########
# Листенер, который ловит НАЗВАНИЕ КОМАНДЫ на любом этапе и перезапускает сценарий.
@listen_to(r"^(?:your_team_1|your_team_2|your_team_3)$", re.IGNORECASE, direct_only=True)
async def receive_team_name(self, message: Message):
self._start_flow_with_team(message, message.text)
# Универсальный листенер на любой текст
# После указания команды - принимаем данные для презентации и парсим их в словарь и отправляем запрос на создание презентации
@listen_to(r"^.+$", re.IGNORECASE, direct_only=True)
async def receive_name(self, message: Message):
user_id = message.user_id
state = self.get_current_state(user_id)
text = (message.text or "").strip()
# Если мы ещё на шаге 0 (самый старт) и пришло не название команды — даём инфо (правило 1)
if state['current_step'] == 0:
if is_team_name(text):
return
else:
self.prompt_team_choice(message)
return
# На шаге 1 ждём параметры. Подсказываем следующий шаг, если формат не тот.
if state['current_step'] == 1:
# Если пользователь прислал НАЗВАНИЕ КОМАНДЫ здесь — перезапускаем (правило 2)
if is_team_name(text):
return
team_name = state['team_name']
try:
data, presentation_name = parse_message(text, team_name)
state['data'] = data
self.driver.reply_to(message, "Начинаю генерацию презентации...")
prs = DefaultPresentationGenerator(data=data, team_name=team_name)
tasks = await asyncio.gather(asyncio.to_thread(prs.create_presentation))
file_name = f"{presentation_name}.pptx"
presentation = tasks[0]
presentation.save(file_name)
except ValueError:
# Неверный формат параметров — подскажем и покажем шаблон (правило 3)
self.prompt_next_step(message, state)
return
except Exception as e:
logger.error(e)
self.driver.reply_to(message, ERROR_TEXT)
return
else:
self.driver.reply_to(
message,
"Презентация готова! Отправляю файл",
file_paths=[file_name],
)
# После успешной генерации очищаем состояние
self.reset_user_state(user_id)
return
Вся статья кратко
👉 Раньше у менеджеров уходило несколько часов в неделю на то, чтобы создать презентации для встреч с клиентами. Теперь они могут сделать это значительно быстрее.
👉 Мы собрали бота, который в несколько этапов формирует презентации. Сначала он собирает входящие параметры пользователя, а затем запрашивает данные и создаёт документ.
👉 Наш бот собирает информацию с помощью DWH-экспорта, но вы можете использовать другой метод, который подойдёт для вашей базы данных.
Больше недушной аналитики, кейсов, историй и внутрянки Авито ищите в Телеграм-канале «Коммуналка аналитиков». Присоединяйтесь 🤗.