4. Amazon Alexa에서 Heroku의 Rails로 연결
연재 기사
전후 관계가 있기 때문에 차례로 읽을 수 있으면 알기 쉬워지고 있습니다.
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
소개
지금까지의 기사에서는 「FireTV <=> Alexa <=> Lambda」의 서버리스라고 하는 구성으로 만들어 왔습니다.
평소에는 Ruby on Rails에서 개발하고 있기 때문에 이번에는 Lambda를 Heroku + Ruby on Rails로 전환하는 방법을 시도해 보겠습니다.
구성은 아래와 같은 "FireTV <=> Alexa <=> Heroku (Ruby on Rails)"입니다.
이 구성으로 이전까지 만든 Hello world의 간단한 샘플을 구현합니다.
Amazon Alexa의 Custom Slot Types 설정 - Qiita
Rails 측 라우팅
FireTV에서 받은 음성은 Alexa를 통해 POST
로 전송됩니다.
그래서 라우팅은 아래와 같이 했습니다.
POST /talks talks#create
#config/routes.rbRails.application.routes.draw do
resources :talks, only: %i(create)
end
#app/controllers/tasks_controller.rbclass TalksController < ApplicationController
protect_from_forgery with: :null_session
# POST /talks
def create
Rails.logger.info params
end
end
이제 Alexa에서 보낸 데이터를 받을 수 있습니다.
이 프로그램을 Heroku에 올려 둡시다.
Alexa 측의 Endpoint 변경
그런 다음 Alexa의 Endpoint를 Lambda에서 Heroku로 변경합니다.
구성 항목의 끝점을 HTTPS로 변경합니다.
Default 곳에 Heroku에서 받을 수 있는 URL을 설정합니다.
이번 예라면 https://xxx.herokuapp.com/talks
라고 합니다.
SSL Certificate 항목의 Certificate for DEFAULT Endpoint를 "My development endpoint is a sub-domain ~"으로 변경합니다.
Alexa측의 설정은 이상입니다.
Heroku에서 Alexa의 POST 확인
Alexa에서 POST
되는 파라미터를 Heroku에서 확인해 봅시다.
Alexa로부터의 액세스를 확인할 수 없는 경우에는 SSL Certificate나 Endpoint의 설정이 올바르지 않을 가능성이 있습니다.
#access.log# ログは一部加工しています。
Oct 2 21:04:42 app[web] INFO I, [2017-10-02T12:04:42.871451 #6] INFO -- : Started POST "/talks" for xxx.xxx.xxx.xxx at 2017-10-02 12:04:42 +0000
Oct 2 21:04:42 app[web] INFO I, [2017-10-02T12:04:42.872727 #6] INFO -- : Processing by TalksController#create as JSON
Oct 2 21:04:42 app[web] INFO I, [2017-10-02T12:04:42.872906 #6] INFO -- : Parameters: {"version"=>"1.0"...
Rails에서 응답을 반환
Rails는 alexa-rubykit
라는 gem을 넣어 처리합니다.
damianFC/alexa-rubykit: Amazon Echo Alexa's App Kit Ruby Implementation
gem 'alexa_rubykit'
후에는 컨트롤러에서 받은 요청에서 이름을 꺼내 응답으로 반환하면 완성됩니다.
FireTV를 향해 말을 걸면 올바른 음성이 돌아올 것입니다.
자신 "tell Hello world hello my name is Tarou."
FireTV 「Hello world! Tarou.」
#app/controllers/talks_controller.rbclass TalksController < ApplicationController
protect_from_forgery with: :null_session
# POST /talks
def create
request = AlexaRubykit::build_request(params)
response = AlexaRubykit::Response.new
response.add_speech("Hello world! #{request.slots[:firstName][:value]}")
render json: response.build_response
end
end
요약
이것으로 기존의 서비스가 가동하고 있는 경우에서도 Alexa와 제휴할 수 있게 되었기 때문에 보다 유연한 개발을 할 수 있다.
Let's enjoy Alexa.
Reference
이 문제에 관하여(4. Amazon Alexa에서 Heroku의 Rails로 연결), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tochi/items/183658fabd1416028065
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
POST /talks talks#create
Rails.application.routes.draw do
resources :talks, only: %i(create)
end
class TalksController < ApplicationController
protect_from_forgery with: :null_session
# POST /talks
def create
Rails.logger.info params
end
end
# ログは一部加工しています。
Oct 2 21:04:42 app[web] INFO I, [2017-10-02T12:04:42.871451 #6] INFO -- : Started POST "/talks" for xxx.xxx.xxx.xxx at 2017-10-02 12:04:42 +0000
Oct 2 21:04:42 app[web] INFO I, [2017-10-02T12:04:42.872727 #6] INFO -- : Processing by TalksController#create as JSON
Oct 2 21:04:42 app[web] INFO I, [2017-10-02T12:04:42.872906 #6] INFO -- : Parameters: {"version"=>"1.0"...
gem 'alexa_rubykit'
class TalksController < ApplicationController
protect_from_forgery with: :null_session
# POST /talks
def create
request = AlexaRubykit::build_request(params)
response = AlexaRubykit::Response.new
response.add_speech("Hello world! #{request.slots[:firstName][:value]}")
render json: response.build_response
end
end
Reference
이 문제에 관하여(4. Amazon Alexa에서 Heroku의 Rails로 연결), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tochi/items/183658fabd1416028065텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)