2017-12-06 4 views
0

私のアプリケーション用にAlexaスキルを構築しています。あなたの質問の「私のアカウントのステータスは?」このインテントは、ユーザーのアカウントに関連するステートメントのシーケンスを返します。 APIは次の応答を返しますPython LambdaをAlexaスキルのために構築するには?

response = [{ 
.. 
text: 'Total orders are 41, Delivered 28' 
.. 
}, 
{ 
.. 
text: 'Today orders are 12, Delivered 2' 
.. 
}, 
{}] 

API応答に基づいて応答シーケンスを構築する方法はありますか?

このように、APIからの応答を取得するには、設定ステートメントを使用します。Alexaは、各ステートメントを1つずつ呼び出す必要があります。 Alexaがプロンプトを表示している間にユーザーが「次へ」と答えた場合、レスポンス配列の次のステートメントに進みます。

+0

あなたは、「ユーザーが求める必要があるために、次の文に移動するために、現在の文の間に、 『次へ』言ったとき」あなたが意味するようにしたいん何手の込んだだろうか? リクエスト間でセッションを維持したい場合は、alexaチュートリアルhttps://developer.amazon.com/alexa-skills-kit/big-nerd-ranch/alexa-voice-user-interfacesをご覧ください。 -and-sessions – leandro

+0

この目的で、APIからの応答をset文で取得します。Alexaは各ステートメントを1つずつプロンプトする必要があります。ユーザーが応答配列の次のステートメントに進むためにステートメントのいずれかの間に次に言った場合。 – Prasanna

答えて

1

まず、ユーザが"what is my account status?「あなたの意図が呼び出されます、あなたが最初の呼び出しであなたは0番目の項目が表示されます、リスト内の応答を取得すると言う

APIの結果:あなたが必要

response = [{ 
.. 
text: 'Total orders are 41, Delivered 28' 
.. 
}, 
{ 
.. 
text: 'Today orders are 12, Delivered 2' 
.. 
}, 
{}] 

。インテント名、表示されたインデックス(最初の呼び出しの場合は0)などのセッション属性に情報を保存するために使用します。
nextのようなキーワードでトリガーされるもう1つのインテントを設定する必要があります。セッション属性の値値に応じてあなたの応答をしてください。たとえば、以前のインテント名、以前のインデックスを確認したいとします。すべてが問題ない場合は、セッション属性を変更してユーザーに応答します。
希望します。

1

あなたはPythonについて言及して以来、私はFlask-askを見てみましょう。これは2つの主要な応答タイプを提供します:文と質問。

上記のsid8491に記載されているように、どの応答(jsonから)を返す必要があるかを追跡するために、セッションに情報を格納する必要があります。この目的のためにを使用することができます。this pythonライブラリを使用します。

JSONレスポンスをDBに格納されている(またはどこか)、およびリストにアクセスすることができている、のは、あなたの対話モデルは次のようになりましょうと仮定:

{ 
    "languageModel": { 
     "intents": [ 
      { 
       "name": "NextIntent", 
       "samples": ["next", "tell me more"] 
      }, 
      { 
       "name": "StopIntent", 
       "samples": ["stop"] 
      }, 
      { 
       "name": "StatusIntent", 
       "samples": ["what is my account status"] 
      } 
     ], 
     "invocationName": "orders" 
    } 
} 

あなたはRedisのを使用して(次の手順を使用することができますフラスコ-尋ねるこの例では): 'StatusIntent' に

  1. 、店舗セッションと最初の応答を返す:

    redis.set("session_key", 0) 
    return statement(response[0]) # assuming responses are stored in a list 
    
  2. 'NextIntent' に関する
  3. 、 'StopIntent' に関する存在する場合の戻り応答次

    value = redis.get("session_key") 
    if not value: # session is expired 
        return statement("I don't understand") 
    redis.set("session_key", int(value)+1) 
    return statement(response[int(value)+1]) 
    
  4. 、セッションに格納されている値を取得し、それはないですRedisの

    redis.delete("session_key") 
    return statement("Ok. I am here if you need me.") 
    

から "SESSION_KEY" を削除実際のコードですが、単にあなたにアイデアを与えることを意図していました。それが役に立てば幸い。

:)

関連する問題