私は自分のSpaceGeekテンプレートを使ってAlexaのファクトスキルを開発しています。 テンプレート自体は非常に単純ですが、私は で改善しようとしています。使用された事実が同じセッションで再び現れないようにしています。そこで、私は 要素を使用した後に要素を削除します。しかし、今度は、セッションで削除された要素は、今後のセッションでは登場しないという問題があります。 したがって、グローバル変数はバックエンドにとどまり、以下のようにコピー配列を作成すると仮定します。しかし、それはまだ動作しません。だから、すべての事実を一度使った後、私はいつも「これは私たちが今持っているすべての事実です。新しい セッションを開始してもどんな助けもありがとう。Alexa Skillsでセッション固有の変数を使用する方法は?
3
A
答えて
2
これを正しく処理する方法は、配列をグローバルオブジェクトではなくセッション変数として保存することです。これを詳細に行う方法を示す例は、History Buff example skillですが、一般的に言えば、プロセスは次のようになります。
ユーザーの最初の要求を処理するときに、セッション全体で維持する変数を含むオブジェクトを作成しますsession.attributes
に割り当てます。そのオブジェクトにプロパティとして配列を格納したいと思うでしょう。
将来のイベントハンドラでは、格納されたセッション固有の変数(つまり配列)に、session.attributes
オブジェクトのプロパティとしてアクセスすることができます。
リンクされた例では、後続のインテントハンドラで、それらの変数にアクセスするためのより便利なハンドルを提供するためにスニペットsessionAttributes = session.attributes
が含まれています。
-1
function handleNewFactRequest(response) {
var COPY_FACTS= SOME_FACTS.splice(0);
if(COPY_FACTS.length>0){
var factIndex = Math.floor(Math.random() * COPY_FACTS.length);
var fact = COPY_FACTS[factIndex];
// Create speech output
var speechOutput = "Here's your random fact: " + fact + " would you like more?";
var repromptOutput = "would you like more random facts?";
COPY_FACTS.splice(factIndex, 1);
response.ask(speechOutput, repromptOutput);
}else{
var speechOutput = "That's all the facts we have for now.";
response.tell(speechOutput);
}
}
代わりのアレイ、使用slice()
を複製するsplice(0)
を使用。
splice()
関数は元の配列を変更します。ここでは、slice()
はありません。 See Sirko's response on this question。
関連する問題
- 1. Amazon Alexa Skills - モバイルアプリ作成カード
- 2. ASP.NETセッション固有のグローバル変数を作成するには?
- 3. expectセッションでシェル変数を使用する方法は?
- 4. ユーザー固有の変数を使用した共有公開プロファイル
- 5. JSPでセッション変数を安全に使用する方法
- 6. servlet/jspでセッション全体で変数の値を使用する方法は?
- 7. Application Insightsセッション固有またはユーザー固有のカスタムプロパティ
- 8. Alexaでセッションを常に開いたままにする方法
- 9. セッション変数でc:removeを使用した後にc:ifを使用する方法?
- 10. WatchConnectivity複数のWKInterfaceController間でセッションを共有する方法は?
- 11. 効率的な方法は、固有のライブラリでは固有
- 12. Node.jsセッション固有ミドルウェアのユニットテスト
- 13. PHPセッションと固有のユーザートークン
- 14. 共有ホスティングサーバーでのデータキャッシュとセッション変数の使用
- 15. セッションIDを使用してセッション変数を取得する方法
- 16. Haskellでスレッドセーフな共有変数を使用する方法
- 17. 別のクラスでサブクラス固有のメソッドを使用する方法は?
- 18. Yocto - プロジェクト固有の変更でリポジトリを作成する方法
- 19. ラムダ固有の変数
- 20. ディレクトリ固有のPATH変数
- 21. メイクターゲット固有の変数
- 22. 関数固有のconstオプション/変数を格納する正しい方法?
- 23. __threadなしでpthread固有の変数を作成する方法
- 24. Ansible:ホスト固有の変数値をホスト名で取得する方法
- 25. Amazon Alexa Skills Kit(ASK)の混合文字列に数字を入力するには?
- 26. AlexaのJava SDKでDialogディレクティブを使用する方法
- 27. 固有アフィン変換を固有アイソメトリ変換に変換する
- 28. 固有でブーストアキュムレータを使用する::ベクトルタイプ
- 29. Netbeansで固有ライブラリを使用する
- 30. Alexa Skills Custom Intentsの定義されていないオブジェクトに関する問題
これはOPのコードよりも悪くなります。 'splice()'の呼び出しが変数に割り当てられていないので、 'slice()'を呼び出すように変更すると、直ちに放棄される要素が削除された配列。 –
私のコメントは、 'splice(0)'を 'var COPY_FACTS = SOME_FACTS.splice(0);'としたコード行のみを対象としていました。この行を 'var COPY_FACTS = SOME_FACTS.slice();'に変更すると、オリジナルのファクト配列 'SOME_FACTS'が空になる問題を解決してください。私はより明確になっているはずです – GregI
それは公正ですが、これは決して削除された質問を応答の間に持続させるものではありません。それは問題の半分を解決しますが、重要な半分は実際には解決しません。 –