プロさんのおうち   ~プログラムのサンプル置き場~


DialogflowのFulfillmentをPaythonで実装する


DialogflowのFulfillmentを、AWS Lambdaを利用して実装してみます。

利用言語はPythonです。

今回やっていること

今回はLambda内のPythonコードで以下を行っています。

  • Dialogflowへの結果返却(通常応答)
  • Dialogflowへの結果返却(FollowupEvent)
  • Amazon Translateでの翻訳
  • Amazon Comprehendでの感情分析
ソースコード

実際のソースコードは以下のようになります。


import json
import boto3

def lambda_handler(event, context):
    
    print(event)
    
    parameters = event["queryResult"]["parameters"]
    method = parameters["method"]
    # サンプル
    if method == "サンプル":
        
        connect = parameters["connect"]
        if connect == "通常方法":
            return {
                'fulfillmentText': 'サンプルテキストです。'
            }
        elif connect == "イベント":
            return {
                'followupEventInput': {
                    'name': 'TEST_FOllOW_EVENT',
                    'languageCode': 'ja-JP',
                    'parameters': {
                        'service': 'AWS Lambda',
                        'method': 'イベント',
                        'suffix': 'あくまでもテストイベントです。'
                    }
                }
            }
    # 翻訳
    elif method == "翻訳":
        translate = boto3.client(service_name='translate', region_name='us-east-1', use_ssl=True)
        
        text = parameters["text"]
        result = translate.translate_text(Text=text, SourceLanguageCode="ja", TargetLanguageCode="en")
        translate_text = result["TranslatedText"]
        print(translate_text)
        
        # 感情分析
        comprehend = boto3.client(service_name='comprehend', region_name='us-east-1')
        sentiment = comprehend.detect_sentiment(Text=translate_text, LanguageCode='en')
        print(sentiment)
        
        return {
            'followupEventInput': {
                'name': 'TRANSLATE_FOLLOW_EVENT',
                'languageCode': 'en-US',
                'parameters': {
                    'translate': translate_text,
                    'sentiment': sentiment["Sentiment"]
                }
            }
        }
        
				

軽く中身の説明をします。

まず、Dialogflowからのパラメータとして、以下2つを受け取ります(命名のセンスは気にしない感じで・・・)。

  • method(手段)
  • connect(接続方法)

methodが「イベント」の場合は、connectの値を見て、以下のような返却値を作ります。

  • connectが「通常」なら単に結果を表示するだけのJSONを生成します
  • connectが「イベント」ならFollowupEventを指定して別Intentで結果を表示するためのJSONを生成します

methodが「翻訳」の場合は、入力文字列を翻訳→感情分析の順に処理し、結果をFollowupEvent用のJSONとして生成しています。

FollowupEvent用のJSONの場合には、parametersに設定している値で、受け取ったIntent側が回答文字列を生成するイメージです。

参考URL


メニューに戻る


CopyRight 2019 株式会社PUreatio