0. Alexaã¹ãã«éçºã®æŠèŠ
Amazon補ã®ã¹ããŒãã¹ããŒã«ãŒã®AlexaããŠãŒã¶ãšã®å¯Ÿè©±ã§è¡ããè¡åã"Alexaã¹ãã«"ãšãããŸãã
äŸãã°ãŠãŒã¶ãã¹ããŒã«ãŒã«åãã£ãŠ"ææ¥ã®å€©æ°ãæããŠ"ãšãããš,"ææ¥ã®ââã®å€©æ°ã¯ââã§ã"ãšè¿ããããªã¹ãã«ããããŸãã
Alexaã¹ãã«ã¯Amazon以å€ã«ããŠãŒã¶ãç¡æã§éçºããããšãã§ããŸãã
ãã®èšäºã¯Alexaã¹ãã«éçºãããã°ã©ãã³ã°èšèªã®Pythonãšã¯ã©ãŠããµãŒãã¹ã®1ã€ã®AWS Lambdaã䜿ã£ãŠéçºãããã¥ãŒããªã¢ã«ã§ãã
Pythonã®ç¥èã3cmãããããã°ç°¡åãªãã®ã§ããã°éçºã§ããŸãã ð°
以äžã®1ã€ç®ã®ãªã³ã¯ããPythonããŠã§ãç°å¢ã§å®è¡ã§ããŸãããŸã2ã€ç®ã®ãªã³ã¯ããPythonã®å
¬åŒãã¥ãŒããªã¢ã«ãèŠãããšãã§ããŸãã(3å²ãããç解ã§ããŠãã°å€§äžå€«ãªã¯ã)
- (Python3) | ãã©ãŠã¶ã§ããã°ã©ãã³ã°ã»å®è¡ãã§ããããªã³ã©ã€ã³å®è¡ç°å¢ã| paiza.IO
- Python ãã¥ãŒããªã¢ã« â Python 3.6.5 ããã¥ã¡ã³ã
AmazonãåºããŠããAlexaã¹ãã«éçºãã¬ãŒãã³ã°ããŒãžããããŸãããããããããã£ãããšèª¬æããŠãããŸãããŸãã»ããšãã«ç°¡åãªãã®ã§ããã°IFTTTã䜿ã£ãŠããã°ã©ã ãæžããªããŠãéçºãå¯èœã§ãã
0.0. æŠèŠãã€ãã
Alexa ã®ã¹ãã«ã§ãã£ãããªã«ãã§ããã®æŠèŠãã€ãããŸãã
éäž"ã€ã³ãã³ã"çããããããªãåèªãåºãŠããŸãã,ãšããããæµãèŠããããšããå§ãããŸãã
ãŸã,æéããªã人ã¯åéã§èŠãã®ããå§ãããŸãã
- Alexa ã¹ãã«éçºãã¬ãŒãã³ã°ã·ãªãŒãºïŒç¬¬ 1 åïŒ
- Alexa ã¹ãã«éçºãã¬ãŒãã³ã°ã·ãªãŒãºïŒç¬¬ 2 åïŒ
- Alexa ã¹ãã«éçºãã¬ãŒãã³ã°ã·ãªãŒãºïŒç¬¬ 3 åïŒ
- Alexa ã¹ãã«éçºãã¬ãŒãã³ã°ã·ãªãŒãºïŒç¬¬ 4 åïŒ
- Alexa ã¹ãã«éçºãã¬ãŒãã³ã°ã·ãªãŒãºïŒç¬¬ 5 åïŒ
- Alexa ã¹ãã«éçºãã¬ãŒãã³ã°ã·ãªãŒãºïŒç¬¬ 6 åïŒ
å šéšãã¿ããšãããšãããããªããšãã§ããããšãããããšæããŸãã
以äžãAlexaã®éçºã®ããã®"Alexa Skills Kit"ã®å
¬åŒãªãã¡ã¬ã³ã¹ã§ãã
Alexa Skills Kitã«ããã¹ãã«ã®äœæ | ASK
0.1. Alexaã¹ãã«éçºã®ããå¿ èŠãªãã®
Alexaã¹ãã«ã¯ãŠãŒã¶ãã話ããããããã以äžã®ãããªæµãã§è¿çãããŸãã
- ãŠãŒã¶ãAlexaã«è©±ãããã
- 話ããããããé³å£°ããŒã¿ãAlexaãµãŒãã«éã
- AlexaãµãŒãå ã§é³å£°ããŒã¿ã解éããŠããŠãŒã¶ãã©ã®ãããªæå³ãäŒãããã£ãã®ã解éãããã®æå³ã®å 容ãè¡šãããã¹ãããŒã¿(json)ãéçºè ãæå®ãããµãŒã(ãã®å Žåã§ã¯Lambda)ã«éã
- ãµãŒãã§ã¯åãåã£ãããŒã¿ããAlexaã®è¿çå 容ãäœæããããã¹ãããŒã¿(json)ãAlexaãµãŒãã«æ»ã
- AlexaãµãŒãã¯è¿çå 容ãèªã¿åããããã¹ãããŒã¿ãAlexaãçºèšããé³å£°ããŒã¿ãçæããçæããé³å£°ããŒã¿ãAlexaã«æ»ã
- Alexaã¯åãåã£ãé³å£°ããŒã¿ãåçãã
ãã®ãããªèæ¯ããã¹ãã«éçºè
ã¯AlexaãµãŒãã®èšå®ãšAlexaãµãŒããšéä¿¡ãããµãŒãã®èšå®ãããå¿
èŠããããŸãã
ãã®ãã以äžã®ãã®ãå¿
èŠã«ãªããŸãã
- Amazon Developerã¢ã«ãŠã³ã (AlexaãµãŒãã®èšå®ã®ããå¿ èŠ)
- AWSã¢ã«ãŠã³ã (Lambda(AlexaãµãŒããšéä¿¡ãããµãŒã)ã䜿ããã)
Amazon Developerã¢ã«ãŠã³ãã®äœæ
å¿
èŠãªå人æ
å ±ãèšå
¥ããå¿
èŠããããŸãã
Amazon Developerã«ã¯ã¯ã¬ãžããã«ãŒãå¿
èŠãããŸããã
以äžã®ããŒãžããäœæã§ããŸãã
Amazon éçºè
ããŒã¿ã«
以äžã®ç¹ã泚æããŠã¢ã«ãŠã³ããäœæããªããšãéçºäžã®ã¹ãã«ãè©Šããªãåé¡ããããŸãã
Alexa éçºè
ã¢ã«ãŠã³ãäœææã®ãããã©ãã : Alexa Blogs
AWSã¢ã«ãŠã³ãäœæ
以äžã®Amazonã®å
¬åŒã®ãªãã¡ã¬ã³ã¹ããã©ã®ããã«äœæããã°ãããããããŸãã
AWS ã¢ã«ãŠã³ãäœæã®æµã | AWS
â»AWS Lambdaã®é¢æ°ãäœæã§ããæš©éãããã¢ã«ãŠã³ããããã°ããã§ãã
1. ã¹ãã«éçºãè¡ã
ä»åã¯Alexaã¹ãã«éçºã®ãã¥ãŒããªã¢ã«ãšããŠå¥œããªåç©ãèŠããããã¹ãã«ãäœæããŸãã
éåžžã«ç°¡åã§é¢çœã¿ã®ãªãã¹ãã«ã§ãããåºæ¬çãªã¹ãã«éçºãåŠã¹ãŸãã
ã¹ãã«éçºã§ã¯éçºè ã¯ä»¥äžã®éšåã®èšå®ã»ã³ãŒãã£ã³ã°çãè¡ããŸãã
ããããšã¯2ç¹ãããŸãã
ããããš | äœæ¥ããå Žæ | å¿ èŠãªãã® |
---|---|---|
察話ã¢ãã«ã®äœæ | Alexaã®ãŠã§ãã³ã³ãœãŒã« | Alexa Developerã¢ã«ãŠã³ã |
JSONãµãŒãã®äœæ | Lambdaã®èšå®ããŒãžç | Lambdaã䜿ããAWSã¢ã«ãŠã³ã |
ã ãããå šäœåãèŠããŠããã§ãããã?
1.0. ã¹ãã«ã®å¯Ÿè©±ã¢ãã«ãäœæ
ã¹ãã«ãå®è£ ããã«ã¯çŸåšã®ããŒãžãã察話ã¢ãã«ãäœæããå¿ èŠããããŸãã
察話ã¢ãã«ã®äœæã«ã¯Alexaã«è©±ããããå 容ãå®çŸ©ããŠãã©ã®ããã«èšããããã©ã®éšåãã©ããšã£ãŠããããèšå®ããŸãã
Alexaã¹ãã«éçºãã¬ãŒãã³ã°ã·ãªãŒãº 第2å 察話ã¢ãã«ãšAlexa SDK : Alexa Blogsãã
ä»åã®ã¹ãã«ã§ã¯ä»¥äžã®ãããªãŠãŒã¶ãšã®å¯Ÿè©±ãç®æããŸãã
ãAlexa, åç©èŠãããããèµ·åããŠã
ãããªãã®å¥œããªåç©ã¯ãªãã§ããã
ãç§ã®å¥œããªåç©ã¯ããã§ãã
ãèŠããŸããã
ãç§ã®å¥œããªåç©ã¯ã
ãããªãã®å¥œããªåç©ã¯ããã§ãã
ãç§ã®å¥œããªåç©ã¯ãã¬ã§ãã
ãèŠããŸããã
ãç§ã®å¥œããªåç©ã¯ã
ãããªãã®å¥œããªåç©ã¯ãã¬ã§ãã
ãçµäºã
ãã®ãããªæµããèããå Žåã
å
ã»ã©ã®å³ãããåç©èŠãããããããåŒã³åºãåãã§ããããšã¯ããããŸãã
ãŸãããããããããã¬ããã¹ãããã«å
¥ãããšãèããããŸãã
ã¹ãããã¯èŠã¯å€æ°ã¿ãããªãã€ã§ãã
ãããããããã¬ããå
¥ãã¹ããããAnimalã¹ããããšããŸãã(åç©ãå
¥ãå€æ°ã¿ãããªãã®ã§ã)
ãããšãŠãŒã¶ã®çºè©±ã以äžã®ããã«ãªãããšãæšæž¬ã§ããŸãã
ãã®ãããªãŠãŒã¶ã®çºè©±ã«ã¯ããããæå³(ã€ã³ãã³ã)ãããããšãããããŸãã
ãã®ããã以äžã®ãããããã€ã³ãã³ããšåŒã³ãŸãã
- ãç§ã®å¥œããªåç©ã¯{Animal}ã§ããâ奜ããªåç©ãèŠããããæå³
- ãç§ã®å¥œããªåç©ã¯ãâèŠããããåç©ãèãæå³
ããã§ãŠãŒã¶ã®çºè©±ã¯å€å°æºããããšãèãããš2ã€ã®æç« ã¯ä»¥äžã®ãããªçºè©±ãã¿ãŒã³ãèããããŸãã
ç§ã®å¥œããªåç©ã¯{Animal}ã§ãã®çºè©±ãã¿ãŒã³
- ãç§ã®å¥œããªåç©ã¯ {Animal} ã§ãã
- ã奜ããªåç©ã¯ {Animal} ã
- ããŒã㯠{Animal} ã¯å¥œãã§ãã
ç§ã®å¥œããªåç©ã¯ã®çºè©±ãã¿ãŒã³
- ãç§ã®å¥œããªåç©ã¯ã
- ããŒãã®å¥œããªåç©ã¯ã
- ã奜ããªåç©ã¯ã
- ãèŠããåç©ã¯ã
以äžã®ãããªäºæã察話ã¢ãã«ãšããŠAlexaã®ã³ã³ãœãŒã«ããå®çŸ©ããŸãã
ãããããšå¯Ÿè©±ã¢ãã«ãå®æããã€ã³ãã³ããã¹ããããç解ã§ããããã«ãªããŸãã
1.1. ã³ã³ãœãŒã«ããã¹ãã«ã®è¿œå ããã
以äžã®ãŠã§ãã³ã³ãœãŒã«ãã"ã¹ãã«ã®äœæ"ãã¯ãªãã¯ã
Alexa Skills Kit Developer Console
以äžã®ãããªç»é¢ã«é·ç§»ããŸãã
ä»åã¯
ã¹ãã«åã¯ãåç©èŠããããã
ããã©ã«ãã®èšèªã¯ãæ¥æ¬èª(æ¥æ¬)ã
ã¹ãã«ã«è¿œå ããã¢ãã«ãéžæã§ã¯ãã«ã¹ã¿ã ã
ãéžæããŸãã
ãããŠç»é¢å³äžã®"ã¹ãã«ãäœæ"ãã¯ãªãã¯ã
ãããªç»é¢ã«é·ç§»ããŸãã
ãã®ããŒãžã§ã¯Alexaã®å¯Ÿè©±ã¢ãã«ã«é¢ããåºæ¬çã«ãã¹ãŠã®ããšãèšå®ã§ããŸãã
ã§ã¯å®éã«èšå®ããŠãããŸãããã
ãŸã以äžã®ããã«åŒã³åºãåãèšå®ããŸãã
次ã«å€æ°ã®ãããªãã®ã§ããã¹ããããèšå®ããŸãã
å·Šã®ã¡ãã¥ãŒããã¹ãããã¿ã€ãã®è¿œå ããAnimalã¹ããããè¿œå ããŸãã
ãããŠãã®ã¹ãããã«å®éã«å
¥ãããšãæ³å®ããããã®ãè¿œèšããŠãããŸãã
次ã«å¯Ÿè©±å
容ãè¿œå ããŠãããŸãã
ãŸãåç©ãèŠããããæå³ã®å¯Ÿè©±ãRememberAnimalIntentãšããŠæ°èŠäœæããŸãã
次ã«åç©ãèŠããããæå³ã®ãµã³ãã«çºè©±ãèšå®ããŸãã
ãŸããã¹ãããã¿ã€ã(å
ã»ã©è¿œå ããAnimal)ãæå®ããã®ãå¿ããã«ã
{Animal}ã®ååŸã«åè§ã¹ããŒã¹ãå
¥ããªããšãã«ãæã«ãšã©ãŒãçºçããã®ã§åè§ã¹ããŒã¹ããããŠãããŸããã
ã¡ãªã¿ã«AMAZON.Animalãšããã¹ãããããããŸãã
ãã¡ãã¯AmazonããããããçšæããŠãããåç©ãããããåœãŠã¯ãŸãã¹ãããã䜿ããŸãã(ä»åäœã£ãAnimalã¹ãããã¿ã€ããã匷å)
ãã®ãããªAmazonãããã©ã«ãã§ãããããªã¹ãããã¿ã€ããçšæããŠãããŠããŸãã(AmazonãçšæããŠãããŠããã€ã³ãã³ãããããŸã)
詳ããã¯Alexa Skill Kitã§AmazonãçšæããBuilt-In IntentãšBuilt-In Slot Typeãã²ããããŸãšããŠã¿ã ïœ Developers.IO
åæ§ã«èŠããããåç©ãèãã€ã³ãã³ããListenIntentãšããŠä»¥äžã®ããã«èšå®ããŸãã
ããã§ã¯ã¹ãããã¯ç»å Žããªãã®ã§ãã¹ãããã¿ã€ãã®æå®ã¯å¿ èŠãããŸããã
ããã§å¯Ÿè©±ã¢ãã«ã®èšå®ãçµãããŸããã
ç»é¢äžéšã¡ãã¥ãŒã®ãã¢ãã«ã®ä¿åããã¯ãªãã¯ããŠãããšè¯ãã§ãããã
1.2. ã¹ãã«ã®ãµãŒããµã€ããäœæãã
1.2.1. Lambdaãšã¯? FaaSãšã¯?
ä»åã¯AWSã®ãµãŒãã¹ã§ãFaaSã§ããLambdaã䜿ããŸãã
FaaSã¯ç°¡åã«èª¬æãããšåžžæåããŠãããµãŒãã§ã¯ãªããå®è¡ãèŠæ±ãããåã ãåããµãŒãã¿ãããªãã®ã§ãã
FaaS(Function as a Service)ã¯é¢æ°ãå®è¡ããåã®è«æ±ã®ã¿çºçããŸããåžžæåããŠãããµãŒããããå§åçã«ã³ã¹ããäœãå©ç¹ããããŸãããŸããµãŒãã¬ã¹ã¢ãŒããã¯ãã£ãèããå Žåã«ãéèŠãªåœ¹å²ãæ ã£ãŠããŸãã
AWSã®Lambdaã§ã¯æ¯æååã®1,000,000åã®ãªã¯ãšã¹ãã¯ç¡æã§ãããã«ãã以é1,000,000åã®ãªã¯ãšã¹ãã«ã€ã0.20USDã®è«æ±ãçºçããŸããä»®ã«VPSã§JSONãµãŒããç«ãŠããæ¯æçŽ1000å以äžãããã®ãšæ¯èŒãããšå§åçã«å®ãïŒ
詳ããã¯ä»¥äžã®èšäºãã芧ãã ããã
- FaaSïŒFunction as a ServiceïŒãšã¯ | æå³ã»ã¡ãªãã - ãµãŒããããã®ã¯ã©ãŠããµãŒãã¹ - éçº | ãã¯ã·ã«ãã¬ãžã³
- æé - AWS LambdaïŒãµãŒããŒã¬ã¹ã§ã³ãŒããå®è¡ïŒïœAWS
1.2.2. Lambdaã䜿ã£ãŠãµãŒããµã€ããæ§ç¯
å®éã«Lambdaã䜿ã£ãŠãµãŒããµã€ããæ§ç¯ããŠãããŸãããã
以äžã®ããŒãžããæ°èŠã«Lambdaã®é¢æ°ãäœæã§ããŸãã
Lambda Management Console
Alexaã®ã¹ãã«éçºã¯çŸåšä»¥äžã®ãªãŒãžã§ã³ã§ããäœæã§ããªãã®ã§ãäœæãããªãŒãžã§ã³(ç»é¢å³äžã«è¡šç€ºãããŠããå°å)ã確èªããŸãããã
- ã¢ãžã¢ãã·ãã£ãã¯ïŒæ±äº¬ïŒ
- EUïŒã¢ã€ã«ã©ã³ãïŒ
- ç±³åœæ±éšïŒããŒãžãã¢åéšïŒ
- ç±³åœè¥¿éšïŒãªã¬ãŽã³ïŒ
å®éã«"é¢æ°ã®äœæ"ãã¿ã³ãã¯ãªãã¯ããŸãã
ãããŠé¢æ°ã®èšå®ãããŸãã
ä»åã¯Pythonã§ãµãŒããã³ãŒãã£ã³ã°ããŠããã®ã§ä»¥äžã®ããã«ãªããŸãã
ãŸãããŒã«ã®èšå®ã¯ã«ã¹ã¿ã ããŒã«ã®äœæâ以äžã®ç»é¢âèš±å¯ã§èšå®ãã§ããŸãã
ããããã§ãããé¢æ°ã®äœæãã¯ãªãã¯ããŸãã
ç»é¢äžéšã«è¡ããšãšãã£ã¿ãåºãŠããŸãã
ããã«ãµãŒããåŒã°ããéã®åŠçãæžããŸãããã
以äžã®ããã«èšè¿°ããŸãã
# coding: utf-8
def lambda_handler(event, context):
"""
å§ãã«ãããå®è¡ããã
eventã®äžã«ãŠãŒã¶ã®çºè©±å
容ãdictã§æ ŒçŽãããŠãã
returnã§dictãè¿ããšããããµãŒãèªäœã®jsonã®è¿ãå€ã«ãªã
"""
if event['session']['new']:
on_session_started({'requestId': event['request']['requestId']}, event['session'])
if event['request']['type'] == "LaunchRequest":
return on_launch(event['request'], event['session'])
elif event['request']['type'] == "IntentRequest":
return on_intent(event['request'], event['session'])
elif event['request']['type'] == "SessionEndedRequest":
return on_session_ended(event['request'], event['session'])
def on_session_started(session_started_request, session):
""" ã»ãã·ã§ã³ãéå§ãããšãã«åŒã³åºããã """
print("requestId=" + session_started_request['requestId'] + ", sessionId=" + session['sessionId'])
def on_launch(launch_request, session):
""" ãŠãŒã¶ãŒãå¿
èŠãªãã®ãæå®ããã«ã¹ãã«ãèµ·åãããšãã«åŒã³åºããã """
print("on_launch requestId=" + launch_request['requestId'] + ", sessionId=" + session['sessionId'])
return get_welcome_response()
def on_intent(intent_request, session):
""" ãŠãŒã¶ãã€ã³ãã³ãã®ããçºèšããããåŒã³åºããã """
intent = intent_request['intent']
intent_name = intent_request['intent']['name']
if intent_name == "RememberAnimalIntent":
return set_animal_in_session(intent, session)
elif intent_name == "ListenIntent":
return get_animal_from_session(intent, session)
elif intent_name == "AMAZON.HelpIntent" or intent_name == "AMAZON.CancelIntent" or intent_name == "AMAZON.StopIntent":
return handle_session_end_request()
else:
raise ValueError("Invalid intent")
def on_session_ended(session_ended_request, session):
""" ã»ãã·ã§ã³ãçµãã£ããåŒã³åºããã """
print("on_session_ended requestId=" + session_ended_request['requestId'] + ", sessionId=" + session['sessionId'])
def build_speechlet_response(title, output, reprompt_text, should_end_session):
""" è¿ãçºè©±å
容ã®dictãè¿ãé¢æ° """
return {
'outputSpeech': {
'type': 'PlainText',
'text': output
},
'card': {
'type': 'Simple',
'title': "SessionSpeechlet - " + title,
'content': "SessionSpeechlet - " + output
},
'reprompt': {
'outputSpeech': {
'type': 'PlainText',
'text': reprompt_text
}
},
'shouldEndSession': should_end_session
}
def build_response(session_attributes, speechlet_response):
""" è¿ãå
šäœã®jsonã®dictãè¿ãé¢æ° """
return {
'version': '1.0',
'sessionAttributes': session_attributes,
'response': speechlet_response
}
def set_animal_in_session(intent, session):
card_title = intent['name']
session_attributes = {}
should_end_session = False
if 'Animal' in intent['slots']:
favorite_animal = intent['slots']['Animal']['value']
session_attributes = {"favoriteAnimal": favorite_animal}
speech_output = "ããªãã®å¥œããªåç©ã¯ " + \
favorite_animal + \
"ã§ããã "
reprompt_text = speech_output
else:
speech_output = "åç©ãåãããªãã£ããããããã¡ã©èšã£ãŠ "
reprompt_text = speech_output
return build_response(session_attributes, build_speechlet_response(
card_title, speech_output, reprompt_text, should_end_session))
def get_animal_from_session(intent, session):
session_attributes = {}
reprompt_text = None
if session.get('attributes', {}) and "favoriteAnimal" in session.get('attributes', {}):
favorite_animal = session['attributes']['favoriteAnimal']
speech_output = "ããªãã®å¥œããªåç©ã¯ " + favorite_animal + \
"ã§ããçµãããŸãã"
should_end_session = True
else:
speech_output = "ç§ã¯ããªãã奜ããªåç©ãåãããªãã§ãã" \
"奜ããªåç©ã¯ãã¬ã§ããšãã£ãŠèšã£ãŠãã ããã"
should_end_session = False
return build_response(session_attributes, build_speechlet_response(
intent['name'], speech_output, reprompt_text, should_end_session))
def get_welcome_response():
session_attributes = {}
card_title = "ããªãã®å¥œããªåç©ã¯ãªãã§ãã"
speech_output = "ããªãã®å¥œããªåç©ã¯ãªãã§ãã"
reprompt_text = "ããªãã®å¥œããªåç©ã¯ãªãã§ãã"
should_end_session = False
return build_response(session_attributes, build_speechlet_response(
card_title, speech_output, reprompt_text, should_end_session))
def handle_session_end_request():
card_title = "ããããŸã"
speech_output = "ããããŸã"
should_end_session = True
return build_response({}, build_speechlet_response(
card_title, speech_output, None, should_end_session))
ã³ãŒãã®ä¿åã¯ãŠã§ãäžããè¡ããŸãã
ãŸããLambdaèªäœãä¿åããªããšåæ ãããªãã®ã§ç»é¢å³äžããä¿åããŸãããã(ãªã¬ã³ãžè²ã«ãªã£ãŠããã°ä¿åã§ããŸã)
1.3. 察話ã¢ãã«ãšãµãŒããµã€ããã€ãªãã
ã¹ãã«ãåããããã«ä»¥äžã®2ç¹ã®èšå®ãå¿ èŠã§ãã
- 察話ã¢ãã«ãããµãŒããµã€ãã®èšå®
- ãµãŒããµã€ãããåŒã°ããå ã®èšå®
éäžãšã©ãŒãåºãå Žåã¯ã¢ãã«ã®ä¿åããã«ã,Lambdaã®ä¿åãããŠããå床èšå®ããŠã¿ãŠãã ããã
1.3.1. ãµãŒããµã€ãããåŒã°ããå ã®èšå®
é¢æ°ãã©ãããåŒã°ããã®ãèšå®ããŸãã
Lambdaã®Designerã®é
ç®ã®å·Šéšãã"Alexa Skills Kit"ãã¯ãªãã¯ããŠè¿œå ããŸãã(以äžã®ãã)
Alexa Skills Kitãå·Šéšã«åºãªãå Žåã¯ãªãŒãžã§ã³ã®èšå®ãåé¡ã§ããããšãèããããŸãã
é¢æ°ãåé€ããŠã以äžã®ãªãŒãžã§ã³ã§ãããã«äœæããŸãããã
- ã¢ãžã¢ãã·ãã£ãã¯ïŒæ±äº¬ïŒ
- EUïŒã¢ã€ã«ã©ã³ãïŒ
- ç±³åœæ±éšïŒããŒãžãã¢åéšïŒ
- ç±³åœè¥¿éšïŒãªã¬ãŽã³ïŒ
è¿œå ãããšããªã¬ãŒã®èšå®ã®é
ç®ãããŒãžäžéšã«åºçŸããŸãã
ããã§Alexaã®ã¹ãã«IDãæå®ããå¿
èŠããããŸãã
è¿œå ãã¿ã³ãæŒããŠå®äºã
1.3.2. 察話ã¢ãã«ãããµãŒããµã€ãã®èšå®ããã
Alexaã®ã³ã³ãœãŒã«ããåŒã³åºããµãŒãã®èšå®ãããå¿
èŠããããŸãã
ã³ã³ãœãŒã«ã®ãšã³ããã€ã³ããã以äžã®ç»é¢ã«è¡ããŸãã
ããã©ã«ãã®å°åã«Lambdaã®ã³ã³ãœãŒã«ã®ç»é¢å³äž(以äžã®ç»å)ã«ããARNãå ¥åããŸãã
å ¥åããåŸã«ã察話ã¢ãã«ãä¿åâãã«ãããŸãã
1.4. ãã¹ããããŠã¿ã
alexa developer consoleããã¹ãã«ã®ãã¹ããè¡ããŸãã
ããã§ã¯ãå®éã«Alexaã«è©±ããããå
容ãå
¥åããŠããã¹ããè¡ããŸãã
ãŸããã©ã®ãããªjsonããµãŒãã«éãããã©ã®ãããªjsonããµãŒãããè¿ã£ãŠããã®ã確èªã§ããŸãã
1.5. ãããã°æ¹æ³
äž»ãªãããã°æ¹æ³ãšããŠã1.4.ã®alexa developer consoleããã¹ãã«(察話ã¢ãã«)ã®ãã¹ããè¡ããŸãã
ãŸããJSONãµãŒããžã®ãã¹ããšããŠalexa developer consoleã®JSONãšãã£ã¿ããJSONãéä¿¡ããŠãã¹ããè¡ããŸãã
ãŸãåŸè¿°ã®SSMLã®ãã¹ããè¡ããŸãã
ãŸãLambdaã®ãã°ç£èŠã以äžã®ç»é¢ã®"ã¢ãã¿ãªã³ã°"â"CloudWatchã®ãã°è¡šç€º"â"(ä»»æã®ãã°ã¹ããªãŒã )"ããè¡ããŸãã
以äžã®ããã«Lambdaäžã®Pythonã®ãšã©ãŒãprint()ãããã®ã®äžèº«ãèŠãããšãã§ããŸãã
ãŸãLambdaã®ç»é¢äžéšãããã¹ãã€ãã³ããèšå®ã§ããŸãã(ãã¡ããããããã¹ãã§ããŸã)
ããã©ã«ãã§Alexaã®ã»ãã·ã§ã³ã¹ã¿ãŒãæã®ãã¹ãã€ãã³ããå
¥ã£ãŠããããŠããŸããããããã¹ãã€ãã³ããšããŠèšå®ãããŠãããšã¯ã³ã¯ãªãã¯ã§ã»ãã·ã§ã³ã¹ã¿ãŒãæã®ãã¹ããã§ããŠããªã䟿å©ã§ãã
1.6. ãã®åŸ...
以äžã§è§£èª¬ã¯çµäºã§ãã
ããããAlexaã®ã¹ãã«ãå®éã«ã¹ãã¢ã«ããã(誰ã§ã䜿ããã€ã³ã¹ããŒã«ã§ãããã®ã«ãã)ã«ã¯ä»¥äžã®æé ãèžãå¿
èŠããããŸãã
å ¬é
ã³ã³ãœãŒã«ã®"å ¬é"ããå ¬éç³è«ãåºãã
Amazonããèªå®ãããããã¹ãã¢ã«åºãã
ãã®ä»
APIã䜿ã£ãŠã¿ã
å€éšã®APIã䜿ã£ãŠã¿ããšãããããªããšãã§ããŸãã
- #13 ããã³ããšã³ãå¶äœã«è¯ãïŒ é¢çœãWebAPI 7éž - KAYAC engineers' blog
- æµ·å€ã»åœå ã®äŸ¿å©ãªAPIäžèŠ§ - API LIST 100+
- MA6 å人çã«ããããã®APIã»ãã©ãããã©ãŒã (17å)ã玹ä»ããŸãïŒ | Mashup Award 6 (#MA6) on CREYLE
å šäœçãªã·ã¹ãã ã¯ä»¥äžã®ããã«ãªããŸãã
Alexaã®UI/UX
Alexaã¯ã€ã³ããããé³å£°ã®ã¿(Spot,Showã¯é€ã)ãªã®ã§äœ¿ãã¥ãããªããã¡ã§ãã
ããã解決ããããã«Alexaã®ã»ãªãã®ãã¹ããã©ã¯ãã£ã¹ãå
¬åŒã«ãããŸãã
Alexaã®ã»ãªãã«ã€ã㊠| Amazon Alexa Voice Design Guide
ããšãã°ä»¥äžã®ãããªããšã
äžæ¯ãã¹ãã§ã»ãªãã®é·ãããã§ãã¯ããã
Alexaã®ã»ãªããæžãå Žåãæžããå 容ã声ã«åºããŠèªã¿äžããŠã¿ãŠãã ãããæ®éã«äŒè©±ããé床ã§äžæ¯ã«ãã®ã»ãªããèªã¿äžããããšãã§ããããé©åãªã»ãªãã®é·ããšèããŠããã§ããããæ¯ç¶ããå¿ èŠãªå Žåã¯ã»ãªããçãããããšãæ€èšããŠãã ããã
Alexaã¹ãã«éçºæã«ã¯äžèªããšããã»ãããããããããŸããã
Alexaã®è¿ç
Alexaã®å£°è²ãå€ãããããããšãã§ããŸãã
é³å£°åæããŒã¯ã¢ããèšèªïŒSSMLïŒã®ãªãã¡ã¬ã³ã¹ | Custom Skills
SSMLãšããããŒã¯ã¢ããèšèªã§ã©ã®ããã«çºèšããã°ãããèšè¿°ãããšãã®ããã«çºé³ããŠãããããã§ãã
äŸãã°ä»¥äžã®ãããªSSMLãè¿ããš"I am not a real human."ã®éšåã ãåããŠãããŸãã
<speak>
I want to tell you a secret.
<amazon:effect name="whispered">I am not a real human.</amazon:effect>.
Can you believe it?
</speak>
ãŸãSSMLã®audioã¿ã°ã䜿ããšãé³å£°ãè¿ãããšãã§ããŸãã
ãã£ãããããã®æè¡ãšåé³ãã¯ãããçµã¿åãããã°ãåé³ãã¯ãããšäŒè©±ãã§ãããããªã¹ãã«éçºãå¯èœã§ãã
<speak>
Welcome to Car-Fu.
<audio src="https://carfu.com/audio/carfu-welcome.mp3" />
You can order a ride, or request a fare estimate.
Which will it be?
</speak>
ãã ãªãã¡ã¬ã³ã¹ã«ããããã«ããŸããŸãªå¶çŽãããã®ã§æ³šæãå¿ èŠã§ãã
ãã®ä»ãããããªã¿ã°ããããŸãã
Alexaã®ããã·ã¥éç¥
ãéšãéãããã«ãªã£ãŠãããæŽæ¿¯ç©ããšãããã§ïŒããšãããªãAlexaããããã¹ã£ãŠãããã䟿å©ã§ãããã
ãããªããã€ã¹ããèœåçã«éç¥ãå®è£
ã§ãããéçºã®å¹
ãåºãã£ãŠããã§ãããïŒ
çµè«ããèšããšåºæ¬çã«å®è£ ã§ããªãã§ãã
以äžã®èšäºã®éãã§ãã
éç¥ã®æ©èœãæ¥æ¬èªç°å¢ã§ãå©çšå¯èœã«ãªããŸãã : Alexa Blogs
éç¥ã®æ©èœãããªãã®ã¹ãã«ã«å®è£ ãããå Žå
éç¥ã®æ©èœãæã£ãã¹ãã«ãéçºããããã®éçºç°å¢ã¯çŸåšããããããŒã»ãã¬ãã¥ãŒãšããŠäžéšã®éçºè ã®ã¿ã«å ¬éããŠããŸãããèå³ã®ããæ¹ã¯ããããããŒã»ãã¬ãã¥ãŒã®ç³è«ãã©ãŒã ããç»é²ãè¡ã£ãŠãã ãããç³è«ãã©ãŒã ã§ã¯ãã©ã®ãããªãŠãŒã¹ã±ãŒã¹ãæ³å®ããŠããããé ä¿¡ã®é »åºŠãé ä¿¡ããããšèããŠããã¡ãã»ãŒãžã®äŸã«ã€ããŠã䌺ãããŸããç³è«å 容ã®ã¬ãã¥ãŒåŸãäžéšã®éçºè ã®æ¹ã«ã¯ãããã«è©³ããæ å ±ãæäŸãããŸãã
ãªã®ã§ãç³è«ãããŠéããšäœ¿ããããã«ãªãããã§ãã
以äžã®ã¹ãã«ãããã·ã¥éç¥ã®æ©èœãããããã§ãã(2018幎2æ26æ¥çŸåš)
JRæ±æ¥æ¬ãåè»éè¡æ å ±æ¡å
ç»é²ããŠããè·¯ç·ã®éè¡æ å ±ã«é ããçºçãŸãã¯èŠèŸŒãŸããå Žåã«ãéç¥ã§ãç¥ããããŸãã
Yahoo!倩æ°ã»çœå®³
ããã€ã¹ã«ç»é²ããŠããæåšå°ã«éšãéªã®äºå ±ãããæ¥ã¯ãæ7æããéç¥ã§ãç¥ããããŸãã
japan taxi
å šåœã¿ã¯ã·ãŒ
é è»ã確å®ããæã«éç¥ã§ãç¥ããããŸãã
AlexaãšIFTTT
IFTTTã䜿ãã°ç°¡åãªAlexaã¹ãã«(?)ãäœãã¡ãã£ããããŸãã
IFTTTã¯ããŸããŸãªãŠã§ããµãŒãã¹ãã€ãªãããµãŒãã¹ã§ãã
äŸãã°Alexaã«ãïœããšè©±ãããããããïŒïŒïŒããšã€ã¶ããã¿ãããªããšããŠã§ãäžã§ã§ãã¡ãããŸãã
ç°¡åãªãµãŒãã¹ã(ã»ãã|ã€ãããã)ã ããªãIFTTTã䜿ãã®ãããããããŸã
IFTTTã¯Aãèµ·ãããBããããèšå®ããããšãã§ããŸãã
AãšBã«ã¯æ¢åã®ããŸããŸãªãŠã§ããµãŒãã¹(Facebook, Twitter, Instagram, LINEçã®200以äžã®ãµãŒãã¹)ã®ã€ãã³ãããšãããšãã§ããŸãã以äžã§äœ¿ãããµãŒãã¹äžèŠ§ãå ¬éãããŠããŸãã
äŸãã°ãAãWebhooksã«ããŠBãä»»æã®ãŠã§ããµãŒãã¹ã«ãããšWEB APIã£ãœããã®ãã€ãããŸãã
ã¢ã«ãŠã³ãé£æºãå¿
èŠãªãã®ãç°¡åã«äœ¿ããã®ã§ãå人䜿çšã§äœ¿ããªãããããã§ãã