Amazon Alexaask-sdk

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

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

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

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

Requirement

  • ask-sdk@2.8.0 or later
  • TypeScript

背景

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

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

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

ASK SDK@2.8.0で追加された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出しておいて使わないのは流石に失礼かなとも思いますし・・・

ブックマークや限定記事(予定)など

WP Kyotoサポーター募集中

WordPressやフロントエンドアプリのホスティング、Algolia・AWSなどのサービス利用料を支援する「WP Kyotoサポーター」を募集しています。
月額または年額の有料プランを契約すると、ブックマーク機能などのサポーター限定機能がご利用いただけます。

14日間のトライアルも用意しておりますので、「このサイトよく見るな」という方はぜひご検討ください。

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

Related Category posts