ASK SDK(TypeScript)で任意の型のRequestオブジェクトを取得する

Pull Requestがマージ・リリースされたので簡単に紹介します。 Requirement [email protected] or later TypeScript 背景 ASK SDKでは、handlerInput.re […]

広告ここから
広告ここまで

目次

    Pull Requestがマージ・リリースされたので簡単に紹介します。

    Requirement

    背景

    ASK SDKでは、handlerInput.requestEnvelope.requestにインテント名やスロットといったスキルからのリクエスト内容が入ります。

    が、このオブジェクトはUNION型で全てのリクエストタイプが指定されており、IntentRequestでスロットを取りたい時など、特定のリクエストにしかないプロパティを取得するにはキャストしてやる必要がありました。

    GitHubでもMissing typescript definitions? #398というIssueが上がっており、「キャストしないとTypeScriptでエラーになる」ということに気づかないと、任意のRequestのプロパティを取得できなくなるという問題が出ていました。

    ASK [email protected]で追加されたgetRequest

    若干身もふたもないのですが、このキャストをGenericsでやる関数としてgetRequestがversion2.8.0から追加されました。

    // For Intent request
    const request = getRequest<IntentRequest>(handlerInput.requestEnvelope)
    const state = request.dialogState
    
    // For AudioPlayer intent request
    const req = getRequest<interfaces.audioplayer.PlaybackFinishedRequest>(intentRequestEnvelope)
    const sec = req.offsetInMilliseconds

    canHandleでリクエストの選別が終わっている前提での利用になりますので、複数のRequestを受け付けているHandlerで使用すると予想外の動きがでることに注意してください。

    asがGenericsに変わっただけ」といえばそれだけなのですが、あまりasを使いたくない派としてはgetRequestを積極的に使っていきたいなと思います。

    PR出しておいて使わないのは流石に失礼かなとも思いますし・・・

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark