В этом руководстве объясняется, как добавить цифровые транзакции в ваше диалоговое действие, чтобы пользователи могли приобретать ваши потребляемые цифровые товары.
Ключевые термины: Расходуемый цифровой товар — это товарная единица (SKU), которую пользователь может использовать и приобретать более одного раза, например, количество внутриигровой валюты в игре для Android. Этот цифровой товар отличается от непотребляемого цифрового товара, который пользователь может приобрести только один раз.
Дополнительную информацию о расходных одноразовых продуктах см. в документации Android по функциям одноразовых продуктов .
Поток транзакций
В этом руководстве описываются все этапы разработки в том виде, в каком они происходят в потоке транзакций цифровых товаров. Когда ваше действие обрабатывает транзакции с цифровыми товарами, оно использует следующий поток:
- Настройте клиент API цифровых покупок . Ваше действие использует API цифровых покупок для связи с вашим инвентарем Google Play и совершения транзакций. Прежде чем ваше действие сделает что-либо еще, оно создает клиент JWT со служебным ключом для связи с API цифровых покупок.
- Сбор информации . Ваше действие собирает основную информацию о пользователе и вашем инвентаре в Google Play для подготовки к транзакции.
- Проверка требований к транзакции . Ваше действие использует помощник по требованиям к цифровым транзакциям в начале процесса покупки, чтобы убедиться, что пользователь может совершить транзакцию.
- Соберите доступный инвентарь . Ваше действие проверяет ваш инвентарь в Google Play и определяет, какие предметы в настоящее время доступны для покупки.
- Создайте заказ : ваше действие представляет пользователю доступные цифровые товары, чтобы он мог выбрать один для покупки.
- Завершите покупку . Ваше действие использует API цифровых покупок, чтобы инициировать покупку по выбору пользователя в магазине Google Play.
- Обработка результата : ваше действие получает код состояния транзакции и уведомляет пользователя об успешной покупке (или предпринимает дополнительные действия).
- Сделайте покупку повторяемой : ваше действие использует API цифровых покупок для «потребления» приобретенного товара, делая этот товар снова доступным для покупки этим пользователем.
Ограничения и рекомендации по проверке
К Действиям с транзакциями применяются дополнительные политики. Проверка действий, включающих транзакции, может занять несколько недель, поэтому учтите это время при планировании графика выпуска. Чтобы облегчить процесс проверки, убедитесь, что вы соблюдаете правила и рекомендации для транзакций, прежде чем отправлять свое действие на проверку.
Действия по продаже цифровых товаров могут быть развернуты только в следующих странах:
- Австралия
- Бразилия
- Канада
- Индонезия
- Япония
- Мексика
- Россия
- Сингапур
- Таиланд
- Турция
- Великобритания
- Соединенные Штаты
Предварительные условия
Прежде чем включить цифровые транзакции в свое действие, вам необходимы следующие предварительные условия:
Учетная запись разработчика и учетная запись продавца в Google Play для управления вашими цифровыми товарами в консоли Google Play .
Веб-домен, подтвержденный в Google Search Console . Этот домен не обязательно должен быть связан с общедоступным веб-сайтом, нам просто нужно указать ваш веб-домен.
Приложение для Android с разрешением
com.android.vending.BILLING
в консоли Google Play. Ваши цифровые товары будут «покупками внутри приложения», связанными с этим приложением в консоли Google Play.Вам также необходимо создать выпуск в консоли Play с этим приложением, но если вы не хотите, чтобы выпуск был общедоступным, вы можете создать закрытый альфа-выпуск .
Если у вас еще нет приложения для Android, следуйте инструкциям по связыванию приложения для Android .
Один или несколько управляемых продуктов в консоли Google Play , которые представляют собой цифровые товары, которые вы продаете с помощью своего действия. Обратите внимание: вы не сможете создавать управляемые продукты в консоли Play, пока не настроите необходимые условия для приложения Android.
Если у вас еще нет управляемых продуктов, следуйте инструкциям по созданию цифровых товаров .
Свяжите приложение для Android
Если у вас в настоящее время нет приложения Android с разрешением на выставление счетов в консоли Google Play, выполните следующие действия:
- В Android Studio или Android IDE по вашему выбору создайте новый проект. Выберите параметры в подсказках по настройке проекта, чтобы создать очень простое приложение.
- Дайте проекту имя пакета, например
com.mycompany.myapp
. Не оставляйте это имя по умолчанию, так как вы не сможете загружать пакеты, содержащиеcom.example
, в консоль Play. - Откройте файл
AndroidManifest.xml
вашего приложения. Добавьте следующую строку кода внутри элемента
manifest
:<uses-permission android:name="com.android.vending.BILLING" />
Ваш файл
AndroidManifest.xml
должен выглядеть как следующий блок кода:<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.mycompany.myapp"> <uses-permission android:name="com.android.vending.BILLING" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" /> </manifest>
Создайте свое приложение в виде подписанного APK. В Android Studio выполните следующие действия:
- Перейдите в раздел «Сборка» , «Создать подписанный пакет / APK» .
- Нажмите Далее .
- В разделе «Путь к хранилищу ключей» нажмите « Создать новый» .
- Заполните каждое поле и нажмите «ОК» . Запишите свой пароль хранилища ключей и пароль ключа и сохраните их в надежном месте, так как они вам понадобятся позже.
- Нажмите Далее .
- Выберите выпуск .
- Выберите V1 (подпись JAR) .
- Нажмите «Готово» .
- Через несколько секунд Android Studio создаст файл
app-release.apk
. Найдите этот файл для дальнейшего использования.
В консоли Google Play создайте новое приложение.
Перейдите в раздел «Выпуски приложений» .
В разделе «Закрытые треки» выберите «Управление» , затем «Альфа» .
Нажмите кнопку «Создать выпуск» .
В разделе «Разрешить Google управлять вашим ключом подписи и защищать его» введите информацию о своем ключе подписи.
Загрузите свой APK-файл.
Нажмите Сохранить .
Создайте свои цифровые товары
Если у вас в настоящее время нет цифровых товаров в консоли Play, выполните следующие действия:
- В консоли Google Play выберите «Продукты для продажи в приложении», а затем «Управляемые продукты» . Если вы видите предупреждение, следуйте предыдущим инструкциям, чтобы создать приложение для Android, или нажмите ссылку, чтобы создать профиль продавца.
- Нажмите Создать управляемый продукт .
- Заполните поля для вашего цифрового продукта. Запишите идентификатор продукта, по которому вы будете ссылаться на этот продукт в своем действии.
- Нажмите Сохранить .
- Повторите шаги 2–4 для каждого продукта, который вы хотите продать.
Подготовьте проект действий
Настроив цифровые товары в консоли Google Play, вы должны включить цифровые транзакции и связать свой проект Actions с приложением Play.
Настраивать
Чтобы включить транзакции с цифровыми товарами в проекте Actions, выполните следующие действия:
- В консоли «Действия» откройте свой проект или создайте новый.
- Перейдите в раздел «Развертывание» , затем «Информация о каталоге» .
- В разделе «Дополнительная информация и транзакции» установите флажок «Да» в разделе «Используют ли ваши действия API цифровых покупок для выполнения транзакций с цифровыми товарами» .
- Нажмите Сохранить .
Создайте ключ API цифровых товаров
Чтобы отправлять запросы к API цифровых товаров, вам необходимо загрузить ключ учетной записи службы JSON, связанный с вашим проектом консоли Actions.
Чтобы получить ключ сервисной учетной записи, выполните следующие действия:
- В консоли «Действия» щелкните значок с тремя точками в правом верхнем углу, затем выберите «Настройки проекта».
- Найдите идентификатор проекта вашего действия.
- Перейдите по этой ссылке, заменив «
<project_id>
» идентификатором вашего проекта:https://console.developers.google.com/apis/credentials?project=project_id
- В главной навигации перейдите в раздел «Учетные данные» .
- На появившейся странице нажмите «Создать учетные данные» , затем «Ключ сервисной учетной записи» .
- Перейдите в раздел «Учетная запись службы» и нажмите «Новая учетная запись службы» .
- Присвойте учетной записи службы имя, например digitaltransactions.
- Нажмите Создать .
- Установите роль Project > Owner .
- Нажмите Продолжить .
- Нажмите Создать ключ .
- Выберите тип ключа JSON .
- Нажмите «Создать ключ» и загрузите ключ учетной записи службы JSON.
Сохраните этот ключ сервисной учетной записи в надежном месте. Вы будете использовать этот ключ для создания клиента для API цифровых покупок.
Подключитесь к своему инвентарю Play
Чтобы получить доступ к своим цифровым товарам из проекта Actions, свяжите свой веб-домен и приложение с проектом как подключенные свойства .
Чтобы подключить веб-домен и приложение консоли Play к проекту Actions, выполните следующие действия:
- В консоли «Действия» выберите «Развертывание», затем «Проверка бренда» .
Если вы не подключили ни одного объекта, сначала подключите веб-сайт:
- Нажмите кнопку веб-ресурса ( </> ).
- Введите URL-адрес своего веб-домена и нажмите « Подключиться» .
Google отправляет электронное письмо с дальнейшими инструкциями лицу, подтвердившему этот веб-домен в консоли поиска Google . Как только получатель этого письма выполнит эти действия, веб-сайт должен появиться в разделе «Проверка бренда» .
Если у вас есть хотя бы один подключенный веб-сайт, выполните следующие действия, чтобы подключить приложение Android:
- В консоли «Действия» выберите «Развертывание», затем «Проверка бренда» .
- Нажмите «Подключить приложение» .
На появившейся странице следуйте инструкциям, чтобы подтвердить свой веб-домен на консоли Play. Выберите приложение Play, содержащее ваши цифровые товары, и введите URL-адрес веб-домена точно так, как он показан на странице проверки бренда .
Google еще раз отправляет подтверждающее электронное письмо проверенному владельцу домена. Как только они одобряют проверку, ваше приложение Play должно появиться в разделе «Проверка бренда» .
Включите покупки в Access Play .
Создайте свой поток покупок
Подготовив проект Actions и инвентарь цифровых товаров, создайте поток покупки цифровых товаров в веб-перехватчике для выполнения разговоров.
1. Настройте API-клиент цифровых покупок.
В веб-перехватчике выполнения разговора создайте клиент JWT с ключом JSON вашего сервисного аккаунта и областью действия https://www.googleapis.com/auth/actions.purchases.digital
.
Следующий код Node.js создает клиент JWT для API цифровых покупок:
const serviceAccount = {'my-file.json'};
const request = require('request');
const {google} = require('googleapis');
const jwtClient = new google.auth.JWT(
serviceAccount.client_email, null, serviceAccount.private_key,
['https://www.googleapis.com/auth/actions.purchases.digital'],
null
);
2. Соберите информацию
Прежде чем пользователь сможет совершить покупку, ваше Действие собирает информацию о возможности пользователя совершать покупки и о том, какие товары доступны в вашем инвентаре.
2. а. Проверка требований к цифровой покупке
Рекомендуется убедиться, что учетная запись пользователя настроена для выполнения транзакций, прежде чем предоставлять ему возможность совершить покупку. Вам следует перейти к сцене DigitalPurchaseCheck
, которая проверяет, что пользователь проверен, выполняет ли он транзакцию на разрешенной поверхности (умный дисплей, интеллектуальная колонка или Android) и находится ли он в регионе, где осуществляются цифровые транзакции. поддерживается.
Чтобы создать сцену проверки цифровой покупки, выполните следующие действия:
- На вкладке «Сцены» добавьте новую сцену с именем
DigitalPurchaseCheck
. - В разделе «Заполнение слотов» нажмите + , чтобы добавить новый слот.
- В разделе «Выбор типа» выберите
actions.type.DigitalPurchaseCheckResult
в качестве типа слота. - В поле имени слота дайте слоту имя
DigitalPurchaseCheck
. - Установите флажок Настроить обратную запись значения слота (включено по умолчанию).
- Нажмите Сохранить .
Проверка цифровой покупки приведет к одному из следующих результатов:
- Если требования соблюдены, параметр сеанса устанавливается с условием успеха, и вы можете приступить к разрешению пользователю приобретения цифровых товаров.
- Если одно или несколько требований не могут быть выполнены, параметр сеанса устанавливается с условием сбоя. В этом случае вам следует отвлечь разговор от транзакционного опыта или завершить разговор.
Чтобы обработать результат проверки цифровой покупки, выполните следующие действия:
- На вкладке «Сцены» выберите только что созданную сцену
DigitalPurchaseCheck
. - В разделе «Условие» нажмите «+» , чтобы добавить новое условие.
В текстовом поле введите следующий синтаксис условия, чтобы проверить условие успеха:
scene.slots.status == "FINAL" && session.params.DigitalPurchaseCheck.resultType == "CAN_PURCHASE"
Наведите курсор на только что добавленное условие и щелкните стрелку вверх, чтобы поместить его перед
if scene.slots.status == "FINAL"
.Включите запросы на отправку и предоставьте простой запрос, сообщающий пользователю, что он готов совершить транзакцию:
candidates: - first_simple: variants: - speech: >- You are ready to purchase digital goods.
В разделе «Переход» выберите другую сцену, позволяющую пользователю продолжить разговор и приступить к совершению транзакции.
Выберите условие
else if scene.slots.status == "FINAL"
.Включите запросы на отправку и предоставьте простой запрос, сообщающий пользователю, что он не может совершить транзакцию:
candidates: - first_simple: variants: - speech: Sorry you cannot perform a digital purchase.
В разделе «Переход» выберите «Завершить разговор» , чтобы завершить разговор.
2. б. Соберите доступный инвентарь
Используйте API цифровых покупок, чтобы запросить доступный на данный момент инвентарь в магазине Play, а затем встроить его в массив объектов JSON для каждого продукта. Вы ссылаетесь на этот массив позже, чтобы показать пользователю, какие опции доступны для покупки.
Каждый ваш цифровой товар представлен в виде SKU в формате JSON. Следующий код Node.js описывает ожидаемое форматирование каждого SKU:
body = {
skus: [
skuId: {
skuType: one of "SKU_TYPE_IN_APP" or "SKU_TYPE_SUBSCRIPTION"
id: string,
packageName: string
}
formattedPrice: string,
title: string,
description: string
]
}
Отправьте POST-запрос в конечную точку https://actions.googleapis.com/v3/packages/{packageName}/skus:batchGet
, где {packageName}
— это имя пакета вашего приложения в консоли Google Play (например, com.myapp.digitalgoods
. com.myapp.digitalgoods
) и отформатируйте результат в массив объектов SKU.
Чтобы получить в результирующем массиве только определенные цифровые товары, укажите идентификаторы цифровых товаров (как показано под каждым продуктом в приложении в консоли Google Play), которые вы хотите сделать доступными для покупки в body.ids
.
Следующий код Node.js запрашивает список доступных товаров из API цифровых покупок и форматирует результат как массив SKU:
return jwtClient.authorize((err, tokens) => {
if (err) {
throw new Error(`Auth error: ${err}`);
}
const packageName = 'com.example.projectname';
request.post(`https://actions.googleapis.com/v3/packages/${packageName}/skus:batchGet`, {
'auth': {
'bearer': tokens.access_token,
},
'json': true,
'body': {
'conversationId': conv.session.id,
'skuType': 'SKU_TYPE_IN_APP',
// This request is filtered to only retrieve SKUs for the following product IDs
'ids': ['consumable.1']
},
}, (err, httpResponse, body) => {
if (err) {
throw new Error(`API request error: ${err}`);
}
console.log(`${httpResponse.statusCode}: ${httpResponse.statusMessage}`);
console.log(JSON.stringify(body));
});
});
});
3. Наведите порядок
Чтобы начать цифровую покупку пользователя, предоставьте ему список ваших цифровых товаров, доступных для покупки. Вы можете использовать различные типы расширенных ответов , чтобы представить свои акции и предложить пользователю сделать выбор.
Следующий код Node.js считывает массив объектов SKU и создает ответ списка с одним элементом списка для каждого:
const items = [];
const entries = [];
skus.forEach((sku) => {
const key = `${sku.skuId.skuType},${sku.skuId.id}`
items.push({
key: key
});
entries.push({
name: key,
synonyms: [],
display: {
title: sku.title,
description: `${sku.description} | ${sku.formattedPrice}`,
}
});
});
conv.session.typeOverrides = [{
name: 'type_name',
mode: 'TYPE_REPLACE',
synonym: {
entries: entries
}
}];
conv.add(new List({
title: 'List title',
subtitle: 'List subtitle',
items: items,
}));
Создать покупку по выбору пользователя
Как только пользователь выберет товар, вы можете создать заказ. Для этого в слоте, связанном с выбранным элементом, вы можете вызвать свой вебхук, чтобы создать заказ. После выполнения сохраните данные заказа в параметре сеанса. Объект заказа используется в разных сценах одного и того же сеанса.
conv.session.params.purchase = {
"@type": "type.googleapis.com/google.actions.transactions.v3.CompletePurchaseValueSpec",
"skuId": {
"skuType": "<SKU_TYPE_IN_APP>",
"id": "<SKU_ID>",
"packageName": "<PACKAGE_NAME>"
},
"developerPayload": ""
};
Вместо этого в Actions Builder вы можете использовать редактор JSON для настройки слота с указанным выше объектом заказа. Обе реализации используют один и тот же формат CompletePurchaseValueSpec
, который вы можете найти в справочнике по полезной нагрузке веб-перехватчика JSON .
4. Завершите покупку
Как только пользователь выберет товар, вы можете завершить покупку. Как только вы заполните слот, связанный с выбранным предметом, вы должны перейти к сцене, в которой выполняется полная покупка.
Создайте полную сцену покупки
- На вкладке «Сцены» добавьте новую сцену с именем
CompletePurchase
. - В разделе «Заполнение слотов» нажмите + , чтобы добавить новый слот.
- В разделе «Выбор типа» выберите
actions.type.CompletePurchaseValue
в качестве типа слота. - В поле имени слота укажите имя
CompletePurchase
. - Установите флажок Настроить обратную запись значения слота (включено по умолчанию).
- В разделе «Настроить слот» выберите «
Use session parameter
в раскрывающемся списке. - В разделе «Настроить слот» введите в текстовое поле имя параметра сеанса, используемого для хранения заказа (т. е.
$session.params.purchase
). - Нажмите Сохранить .
5. Работайте с результатом
Слот с типом actions.type.CompletePurchaseValue
может иметь следующие результаты:
-
PURCHASE_STATUS_OK
: покупка прошла успешно. На этом этапе транзакция завершена, поэтому выйдите из потока транзакций и вернитесь к разговору. -
PURCHASE_STATUS_ALREADY_OWNED
: транзакция не удалась, поскольку этот элемент уже принадлежит пользователю. Избегайте этой ошибки, проверяя предыдущие покупки пользователя и адаптируя отображаемые предметы, чтобы у них не было возможности повторно приобрести уже имеющиеся у них предметы. -
PURCHASE_STATUS_ITEM_UNAVAILABLE
: транзакция не удалась, поскольку запрошенный элемент недоступен. Избегайте этой ошибки, проверяя доступные SKU ближе к моменту покупки. -
PURCHASE_STATUS_ITEM_CHANGE_REQUESTED
: транзакция не удалась, поскольку пользователь решил приобрести что-то еще. Повторите запрос при построении заказа, чтобы пользователь мог сразу принять другое решение. -
PURCHASE_STATUS_USER_CANCELLED
: транзакция не удалась, поскольку пользователь отменил процесс покупки. Поскольку пользователь преждевременно вышел из потока, спросите его, хотят ли они повторить транзакцию или вообще выйти из транзакции. -
PURCHASE_STATUS_ERROR
: транзакция не удалась по неизвестной причине. Сообщите пользователю, что транзакция не удалась, и спросите, хочет ли он повторить попытку. -
PURCHASE_STATUS_UNSPECIFIED
: транзакция не удалась по неизвестной причине, что привело к неизвестному статусу. Обработайте этот статус ошибки, сообщив пользователю, что транзакция не удалась, и спросите, хотят ли они повторить попытку.
Вам следует обрабатывать каждый из этих результатов из сцены CompletePurchase
.
- На вкладке «Сцены» выберите только что созданную сцену
CompletePurchase
. - В разделе «Условие» нажмите «+» , чтобы добавить новое условие.
В текстовом поле введите следующий синтаксис условия, чтобы проверить условие успеха:
scene.slots.status == "FINAL" && session.params.CompletePurchase.purchaseStatus == "PURCHASE_STATUS_OK"
Наведите курсор на только что добавленное условие и щелкните стрелку вверх, чтобы поместить его перед
if scene.slots.status == "FINAL"
.Включите запросы на отправку и предоставьте простое приглашение, сообщающее пользователю, что он готов совершить транзакцию:
candidates: - first_simple: variants: - speech: >- Your purchase was successful.
В разделе «Переход» выберите «Завершить разговор» , чтобы завершить разговор.
Повторите вышеуказанные шаги для каждого типа результата покупки, который вы хотите поддержать.
6. Сделайте покупку повторяемой
После успешной транзакции отправьте POST-запрос в API цифровых покупок, чтобы использовать товар, что позволит пользователю приобрести его снова. Отправьте запрос в конечную точку https://actions.googleapis.com/v3/conversations/{sessionId}/entitlement:consume
с идентификатором сеанса, найденным в session.id
.
Ваш запрос POST также должен включать объект токена покупки, связанный с покупкой пользователя, который находится в JSON пользовательского запроса в packageEntitlements.entitlements.inAppDetails.inAppPurchaseData.purchaseToken
.
Следующий код отправляет запрос consume
в API цифровых покупок и сообщает, был ли этот запрос успешным:
request.post(`https://actions.googleapis.com/v3/conversations/${conv.session.id}/entitlement:consume`, {
'auth': {
'bearer': tokens.access_token,
},
'json': true,
'body': {
// This purchase token is in both the purchase event and the user's entitlements
// in their request JSON
"purchaseToken": entitlement.purchaseToken
},
}, (err, httpResponse, body) => {
if (err) {
throw new Error(`API request error: ${err}`);
}
console.log(`${httpResponse.statusCode}: ${httpResponse.statusMessage}`);
console.log(JSON.stringify(httpResponse));
console.log(JSON.stringify(body));
resolve(body);
});
// Make sure the consume request was successful. In production, don't notify the user; handle failures on the back end
return consumePromise.then(body => {
const consumed = Object.keys(body).length === 0;
if (consumed) {
conv.add(`You successfully consumed ${id}`);
} else {
conv.add(`Failed to consume: ${id}`);
}
});
Отражать покупки пользователя
Когда пользователь запрашивает ваше действие, объект user
JSON запроса включает список его покупок. Проверьте эту информацию и измените ответ вашего действия в зависимости от того, за какой контент заплатил пользователь.
В следующем примере кода показан user
объект запроса, который включает в себя packageEntitlements
предыдущих покупок в приложении, которые они совершили для пакета com.digitalgoods.application
:
{
"handler": {
"name": "handler_name"
},
"intent": {
"name": "actions.intent.MAIN",
"params": {},
"query": ""
},
"scene": {
"name": "SceneName",
"slotFillingStatus": "UNSPECIFIED",
"slots": {}
},
"session": {
"id": "example_session_id",
"params": {},
"typeOverrides": []
},
"user": {
"locale": "en-US",
"params": {
"verificationStatus": "VERIFIED"
"packageEntitlements": [
{
"packageName": "com.digitalgoods.application",
"entitlements": [
{
"sku": "non-consumable.1",
"skuType": "SKU_TYPE_IN_APP"
}
{
"sku": "consumable.2",
"skuType": "SKU_TYPE_IN_APP"
}
]
},
{
"packageName": "com.digitalgoods.application",
"entitlements": [
{
"sku": "annual.subscription",
"skuType": "SKU_TYPE_SUBSCRIPTION",
"inAppDetails": {
"inAppPurchaseData": {
"autoRenewing": true,
"purchaseState": 0,
"productId": "annual.subscription",
"purchaseToken": "12345",
"developerPayload": "HSUSER_IW82",
"packageName": "com.digitalgoods.application",
"orderId": "GPA.233.2.32.3300783",
"purchaseTime": 1517385876421
},
"inAppDataSignature": "V+Q=="
}
}
]
}
]
}
},
"homeStructure": {
"params": {}
},
"device": {
"capabilities": [
"SPEECH",
"RICH_RESPONSE",
"LONG_FORM_AUDIO"
]
}
}
Проверьте свой проект
При тестировании вашего проекта вы можете включить режим «песочницы» в консоли «Действия», чтобы протестировать свое действие без взимания платы за способ оплаты. Чтобы включить режим песочницы, выполните следующие действия:
- В консоли «Действия» нажмите «Тест» в области навигации.
- Нажмите «Настройки» .
- Включите опцию «Песочница разработки» .