2. Amazon Alexa에서 음성에서 인수 수신

연재 기사



전후 관계가 있기 때문에 차례로 읽을 수 있으면 알기 쉬워지고 있습니다.

1. Amazon Alexa와 Fire TV에서 Hello World를 사용해보십시오 - Qiita
2. Amazon Alexa에서 음성에서 인수 받기 - Qiita
3. Amazon Alexa의 Custom Slot Types 설정 - Qiita
4. Amazon Alexa에서 Heroku의 Rails로 연결 - Qiita
5. Amazon Alexa에서 대화 계속하기 (세션 인계) - Qiita
6. Amazon Alexa 기술을 일본어로 만들기 - Qiita
7. 자작한 일본어의 Alexa Skill을 Echo dot로 움직이기 - Qiita

시작하기



지난번에는 Fire TV > Alexa > Lambda에서 Hello World를 만들었습니다.

Amazon Alexa와 Fire TV에서 Hello World를 사용해보십시오 - Qiita

이전 Hello World는 정해진 음성에 대해 정해진 대답을 돌려주는 단순한 것이었습니다.
이번은 조금 발전시켜 말한 음성내의 말을 인수로서 받아, 그 받은 인수에 의해 동적으로 말하는 말을 바꾸어 보겠습니다.

입력 오디오에 인수 설정



입력 오디오 정의는 Amazon 개발자 포털의 Alexa에서 Utterances를 설정합니다.

Amazon 개발자 포털
HelloWorldIntent hello my name is {firstName}
HelloWorldIntent say hello my name is {firstName}
HelloWorldIntent say hello world my name is {firstName}
{firstName} 는 인수 설정입니다.
예를 들어 "Hello my name is Bob"이라고 말하면 HelloWorldIntent 가 호출되고 그 때 firstName 라는 인수 이름으로 "Bob"이라는 단어가 전달됩니다.

Intent Schema 정의



그런 다음 Lambda에 데이터를 전달하는 schema를 정의합니다.
{
  "intents": [
    {
      "intent": "HelloWorldIntent",
      "slots": [
        {
          "name": "firstName",
          "type": "AMAZON.US_FIRST_NAME"
        }
      ]
    }
  ]
}
slots 의 내용이 인수의 정의입니다.name 는 인수명으로 이번은 firstName 입니다.type 는 Amazon 측에서 정의된 인수 유형과 같습니다.
형에는 그 밖에도 많은 것이 존재하고 있어 수시로 추가되고 있는 것 같습니다.

슬롯 유형 참조 - Amazon Apps & Services Developer Portal

Slot type의 무엇이 편리한가 하면, 예를 들면 AMAZON.DATE 의 형태로 정의하면 「today」라고 하는 음성 입력에 대해 2017-09-09 와 같이 오늘의 일자로 Alexa가 리퀘스트를 던져 줍니다.
다양한 음성 입력의 패턴을 Alexa가 흡수해 통일한 형식으로 변환해 주기 때문에, 수많은 음성 입력의 패턴을 심플하게 할 수 있을 것 같습니다.

이번은 AMAZON.US_FIRST_NAME 라고 하는 형태로 하고 있습니다. 이것은 US에서 자주 사용되는 이름을 망라하고 있어 "steve"라든지 "john"라든지를 받을 수 있습니다.
물론 이 슬롯 타입은 스스로 자신의 타입을 정의할 수도 있습니다.

Alexa 설정



위의 Utterances와 Intent Schema의 설정을 한 Alexa의 설정은 아래와 같습니다.



이것으로 Alexa 설정이 완료됩니다.
그런 다음 Lambda 프로그램을 수정합니다.

Lambda에서 first name을 받고 말합니다.



이 프로그램은 이전 Hello world를 유용합니다.

Amazon Alexa와 Fire TV에서 Hello World를 사용해보십시오 - Qiita

index.js
'use strict';
var Alexa = require("alexa-sdk");

exports.handler = function(event, context, callback) {
    var alexa = Alexa.handler(event, context);
    alexa.registerHandlers(handlers);
    alexa.execute();
};

var handlers = {
    'LaunchRequest': function () {
        this.emit('SayHello');
    },
    'HelloWorldIntent': function () {
        this.emit('SayHello')
    },
    'SayHello': function () {
        this.emit(':tell', 'Hello World!' + this.event.request.intent.slots.firstName.value);
    }
};


이번 변경한 것은 마지막 쪽에 있는 this.emit(':tell', 'Hello World!' + this.event.request.intent.slots.firstName.value); 뿐입니다.this.event.request.intent.slots.firstName.value 에서 Alexa에서 건너온 firstName 의 텍스트를 받고, 「Hello world!」에 연결해 이름을 말하고 있습니다.

결과



나 「Tell hello world hello my name is Bob.」
Alexa 「Hello world! Bob」

Amazon Alexa에서 음성에서 인수 받기 htps // t. 코 / lg 베어 c6sR @YouTube


Let's enjoy Alexa.

참고

좋은 웹페이지 즐겨찾기