🐧

LambdaとAmazon Connectを使って自動音声で架電してみた

2022/01/13に公開

はじめに

こんにちは、クラスメソッド AWS事業本部の筧です。

クラスメソッドではベストエフォート型ではありますが、メンバーズのお客様の AWS アカウントで不正利用が発生した場合の対応支援を実施しています。そして対応支援の中で、メンバーズポータルに登録いただいている緊急連絡先電話番号に、不正利用発生の旨を電話連絡するというタスクを設けています。

こちらの緊急連絡をより迅速にお客様にできるよう、Amazon Connect を利用した自動音声による電話連絡を検討しています。検討にあたり、Lambda から Amazon Connect を使って自動音声で架電する仕組みを開発したのでご紹介します。

https://classmethod.jp/services/members/

https://aws.amazon.com/jp/premiumsupport/knowledge-center/potential-account-compromise/

仕組み

Amazon Connect

電話番号は取得済みの前提で進めます。下図のような問い合わせフローを作成します。送信先電話番号に「テスト」というプロンプトを再生して切断するだけのフローです。

問い合わせフローの画面から、後ほど利用するインスタンスIDとコンタクトフローIDをメモします。
一つ目のコード表記がインスタンスIDで、二つ目のコード表記がコンタクトフローIDです。

arn:aws:connect:ap-northeast-1:xxxxxxxxxxx:instance/xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/contact-flow/846ec553-a005-41c0-8341-xxxxxxxxxxxx

Lambda

Lambda のコードは以下です。今後開発予定のツールの該当処理を記載しています。

src/services/connect.py
import logging
import traceback
from typing import Dict, List, Optional

import boto3.session
from botocore.config import Config
from mypy_boto3_connect.client import ConnectClient

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


def _format_traceback_str(exception: Exception) -> str:
    tb = traceback.TracebackException.from_exception(exception)
    return "".join(list(tb.format()))


class ConnectService:
    def __init__(self):
        self.session = boto3.session.Session()
        self.client: ConnectClient = self.session.client("connect", config=Config())

    def start_outbound_voice_contact(
        self,
        destination_phone_number: str,
        contact_flow_id: str,
        instance_id: str,
        source_phone_number: str,
    ) -> str:
        """
        refs: https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/connect.html#Connect.Client.start_outbound_voice_contact
        """
        resp = self.client.start_outbound_voice_contact(
            DestinationPhoneNumber=str(destination_phone_number),
            ContactFlowId=str(contact_flow_id),
            InstanceId=str(instance_id),
            SourcePhoneNumber=str(source_phone_number),
        )
        return resp["ContactId"]

Amazon Connect で架電するインスタンスメソッド start_outbound_voice_contact の引数は以下のように設定します。

  • DestinationPhoneNumber
    • 必須
    • 送信先電話番号
    • E.164形式にする ex: +81312345678
  • ContactFlowId
    • 必須
    • コンタクトフローID
  • InstanceId
    • 必須
    • インスタンスID
  • SourcePhoneNumber
    • 任意
    • 送信元電話番号
    • E.164形式にする

あとがき

今回は Lambda を実行すると、Amazon Connect を利用して送信先電話番号に「テスト」というプロンプトを再生して切断する仕組みを作成しました。次のステップとしては、Slack コマンドで当該サービスを呼び出す仕組みを実装する予定です。実装したらブログも書こうと思います。

それではまた!

参考

https://dev.classmethod.jp/articles/amazon-connect-calling-lambda-and-subscribe-lambda/

Discussion