Перейти к содержанию

Как добавить ChatGPT в Алису

Как подключить ChatGPT к Алисе: приватный навык через Deno Deploy

Эта схема позволяет сделать собственного голосового ChatGPT внутри Яндекс Алисы: вы обращаетесь к приватному навыку на колонке, телевизоре или другом устройстве, Алиса передаёт реплику на ваш webhook, тот отправляет её в OpenAI API и возвращает ответ обратно для озвучивания.

Рабочая схема:
Алиса → Яндекс Диалоги → Deno Deploy → OpenAI API → Deno Deploy → Алиса.

Отдельный VPS для этого не нужен. В нашей рабочей схеме отдельная оплата понадобилась только для OpenAI API.
Важно: навык делаем приватным, а репозиторий GitHub — private. Если открыть навык всем, другие люди смогут отправлять запросы через ваш API-ключ. В приватном репозитории также могут находиться ваш системный промпт и другие личные настройки ассистента.

Что понадобится

Если вместо OpenAI хотите использовать другую нейросеть, принцип остаётся тем же: нужен API этой модели и небольшая прослойка, которая переведёт запрос Алисы в формат нужного API и вернёт ответ.

  1. Создайте приватный репозиторий GitHub

    Создайте новый пустой репозиторий и обязательно выберите Private. Например: alice-chatgpt.

    В репозитории будет основной файл main.ts. Писать его вручную не обязательно: в моём случае весь код писал ChatGPT. Я только создала репозиторий и дала ChatGPT доступ к нему.

    Если у вашего ChatGPT есть подключение к GitHub, дайте ему доступ только к этому репозиторию. Тогда он сможет сам создавать и обновлять main.ts, делать коммиты и исправлять код. Если прямого доступа к GitHub нет, попросите ИИ каждый раз выдавать полный файл целиком и загружайте его в репозиторий вручную.
  2. Создайте API-ключ OpenAI

    Откройте OpenAI Platform, создайте API key и пополните баланс API. В разговорной формулировке — оплачиваем ключ OpenAI: деньги расходуются на запросы и токены по этому ключу.

    Сам ключ не вставляйте в GitHub и не публикуйте на странице. Он будет храниться в Deno как секрет.

    OPENAI_API_KEY = ВАШ_API_KEY
  3. Создайте приложение в Deno Deploy

    В Deno Deploy создайте приложение из GitHub-репозитория: выберите созданный репозиторий, ветку main и точку входа main.ts.

    После деплоя Deno выдаст публичный HTTPS-адрес приложения. Он будет использоваться как webhook для Яндекс Диалогов.

    В настройках приложения добавьте два секрета:

    OPENAI_API_KEY = ВАШ_API_KEY WEBHOOK_SECRET = ВАША_ДЛИННАЯ_СЛУЧАЙНАЯ_СТРОКА

    WEBHOOK_SECRET нужен, чтобы посторонний человек не мог просто взять адрес webhook и отправлять через него запросы за ваш счёт.

  4. Попросите ChatGPT написать серверную часть

    Код должен делать четыре вещи:

    • принимать POST-запросы от Яндекс Диалогов;
    • брать текст реплики пользователя;
    • отправлять его в API выбранной нейросети;
    • возвращать ответ в формате навыка Алисы.

    Для OpenAI удобно использовать Responses API. В рабочем голосовом варианте лучше держать ответы короткими и не включать тяжёлые инструменты, которые могут сильно увеличить время ответа.

    Ниже на этой странице есть готовая инструкция для ИИ. Её можно целиком скопировать в ChatGPT — он поймёт архитектуру, задаст недостающие вопросы и соберёт код.
  5. При желании добавьте постоянную память

    Это необязательный шаг. В Deno можно подключить Deno KV и хранить там факты, которые пользователь отдельно попросил запомнить.

    Например:

    «Запомни, что я не люблю зиру» «Что ты помнишь?» «Удали из памяти, что я не люблю зиру»

    Краткий контекст обычного разговора лучше хранить отдельно только внутри текущей сессии, а постоянную память — только для явно сохранённых фактов.

  6. Создайте приватный навык в Яндекс Диалогах

    Откройте Яндекс Диалоги → Навыки и создайте новый навык.

    Заполните название, описание, активационное имя и остальные обязательные поля. В Backend выберите Webhook URL.

    Адрес webhook будет выглядеть примерно так:

    https://ВАШЕ-ПРИЛОЖЕНИЕ.deno.net/?key=ВАШ_WEBHOOK_SECRET

    Значение после key= должно совпадать с секретом, который вы сохранили в Deno.

    Тип доступа — приватный. Не отправляйте такой навык в публичный каталог, если не хотите оплачивать запросы посторонних пользователей через свой API.
  7. Настройте удобную фразу запуска

    В нашем варианте используется фраза:

    Алиса, скажи этому Выскочке привет
    1. «Скажи»
    Системная часть команды Алисе.
    2. «этому Выскочке»
    Название/обращение к навыку.
    3. «привет»
    Реплика, которая уходит уже вашему ChatGPT.

    Вместо «привет» можно говорить другой текст. Например: «Алиса, скажи этому Выскочке как дела?». В модель уйдёт сама пользовательская реплика — «как дела?».

    Название навыка, конечно, придумайте своё. «Выскочка» — это уже наша отдельная история 🙂

  8. Проверьте навык

    Сначала используйте вкладку Тестирование в Яндекс Диалогах: убедитесь, что webhook отвечает и модель возвращает нормальный текст.

    Затем проверьте приватный навык голосом на своих устройствах с Алисой. Для голосового теста публиковать его в общий каталог не нужно.

    • Обычный вопрос получает обычный ответ модели.
    • Новая тема не продолжает старую автоматически.
    • После перезапуска навыка начинается новый разговор.
    • Если подключали Deno KV, сохранённые факты переживают перезапуск.
    • API-ключ нигде не отображается в коде и интерфейсе навыка.
  9. Учитывайте лимит Алисы — 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 на сайте отключён, текст инструкции всё равно можно выделить и скопировать вручную.

P.S. Если что-то в этой инструкции осталось непонятно — не обязательно разбираться во всём вручную. Скопируйте блок «Инструкция для ИИ» и отправьте своему ChatGPT. Здесь уже достаточно контекста, чтобы модель поняла архитектуру, объяснила непонятные места, написала код и провела вас по настройке шаг за шагом.
Поделиться: