Я хочу реализовать капсулу, которая выполняет вычисления, если пользователь предоставляет полный ввод, необходимый для расчета, или запрашивает у пользователя необходимые данные, если пользователь не предоставляет полный ввод с самого первого запроса.Все работает, если пользователь предоставляет полный запрос.Если пользователь не предоставляет полный запрос, но Биксби требуется больше информации, я сталкиваюсь с каким-то странным поведением, когда Расчет вызывается более одного раза, а Биксби берет необходимую информацию для вычисления из результата другого вычисления, похоже,на графике отладки.
Чтобы упростить демонстрацию моей проблемы, я расширил капсулу с образцом кости капсула-образец-кости и добавил numSides
и numDice
к RollResultConcept
,так что я могу получить доступ к количеству кубиков и сторон в результате.RollResult.model.bxb теперь выглядит следующим образом:
structure (RollResultConcept) {
description (The result object produced by the RollDice action.)
property (sum) {
type (SumConcept)
min (Required)
max (One)
}
property (roll) {
description (The list of results for each dice roll.)
type (RollConcept)
min (Required)
max (Many)
}
// The two properties below have been added
property (numSides) {
description (The number of sides that the dice of this roll have.)
type (NumSidesConcept)
min (Required)
max (One)
}
property (numDice) {
description (The number of dice in this roll.)
type (NumDiceConcept)
min (Required)
max (One)
}
}
Я также добавил single-line
s в RollResult.view.bxb
, так что количество сторон и кубиков показывается пользователю после броска.RollResult.view.bxb:
result-view {
match {
RollResultConcept (rollResult)
}
render {
layout {
section {
content {
single-line {
text {
style (Detail_M)
value ("Sum: #{value(rollResult.sum)}")
}
}
single-line {
text {
style (Detail_M)
value ("Rolls: #{value(rollResult.roll)}")
}
}
// The two single-line below have been added
single-line {
text {
style (Detail_M)
value ("Dice: #{value(rollResult.numDice)}")
}
}
single-line {
text {
style (Detail_M)
value ("Sides: #{value(rollResult.numSides)}")
}
}
}
}
}
}
}
Редактировать: я забыл добавить код, который я изменил в RollDice.js
, см. Ниже: RollDice.js
// RollDice
// Rolls a dice given a number of sides and a number of dice
// Main entry point
module.exports.function = function rollDice(numDice, numSides) {
var sum = 0;
var result = [];
for (var i = 0; i < numDice; i++) {
var roll = Math.ceil(Math.random() * numSides);
result.push(roll);
sum += roll;
}
// RollResult
return {
sum: sum, // required Sum
roll: result, // required list Roll
numSides: numSides, // required for numSides
numDice: numDice // required for numDice
}
}
КонецEdit
В симуляторе я теперь запускаю следующий запрос
intent {
goal: RollDice
value: NumDiceConcept(2)
}
, в котором отсутствует требуемый NumSidesConcept
.
В режиме отладки показан следующий график:с NumSidesConcept
отсутствует (как и ожидалось).
Теперь я запускаю следующий запрос в симуляторе
intent {
goal: RollDice
value: NumDiceConcept(2)
value: NumSidesConcept(6)
}
, что приводит к следующему графику в представлении отладки:
и мне кажется, что расчет делается дважды, чтобы добраться до результата.Я уже пытался дать feature { transient }
моделям, но это ничего не изменило.Кто-нибудь может сказать мне, что здесь происходит?Разрешено ли мне использовать одни и те же примитивные модели в выходных данных, потому что они будут использоваться Биксби при попытке выполнить действие?