Alexa가 240초 재생 가능하게 되었기 때문에 약 4분간 고백을 계속하는 스킬을 만들었다

미안해.

이 기사는
「스메고 밥의 VUI・스마트 스피커 Advent Calendar 2018」
7 일째 기사입니다.

Alexa의 오디오 파일 재생 시간이 90초에서 240초로 연장됨



이 기사를 쓰는 오늘, 즉 12월 6일
Alexa Dev Summit Tokyo의 Alexa 스킬의 퀴즈로 오디오 재생이 4분까지 대응할 수 있게 된 취지가 출제되었습니다.

■ Alexa Dev Summit Tokyo의 Alexa 스킬
htps //w w. 아마존. 이. jp/아마존-아아아-v-스푼 t-우/dp/B07KGH1VJ1/

또한 smartio 님의 트윗에서도 비슷한 보고가 있었습니다.

mp3의 SSML에서의 재생 시간 제한은 90초 이내였을 것인데… 어느새, 이렇게 되었다! ? htps // t. 코 / V 46XhfBWD — smartio (스마트 스피커 재미) (@smartiolife) 2018년 12월 5일


조속히, 약 240초 고백되어 보자



라는 것이므로, 조속히 240초, 즉 4분간 뭔가를 흘리려고 생각해, 생각한 결과, 역시? 가지고 있는 음성 파일로서 Alexa 스킬 히로인의 고백 중의 고백 대사를 연결해 3분 58초로 했습니다.



실기 테스트대로 했으므로 녹화·공개해 보았습니다.
덧붙여 아무것도 생각하지 않고 움직이는 것만을 목적으로 했기 때문에, 유키 코토바 짱의 표시가 늦어지고 있습니다.

소스 코드



별로 아무것도 하지 않기 때문에, 지금까지 대로입니다.

우선, LaunchRequest만 작성해, 실기로 움직일지만 확인했습니다.

'use strict';

const Alexa = require('ask-sdk');


//20種類の告白セリフを結合したファイル
const kotoha_20 = '<audio src=\"https://s3-XXXXXXXXXXXXXXXXXX.mp3\" />';


//画像
const DisplayImg1 = {
      title: '結城琴葉',
      url: 'https://s3-ap-XXXXXXXXXXXXXXXXXXXXX.png'
    };

const DisplayImg2 = {
      title: '結城琴葉',
      url: 'https://s3-ap-XXXXXXXXXXXXXXXXXXXXX.png'
};

const LaunchRequestHandler = {
  canHandle(handlerInput) {
    return handlerInput.requestEnvelope.request.type === 'LaunchRequest';
  },
  async handle(handlerInput) {

    // Template 6
    if (supportsDisplay(handlerInput)){
      const myImage1 = new Alexa.ImageHelper()
        .addImageInstance(DisplayImg1.url)
        .getImage();

      const myImage2 = new Alexa.ImageHelper()
        .addImageInstance(DisplayImg2.url)
        .getImage();

      const primaryText = new Alexa.RichTextContentHelper()
        .withPrimaryText('')
        .getTextContent();

        handlerInput.responseBuilder.addRenderTemplateDirective({
        type: 'BodyTemplate6',
        token: 'string',
        backButton: 'HIDDEN',
        backgroundImage: myImage2,
        image: myImage1,
        title: "",
        textContent: primaryText
      });
    }

    ///////////////////////////////////////////
    var hoge = 'さぁ、付き合いますか!?';
    ///////////////////////////////////////////


    let speechText =  '<break time="0.7s"/>' + kotoha_20;

    return handlerInput.responseBuilder
      .speak('<speak>' + kotoha_20 + '</speak>')
      .reprompt('<speak>' + kotoha_20 + '</speak>')
      .withShouldEndSession(false) //本来きちんと対応する
      .getResponse();
  }
};


// returns true if the skill is running on a device with a display (show|spot)
function supportsDisplay(handlerInput) {
  var hasDisplay =
    handlerInput.requestEnvelope.context &&
    handlerInput.requestEnvelope.context.System &&
    handlerInput.requestEnvelope.context.System.device &&
    handlerInput.requestEnvelope.context.System.device.supportedInterfaces &&
    handlerInput.requestEnvelope.context.System.device.supportedInterfaces.Display;

  console.log("Supported Interfaces are" + JSON.stringify(handlerInput.requestEnvelope.context.System.device.supportedInterfaces));
  return hasDisplay;
}


// LaunchRequestHnadlerより後に書く必要あり
exports.handler = Alexa.SkillBuilders.standard()
  .addRequestHandlers(LaunchRequestHandler)
  .lambda();



이것으로 어떻게 될까



나 개인이라면 더 캐릭터의 표현이 쉬워지고, 팟캐스트에 가까운 것도 할 수 있게 됩니다.

90초는 상당히 엄격했기 때문에, 이번 대응은 기쁜 한입니다.

하지만 4분간 고백받고 계속 끝난 후 8초간 응답하지 않으면 reprompt에서 다시 4분간 고백되는 움직임을 위의 코드라고 합니다.

어쨌든, 이 길어졌다고 해서, 어쨌든 긴 것은 유저로부터 하면 우울하기 때문에, 그것이야말로 VUI 디자인의 이야기가 될까라고 생각합니다.
스킬의 특성에 따라 적절히 이용해 갑시다.

이상

좋은 웹페이지 즐겨찾기