Многие программисты (и не только) хотя бы раз сталкивались с agile-разработкой. Одной важной составляющей agile методов разработки являются ежедневные встречи - стендапы - на которых участники команды за короткое время рассказывают о проделанной и планируемой работе на этот день. У большинства таких встреч есть ведущий, определяющий очередность, а также следящий за временем. Но не в каждой команде есть человек, желающий взять на себя эту роль. Так почему бы не автоматизировать этот процесс? Идея проста: написать что-нибудь, что может опрашивать каждого человека о рабочем дне. Желательно, чтобы это что-нибудь обладало голосом. Мой выбор пал на Алису, поскольку при помощи станции в переговорке вполне можно провести стендап. Так я написал навык “Проведи стендап”. Возможности Добавление/удаление людей из команды. Какой стендап без команды? Для того, чтобы навык знал о составе вашей команды, есть фразы: “Добавь в команду ИМЯ [ФАМИЛИЯ]”, “Удали из команды ИМЯ [ФАМИЛИЯ]” и дополнительная фраза “Добавь в команду человека ИМЯ [ФАМИЛИЯ]”. Зачем нужна ещё одна фраза будет описано в разделе про интенты. Достаточно сделать это один раз - информация о команде сохранится. Собственно, проведение стендапа. После того как вы добавили всю свою команду, можно начать стендап, сказав “начни стендап”. Навык будет по очереди предлагать каждому выступить и рассказать о своём дне. После того как навык услышит фразу “у меня всё/конец/я закончил”, он вызовет следующего участника.  Также можно пропустить участника, сообщив “его/её нет” или “он/она отсутствует”. Если вы не хотите, чтобы содержание вашего стендапа уходило куда-то неизвестно к кому на сервер, то навык предлагает возможность проигрывать “звук тишины” во время вашего рассказа. Во время воспроизведения Алиса не воспринимает реплики, поэтому вы можете сообщать о своей работе не беспокоясь о том, что кто-то ещё вас услышит. Навык также может запоминать небольшие фразы. Вы начали своё выступление, у вас появилась какая-то идея или вопрос к коллеге, но эта идея/вопрос не вписывается в регламент стендапа, а вы боитесь, что к концу стендапа эта идея/вопрос вылетит из головы. Для этой ситуации есть команда “запомни тему …”. В конце стендапа Алиса расскажет, кто какие напоминания оставил. У навыка есть интеграция с гитхабом/трекером Яндекса, позволяющая получить список ишью из репозитория/тикетов из очереди, а также закрыть определенный ишью/тикет. Для этого нужно авторизоваться в этих сервисах, об авторизации чуть ниже. Сам по себе навык - простой веб сервер с одним обработчиком, куда поступают все запросы с репликами пользователей. Я реализовал этот сервер на питоне через Flask. В качестве базы данных была выбрана PostgreSQL. Хотелось бы отметить 2 возможности, которые Яндекс предоставляет для навыков: Интенты Интент - встроенный NLP от Яндекса, позволяющий обрабатывать реплики пользователя. Используя простой язык, можно описать интенты, присутствие которых в реплике будет проверять Яндекс. С их помощью легко описывать фразы, имеющие один смысл для навыка, например для окончания стендапа: “я закончил” или “у меня на сегодня всё”. Если какой-либо интент нашелся, то из него можно вычленить определенные сущности, как вариант имя и фамилию человека. Но тут возникает проблема: Имя и Фамилия - заранее определенные сущности, поэтому какую-нибудь редкую фамилию Яндекс может и не распознать. Для этого и была создана дополнительная фраза, позволяющая добавить человека в команду. Также использование интентов осложняет тестирование. Работу самих интентов можно протестировать при создании в консоли разработчика навыка. Но, при написании своих тестов к основе навыка (в моём случае - обычному веб-серверу на питоне, как уже упоминалось выше), нужно писать свой обработчик языка, иначе эти интенты не будут распознаны. Авторизация Яндекс.Диалоги предоставляют возможность авторизации через навык в сторонних сервисах, поддерживающих OAuth. Однако по неизвестным причинам прикрутить авторизацию в гитхабе у меня не получилось, и поддержка не смогла помочь с поиском проблемы. В итоге авторизация в гитхабе проходит через Github App. Чтобы она работала, нужно “установить” приложение в свой репозиторий, и тогда авторизация и работа с гитхабом идут уже от лица приложения. С трекером Яндекса вышло проще - OAuth авторизация заработала без проблем. Но есть один минус - OAuth авторизация поддерживается максимум только для одного сервиса. (Поэтому, если бы получилось сделать авторизацию для гитхаба, пришлось бы делать костыли для авторизации в трекере). С исполнением такой простой задачи, как вызов участников, Алиса справляется успешно, голосовой интерфейс удачно вписывается в стендапы. Репозиторий Навык