2017-11-22 4 views
0

エラーメッセージを動的に処理し、Lexダッシュボードで宣言したものに依存しないようにします。しかし、間違ったメッセージを入力しようとすると、すぐにデフォルトのエラーメッセージが表示されます。 Serverlessを使用してラムダログをチェックすると、ラムダ機能は実行されませんでした。ラムダ関数がAWS Lexボットのカスタムエラープロンプトを実行する方法はありますか?

は、ログを参照してください:私は「あなたがこれを行うことができます」で入力したとき

enter image description here

には新しいエントリはありませんでした。私はイベントデータをチェックアウトするためにを追加してからラムダ関数が実行されることを期待していました。

それは可能ですか?

答えて

0

ラムダ関数は、インテントがマッチしたときにのみ呼び出されます。

「申し訳ありません、繰り返してください。 (またはLexダッシュボードのエラー処理セクションで指定したもの)は、入力テキストがラムダ関数とは独立したインテントと一致しないときに返されます。

あなたのラムダには検証コードを入れることができますが、これもやはりIntentがbeginで指定されている場合にのみ呼び出されます。

1つのアプローチは、ユーザがチャットボットの範囲外にあると言うかもしれない発声を処理するために余分なインテントを持つことです。 「あなたは誰ですか?」「あなたの名前は何ですか?」「ボットの羊はボットの夢を夢見ていますか?」追加のインテントのサンプル発言のリストは、より多くのユーザーがあなたのボットをテスト/使用するにつれて更新されます。

0

これらは動的に処理できますが、チャットクライアントとlexの間にAPI GatewayとLambda機能を設定する必要があります。

enter image description here

あなたのチャットクライアントは、(レックスが1つのよりラムダ関数を持つことになります)レックスに、その後、その後ラムダ関数に、API Gatewayに要求を送信します。 Lexからの応答を返している間、Lambda関数がエラーメッセージであり、何らかのアクションをトリガーしている場合、Lambda関数をチェックインできます。

は、ラムダ関数の中で、私たちはこのようなものを使用することができます。
import logging 
import boto3 

logger = logging.getLogger() 
logger.setLevel(logging.DEBUG) 

client_run = boto3.client('lex-runtime') 
client_model = boto3.client('lex-models') 

def lambda_handler(event, context): 
    response = client_run.post_text(
     botName='name_of_your_bot', 
     botAlias='alias_of_your_bot', 
     userId='some_id', 
     sessionAttributes={ 
      'key1': 'value1' 
     }, 
     inputText=event['user_query'] 
    ) 
    bot_details = client_model.get_bot(
    name='name_of_your_bot', 
    versionOrAlias='$LATEST' 
    ) 
    for content in bot_details['clarificationPrompt']['messages']: 
     if response["message"] == content['content']: 
      return error_handling_method(event) 
    for content in bot_details['abortStatement']['messages']: 
     if response["message"] == content['content']: 
      return error_handling_method(event) 
    return response["message"] 

はそれがお役に立てば幸いです。

関連する問題