Amazon Connectのフローブロックのみで実装する特定番号・非通知の着信拒否設定方法

Amazon Connectのフローブロックのみで実装する特定番号・非通知の着信拒否設定方法

Clock Icon2025.03.26

はじめに

Amazon Connectのフローブロックのみで特定の番号と非通知に対して着信拒否設定を行う方法を紹介します。

ConnectフローからAWS Lambdaを呼び出し、着信拒否番号を保存したAmazon DynamoDBやAmazon S3バケットからデータを取得し、拒否リストに一致した場合は、そのまま切断する方法が、以下のAWS公式サイトや弊社ブログで紹介されています。

https://repost.aws/ja/knowledge-center/connect-deny-list-numbers

https://aws.amazon.com/jp/blogs/news/identify-and-move-unwelcomed-calls-on-your-amazon-connect-instance/

https://dev.classmethod.jp/articles/amazon-connect-deny-list/

Lambdaの開発や運用保守の負担を考慮し、今回はLambdaを使用せず、Connectフローのブロックのみで特定の番号と非通知に対して着信拒否設定を行う方法をご紹介します。

Connectフロー

フローは、コンタクトフロータイプとモジュールタイプの2種類を作成します。

コンタクトフローでは、着信拒否用のモジュールを用意し、このモジュールで着信拒否を処理します。着信拒否番号ではない場合、その旨がプロンプトで再生されます。

cm-hirai-screenshot 2025-03-21 14.56.18

フロー(クリックで展開)
{
  "Version": "2019-10-30",
  "StartAction": "b96f7f07-17d6-47a7-a658-3607973b10cd",
  "Metadata": {
    "entryPointPosition": {
      "x": 40,
      "y": 40
    },
    "ActionMetadata": {
      "bfeebb44-6907-44df-801e-e6c8ec42a2f6": {
        "position": {
          "x": 370.4,
          "y": 68.8
        },
        "children": [
          "c68ab95d-d39a-4e5f-b67d-c79f844911cf"
        ],
        "overrideConsoleVoice": true,
        "fragments": {
          "SetContactData": "c68ab95d-d39a-4e5f-b67d-c79f844911cf"
        },
        "overrideLanguageAttribute": true
      },
      "c68ab95d-d39a-4e5f-b67d-c79f844911cf": {
        "position": {
          "x": 370.4,
          "y": 68.8
        },
        "dynamicParams": []
      },
      "b96f7f07-17d6-47a7-a658-3607973b10cd": {
        "position": {
          "x": 148.8,
          "y": 67.2
        }
      },
      "70ecf59f-276e-47be-9c5e-d141441ffd18": {
        "position": {
          "x": 578.4,
          "y": 68.8
        }
      },
      "ca99263c-4027-4ffb-8804-08514b05a1da": {
        "position": {
          "x": 355.2,
          "y": 249.6
        },
        "parameters": {
          "FlowModuleId": {
            "displayName": "cm-hirai-call-screening-module"
          }
        },
        "contactFlowModuleName": "cm-hirai-call-screening-module"
      },
      "ddff9b3e-19fd-4eec-b8d6-268a3b8df700": {
        "position": {
          "x": 582.4,
          "y": 245.6
        }
      },
      "f593cb3a-220a-4d57-a381-e411f4ebc48e": {
        "position": {
          "x": 828,
          "y": 308
        }
      }
    },
    "Annotations": [],
    "name": "cm-hirai-call-screening",
    "description": "",
    "type": "contactFlow",
    "status": "PUBLISHED",
    "hash": {}
  },
  "Actions": [
    {
      "Parameters": {
        "TextToSpeechEngine": "Neural",
        "TextToSpeechStyle": "None",
        "TextToSpeechVoice": "Kazuha"
      },
      "Identifier": "bfeebb44-6907-44df-801e-e6c8ec42a2f6",
      "Type": "UpdateContactTextToSpeechVoice",
      "Transitions": {
        "NextAction": "c68ab95d-d39a-4e5f-b67d-c79f844911cf"
      }
    },
    {
      "Parameters": {
        "LanguageCode": "ja-JP"
      },
      "Identifier": "c68ab95d-d39a-4e5f-b67d-c79f844911cf",
      "Type": "UpdateContactData",
      "Transitions": {
        "NextAction": "70ecf59f-276e-47be-9c5e-d141441ffd18",
        "Errors": [
          {
            "NextAction": "70ecf59f-276e-47be-9c5e-d141441ffd18",
            "ErrorType": "NoMatchingError"
          }
        ]
      }
    },
    {
      "Parameters": {
        "FlowLoggingBehavior": "Enabled"
      },
      "Identifier": "b96f7f07-17d6-47a7-a658-3607973b10cd",
      "Type": "UpdateFlowLoggingBehavior",
      "Transitions": {
        "NextAction": "bfeebb44-6907-44df-801e-e6c8ec42a2f6"
      }
    },
    {
      "Parameters": {
        "RecordingBehavior": {
          "RecordedParticipants": [
            "Agent",
            "Customer"
          ],
          "IVRRecordingBehavior": "Enabled"
        },
        "AnalyticsBehavior": {
          "Enabled": "True",
          "AnalyticsLanguage": "ja-JP",
          "AnalyticsRedactionBehavior": "Disabled",
          "AnalyticsRedactionResults": "None",
          "ChannelConfiguration": {
            "Chat": {
              "AnalyticsModes": [
                "ContactLens"
              ]
            },
            "Voice": {
              "AnalyticsModes": [
                "PostContact"
              ]
            }
          },
          "SummaryConfiguration": {
            "SummaryModes": [
              "PostContact"
            ]
          }
        }
      },
      "Identifier": "70ecf59f-276e-47be-9c5e-d141441ffd18",
      "Type": "UpdateContactRecordingBehavior",
      "Transitions": {
        "NextAction": "ca99263c-4027-4ffb-8804-08514b05a1da"
      }
    },
    {
      "Parameters": {
        "FlowModuleId": "8eefe117-8e53-46f8-8074-570a381ec67e"
      },
      "Identifier": "ca99263c-4027-4ffb-8804-08514b05a1da",
      "Type": "InvokeFlowModule",
      "Transitions": {
        "NextAction": "ddff9b3e-19fd-4eec-b8d6-268a3b8df700",
        "Errors": [
          {
            "NextAction": "ddff9b3e-19fd-4eec-b8d6-268a3b8df700",
            "ErrorType": "NoMatchingError"
          }
        ]
      }
    },
    {
      "Parameters": {
        "Text": "電話番号は問題ありません。"
      },
      "Identifier": "ddff9b3e-19fd-4eec-b8d6-268a3b8df700",
      "Type": "MessageParticipant",
      "Transitions": {
        "NextAction": "f593cb3a-220a-4d57-a381-e411f4ebc48e",
        "Errors": [
          {
            "NextAction": "f593cb3a-220a-4d57-a381-e411f4ebc48e",
            "ErrorType": "NoMatchingError"
          }
        ]
      }
    },
    {
      "Parameters": {},
      "Identifier": "f593cb3a-220a-4d57-a381-e411f4ebc48e",
      "Type": "DisconnectParticipant",
      "Transitions": {}
    }
  ]
}

モジュールでは、[コンタクト属性を確認する]ブロックを利用し、非通知や着信拒否したい番号を[チェックする条件]に記載します。

cm-hirai-screenshot 2025-03-21 14.56.23

cm-hirai-screenshot 2025-03-21 15.20.50

フロー(クリックで展開)
{
  "Version": "2019-10-30",
  "StartAction": "3ea043d8-db5f-4d33-bc0b-a1b1ae73bb46",
  "Metadata": {
    "entryPointPosition": {
      "x": 40,
      "y": 40
    },
    "ActionMetadata": {
      "e94e7311-baf6-4ee3-9bb6-52bf38e401dd": {
        "position": {
          "x": 400,
          "y": 84.8
        }
      },
      "6cb14d6f-2790-46c2-a94a-a9fb01c3f87e": {
        "position": {
          "x": 398.4,
          "y": 210.4
        }
      },
      "3ea043d8-db5f-4d33-bc0b-a1b1ae73bb46": {
        "position": {
          "x": 168.8,
          "y": 67.2
        },
        "conditions": [],
        "conditionMetadata": [
          {
            "id": "9c2467a9-0042-429f-b1e3-14de49849dea",
            "operator": {
              "name": "Equals",
              "value": "Equals",
              "shortDisplay": "="
            },
            "value": "anonymous"
          },
          {
            "id": "4aa84ce8-e252-4776-b79b-e032b71c61ce",
            "operator": {
              "name": "Equals",
              "value": "Equals",
              "shortDisplay": "="
            },
            "value": "+8190xxxxxxxx"
          },
          {
            "id": "af6116fd-3800-498e-81f6-66ff70aecf87",
            "operator": {
              "name": "Equals",
              "value": "Equals",
              "shortDisplay": "="
            },
            "value": "+8190xxxxxxxy"
          }
        ]
      }
    },
    "Annotations": [],
    "name": "cm-hirai-call-screening-module",
    "description": "",
    "status": "published",
    "hash": {}
  },
  "Actions": [
    {
      "Parameters": {},
      "Identifier": "e94e7311-baf6-4ee3-9bb6-52bf38e401dd",
      "Type": "DisconnectParticipant",
      "Transitions": {}
    },
    {
      "Parameters": {},
      "Identifier": "6cb14d6f-2790-46c2-a94a-a9fb01c3f87e",
      "Type": "EndFlowModuleExecution",
      "Transitions": {}
    },
    {
      "Parameters": {
        "ComparisonValue": "$.CustomerEndpoint.Address"
      },
      "Identifier": "3ea043d8-db5f-4d33-bc0b-a1b1ae73bb46",
      "Type": "Compare",
      "Transitions": {
        "NextAction": "6cb14d6f-2790-46c2-a94a-a9fb01c3f87e",
        "Conditions": [
          {
            "NextAction": "e94e7311-baf6-4ee3-9bb6-52bf38e401dd",
            "Condition": {
              "Operator": "Equals",
              "Operands": [
                "anonymous"
              ]
            }
          },
          {
            "NextAction": "e94e7311-baf6-4ee3-9bb6-52bf38e401dd",
            "Condition": {
              "Operator": "Equals",
              "Operands": [
                "+8190xxxxxxxx"
              ]
            }
          },
          {
            "NextAction": "e94e7311-baf6-4ee3-9bb6-52bf38e401dd",
            "Condition": {
              "Operator": "Equals",
              "Operands": [
                "+8190xxxxxxxy"
              ]
            }
          }
        ],
        "Errors": [
          {
            "NextAction": "6cb14d6f-2790-46c2-a94a-a9fb01c3f87e",
            "ErrorType": "NoMatchingCondition"
          }
        ]
      }
    }
  ],
  "Settings": {
    "InputParameters": [],
    "OutputParameters": [],
    "Transitions": [
      {
        "DisplayName": "Success",
        "ReferenceName": "Success",
        "Description": ""
      },
      {
        "DisplayName": "Error",
        "ReferenceName": "Error",
        "Description": ""
      }
    ]
  }
}

非通知の場合、anonymousと設定します。

着信拒否設定されている電話番号や非通知で電話をかけると、即座に切断されます。

着信拒否したい番号の設定数上限

非通知や着信拒否したい番号を[チェックする条件]に記載する際、設定可能な上限数に明確な制限はありません。

そのため、必要な数だけ設定できます。

ただし、フローをエクスポートする場合、ファイル上限は1MBのため、1フロー内が巨大になりすぎるとエクスポートできなくなります。この点にもご留意ください。

https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/contact-flow-import-export.html#contact-flow-export-limitations

フローは、次の要件を満たしている場合にエクスポートできます。
フローのブロック数が 100 未満である。
フローの合計サイズが 1 MB 未満でである。

試してみる

実際に電話をかけて検証しました。着信拒否設定されていない電話番号の場合、問題なくプロンプトが再生されました。

着信拒否設定している電話番号や非通知で電話すると、プロンプトが再生されず、即切断されました。
即切断された際のフローログでは、以下の通り、非通知であればanonymousと判定されています。

Connectフローログ
{
    "Results": "true",
    "ContactId": "cc1c9ec8-bae9-47fd-862d-06033e8a186e",
    "ContactFlowId": "arn:aws:connect:ap-northeast-1:111111111111:instance/3ff2093d-af96-43fd-b038-3c07cdd7609c/flow-module/8eefe117-8e53-46f8-8074-570a381ec67e",
    "ContactFlowName": "cm-hirai-call-screening-module",
    "ContactFlowModuleType": "CheckAttribute",
    "Identifier": "24a491d7-918a-4b65-b673-3558f93dcbe7",
    "Timestamp": "2025-03-21T04:28:38.956Z",
    "Parameters": {
        "Value": "anonymous",
        "SecondValue": "anonymous",
        "ComparisonMethod": "Equals"
    },

Connectフローのみで着信拒否設定する考慮点

現状、Amazon Connectの標準機能のみでは、着信拒否の電話番号を一覧化して管理することができません。
また、昇順・降順での管理ができないため、着信拒否の電話番号が増えると、拒否番号の一覧性が低下します。

そのため、着信を拒否する番号の数が増大することが予想される場合、コンタクトフロー上のみでの管理では限界があります。
S3バケットやDynamoDBを使用して電話番号のリストを管理する方法を検討してください。

特に、大量の着信拒否番号を効率的に管理する必要がある場合は、DynamoDBのようなデータストアを用意し、判定処理をLambdaで実装することをお勧めします。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.