Для виртуальных ассистентов Салют можно создавать приложения с красивым интерфейсом и возможностью управлять ими разными способами: голосом, текстовыми сообщениями, касанием, жестами и пультом. Такие приложения называются Canvas App, они доступны пользователям на умных устройствах Sber и в мобильных приложениях Сбербанк Онлайн и Салют. Один из самых простых способов монетизации ваших Canvas App — реклама. Доступны два её вида:

  • Rewarded video — формат видеорекламы, когда пользователь получает награду за просмотр ролика. Наградой может быть внутриигровая валюта, дополнительные жизни, попытки, опыт и другие ресурсы в смартапе (навыке).

  • Fullscreen-баннеры — формат полноэкранной рекламы. Её можно демонстрировать между уровнями, экранами и логическими блоками смартапа. 

Наша команда подготовила SDK для подключения и управления показом рекламы в ваших навыках. Давайте пройдём все шаги её подключения.

Передаю слово моему коллеге, руководителю группы разработки общих компонентов Василию Логиневскому.

Для начала уточним, что Canvas App — это веб-приложение, а значит все дальнейшие шаги мы будем делать в качестве веб-разработчика.

Первым делом нам необходимо подключить наше рекламное Ad SDK. Для этого достаточно прописать в HTML-страницу загрузку нашего скрипта:

<script src="https://cdn-app.sberdevices.ru/shared-static/0.0.0/js/@sberdevices/ad-sdk/ad-sdk.min.js"></script>

После загрузки в window появится объект SberDevicesAdSDK, и в дальнейшем мы будем работать с его методами.

Первый метод, который нам понадобится — это метод инициализации рекламного SDK:

window.SberDevicesAdSDK.init({ onError, onSuccess });

На самом деле, у нас есть не один, а целых три метода инициализации, и дальше мы рассмотрим их различия. Но все наши методы полагаются на работу сценария вашего навыка, поэтому рекламное SDK предполагает, что оно запущено в одном окне с ассистентом.

Если у вашего Canvas App не было до этого сценария, то он понадобится вам для корректной работы рекламного SDK. Мы реализовали базовый сценарий для быстрого подключения. Чтобы им воспользоваться, пропишите в качестве webhook следующий URL: https://smartapp-code.sberdevices.ru/chatadapter/chatapi/webhook/sber_nlp2/akvMhQEy:73931a63e07450a5260600c7f9f6e6d6a992578b

Если вы добавляете рекламу в существующий смартап, то скорее всего вы уже используете наш Assistant Client для отладки общения со сценарием. Если вы хотите создать навык с нуля, то сначала вам стоит обратиться к нашей документации: https://developers.sber.ru/docs/ru/salute/basics/canvasapp

И подключить Assistant Client: https://github.com/sberdevices/assistant-client#установка

Теперь на клиенте вы можете вызвать один из методов инициализации:

window.SberDevicesAdSDK.init();
window.SberDevicesAdSDK.initDev();
window.SberDevicesAdSDK.initWithAssistant();

Внутри все эти методы подписываются на события от сценария и ждут конкретной команды от него:

{
	type: 'smart_app_data',
	smart_app_data: {
		type: 'sub',
		payload: {...},
  }
}

Все методы инициализации принимают два параметра: onError и onSuccess:

window.SberDevicesAdSDK.init({
  onSuccess: () => { console.log('AdSDK inited'); },
  onError: () => { console.error('something gone wrong!'); },
});

После получения команды от сценария происходит инициализация. Если всё прошло успешно, вызовется onSuccess, а если произошла ошибка — onError соответственно.

При этом стоит помнить, что если вы некорректно подключили сценарий, то никакой команды мы не получим, и onError не вызовется. Поэтому для проверки, произошла ли инициализация, мы добавили дополнительный метод:

window.SberDevicesAdSDK.isInited(); // => true | false

Тестовые креативы

Уточним важный момент: при разработке и тестировании рекламу стоит запускать с тестовым креативом. Это значит, что мы не будем считать эту рекламу показанной пользователю. Для этого в любой метод инициализации передайте параметр test:

window.SberDevicesAdSDK.init({
  test: true,
  onSuccess: () => { console.log('AdSDK inited'); },
  onError: () => { console.error('something gone wrong!'); },
});

Вариации методов инициализации

Какой метод инициализации выбрать?

Если вы никак не взаимодействуете со сценарием и подключили наш готовый webhook, вам подойдут init & initDev.

Если у вас есть свой сценарий, написанный на любом из наших инструментов — SmartApp Code, Salute JSSmartApp Framework, — вам подойдёт метод initWithAssistant.

init & initDev

Метод init предполагает запуск на устройстве, но вы, скорее всего, разрабатываете навык просто в браузере, поэтому для отладки мы предоставляем метод initDev.

Этот метод предполагает два дополнительных параметра: token и initPhrase.

initPhrase — фраза для запуска вашего смартапа. Она строится следующим образом: “Запусти” + “Активационное имя” ("Запусти мой апп"). Например, “Запусти Кубик Рубика”.

token — токен для дебага, получить его можно в SmartApp Studio по инструкции.

Итого у вас получится примерно вот такой код запуска:

const IS_DEVELOPMENT = process.env.NODE_ENV === "development";
const DEV_TOKEN = process.env.DEV_TOKEN;
const DEV_PHRASE = process.env.DEV_PHRASE;

if (IS_DEVELOPMENT) {
  window.SberDevicesAdSDK.initDev({ token: DEV_TOKEN, initPhrase: DEV_PHRASE, onSuccess, onError, test: true });
} else {
  window.SberDevicesAdSDK.init({ onSuccess, onError });
}

Предполагается, что вы пользуетесь одним из современных сборщиков для web-приложений (например, webpack) и можете пробросить необходимые переменные окружения: NODE_ENV, DEV_TOKEN и DEV_PHRASE.

В итоге методы init и initDev необходимо использовать в связке. Это необходимо, потому что при отладке в браузере Assistant Client подменяет собой транспортный слой ассистента, который всегда есть внутри вашего Canvas App, когда вы запускаете его на устройстве.

initWithAssistant()

Если у вас написан свой сценарий, то у вас где-то уже есть инстанс assistantClient и вы с ним активно взаимодействуете. В таком случае вы можете инициализировать рекламное SDK следующим образом:

const assistant = initializeAssistant();

initWithAssistant({
  assistant,
  onSuccess,
  onError,
});

При этом наше SDK всё ещё будет ждать команды от сценария с type: 'sub', о котором было рассказано выше. Это означает, что вам на сценарии необходимо предоставить такую команду. Давайте рассмотрим, что именно требуется предоставить в качестве payload. На самом деле, ничего слишком сложного, вот код создания такого payload c использованием: https://github.com/sberdevices/salutejs. Подробнее почитать про фреймворк Salute JS можно здесь.

const { payload } = req.request;

const userData = {
    projectName: payload.projectName,
    device: payload.device,
    app_info: payload.app_info,
};

res.appendCommand({
    type: "sub",
    payload: {
        sub: req.request.uuid.sub,
        ...userData,
    },
});

Тот же код на SmartApp Code, но посылаем мы сообщение на событие RUN_APP:

theme: /

    state: RunApp
        event!: RUN_APP
        q!: * *start
        script:
            var ctx = $jsapi.context();
            var req = ctx.request.rawRequest;
            
            $response.replies = $response.replies || [];
            
            $response.replies.push({
                type: 'raw',
                device: {},
                body: {
                    items: [{
                        command: {
                            type: 'smart_app_data',
                            smart_app_data: {
                                type: 'sub',
                                payload: {
                                    sub: req.uuid.sub,
                                    projectName: req.payload.projectName,
                                    device: req.payload.device,
                                    app_info: req.payload.app_info,
                                }
                            }
                        }
                    }]
                }
            })

    state: noMatch
        event!: noMatch

Запуск рекламы

После успешной инициализации тем или иным способом мы можем приступить к запуску рекламы.

Напомним, что в смартапах поддерживается два формата рекламы:

  • Rewarded video — пользователь получает награду за просмотр видеоролика. 

  • Fullscreen-баннеры — полноэкранная реклама, демонстрируется между уровнями, экранами и логическими блоками смартапа. 

Для показа видео:

window.SberDevicesAdSDK.runVideoAd({
    onSuccess: () => {}, 
    onError: () => {}, 
});

Для запуска баннеров:

window.SberDevicesAdSDK.runBanner({
    onSuccess: () => {}, 
    onError: () => {}, 
});

При этом внутри всё общение с рекламной сетью и работу с интерфейсом рекламного плеера или баннеров мы берём на себя.

Рекомендации разработчикам

  • Показывайте рекламу не более 5 раз за сессию. (Кстати, рекламный баннер можно запустить не чаще чем раз в две минуты, иначе будет срабатывать onError.)

  • Предусмотрите отсутствие звуков во время проигрывания рекламы.

  • Убедитесь, что реклама не будет проигрываться в неподходящий момент, нарушая сценарий смартапа.

Ещё о подключении рекламной монетизации можно почитать здесь. Если у вас возникнут дополнительные вопросы, вы можете задать их в комментариях к этому посту или написать в Telegram-сообщество разработчиков SmartMarket: https://t.me/smartmarket_community.

Это лишь начало большого пути: мы планируем расширять список доступных поверхностей для смартапов с подключенной рекламной монетизацией, применять дополнительные инструменты для промотирования таких приложений, сделать процесс подключения ещё проще. Доход разработчиков навыков с монетизацией будет расти вместе с развитием рекламного инструментария.

Кстати, до конца апреля 2022 разработчики Canvas App будут получать 100% дохода от рекламной монетизации, без комиссии. 

Комментарии (0)