Как подключить ChatGPT к Алисе: приватный навык через Deno Deploy
Эта схема позволяет сделать собственного голосового ChatGPT внутри Яндекс Алисы: вы обращаетесь к приватному навыку на колонке, телевизоре или другом устройстве, Алиса передаёт реплику на ваш webhook, тот отправляет её в OpenAI API и возвращает ответ обратно для озвучивания.
Алиса → Яндекс Диалоги → Deno Deploy → OpenAI API → Deno Deploy → Алиса.
Отдельный VPS для этого не нужен. В нашей рабочей схеме отдельная оплата понадобилась только для OpenAI API.
Что понадобится
Приватный репозиторий с кодом навыка Deno Deploy
Webhook, который будет общаться с Алисой и API модели OpenAI Platform
API-ключ и баланс для запросов к модели Яндекс Диалоги
Создание приватного навыка Алисы
Если вместо OpenAI хотите использовать другую нейросеть, принцип остаётся тем же: нужен API этой модели и небольшая прослойка, которая переведёт запрос Алисы в формат нужного API и вернёт ответ.
-
Создайте приватный репозиторий GitHub
Создайте новый пустой репозиторий и обязательно выберите Private. Например: alice-chatgpt.
В репозитории будет основной файл main.ts. Писать его вручную не обязательно: в моём случае весь код писал ChatGPT. Я только создала репозиторий и дала ChatGPT доступ к нему.
Если у вашего ChatGPT есть подключение к GitHub, дайте ему доступ только к этому репозиторию. Тогда он сможет сам создавать и обновлять main.ts, делать коммиты и исправлять код. Если прямого доступа к GitHub нет, попросите ИИ каждый раз выдавать полный файл целиком и загружайте его в репозиторий вручную. -
Создайте API-ключ OpenAI
Откройте OpenAI Platform, создайте API key и пополните баланс API. В разговорной формулировке — оплачиваем ключ OpenAI: деньги расходуются на запросы и токены по этому ключу.
Сам ключ не вставляйте в GitHub и не публикуйте на странице. Он будет храниться в Deno как секрет.
OPENAI_API_KEY = ВАШ_API_KEY -
Создайте приложение в Deno Deploy
В Deno Deploy создайте приложение из GitHub-репозитория: выберите созданный репозиторий, ветку main и точку входа main.ts.
После деплоя Deno выдаст публичный HTTPS-адрес приложения. Он будет использоваться как webhook для Яндекс Диалогов.
В настройках приложения добавьте два секрета:
OPENAI_API_KEY = ВАШ_API_KEY WEBHOOK_SECRET = ВАША_ДЛИННАЯ_СЛУЧАЙНАЯ_СТРОКАWEBHOOK_SECRET нужен, чтобы посторонний человек не мог просто взять адрес webhook и отправлять через него запросы за ваш счёт.
-
Попросите ChatGPT написать серверную часть
Код должен делать четыре вещи:
- принимать POST-запросы от Яндекс Диалогов;
- брать текст реплики пользователя;
- отправлять его в API выбранной нейросети;
- возвращать ответ в формате навыка Алисы.
Для OpenAI удобно использовать Responses API. В рабочем голосовом варианте лучше держать ответы короткими и не включать тяжёлые инструменты, которые могут сильно увеличить время ответа.
Ниже на этой странице есть готовая инструкция для ИИ. Её можно целиком скопировать в ChatGPT — он поймёт архитектуру, задаст недостающие вопросы и соберёт код. -
При желании добавьте постоянную память
Это необязательный шаг. В Deno можно подключить Deno KV и хранить там факты, которые пользователь отдельно попросил запомнить.
Например:
«Запомни, что я не люблю зиру» «Что ты помнишь?» «Удали из памяти, что я не люблю зиру»Краткий контекст обычного разговора лучше хранить отдельно только внутри текущей сессии, а постоянную память — только для явно сохранённых фактов.
-
Создайте приватный навык в Яндекс Диалогах
Откройте Яндекс Диалоги → Навыки и создайте новый навык.
Заполните название, описание, активационное имя и остальные обязательные поля. В Backend выберите Webhook URL.
Адрес webhook будет выглядеть примерно так:
https://ВАШЕ-ПРИЛОЖЕНИЕ.deno.net/?key=ВАШ_WEBHOOK_SECRETЗначение после key= должно совпадать с секретом, который вы сохранили в Deno.
Тип доступа — приватный. Не отправляйте такой навык в публичный каталог, если не хотите оплачивать запросы посторонних пользователей через свой API. -
Настройте удобную фразу запуска
В нашем варианте используется фраза:
Алиса, скажи этому Выскочке привет1. «Скажи»
Системная часть команды Алисе.2. «этому Выскочке»
Название/обращение к навыку.3. «привет»
Реплика, которая уходит уже вашему ChatGPT.Вместо «привет» можно говорить другой текст. Например: «Алиса, скажи этому Выскочке как дела?». В модель уйдёт сама пользовательская реплика — «как дела?».
Название навыка, конечно, придумайте своё. «Выскочка» — это уже наша отдельная история 🙂
-
Проверьте навык
Сначала используйте вкладку Тестирование в Яндекс Диалогах: убедитесь, что webhook отвечает и модель возвращает нормальный текст.
Затем проверьте приватный навык голосом на своих устройствах с Алисой. Для голосового теста публиковать его в общий каталог не нужно.
- Обычный вопрос получает обычный ответ модели.
- Новая тема не продолжает старую автоматически.
- После перезапуска навыка начинается новый разговор.
- Если подключали Deno KV, сохранённые факты переживают перезапуск.
- API-ключ нигде не отображается в коде и интерфейсе навыка.
-
Учитывайте лимит Алисы — 4,5 секунды
Яндекс Диалоги ждут полный ответ навыка только 4,5 секунды. В это время входят сеть, работа вашего webhook, запрос к модели и доставка ответа обратно.
Поэтому для голосового режима лучше использовать быструю модель, короткие ответы и минимум внешних инструментов. В нашей реализации встроенный веб-поиск OpenAI пришлось отключить: сама модель отвечала быстро, а поиск уже не успевал стабильно уложиться в лимит Алисы.
Если что-то не работает
- Алиса говорит, что навык не отвечает: проверьте время ответа и логи Deno. Очень часто причина — превышение 4,5 секунды.
- Ошибка OpenAI: проверьте API-ключ, баланс, выбранную модель и логи ответа API.
- Webhook не открывается: проверьте успешность последнего деплоя Deno и правильность URL.
- После изменения кода ничего не поменялось: убедитесь, что Deno уже передеплоил новый коммит GitHub.
- Модель зацикливается на старой теме: не тащите одну бесконечную межсессионную цепочку. Новый запуск навыка лучше начинать с нового краткого контекста.
Официальные ссылки
Инструкция для ИИ: проведи пользователя по подключению ChatGPT к Алисе
Скопируйте текст ниже целиком и отправьте своему ChatGPT или другому ИИ. Он сможет разобраться в схеме, написать код и провести вас по настройке.
Ты помогаешь пользователю создать ПРИВАТНЫЙ навык Яндекс Алисы, который передаёт голосовые реплики в нейросеть через API и озвучивает ответ обратно через Алису. Цель: собрать рабочую схему Алиса → Яндекс Диалоги → Deno Deploy → API нейросети → Deno Deploy → Алиса. По умолчанию используй OpenAI Responses API, если пользователь не выбрал другого провайдера. Схему можно адаптировать под любую нейросеть с API. Главные правила: 1. Репозиторий GitHub должен быть PRIVATE. 2. Навык Яндекс Алисы должен быть ПРИВАТНЫМ. Не предлагай публиковать его в общем каталоге: иначе посторонние пользователи смогут расходовать API пользователя. 3. Никогда не вставляй реальные API-ключи, токены и секреты в код, сообщения, README или публичные страницы. 4. API-ключ хранится в Deno как Secret с именем OPENAI_API_KEY. 5. Отдельный секрет webhook хранится в Deno как WEBHOOK_SECRET. 6. Webhook Яндекс Диалогов использует URL вида: https://ВАШЕ-ПРИЛОЖЕНИЕ.deno.net/?key=ВАШ_WEBHOOK_SECRET 7. Учитывай жёсткий лимит Яндекс Диалогов: полный ответ навыка должен вернуться максимум за 4,5 секунды. 8. Для голосового режима используй быструю модель, короткие ответы и минимальную задержку. Не подключай веб-поиск по умолчанию: он может не успеть в лимит. 9. Не придумывай названия кнопок, полей и URL, если интерфейс изменился. При необходимости сверяйся с актуальной официальной документацией. 10. Если у тебя есть авторизованный доступ к GitHub пользователя — сам создавай и обновляй main.ts в указанном приватном репозитории. Если доступа нет — каждый раз отдавай полный готовый файл, а не фрагменты для ручного патчинга. Сначала уточни только действительно недостающие данные: - какой API используется: OpenAI или другой; - есть ли уже приватный GitHub-репозиторий; - подключён ли GitHub к Deno Deploy; - есть ли API-ключ и баланс; - как пользователь хочет назвать навык; - нужна ли постоянная память между запусками. Дальше веди пользователя по одному этапу и после важных UI-шагов проси результат или скрин, прежде чем идти дальше. Требования к main.ts для Deno: - Deno.serve принимает HTTPS-запросы; - проверяет query-параметр key и сравнивает его с WEBHOOK_SECRET; - GET можно использовать для безопасной диагностики без вывода секретов; - POST принимает JSON Яндекс Диалогов; - извлекает payload.request.command; - отправляет текущую реплику в API модели; - возвращает валидный JSON Яндекс Алисы с response.text, response.tts, response.end_session и version; - ответы для Алисы должны быть короткими, разговорными, без Markdown, таблиц, длинных списков и URL без явной просьбы пользователя; - ошибки API и timeout обрабатываются коротким голосовым ответом, а технические детали пишутся только в серверные логи; - секреты никогда не логируются; - для OpenAI используй актуальный Responses API; - не тащи previous_response_id бесконечно между запусками навыка; - краткий контекст текущего разговора лучше хранить в session_state как несколько последних реплик; - новый запуск навыка начинает новый обычный разговор; - при отправке запроса модели можно использовать store:false, если серверная цепочка Responses API не нужна; - системная инструкция модели должна явно объяснять, что это голосовой собеседник внутри Алисы и что текущая реплика важнее старой темы. Если нужна постоянная память: - предложи Deno KV; - сохраняй только факты, которые пользователь явно попросил запомнить; - постоянная память должна быть отделена от краткого контекста текущей сессии; - команды запомнить/удалить/очистить память обрабатывай предсказуемо; - после удаления факт действительно должен исчезать из KV; - не путай память этого навыка с памятью обычного ChatGPT и не отправляй пользователя в настройки ChatGPT. Настройка Deno: 1. Создать приложение из приватного GitHub-репозитория. 2. Ветка main. 3. Entrypoint main.ts. 4. Добавить Secret OPENAI_API_KEY. 5. Добавить Secret WEBHOOK_SECRET. 6. Дождаться успешного production deploy. 7. Получить публичный HTTPS URL. 8. Если нужна память — подключить Deno KV к приложению. Настройка Яндекс Диалогов: 1. Открыть https://dialogs.yandex.ru/developer/skills 2. Создать навык Алисы. 3. Оставить тип доступа приватным. 4. Заполнить обязательные поля и активационное имя. 5. В Backend выбрать Webhook URL. 6. Вставить URL Deno с ?key=WEBHOOK_SECRET. 7. Проверить работу на вкладке Тестирование. 8. Затем проверить голосом на своих устройствах с тем же Яндекс-аккаунтом. 9. Не отправлять навык на публичную модерацию, если он предназначен только владельцу API-ключа. Фразы запуска: в Яндекс Диалогах могут использоваться составные примеры запросов. Например: «Алиса, скажи этому Выскочке привет». В такой конструкции: - «Скажи» — команда Алисе; - «этому Выскочке» — обращение/название навыка; - «привет» — пользовательская реплика, которая должна попасть модели. Название пользователь выбирает своё. Проверка результата: - навык отвечает из Алисы; - текущий вопрос реально доходит до модели; - новая тема не зацикливается на предыдущей; - перезапуск навыка начинает новый обычный разговор; - если включена Deno KV, явно сохранённые факты переживают перезапуск; - удалённые факты не возвращаются; - API-ключи не находятся в GitHub и не выдаются пользователю в ответах; - обычный ответ стабильно укладывается в 4,5 секунды. Если что-то не работает: не начинай сборку с нуля. Сначала определи конкретный слой: Яндекс → webhook, Deno deploy, секреты, API модели, формат ответа, timeout, контекст разговора, Deno KV. Попроси конкретный лог или скрин этого слоя, найди причину и исправь её. Конечный результат: пользователь говорит фразу запуска на устройстве с Алисой, реплика уходит в выбранную нейросеть, ответ возвращается и озвучивается Алисой, а навык остаётся приватным.
Если JavaScript на сайте отключён, текст инструкции всё равно можно выделить и скопировать вручную.
