Интеграция Asana и Telegram (Asana Telegram Bot)

C год назад или около того мы командой организаторов Юкон в экспериментальных целях сменили наш основной инструментарий групповой работы со связки slack + trello на asana + telegram. Из первоначального формата/инструментария остался разве что google drive и еженедельные встречи за чашкой кофе.

Смотрели разное. Trello был долгое время основным инструементом, продукт Саратовских ребят kanbanchi (на тот момент не было мобильного приложения, насколько я помню) также оценивали. От Jira (столь любимой в среде программистов и ИТ) подташнивает, хотелось чего то более легковестного но и при этом функционального. Так получилось. что Asana я пользуюсь давно (и вам советую хотя бы посмотреть), еще со времен её самых первых версий без нормального мобильного интерфейса  и основными причинами попробовать её в группе организаторов на замену предыдущему инструменту стало:

  • нормальная (бесконечная) вложенность списков задач, при которой родительская задача может быть назначена одному человеку, а подзадачи совершенно другим людям;
  • совмещение не только формата канбан досок но еще и "обычного" плоского списка задач;
  • приятный внешний интерфейс (тут на вкус и цвет, конечно же);
  • и самое главное -- нормальная возможность видеть свои задачи. Может я конечно и неопытный пользователь trello, но за несколько лет я так и не разобрался как увидеть все карточки которые висят на тебе.

Со slack съехали по паре причин:

  • slack вел себя совершенно отвратительно в условиях плохого интернета. Все же в 21 веке нужно понимать, что интернет у пользователя может и "моргать";
  • slack также резко, как набрал популярность её же и потерял на рынке мессенджеров;
  • telegram внезапно стал основным инструментом общения на все случаи жизни;
  • нормальное цитирование в telegram (в слаке его тоже добавили вроде?);
  • единый сервер (сервис) позволяет пользователю один раз залогиниться в telegram, чтобы восстановить всю свою чатов, а не судорожно вспоминать сколько же их (серверов) было (в моем случае более пяти);
  • у телеграм есть не только чаты, но и каналы;
  • стикеры.
Это было, повторюсь, год или полтора тому назад.

И всё это время, больше всего не хватало возможности интеграции между Asana и Telegram (в Trello / Slack оно нативно есть). Ведь это такое подспорье видеть в общем чате организаторов всю хронологию работы с задачами. 

По состоянию на октябрь 2017 интернет рассказывает всего о ряде бесплатных проектов, которые носят гордое названия Asana Telegram Bot -- все они не рабочие. И ряд комерческих интеграций, которые стоят необоснованные на наш взгляд деньги. Оно понятно, в-общем, почему -- API Asana не позволяет в потоковом режиме транслировать изменения в проектах (workspace'ах в ее терминах). А забарываться с тем, чтобы полить весь воркспейс asana и сравнивать изменения никто не хочет. При этом с тем же слаком у Asana есть нативная интеграция, Telegram же добавлять не хотят.

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

За основу был взят проект на github, однако обратите внимание, что он заточен только на пересылку сообщений от пользователей. Требуется его немного подпилить, в частности весь код пересылки сообщений выглядит как:


             

Сильно упрощен по сравнению с оригиналом и добавлена проверка subtype == bot_message, для сообщений отправленных ботами почему то другая структура данных используется (возможно для красивого отображения в текстовом чате slack).

Функция format_slack() чистит текстовые сообщения от мусора, типа 



И по факту является набором пары закодированных regex'ов и обращением в API slack для расшифровки слаковских идентификаторов @U0P04HZ3N, чтобы не смущать пользователей telegram.


Ну вот и все, если нужен будет исходный код или помощь - обращайтесь.


Comments

Код доступен на github https://github.com/youcon/youconasanabot