DialogflowのFulfillmentを、AWS Lambdaを利用して実装してみます。
利用言語はPythonです。
今回はLambda内のPythonコードで以下を行っています。
実際のソースコードは以下のようになります。
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が「翻訳」の場合は、入力文字列を翻訳→感情分析の順に処理し、結果をFollowupEvent用のJSONとして生成しています。
FollowupEvent用のJSONの場合には、parametersに設定している値で、受け取ったIntent側が回答文字列を生成するイメージです。