Кратко о ситуации: Алиса МД у меня живет уже десятый год. Синтез речи локальный, устраивает. А вот с распознаванием плоховато. Есть у меня прога SDM, распознает через Гугл но локального ключевого слова так и не сделал. Но тем не менее, на ровне с меню, шаблоны поведения тоже весьма развиты, и уходить от них я не хочу. Поэтому от умных колонок требуется только получить распознанный текст.
Задача вроде простая, но не так всё легко. Пробовал модуль YaDevices интересная разработка, но сырой текст с колонки туда не приходит. И на данный момент у меня есть только вот такое решение. Связка Алисы МД и Алисы Яндекса через канал в Телеграмме.
Суть в следующем Y.Алиса, используя навык Электронный почтальон, передает текст боту в телеге. Другой бот из модуля МД Телеграмм читает эти сообщения, и передает их в чат МД. Оба этих бота сидят с одном Телеграмм канале админами, и поэтому видят сообщения друг друга. На каждую Y.колонку создан свой телеграмм канал. Бота всего два, их плодить не нужно. Это позволяет получать сообщения в чат МД от разных пользователей. Что можно эффективно использовать в коде Шаблонов поведения.
Всё вроде бы устраивает, разве что нельзя напрямую сказать Y.Алисе
Включи свет. Нужна ещё кодовая фраза для запуска навык почтальон. Мой вариант выглядит так:
Алиса передай сестре > немного ждем пока запустится навык >
Включи свет. Вот эта необходимая пауза, конечно, портит весь тортик, потому что мы не может произнести всю фразу на одном дыхании. Но, тем не менее, это всё равно очень удобно.
Теперь о настройке по шагам:
Связка МД-модуль-Telegram
- в МД устанавливаем модуль Telegram из маркета дополнений
в телеграмме добавляем себе бота @BotFather. Он нужен для создания нашего бота для модуля Telegram
в чате BotFather команда /newbot
придумываем name и username нашему боту
username английскими и в конце _bot
name какое нравится. Я назвал Алиса и номер своего дома. Это имя будет в чате Телеграм.
без разницы, если Я.колонок несколько. Бот будет один.
BotFather даст нам token нашего бота.
переходим к нашему боту и отправляем /start
в настройках МД модуля Telegram укажем токен нашего бота
пишем что-нибудь из Телеграмма в чате с ботом
в модуле МД появится Незарегистрированный пользователь.
добавим его. В поле Пользователь выберем нужного пользователя системы. У меня для таких дел есть User.
Всё, теперь сообщения их чата Телеграм должны попадать в чат МД от имени User.
Подробное описание этого шага в теме
[Модуль] Telegram (telegram)
Связка Я.колонка-Телеграмм
- в Telegram-аккаунте получателя добавим бота "Электронный почтальон (бот)",
запустим его и узнаем у него chat id (это наш личный с ботом чат, и к МД не имеет никакого отношения)
дадим умной колонке команду "Алиса, запусти навык Электронный почтальон"
после запуска навыка просим его "отправить сообщение"
на вопрос "Кому?" называем имя, под которым хотим сохранить получателя (я назвал "Мне")
диктуем словами ранее полученный chat id
если всё верно. подтверждаем сохранение словом "Да"
Имя "Мне" К нескольким колонкам и комнатам отношения не имеет
Подробное описание этого шага на wiki
Передача сообщений между ботами и привязка к комнатам
- создадим в Телеграмм новый Канал никого туда не добавляя
имя канала должно ассоциироваться с названием комнаты, где стоит Я.колонка (у меня имена каналов Дом Кухня, Баня Зал ...)
в настройках канала пункт Администраторы. Добавим туда наших двух ботов с правом Post Messages.
напишем что-нибудь в этом канале
в модуле МД появится новый Незарегистрированный пользователь
добавляем его. (Запомним его ID который начинается с - и имеет много цифр)
в навыке Я.колонки Электронный почтальон добавим получателя с именем, например, Алиса и этим ID
для новых комнат нужно создать новые каналы в Телеграмм и новых пользователей в модуле
А вот имя в навыке Я.колонки Электронный почтальон нужно оставить одинаковое.
Дело в том, что имена получателей в навыке почтальона хранятся в связке с id колонки, и на каждой колонке список свой. Это и выручает. Допустим на колонке в одной комнате у получателя Алиса будет id чата 123..., а в другой комнате у этого же получателя Алиса id будет 456... Это позволяет в квазаре настроит один сценарий с одним именем получателя. Теперь уже должно работать по схеме:
Алиса запусти навык Электронный почтальон > Отправить сообщение > Алиса > Включи свет
Упрощение диалога
Вместо команды "Алиса, запусти навык "Электронный почтальон" можно сделать так:
В приложении Яндекса умный дом (квазар) создать сценарий, например, именем "Сообщение для МД".
Когда: услышит любая колонка
Если: Я скажу "Передай сестре"
Или: Я скажу "Скажи сестре"
Или: Я скажу "Напиши сестре"
Тогда: колонка которая услышит выполнит команду "Попроси электронного почтальона отправить сообщение Алисе"