0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Amazon Connectチャットへリアルタイム翻訳機能を追加

0
Last updated at Posted at 2025-10-23

Amazon Connectでチャット対応をしていると、どうしてもぶつかるのが「多言語対応」の壁です。
Amazon QなどのAIがAmazon Connectとネイティブに連携されている状況だと対応も早いですが、運用中でAI対応はこれからというケースがまだ多く、オペレーターが慌ててメッセージをコピーして、翻訳サイトにペーストして、結果をまたコピーして貼り付ける。ということが散見されます。

単に手間というだけならまだしも、レスポンスは遅れるし、なにより怖いのがセキュリティです。
「個人情報が含まれているかもしれない会話を、外部の翻訳サイトに貼り付ける」
企業のポリシーとしても避けなければいけない状況です。

そんなリスクや運用負荷から解放されたいということで、Amazon ConnectとLambda、Translateを連携させて、この翻訳作業を「セキュアに完全自動化」しました。
ネイティブにAIが使える状況にするのが一番なので、過渡期の対応として参考になればと手順を書いておきます。

仕組みはシンプルに

やりたいことは単純です。
AWSのサービスだけで完結させて、セキュリティリスクを排除しつつ、リアルタイムで翻訳すること。

アーキテクチャ

  1. Amazon Connect: チャットの入り口。
  2. AWS Lambda: 翻訳の仲介。
  3. Amazon Translate: 翻訳エンジン。

外部ツールを経由せず、データがAWS内だけで完結するのが最大の安心ポイントです。
Translateは驚くほど速いので、翻訳のラグもほとんど気になりません。

作ってみた

1. 翻訳ロジック(Lambda/Python)

まずはConnectから呼び出されて翻訳を実行するLambdaを書きます。
Python(Boto3)だと、拍子抜けするくらい短く書けます。

言語の自動判別(auto)が優秀で、相手が何語で話しかけてきても勝手にターゲット言語(日本語など)にしてくれるのが素晴らしいです。

translate_chat_func.py

import json
import boto3

translate = boto3.client('translate')

def lambda_handler(event, context):
    try:
        # Connectから渡ってくるパラメータを取得
        message = event['Details']['Parameters']['Message']
        target_language = event['Details']['Parameters']['TargetLanguageCode'] # 例: 'ja'

        # Amazon Translateで翻訳実行
        # SourceLanguageCode='auto' にしておけば勝手に判別
        response = translate.translate_text(
            Text=message,
            SourceLanguageCode='auto', 
            TargetLanguageCode=target_language
        )
        
        translated_text = response['TranslatedText']
        source_language_used = response['SourceLanguageCode']

        # Connectに返す
        return {
            'translatedText': translated_text,
            'sourceLanguage': source_language_used
        }

    except Exception as e:
        print(f"Error during translation: {e}")
        # エラー時はとりあえず元のテキストを返す
        return {
            'translatedText': f"[翻訳エラー] {message}", 
            'sourceLanguage': 'unknown'
        }

2. デプロイはIaCで(CloudFormation)

手動でポチポチ設定するのもいいですがIAMロールの設定ミスは命取り。
ここはCloudFormationで確実に行きます。

template.yaml (抜粋)

Resources:
  # 1. Lambda実行用IAMロール
  TranslationLambdaExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal: { Service: 'lambda.amazonaws.com' }
            Action: 'sts:AssumeRole'
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
      Policies:
        - PolicyName: AmazonTranslateAccessPolicy
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Action: 'translate:TranslateText' # ここ重要
                Resource: '*'

  # 2. 翻訳Lambda関数本体
  RealTimeTranslationLambda:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: !Sub "${AWS::StackName}-ChatTranslator"
      Handler: 'index.lambda_handler'
      Role: !GetAtt TranslationLambdaExecutionRole.Arn
      Runtime: python3.9
      Timeout: 15
      Code:
        S3Bucket: your-code-bucket
        S3Key: translation_lambda.zip
      
  # 3. ConnectからLambdaを呼び出せるようにする権限
  ConnectInvokePermission:
    Type: AWS::Lambda::Permission
    Properties:
      Action: 'lambda:InvokeFunction'
      FunctionName: !GetAtt RealTimeTranslationLambda.Arn
      Principal: 'connect.amazonaws.com'
      # 自身のインスタンスARNに書き換えてください
      SourceArn: !Sub 'arn:aws:connect:${AWS::Region}:${AWS::AccountId}:instance/${ConnectInstanceId}/*'

これでデプロイすれば、権限周りも含めて環境が一発で整います。

3. 仕上げ:Connectのフローに組み込む

あとはAmazon Connectの管理画面(コンタクトフロー)で設定するだけ。

  1. Lambda呼び出し: 作ったLambdaを呼び出すブロックを配置。入力パラメータに Message と TargetLanguageCode を渡します。
  2. 属性の設定: Lambdaから返ってきた translatedText を受け取る。
  3. 表示: オペレーターへの表示テキストに、その属性を埋め込む。

これだけで、オペレーターの画面には「翻訳された日本語」が表示されるようになります。

解放された現場

これでようやく、オペレーターは「翻訳サイトとの往復」という作業から解放されます。
AWS内で完結しているので、機密情報が外に漏れる心配もありません。

Amazon Translateには「Custom Terminology(専門用語辞書)」という機能もあるので、社内用語や製品名を登録しておけば、さらに翻訳精度が上がって便利です。

多言語対応したいがAIがネイティブに使えないという状況ならぜひ試してみてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?