Как получить время, прошедшее от Алекса до ответа пользователя?

Можно ли получить время, необходимое пользователям для ответа на команду из 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();
Другие вопросы по тегам