28 июля

Управляем офисом с помощью простого telegram-бота

ПрограммированиеОфисы IT-компанийDIY или Сделай самЛайфхаки для гиков
Привет, Хабр! Меня зовут Александр, я работаю в компании FINCH. Мы создаем приложения для крупных брендов вроде «Спартака», «Столото» и «Газпром-медиа».

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



Дисклеймер: если вы ищете сложных технических кейсов, боюсь мне нечем вас порадовать. Говорю заранее, чтобы у вас не было ложных ожиданий. У нас простое, но эффективное решение, которое можно легко сделать за пару часов, получив кучу пользы.

Как устроен бот


Бот предельно простой: две кнопки для дверей (открыть дверь, открыть калитку) + несколько для камер.



При этом на запуске эффект оказался безумным — ботом сразу стали пользоваться, причем просто так, потому что прикольно одним тапом по кнопке что-то менять вокруг.

Бот экономит время


Бот — это удобно. Особенно, когда забыл ключи или когда лень их доставать пока идешь курить. Кажется, что это мелочи — ну достань ты связку ключей с брелоком из Парижа или пропуск из кармана и приложи к двери. Но из таких мелочей состоит вся наша жизнь — кажется, если каждый день экономить по 10-15 секунд то можно будет наслаждаться реальностью дополнительные 5-10 дней. Посмотрите на эту красивую инфографику о том, куда уходят наши годы жизни.

Но главная причина для бота — курьеры. У нас двухэтажный офис на 800м², но с одним входом для курьеров. Если ты работаешь на первом этаже, то проблем нет, но пока дойдешь из DevOps-отдела до входа, пройдет вечность.


Встреча с курьером после долгих лет странствий

При этом встреча курьера сама по себе смысла не несет: ты видишь парня в комбинезоне, открываешь ему кнопкой дверь, ждешь пока он дойдет, откроет заветный ларец, берешь пакет и снова открываешь кнопкой дверь. А потом — долгий путь обратно.

С ботом все было бы проще. Спокойно работаешь, курьер звонит, просишь его нажать на кнопку звонка и оставить заказ у двери, слышишь звонок. Нажал на кнопку — открыл калитку, нажал вторую — открыл дверь. Курьер оставил еду — Profit!

Главное — нажать две кнопки — двери и калитки. Иначе курьер застрянет во внутреннем дворике и будет ругаться на непонятном языке, как персонаж «Симс», в ужасе не понимая, что ему делать.

Как бот следит за офисом


С дверью разобрались, но тут возникает другая проблема— в офис могут стучаться посторонние. Если с ребятами в комбинезоне все понятно, то если приехал клиент, партнер или кто-то незнакомый все не так просто. Для таких случаев нам пригодилась интеграция с камерами. Удобно, когда ты можешь тапнуть одну кнопку и понять, кто там стоит за дверью.

Камер несколько и если прокликать по каждой, можно проверить все ли в порядке в офисе, не забыл ли ты выключить свет и не оставил ли свои вещи. Понятное дело, что если забываешь телефон в туалете, то тут никакой бот не поможет. Но если в фитнес-уголке, то вполне.



Что внутри бота


Мы написали специальный сервис, так как без него делать опасно — не хотелось бы, чтобы кто-то случайно наткнувшись в поиске на бота, смог бы открывать двери в нашем офисе. Сидит такой человек в Переславле-Залесском и вносит смуту в Московском мобильном продакшне.


А это Переславль-Заллеский. Выглядит прекрасно!

Поэтому мы сделали механизм подтверждения и бана пользователя — человек вводит телефон для регистрации, а админ бота его подтверждает с помощью команды.



О взломе мы даже не думаем. Бот запущен во внутренней сети, поэтому нет необходимости в какой-либо дополнительной защите. Внешнего способа обратиться к приложению которое выполняет команды, кроме как через бота, нет. Единственный способ чужому человеку открыть двери — найти одного из наших сотрудников на улице, отобрать телефон и открыть дверь.По факту мы все доверили Telegram.

Бот и камеры


С камерами похожая история. Есть внутренняя сеть, которая автоматически генерирует превью. Все, что требуется — обратиться на ссылку по которой всегда гарантированно есть свежая картинка — последний кадр с камеры. Он всегда хранится в «оперативке» — обновляется не постоянно, но точно есть. Как раз в «оперативку» и идет обращения по хитрой схеме авторизации.

Говоря «хитрую» я имею ввиду нестандартный запрос, который вряд ли где-то кроме камер используется. Нужно прям в домене указывать логин и пароль, прям как mailto. Дальше все просто — Java обращается к URL, сохраняет файл и загружает в Telegram. Бот не создает новый кадр, а перезаписывает существующий. Ему неинтересно кто во сколько пришел на работу, его интересует только текущее состояние. Каждое изображение весит около 200-300 Кб, о высоких нагрузках речи не идет. Но чтобы никто не смог «положить» бота, и чтобы бота не забанил Telegram за спам, мы добавили 10-секундный интервал между отправкой запросов.

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

Последнее, что стоит отметить — ночные уведомления. Мы периодически устраиваем вечеринки в офисе, плюс у нас всегда есть люди, которые уходят из офиса позднее остальных. Поэтому мы сделали так, что если кто-то с 00:00 до 09:00 пользуется ботом, то пользователю и специально отмеченным людям приходит уведомление.



Тому, кто воспользовался ботом приходит уведомление с просьбой выключить свет, кондиционеры и закрыть окна. Специально отмеченным людям — обычное уведомление, что такой то пользователь воспользовался ботом, это нужно чтобы понять, что все ок и посторонних в офисе нет.



В итоге получается, что у нас есть база данных со следующими ролями:

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

Раньше со скоростью вообще дела шли не очень — спасибо блокировке Telegram. Команды, которые должны были выполняться 2-3 миллисекунды, выполнялись секунду. А для всех звеньев, которые используют прокси (получение и отправление) пинг возрастает многократно.

Иногда это приводило к сбоям и вылетам. Люди привыкали тыкать кнопку «открыть» по 50 раз. И потом с задержкой можно было услышать симфонию дверных звонков. Приходилось менять порты и прокси, при этом мы не хардкодили, чтобы можно было спокойно поменять одну цифру вуаля.

Бонус трек: придумываем идеи, что еще можно придумать для офиса. Придумывайте и вы


  1. Заказывать еду в офис. То есть автоматизировать то, что мы обычно делаем в специальных чатах вроде «FINCH Еда». Многим нашим сотрудникам, не особо нравится разговаривать с людьми, им нравится тыкать кнопки (Денис, кто создал бота из таких).
  2. Бот мог бы помочь: условно люди подписывались на него, и когда дело доходило до заказа, человеку в личку прилетал вопрос «Будешь пиццу?» с ответами «Да» и «Нет». При необходимости он выяснял бы детали у человека, кто создал запрос.
  3. Выводить CO2. Вовремя проветриваем помещение, не теряем сознание от углекислого газа. Сейчас это можно посмотреть в «Графане», но мы можем сделать так, что и значения и график будут прилетать человеку по нажатию кнопки.
  4. Регулировать свет. Это нужно для тех, кто любит работать в темноте. Мы могли бы подключить бота к диодным лампам, и с помощью бота можно было бы регулировать их яркость. Условно, человек заранее выставляет нужно значение освещения и бот его запоминает. Потом в определенный момент, когда жить со светом уже нельзя — человек нажимает кнопку и вуаля — атмосфера создана.

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

На самом деле не существует кейсов, которые нельзя с технической точки зрения реализовать в боте. Всегда все упирается в UX, эргономику и воображение. Телеграм позволяет сделать любую инлайн-клавиатуру с кнопками любых размеров, хоть матрицу 50 на 50. Но эти кнопки — это все, что есть: никаких тапов, экранов, бургеров, чекбоксов.

При этом делать отдельных ботов — еще хуже, потому что придется искать их, а это столько кликов, что зачем вообще такой бот, если быстрее сделать все вручную (даже если ты сидишь в отделе DevOps и тебе нужно встречать курьера).

Однако мечтать никто не запрещает. Расскажите о самых безумных идеях для Telegam-бота, и авторам самых крутых мы раздадим эксклюзивные майки FINCH. Отправим в любую точку мира

Спасибо!
Теги:боты для мессенджеровtelegramботы телеграммалайфхакиофисная жизнь
Хабы: Программирование Офисы IT-компаний DIY или Сделай сам Лайфхаки для гиков
+4
7,1k 57
Комментарии 19
Лучшие публикации за сутки