Как получить время, прошедшее от Алекса до ответа пользователя?
Можно ли получить время, необходимое пользователям для ответа на команду из Alexa, используя alexa-sdk
? Чтобы сделать это более наглядным, я пытаюсь измерить следующее:
User says: "Alexa open my app"
Alexa says: "Welcome to my app, say next to go to the next section"
-- A few seconds pass here, this is what I need to know --
User says: "Next"
Я ничего не мог найти в документах, я обычно пытался использовать что-то вроде process.hrtime
чтобы запустить таймер до и после ответа, мой обработчик выглядит примерно так:
let timer;
const StartIntentHandler = {
canHandle(handlerInput) {
return (
handlerInput.requestEnvelope.request.type === 'IntentRequest' &&
handlerInput.requestEnvelope.request.intent.name === 'StartIntent'
);
},
handle(handlerInput) {
timer = process.hrtime();
const speechText = 'Welcome to my app, say next to go to the next section';
return handlerInput.responseBuilder
.speak(speechText)
.reprompt(speechText)
.getResponse();
}
};
const NextIntentHandler = {
canHandle(handlerInput) {
return (
handlerInput.requestEnvelope.request.type === 'IntentRequest' &&
handlerInput.requestEnvelope.request.intent.name ===
'NextIntent'
);
},
handle(handlerInput) {
const diff = process.hrtime(timer);
const timeInNanoseconds = diff[0] * 1e9 + diff[1];
return handlerInput.responseBuilder
.speak(`${timeInNanoseconds} nanoseconds`)
.getResponse();
}
};
Однако он начинает отсчитываться непосредственно перед тем, как Alexa запускает команду, поэтому время, которое я получаю, - это время, которое требуется Алексеи, чтобы произнести команду + задержка ответа пользователя.
Прямо сейчас я измерил время отклика Алексы с помощью секундомера и вычел это из общего времени, но оно не идеально.
2 ответа
Информация о времени, когда Alexa перестала произносить команду, когда пользователь начинает отвечать, является личной информацией пользователя и не предоставляется разработчикам.
Примечание. Ваш текущий метод использования секундомера и вычитания не дает правильной меры времени, потому что вы не учитываете время, которое пользовательское устройство тратит на отправку информации в облако AVS (голосовой сервис Alexa), и время, которое AVS тратит на призовите ваше умение лямбда.
Просто вы можете добавить тег <break time = '300ms'/> SSML
Пример:-
const speakOutput = "Hello, here is your test <break time = '300ms'/>" ;
handlerInput.responseBuilder
.speak(speakOutput)
.getResponse();