Slide 1

Slide 1 text

A l e x a εΩϧ ։ ൃ Ͱ Ty p e S c r i p t Λ ͸ ͡ Ί Α ͏ k a n s a i . t s # 1 #kansaits

Slide 2

Slide 2 text

· ͱ Ί • AlexaΧελϜεΩϧ͸TypeScriptͰॻ͚Δ • Input / Output͕΄΅ݻఆͳͷͰɺTypeScriptೖ໳޲͚ • ASK CLIͰ΋hookΛ࢖͑͹σϓϩΠՄೳ • ϥΠϒϥϦ࡞ͬͯΔ͔ΒΈΜͳ࢖ͬͯ #kansaits

Slide 3

Slide 3 text

A l e x a εΩϧΞ ϫ ʔ υϋο Χ ι ϯ @ ά ϥ ϑ ϩ

Slide 4

Slide 4 text

࠷༏ल৆: ෭৆ɿAmazonΪϑτ݊10ສԁ෼ ෦໳৆: ෭৆ɿAmazonΪϑτ݊5ສԁ෼ • ήʔϜ෦໳ 1࡞඼ • Ωοζ෦໳ 1࡞඼ • ϔϧεέΞ෦໳ 1࡞඼ • γχΞ෦໳ 1࡞඼
 ಛผ৆: ෭৆ɿAmazonΪϑτ݊3ສԁ෼ • ϚϧνϞʔμϧ৆
 Ի੠ͱը૾ͷ྆ํͰ༏ΕͨΠϯλʔϑΣʔεΛAPLͰ ࣮ݱ͍ͯ͠ΔεΩϧɺ1࡞඼ɻ • ΫϦΤΠςΟϏςΟ৆
 ΞΠσΞ͕ಛʹಠ૑తͳεΩϧɺ1࡞඼ɻ

Slide 5

Slide 5 text

https://bit.ly/2WvQg6O

Slide 6

Slide 6 text

A g e n d a • AlexaΧελϜεΩϧ͸TypeScriptͰॻ͚Δ • Input / Output͕΄΅ݻఆͳͷͰɺTypeScriptೖ໳޲͚ • ASK CLIͰ΋hookΛ࢖͑͹σϓϩΠՄೳ • ϥΠϒϥϦ࡞ͬͯΔ͔ΒΈΜͳ࢖ͬͯ #kansaits

Slide 7

Slide 7 text

A l e x a ͸ ʮ Ի ੠ - > จ ࣈ - > J S O N ʯ ͷ 2 ε ς ο ϓ • ASR (Auto Speech Recognition)ͱNLU (Natural Language Understanging) • Echo͕ฉ͖औͬͨԻ੠ΛASR͕จࣈʹม׵͢Δ • ม׵͞ΕͨจࣈྻΛNLU͕JSONʹม׵͢Δ • Lambda͸JSONΛड͚औΓɺJSONΛฦ͚ͩ͢ #kansaits

Slide 8

Slide 8 text

A l e x a ͷ S D K ( N o d e ) ͸ Ty p e S c r i p t

Slide 9

Slide 9 text

ͩ ͍ ͨ ͍ ͜ Μ ͳ ײ ͡ import { Response } from 'ask-sdk-model'; import { RequestHandler, HandlerInput } from ‘ask-sdk-core’; interface MineHandler extends RequestHandler { // ॲཧ͢ΔϦΫΤετ͔ͷ൑ఆ canHandle(handlerInput: HandlerInput): Promise | boolean // ϦΫΤετॲཧʴϨεϙϯε࡞੒ handle(handlerInput: HandlerInput): Promise | Response } #kansaits

Slide 10

Slide 10 text

ͩ ͍ ͨ ͍ ͜ Μ ͳ ײ ͡ import { Response } from 'ask-sdk-model'; import { RequestHandler, HandlerInput } from ‘ask-sdk-core’; interface MineHandler extends RequestHandler { // ॲཧ͢ΔϦΫΤετ͔ͷ൑ఆ canHandle(handlerInput: HandlerInput): Promise | boolean // ϦΫΤετॲཧʴϨεϙϯε࡞੒ handle(handlerInput: HandlerInput): Promise | Response } #kansaits

Slide 11

Slide 11 text

ͩ ͍ ͨ ͍ ͜ Μ ͳ ײ ͡ import { Response } from 'ask-sdk-model'; import { RequestHandler, HandlerInput } from ‘ask-sdk-core’; interface MineHandler extends RequestHandler { // ॲཧ͢ΔϦΫΤετ͔ͷ൑ఆ canHandle(handlerInput: HandlerInput): Promise | boolean // ϦΫΤετॲཧʴϨεϙϯε࡞੒ handle(handlerInput: HandlerInput): Promise | Response } #kansaits

Slide 12

Slide 12 text

A g e n d a • AlexaΧελϜεΩϧ͸TypeScriptͰॻ͚Δ • Input / Output͕΄΅ݻఆͳͷͰɺTypeScriptೖ໳޲͚ • ASK CLIͰ΋hookΛ࢖͑͹σϓϩΠՄೳ • ϥΠϒϥϦ࡞ͬͯΔ͔ΒΈΜͳ࢖ͬͯ #kansaits

Slide 13

Slide 13 text

͢ ͝ ͍ J S O N { "version": "1.0", "session": { "new": true, "sessionId": "amzn1.echo-api.session.[unique-value-here]", "application": { "applicationId": "amzn1.ask.skill.[unique-value-here]" }, "attributes": { "key": "string value" }, "user": { "userId": "amzn1.ask.account.[unique-value-here]", "accessToken": "Atza|AAAAAAAA...", "permissions": { "consentToken": "ZZZZZZZ..." } } }, "context": { "System": { "device": { "deviceId": "string", "supportedInterfaces": { "AudioPlayer": {} } }, "application": { "applicationId": "amzn1.ask.skill.[unique-value-here]" }, "user": { "userId": "amzn1.ask.account.[unique-value-here]", "accessToken": "Atza|AAAAAAAA...", "permissions": { "consentToken": "ZZZZZZZ..." } }, "apiEndpoint": "https://api.amazonalexa.com", "apiAccessToken": "AxThk..." }, "AudioPlayer": { "playerActivity": "PLAYING", "token": "audioplayer-token", "offsetInMilliseconds": 0 } }, "request": {} } https://developer.amazon.com/ja/docs/custom-skills/request-and-response-json-reference.html #kansaits

Slide 14

Slide 14 text

֮ ͑Β Ε ͳ ͍ #kansaits

Slide 15

Slide 15 text

#alexaday2019

Slide 16

Slide 16 text

↑ ೖ ྗ ิ ׬ ͷ ྫ

Slide 17

Slide 17 text

↓ ೖ ྗ ஋ ͷ ν Σ ο Ϋ

Slide 18

Slide 18 text

˚ ֮ ͑ Β Ε ͳ ͍ ̋ ֮ ͑ ͳ ͘ ͯ ͍ ͍ #kansaits

Slide 19

Slide 19 text

ઃ ܭ ཧ ղ ͸ Q i i t a ͷ ͜ ͷ ه ࣄ Λ https://qiita.com/shinichi-takahashi/items/7191d3d393e08b2746f0 #kansaits

Slide 20

Slide 20 text

T i p s : Ty p e S c r i p t Ͱ ͸ ɺ ͜ Ε ͕ ܕ Τ ϥ ʔ ʹ ͳ Δ .addRequestHandler('ExampleIntent', async (handlerInput) => { const testSlot = handlerInput.requestEnvelope.request.intent.slots.hoge.value return handlerInput.responseBuilder.speak(`You choose ${testSlot}`).getResponse() })

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

R e q u e s t ͷ ܕ ͕ ͭ Β ͍ ߹ Θ ͳ ͍ ࣌ ͸ a s Λ ࢖ ͏ import { IntentRequest } from ‘ask-sdk-model’ … const request = handlerInput.requestEnvelope.request as IntentRequest const testSlot = request.intent.slots.hoge.value

Slide 23

Slide 23 text

A g e n d a • AlexaΧελϜεΩϧ͸TypeScriptͰॻ͚Δ • Input / Output͕΄΅ݻఆͳͷͰɺTypeScriptೖ໳޲͚ • ASK CLIͰ΋hookΛ࢖͑͹σϓϩΠՄೳ • ϥΠϒϥϦ࡞ͬͯΔ͔ΒΈΜͳ࢖ͬͯ #kansaits

Slide 24

Slide 24 text

A S K C L I Ͱ ͷ σ ϓ ϩ Π • ࣄલʹ.ts -> .jsͷม׵͕ඞཁ • hooks/pre_deploy_hook.shΛ׆༻͢Δͱɺ
 ask deployͰϏϧυ -> σϓϩΠΛ࣮ߦՄೳ • npm prune —production΋ೖΕΔ͜ͱͰɺdevআ֎ #kansaits

Slide 25

Slide 25 text

/ h o o k s / p re _ d e p l o y _ h o o k . s h install_dependencies() { npm install --prefix "$1" >/dev/null 2>&1 # Լͷ3ߦΛ௥Ճ͢Δ npm run build --prefix "$1" rm -rf "$1/node_modules" >/dev/null 2>&1 npm install --prefix "$1" --only=production >/dev/null 2>&1 return $? } #kansaits

Slide 26

Slide 26 text

A g e n d a • AlexaΧελϜεΩϧ͸TypeScriptͰॻ͚Δ • Input / Output͕΄΅ݻఆͳͷͰɺTypeScriptೖ໳޲͚ • ASK CLIͰ΋hookΛ࢖͑͹σϓϩΠՄೳ • ϥΠϒϥϦ࡞ͬͯΔ͔ΒΈΜͳ࢖ͬͯ #kansaits

Slide 27

Slide 27 text

ܕ ͕ ͋ ͬͯ ΋ ύ ϥϝ ʔ λ ୳ ͢ ͷ Ί Μ Ͳ ͍ #kansaits

Slide 28

Slide 28 text

T S Ͱ S D K ͷ S D K ͭ ͬ͘ ͨ • ASK SDK޲͚Utility npm i -S ask-utils • Proactive Event޲͚SDK npm i -S @ask-utils/proactive-event • Amazon Pay޲͚Ϗϧμʔ npm i -S @ask-utils/amazon-pay • εΩϧ՝ۚ޲͚ϔϧύʔ npm i -S @ask-utils/isp

Slide 29

Slide 29 text

C F P ௨ ͬ ͨ Β ৄ ղ ൛ ΍ Γ · ͢

Slide 30

Slide 30 text

C F P ௨ ͬ ͨ Β ৄ ղ ൛ ΍ Γ · ͢

Slide 31

Slide 31 text

Ty p e S c r i p t Ͱ L a m b d a Ϳ Μ ճ ͠ ͨ ͍ ํ ͸ ͜ ͪ Β

Slide 32

Slide 32 text

Ty p e S c r i p t Ͱ L a m b d a Ϳ Μ ճ ͠ ͨ ͍ ํ ͸ ͜ ͪ Β https://bit.ly/2WvQg6O

Slide 33

Slide 33 text

͓ Θ Γ k a n s a i . t s # 1 #kansaits