Программистам
- Создайте функцию
- Создайте версию функции
- Укажите функцию в настройках навыка
- Проверьте работу навыка
- Что дальше
- Полезные видео
Эта инструкция поможет вам подготовить код на Node.js, Python, PHP, R или Go запустить его и протестировать навык.
Для примера создадим навык «Попугай»: он повторяет все, что написал или сказал пользователь.
Создайте функцию
- Перейдите по ссылке. Примите условия и нажмите кнопку Войти.
- Введите название нового облака и нажмите кнопку Создать.
Создайте в Yandex Cloud функцию для навыка:
- Откройте консоль управления.
- Выберите Cloud Functions.
- Нажмите кнопку Создать функцию.
Введите имя функции. Условия:
- длина — от 3 до 63 символов;
- может содержать строчные буквы латинского алфавита, цифры и дефисы;
- первый символ — буква, последний — не дефис.
Например,
my-first-function
.- Нажмите кнопку Создать.
- Если у вас нет платежного аккаунта, зарегистрируйте его.
Платежный аккаунт необходим для любых сервисов Yandex Cloud, даже бесплатных. Функции Cloud Functions для навыков Алисы не тарифицируются — Yandex Cloud не будет списывать деньги с вашей карты.
Сразу после создания функция содержит только метаинформацию: имя, описание, уникальный идентификатор и т. д. Вы добавите в функцию код навыка на следующем шаге.
Создайте версию функции
Каждая версия функции — это исходный код на языке программирования. Поддерживаются Node.js, Python, Go, Java, .NET Core, PHP, R.
Сохраните пример кода в файл с названием index.js (или скачайте готовый файл с GitHub) и создайте ZIP-архив parrot-js.zip с этим файлом.
module.exports.handler = async (event, context) => { const {version, session, request} = event; let text = "Hello! I\'ll repeat anything you say to me."; if (request["original_utterance"].length > 0) text = request["original_utterance"]; return { version, session, response: { text: text, end_session: false, }, }; };
Скопировано- В консоли управления в каталоге, где хотите создать версию функции, откройте Cloud Functions
- Выберите функцию.
- В разделе Последняя версия нажмите кнопку Создать в редакторе.
Задайте параметры версии:
- Среда выполнения:
nodejs12
. - Таймаут, секунды: 2.
- Память: 128 МБ.
- Сервисный аккаунт: Не выбрано.
Подготовьте код функции:
- Способ: ZIP-архив.
- Файл:
parrot-js.zip
. - Точка входа:
index.handler
.
- Нажмите кнопку Создать версию.
Сохраните пример кода в файл с названием parrot.py (или скачайте готовый файл с GitHub) и создайте ZIP-архив parrot-py.zip с этим файлом.
def handler(event, context): """ Entry-point for Serverless Function. :param event: request payload. :param context: information about current execution context. :return: response to be serialized as JSON. """ text = "Hello! I\'ll repeat anything you say to me." if "request" in event and \ "original_utterance" in event["request"] \ and len(event["request"]["original_utterance"]) > 0: text = event["request"]["original_utterance"] return { "version": event["version"], "session": event["session"], "response": { "text": text, "end_session": "false" }, }
Скопировано- В консоли управления в каталоге, где хотите создать версию функции, откройте Cloud Functions
- Выберите функцию.
- В разделе Последняя версия нажмите кнопку Создать в редакторе.
Задайте параметры версии:
- Среда выполнения:
python37
. - Таймаут, секунды: 2.
- Память: 128 МБ.
- Сервисный аккаунт: Не выбрано.
Подготовьте код функции:
- Способ: ZIP-архив.
- Файл:
parrot-py.zip
. - Точка входа:
parrot.handler
.
- Нажмите кнопку Создать версию.
Сохраните пример кода в файл с названием parrot.php и создайте ZIP-архив parrot-php.zip с этим файлом.
<?php function handler($event, $context) { $version = $event["version"]; $session = $event["session"]; $request = $event["request"]; $text = "Hello! I'll repeat anything you say to me."; if (strlen($request["original_utterance"]) > 0) { $text = $request["original_utterance"]; } return array( "version" => $version, "session" => $session, "response" => array( "text" => $text, "end_session" => false ) ); }
Скопировано- В консоли управления в каталоге, где хотите создать версию функции, откройте Cloud Functions.
- Выберите функцию.
- В разделе Последняя версия нажмите кнопку Создать в редакторе.
Задайте параметры версии:
- Среда выполнения:
php74
. - Таймаут, секунды: 2.
- Память: 128 МБ.
- Сервисный аккаунт: Не выбрано.
Подготовьте код функции:
- Способ: ZIP-архив.
- Файл:
parrot-php.zip
. - Точка входа:
parrot.handler
.
- Нажмите кнопку Создать версию.
Сохраните пример кода в файл с названием parrot.r и создайте ZIP-архив parrot-r.zip с этим файлом.
handler <- function(event, context) { version <- event$version session <- event$session request <- event$request text <- "Hello! I\'ll repeat anything you say to me." if (nchar(request[["original_utterance"]]) > 0) { text <- request[["original_utterance"]] } return(list( version = version, session = session, response = list( text = text, end_session = FALSE ) )) }
Скопировано- В консоли управления в каталоге, где хотите создать версию функции, откройте Cloud Functions.
- Выберите функцию.
- В разделе Последняя версия нажмите кнопку Создать в редакторе.
Задайте параметры версии:
- Среда выполнения:
r40
. - Таймаут, секунды: 2.
- Память: 128 МБ.
- Сервисный аккаунт: Не выбрано.
Подготовьте код функции:
- Способ: ZIP-архив.
- Файл:
parrot-r.zip
. - Точка входа:
parrot.handler
.
- Нажмите кнопку Создать версию.
Сохраните пример кода в файл с названием parrot.go и создайте ZIP-архив parrot-go.zip с этим файлом.
package main import ( "context" "encoding/json" "fmt" ) type Event struct { Version string `json:"version"` Session struct{} `json:"session"` Request struct { OriginalUtterance string `json:"original_utterance"` } `json:"request"` } type Response struct { Version string `json:"version"` Session struct{} `json:"session"` Result struct { Text string `json:"text"` EndSession bool `json:"end_session"` } `json:"response"` } func Handler(ctx context.Context, event []byte) (*Response, error) { var input Event err := json.Unmarshal(event, &input) if err != nil { return nil, fmt.Errorf("an error has occurred when parsing event: %v", err) } text := "Hello! I'll repeat anything you say to me." if input.Request.OriginalUtterance != "" { text = input.Request.OriginalUtterance } return &Response{ Version: input.Version, Session: input.Session, Result: struct { Text string `json:"text"` EndSession bool `json:"end_session"` }{ Text: text, EndSession: false, }, }, nil }
Скопировано- В консоли управления в каталоге, где хотите создать версию функции, откройте Cloud Functions.
- Выберите функцию.
- В разделе Последняя версия нажмите кнопку Создать в редакторе.
Задайте параметры версии:
- Среда выполнения:
golang119
. - Таймаут, секунды: 2.
- Память: 128 МБ.
- Сервисный аккаунт: Не выбрано.
Подготовьте код функции:
- Способ: ZIP-архив.
- Файл:
parrot-go.zip
. - Точка входа:
parrot.Handler
.
- Нажмите кнопку Создать версию.
Вне зависимости от таймаута в настройках версии Яндекс Диалоги будут ждать ответа функции не больше 4,5 секунды.
Откроется страница функции, где в блоке История версий появится ваша версия с тегом $latest
.
Укажите функцию в настройках навыка
После того как навык заработает, зарегистрируйте его:
- Перейдите в консоль разработчика навыка.
- Создайте навык и перейдите на вкладку Настройки.
- В блоке Backend выберите вариант Функция в Yandex Cloud.
- Из выпадающего списка выберите функцию.
- Заполните обязательные поля в блоках Основные настройки и Публикация в каталоге.
- Внизу страницы нажмите кнопку Сохранить.
В списке отображаются функции, которые вы имеете право просматривать. Но навык заработает, только если вы имеете право запускать функцию. Разрешение на запуск входит в роли Yandex Cloud serverless.functions.invoker, editor и выше.
Проверьте работу навыка
- На странице навыка откройте вкладку Тестирование.
- Если все настроено правильно, навык предложит начать беседу: «Hello! I'll repeat anything you say to me».
- Отправьте сообщение с любым текстом и убедитесь, что вам пришел такой же ответ.
- Попробуйте изменить код навыка. Откройте функцию во вкладке Редактор в консоли Yandex Cloud и отредактируйте код:Измените приветственную фразу
Найдите строку и измените текст в кавычках. Например:
До:
let text = 'Hello! I\'ll repeat anything you say to me.'
После:
let text = 'Hello! I\'ll repeat anything you say to me twice.'
До:
text = 'Hello! I\'ll repeat anything you say to me.'
После:
text = 'Hello! I\'ll repeat anything you say to me twice.'
Измените ответДобавьте еще один повтор реплики:
До:
text = request['original_utterance'];
После:
text = request['original_utterance'].concat('\n').repeat(2);
До:
text = event['request']['original_utterance']
После:
text = '\n'.join(2*[event['request']['original_utterance']])
Чтобы сохранить новую версию функции, нажмите Создать версию. Проверьте изменения в навыке.
- Попробуйте заменить код и среду выполнения в рамках одной функции. Функция останется активной, и накопленная статистика сохранится.
Что дальше
- Попробуйте выполнить другие функции, которые возвращают в ответе изображения и проигрывают звуки.
- Узнайте обо всех дополнительных возможностях в протоколе работы Яндекс Диалогов и модели программирования Cloud Functions.