Помимо клиентских проектов, мы очень любим создавать внутренние проекты — для веселья и удобства. Круто, когда ты с коллегами можешь придумать суперприложение или бота для стендапов. Так же появился внутренний бот для открытия дверей и просмотра камер, о котором я расскажу в этой заметке.
![](https://habrastorage.org/webt/sc/_u/9o/sc_u9odookvqbtzfis88blcjqvs.png)
Дисклеймер: если вы ищете сложных технических кейсов, боюсь мне нечем вас порадовать. Говорю заранее, чтобы у вас не было ложных ожиданий. У нас простое, но эффективное решение, которое можно легко сделать за пару часов, получив кучу пользы.
Как устроен бот
Бот предельно простой: две кнопки для дверей (открыть дверь, открыть калитку) + несколько для камер.
![](https://habrastorage.org/webt/ie/0-/ln/ie0-lnivfbiu0dxmstex8srluti.png)
При этом на запуске эффект оказался безумным — ботом сразу стали пользоваться, причем просто так, потому что прикольно одним тапом по кнопке что-то менять вокруг.
Бот экономит время
Бот — это удобно. Особенно, когда забыл ключи или когда лень их доставать пока идешь курить. Кажется, что это мелочи — ну достань ты связку ключей с брелоком из Парижа или пропуск из кармана и приложи к двери. Но из таких мелочей состоит вся наша жизнь — кажется, если каждый день экономить по 10-15 секунд то можно будет наслаждаться реальностью дополнительные 5-10 дней. Посмотрите на эту красивую инфографику о том, куда уходят наши годы жизни.
Но главная причина для бота — курьеры. У нас двухэтажный офис на 800м?, но с одним входом для курьеров. Если ты работаешь на первом этаже, то проблем нет, но пока дойдешь из DevOps-отдела до входа, пройдет вечность.
![](https://habrastorage.org/webt/az/k1/9r/azk19r1_3z5hwiv4v8gdpm7jxpi.png)
Встреча с курьером после долгих лет странствий
При этом встреча курьера сама по себе смысла не несет: ты видишь парня в комбинезоне, открываешь ему кнопкой дверь, ждешь пока он дойдет, откроет заветный ларец, берешь пакет и снова открываешь кнопкой дверь. А потом — долгий путь обратно.
С ботом все было бы проще. Спокойно работаешь, курьер звонит, просишь его нажать на кнопку звонка и оставить заказ у двери, слышишь звонок. Нажал на кнопку — открыл калитку, нажал вторую — открыл дверь. Курьер оставил еду — Profit!
Главное — нажать две кнопки — двери и калитки. Иначе курьер застрянет во внутреннем дворике и будет ругаться на непонятном языке, как персонаж «Симс», в ужасе не понимая, что ему делать.
Как бот следит за офисом
С дверью разобрались, но тут возникает другая проблема— в офис могут стучаться посторонние. Если с ребятами в комбинезоне все понятно, то если приехал клиент, партнер или кто-то незнакомый все не так просто. Для таких случаев нам пригодилась интеграция с камерами. Удобно, когда ты можешь тапнуть одну кнопку и понять, кто там стоит за дверью.
Камер несколько и если прокликать по каждой, можно проверить все ли в порядке в офисе, не забыл ли ты выключить свет и не оставил ли свои вещи. Понятное дело, что если забываешь телефон в туалете, то тут никакой бот не поможет. Но если в фитнес-уголке, то вполне.
![](https://habrastorage.org/webt/mq/hd/ne/mqhdnejrjgmkvmv3tygf9jjdlrw.png)
Что внутри бота
Мы написали специальный сервис, так как без него делать опасно — не хотелось бы, чтобы кто-то случайно наткнувшись в поиске на бота, смог бы открывать двери в нашем офисе. Сидит такой человек в Переславле-Залесском и вносит смуту в Московском мобильном продакшне.
![](https://habrastorage.org/webt/qw/na/4w/qwna4wqyily7bmvuilb2wyoka50.png)
А это Переславль-Заллеский. Выглядит прекрасно!
Поэтому мы сделали механизм подтверждения и бана пользователя — человек вводит телефон для регистрации, а админ бота его подтверждает с помощью команды.
![](https://habrastorage.org/webt/jx/re/6x/jxre6xpzoyk7pqomgubjlsmrfqm.png)
О взломе мы даже не думаем. Бот запущен во внутренней сети, поэтому нет необходимости в какой-либо дополнительной защите. Внешнего способа обратиться к приложению которое выполняет команды, кроме как через бота, нет. Единственный способ чужому человеку открыть двери — найти одного из наших сотрудников на улице, отобрать телефон и открыть дверь.По факту мы все доверили Telegram.
Бот и камеры
С камерами похожая история. Есть внутренняя сеть, которая автоматически генерирует превью. Все, что требуется — обратиться на ссылку по которой всегда гарантированно есть свежая картинка — последний кадр с камеры. Он всегда хранится в «оперативке» — обновляется не постоянно, но точно есть. Как раз в «оперативку» и идет обращения по хитрой схеме авторизации.
Говоря «хитрую» я имею ввиду нестандартный запрос, который вряд ли где-то кроме камер используется. Нужно прям в домене указывать логин и пароль, прям как mailto. Дальше все просто — Java обращается к URL, сохраняет файл и загружает в Telegram. Бот не создает новый кадр, а перезаписывает существующий. Ему неинтересно кто во сколько пришел на работу, его интересует только текущее состояние. Каждое изображение весит около 200-300 Кб, о высоких нагрузках речи не идет. Но чтобы никто не смог «положить» бота, и чтобы бота не забанил Telegram за спам, мы добавили 10-секундный интервал между отправкой запросов.
Единственное мы не знаем как хранятся изображения — есть идея, что используются шардинговые решения, чтобы давно используемые файлы передвигать на отдельные сервера. Если вы знаете как это работает, расскажите в комментариях.
Последнее, что стоит отметить — ночные уведомления. Мы периодически устраиваем вечеринки в офисе, плюс у нас всегда есть люди, которые уходят из офиса позднее остальных. Поэтому мы сделали так, что если кто-то с 00:00 до 09:00 пользуется ботом, то пользователю и специально отмеченным людям приходит уведомление.
![](https://habrastorage.org/webt/2u/dk/06/2udk06b_cygfzjss-0s15uao5-u.png)
Тому, кто воспользовался ботом приходит уведомление с просьбой выключить свет, кондиционеры и закрыть окна. Специально отмеченным людям — обычное уведомление, что такой то пользователь воспользовался ботом, это нужно чтобы понять, что все ок и посторонних в офисе нет.
![](https://habrastorage.org/webt/0t/6g/m5/0t6gm5cinrl4gq2fa0cragkk3ts.png)
В итоге получается, что у нас есть база данных со следующими ролями:
- админ, который подтверждает и банит;
- юзер, который пользуется;
- алерт, который получает уведомления.
Раньше со скоростью вообще дела шли не очень — спасибо блокировке Telegram. Команды, которые должны были выполняться 2-3 миллисекунды, выполнялись секунду. А для всех звеньев, которые используют прокси (получение и отправление) пинг возрастает многократно.
Иногда это приводило к сбоям и вылетам. Люди привыкали тыкать кнопку «открыть» по 50 раз. И потом с задержкой можно было услышать симфонию дверных звонков. Приходилось менять порты и прокси, при этом мы не хардкодили, чтобы можно было спокойно поменять одну цифру вуаля.
Бонус трек: придумываем идеи, что еще можно придумать для офиса. Придумывайте и вы
- Заказывать еду в офис. То есть автоматизировать то, что мы обычно делаем в специальных чатах вроде «FINCH Еда». Многим нашим сотрудникам, не особо нравится разговаривать с людьми, им нравится тыкать кнопки (Денис, кто создал бота из таких).
- Бот мог бы помочь: условно люди подписывались на него, и когда дело доходило до заказа, человеку в личку прилетал вопрос «Будешь пиццу?» с ответами «Да» и «Нет». При необходимости он выяснял бы детали у человека, кто создал запрос.
- Выводить CO2. Вовремя проветриваем помещение, не теряем сознание от углекислого газа. Сейчас это можно посмотреть в «Графане», но мы можем сделать так, что и значения и график будут прилетать человеку по нажатию кнопки.
- Регулировать свет. Это нужно для тех, кто любит работать в темноте. Мы могли бы подключить бота к диодным лампам, и с помощью бота можно было бы регулировать их яркость. Условно, человек заранее выставляет нужно значение освещения и бот его запоминает. Потом в определенный момент, когда жить со светом уже нельзя — человек нажимает кнопку и вуаля — атмосфера создана.
Остался простой вопрос — как это сделать? Офис большой, можно указать крыло в котором пользователь находится больше всего, но тут есть куча сценариев, которые должны быть просчитаны. Например, что делать, если я пересел в другое место?
На самом деле не существует кейсов, которые нельзя с технической точки зрения реализовать в боте. Всегда все упирается в UX, эргономику и воображение. Телеграм позволяет сделать любую инлайн-клавиатуру с кнопками любых размеров, хоть матрицу 50 на 50. Но эти кнопки — это все, что есть: никаких тапов, экранов, бургеров, чекбоксов.
При этом делать отдельных ботов — еще хуже, потому что придется искать их, а это столько кликов, что зачем вообще такой бот, если быстрее сделать все вручную (даже если ты сидишь в отделе DevOps и тебе нужно встречать курьера).
Однако мечтать никто не запрещает. Расскажите о самых безумных идеях для Telegam-бота, и авторам самых крутых мы раздадим эксклюзивные майки FINCH. Отправим в любую точку мира
Спасибо!
evn
Хочу бота с камерами)
Norovy Автор
Что будете с ним делать?)
evn
Смотреть) Есть куча камер и регистраторов хиквижн. Ну вот хочется что-то сделать с этим всем добром)