amazon echo로 회사 접수 시스템을 만들어 보았습니다.

요전날 h-takauma씨의 기사를 보고, 자신도 alexa로 회사의 접수 시스템을 만들어 보았습니다
Google Home에서 접수 시스템을 만들어 보았습니다.
또, JavaScript나 amazon lambda 만진 경험이 전혀 없기 때문에, 실수등 있으면 꼭 가르쳐 주세요!

구성 흐름





완성 동영상



amazon echo로 접수 시스템을 만들어 보았다 피 c. 라고 r. 이 m/q0c6rbK개K


필요한 것



  • amazon developer 계정
  • amazon Echo
  • slack 계정 (채널 권한이 있음)


그럼 만들어 보자!



alexa skill의 간단한 동작과 개발 절차는 여기를 참조했습니다.

2017년 12월 11일



대화 모델의 Intents 설정



htps : // 기주 b. 코 m / 아아 / s ㅇ l - mp ぇ - 그래서 js t ゔ ぃ 아 / b ぉ b / 쟈-JP / 응 st 루 치 온 s / 1 - ぉ 이세 우세 r r 흠. md



아래의 경우에 대응하기 위한 인텐트를 추가했습니다.

- 약속이 있는 분

- 인터뷰에서 온 분(학생)

- 배송업체

- 방문객 수



슬랙 측의 일



채널에 Incoming WebHooks 만들기





WorkSpace 멤버의 ID를 가져옵니다.




<@userID> 에서 회원에게 멘션을 날릴 수 있습니다.



htps : // 아피. scck. 코 m / Change g / 2017-09-te-o-o-no-t-use r name s

여기서 채널의 멤버 ID를 얻을 수 있습니다.

htps : // 아피. scck. 코 m/메조 ds/우세 rs.ぃ st / st



아마존 람다 측



name.json 만들기



담당자의 이름, 전체 이름 모두 대응할 수 있도록, 모두 준비합니다.




name.json

[
    {  "name" : "AA",  "full_name" : "AABB",  "slack_name" : "aabb"  },
   {  "name" : "CC",  "full_name" : "CCDD",  "slack_name" : "ccdd"  },
   and more...
]



index.js 만들기



//require
var Alexa = require('alexa-sdk');
var slackjson = require('./slack.json');
var namejson = require('./name.json');
var rp = require('request-promise');


기본 프레임은 'skill-sample-nodejs-trivia'를 참조하면 된다.



학생 시간의 예



var firstHandlers = Alexa.CreateStateHandler(STATUS.FIRSTMODE, {
    "Unhandled": function(){
        ...
    },

    "GetAnswerIntent": function (){
        ....//約束のある方
    },

    "GetAnswerFromStudentIntent": function (){
        studentRequest.call(this, false);

        rp(options).then((response) => {
            this.emit(':tell', '担当者に伝えました、少々お待ち下さい');
        }, (error) => {
            this.emit(':tell', '通信失敗しました,もう一度お願いします');
        });
    },

    "GetAnswerFromDeliveryIntent": function (){
        ....//配送業者
    }, 
    "AMAZON.StopIntent": function(){
      this.emit("stop");
    }
});

function studentRequest(frist) {
    var to_user_message = "<@slackid> 面接の学生がきました。"
    options = {
        method: 'POST',
        uri: slack_webhook,//先のslack_webhook
        body: {
            text: to_user_message
        },
        json: true
    }; 
}


slack에 post하는 내용은, Incoming WebHooks를 설정할 때의 Setup Instructions를 참조하면 좋다



위의 작업이 끝나면 zip 파일을 만들고 lambda에 업로드하여 테스트 clear라면 완성입니다!





엄청 빠진 곳



첫 번째 게시물을 작성하는 방법:



    "GetAnswerFromStudentIntent": function () {
        studentRequest.call(this, false);
        rp(options); //ここでpost
        this.emit(':tell', '担当者に伝えました、少々お待ち下さい');
    },


이 글을 쓰면 post 응답이 반환되기 전에 this.emit()를 실행하고 심각한 때에는 이전에 시작한 스킬의 응답을 emit하기도 했습니다.

검색한 결과 다음과 같은 문제를 발견했습니다.



아무래도 비동기 처리를 하는 것이 원인인 것 같습니다.



요약



JavaScript와 Lambda를 처음 만졌는데, 생각보다 재미있었습니다.

다음 목표는 slack message button을 추가하여 담당자가 대응한 것을 확인할 수 있는 느낌으로 하고 싶습니다.

API Gateway로 만들 수 있는 것 같기 때문에, 조사해 보겠습니다.


좋은 웹페이지 즐겨찾기