alexa-app를 사용하여 alexa 사용자 지정 기술 만들기 (보충)

소개



alexa-app에 대한 기사는 Express + alexa-app에서 lambda를 사용하지 않고 Alexa Skill을 만듭니다. 쪽이 상세하기 때문에, 만지지 않은 곳을 보충하는 형태로 써 보려고 생각합니다.

환경


  • NodeJS 10.7
  • express 4.16.0
  • alexa-app 4.2.3
  • heroku

  • 인텐트란?



    인텐트는 대화의 분류라고 생각합니다.

    예로서 위와 같이
  • 타율의 num 위치를 지정하여 읽는 "average"
  • 타율의 성적을 모두 읽는 「averageAll」
  • 타점의 성적을 전부 읽는 「rbiAll」
  • 방어율의 성적을 전부 읽는 「eraAll」

  • 준비합니다.

    alexa-app에서 구현



    alexa.js
    app.intent('average', { utterances: UTTERANCES.request.average }, averageResponse);
    app.intent('averageAll', { utterances: UTTERANCES.request.average }, averageAllResponse);
    app.intent('rbiAll', { utterances: UTTERANCES.request.average }, rbiAllResponse);
    app.intent('eraAll', { utterances: UTTERANCES.request.average }, eraAllResponse);
    

    app.intent()
  • 첫 번째 인수 : developer 콘솔에서 정의한 의도를 설정합니다.
  • 두 번째 인수: 스키마를 정의하는 것 같습니다. (아직 조사가 충분하지 않음)
  • 세 번째 인수: 실행할 함수를 지정합니다.

  • 의도 설정 예



    '샘플 발화'에서 예상되는 호출을 설정합니다.

    예 : 사용자가 "(웨이크 워드), 타율 전부"라고 말하면 이전 averageAllResponse이 실행됩니다.

    의도로 값 받기



    개발자 콘솔에서 설정



    타율의 num 위치를 지정하여 성적을 읽는 처리
    num이라는 수치를 유저의 대화로부터 취득하기 위해서는 슬롯이라고 하는 설정이 필요합니다.

    슬롯 타입이 「AMAZON.NUMBER」인 num이라는 슬롯을 만들면, 샘플 발화안에 {num} 라고 기술할 수 있게 됩니다.
    이와 같이 설정하면, 유저가 「타율의 8위는?」라고 질문하면(,) average 인텐트에 해당하는 발화가 있었던 것과 8이라고 하는 수치를 프로그램이 취득할 수 있습니다.

    애플리케이션 측 구현



    average 인텐트 시에 averageResponse가 발화합니다. 슬롯 값은 req.slots[設定したキーの名前].value에서 얻을 수 있습니다. num 라고 정의했습니다.

    app.js
    const averageResponse = (req, res) => {
      var num = req.slots['num'].value
      if(num <= 10){
        res.say(num+"位<break time='100ms'/>"+json['averageTop10'][num - 1]['name']+':'+json['averageTop10'][num - 1]['average']).shouldEndSession(false)
      }else{
        res.say("ごめんなさい。<break time='100ms'/>"+num+"は指定できません。<break time='100ms'/>10以下の順位を指定してください").shouldEndSession(false);
      }
    }
    

    SSML



    음, res.say()에서 익숙하지 않은 HTML 태그와 같은 것이 나왔습니다. 이것은 SSML이라는 음성 독서를 강조하는 언어입니다. HTML처럼 태그로 문자열을 둘러싸거나 잠시 멈추고 싶은 곳에 태그를 넣습니다.

    알렉사 커스텀 스킬 초보자가 일부 빠진 점



    heroku에 배포하면 오류 'missing certificate url'



    issue에 올랐습니다.

    app.js
    var app = express();
    //----
    //この間でapp.use()などを使ってはいけない
    //----
    alexa.express({
      expressApp: app,
      endpoint: '/alexa',
      checkCert: true
    });
    

    alexa.express()에는 express의 인스턴스를 그대로 넘겨야 하는 것 같습니다.

    실제 기계 테스트에서 기술이 나오지 않습니다.



    개발한 Alexa Skill이 일본어판에 나오지 않는 경우
    Alexa 개발자 계정의 빠짐

    테스트 콘솔에서 두 자리 숫자를 얻을 수 없습니까?



    이것은 정보가 나오지 않았지만, 어플리케이션 측에서 10 이하의 수치는 허용하고 있지만, 테스트 콘솔을 사용하면 10 이상의 수치를 취득할 수 없다고 하는 문제가 있었습니다.

    JSON 입력을 보면 slots.num.value라는 속성이 없음을 알 수 있습니다. 실제 기계에서는 제대로 인식되었습니다.

    좋은 웹페이지 즐겨찾기