kun432's blog

技術ネタ、読書記録、など。2015年から人生をやり直し中です。

Voiceflowで最初から使える隠れたオブジェクト

公式ドキュメントとかには載ってなくて、フォーラムとか見てると突然チュートリアルとかで出てきて、これで取れるYO!じゃあドキュメントに書けよ!みたいな、Voiceflowの隠れたオブジェクトです。たぶん一部にはニーズが有るはず。こんな感じ。

_system = {
    "application": {
        "applicationId": "amzn1.ask.skill.xxxxxxxxxx"
    },
    "user": { 
        "userId": "amzn1.ask.account.xxxxxxxxxx"
    },
    "device": {
        "deviceId": "amzn1.ask.device.xxxxxxxxxx",
        "supportedInterfaces": {
            "AudioPlayer": {},
            "Display": {
                "templateVersion": "1.0",
                "markupVersion": "1.0"
            },
            "Alexa.Presentation.APL": {
                "runtime": {
                    "maxVersion":"1.0"
                }
            },
            "VideoApp": {},
            "Geolocation": {}
        }
    },
    "apiEndpoint": "https://api.xx.amazonalexa.com",
    "apiAccessToken": "xxxxxxxxxx"
}

要は、ほぼほぼhandlerInput.requestEnvelope.context.System ですね。

も一つ。

voiceflow = {
    "permissions": [],
    "events": [],
    "capabilities": {
        "AudioPlayer": {},
        "Display": {
            "templateVersion": "1.0",
            "markupVersion":"1.0"
        },
        "Alexa.Presentation.APL": {
            "runtime": {
                "maxVersion": "1.0"
            }
        },
        "VideoApp": {},
        "Geolocation": {}
    }
}

こっちはパーミッションとかですね。プロアクティブイベントAPI用のイベントも見えますね。ちなみに、都合上まるっと全部書いてますけど、GeolocationはAlexaアプリだけだし、AlexaアプリだとAPLは出てきませんのでご注意ください。

どっちもCode Blockとかから呼び出して変数に入れれば使えます。特に最初のやつはAlexaのサービスAPIを叩くのに必要な情報が入っているので、これ使うといろいろできて可能性が広がりますね。(Permission Blockが対応してないとかはありますけどね・・・)

これを使ってデバイスアドレスAPI叩いて所在地情報から雨雲レーダーの画像を引っ張ってくるサンプルスキルがこんな感じでできます。もちろんAPL使えますよ。

以下LT資料に書いてます。APIブロックの設定例も載せてますのでご参考までに。