෦ Ͱ . c re a t e ( ) . i n v o k e ( e v e n t ) Λ ࣮ ߦ export handler = Ask.SkillBuilders.custom() .addRequestHandlers(...) .lambda() export const handler= async (event) => { return Ask.SkillBuilders.custom() .addRequestHandlers(...) .create().invoke(event) }
e v e n t Λ h a n d l e r I n p u t ʹ ม const input : HandlerInput = { requestEnvelope, //͜Ε͕event context, attributesManager : AttributesManagerFactory.init({ requestEnvelope, persistenceAdapter : this.persistenceAdapter, }), responseBuilder : ResponseFactory.init(), serviceClientFactory : this.apiClient ? new ServiceClientFactory({ apiClient : this.apiClient, apiEndpoint : requestEnvelope.context.System.apiEndpoint, authorizationValue : requestEnvelope.context.System.apiAccessToken, }) : undefined, }; https://github.com/alexa/alexa-skills-kit-sdk-for-nodejs/blob/2.0.x/ask-sdk-core/lib/skill/CustomSkill.ts#L65
u t ͷ த ֓ આ handerInput: { requestEnvelope: Alexa͔ΒͷϦΫΤετ༰(=event), context: LambdaͷίϯςΩετ(=context), attributesManager: attributeૢ࡞ܥʹ͔ͭ͏, responseBuilder: Ϩεϙϯεੜʹ͔ͭ͏, serviceClientFactory: ֤छAPIαʔϏεʹଓ͢ΔͨΊʹ͔ͭ͏ }
t e n t / S l o t / e t c . . ) Λ औ ಘ ͢ Δ handerInput: { requestEnvelope: Alexa͔ΒͷϦΫΤετ༰(=event), context: LambdaͷίϯςΩετ(=context), attributesManager: attributeૢ࡞ܥʹ͔ͭ͏, responseBuilder: Ϩεϙϯεੜʹ͔ͭ͏, serviceClientFactory: ֤छAPIαʔϏεʹଓ͢ΔͨΊʹ͔ͭ͏ }
f i l e A P I ͳ Ͳ ͷ ଓ ʹ ͏ handerInput: { requestEnvelope: Alexa͔ΒͷϦΫΤετ༰(=event), context: LambdaͷίϯςΩετ(=context), attributesManager: attributeૢ࡞ܥʹ͔ͭ͏, responseBuilder: Ϩεϙϯεੜʹ͔ͭ͏, serviceClientFactory: ֤छAPIαʔϏεʹଓ͢ΔͨΊʹ͔ͭ͏ }
ͨ A l e x a εΩϧ ։ ൃ ೖ • SkillBuildersʹRequestHandlerΛ͍ͬͺ͍ొ͢Δ͚ͩ • ϦΫΤετຊମTypeScript + IDEͷิΛ͏ͱಡΈ͍͢ • ࠷ۙgetUserIdͷΑ͏ͳutil͕ؔίΞʹ֦ॆ͞Εͭͭ͋Δ • GitHub (github.com/alexa)ʹαϯϓϧ͕ଟ͋Γɺ git cloneޙʹൃ༰ͳͲΛௐ͢Εͦͷ··͑Δ #jsconf
e rc e p t o r Λ ͬ ͨ I n j e c t i o n • ϦΫΤετલʹ࣮ߦͰ͖Δϋϯυϥʔ͕͋Δ -> RequestInterceptor • RequestHandlerͷ֎͔ΒσʔλΫϥεͳͲΛͤΔ • ΫΠζͷϨϕϧઃఆͳͲͷใ͜ΕΛͬͯͯ͠Δ #jsconf
r i b u t e s Ͱ H a n d l e r ͷ ֎ ͔ Β σ ʔ λ Λ ೖ Ε Δ • attributesManager.getRequestAttributes() & setRequestAttributes(any) • ॲཧ(return͢Δ·Ͱ)Ͱ͋Εsetͨ͠ͷΛgetͰ͖Δ • i18nίϯςϯπੜΫϥεͳͲΛRequest࣌ʹηοτ͢Δ • handlerଆgetͨ͠ͷΛ͑ɺhandlerΛStatelessʹͰ͖Δ • anyܕͰget͢ΔͷͰɺ͕ͬͭΓ͏ͳΒTypeGuardͳͲΛ #jsconf
e rc e p t o r Ͱ શ ͯ Λ ઃ ఆ ͢ Δ • RequestHandlerʮͲͷॲཧΛɺͲͷϦΫΤετͰߦ͏͔ʯʹઐ೦ • ʮԿΛ͔͢ʯRequestInterceptor͔ΒrequestAttributesʹInject • SkillBuilderͷϝιουνΣʔϯͰinject͢Δͷ͚ͩޙ͔ΒՃՄೳ • Α͘͏HandlerܥSkillBuilderϨϕϧͰ·ͱΊͯ͠·͏ #jsconf