View a markdown version of this page

Amazon Pinpoint のサポート終了 - Amazon Pinpoint

サポート終了通知: 2026 年 10 月 30 日に、 AWS は Amazon Pinpoint のサポートを終了します。2026 年 10 月 30 日を過ぎると、Amazon Pinpoint コンソールまたは Amazon Pinpoint のリソース (エンドポイント、セグメント、キャンペーン、ジャーニー、分析) にアクセスできなくなります。詳細については、「Amazon Pinpoint のサポート終了」を参照してください。注: SMS、音声、モバイルプッシュ、OTP、電話番号の検証に関連する APIs は、この変更の影響を受けず、 AWS エンドユーザーメッセージングでサポートされています。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon Pinpoint のサポート終了

熟考を重ねた結果、2026 年 10 月 30 日をもって Amazon Pinpoint のサポートを終了することを決定しました。2025 年 5 月 20 日以降、新規のお客様は Amazon Pinpoint にサインアップできなくなります。2025 年 5 月 20 日より前にこのサービスにサインアップしたアカウントをお持ちの既存のお客様は、引き続き Amazon Pinpoint の機能をご利用いただけます。2026 年 10 月 30 日以降、Amazon Pinpoint はご利用いただけなくなります。

現在、お客様はエンゲージメント機能 (エンドポイント、セグメント、キャンペーン、ジャーニー、分析)、またはメッセージングチャネル API (SMS、MMS、プッシュ、WhatsApp、テキストから音声へのメッセージング機能) のいずれかの目的で Amazon Pinpoint を利用しています。これらの両者のお客様に対して、オフボーディング計画を作成しました。

これが意味すること

Amazon Pinpoint エンゲージメント機能 (エンドポイント、セグメント、キャンペーン、ジャーニー、分析) を使用している場合は、Connect Customer プロアクティブエンゲージメントソリューション (Amazon Connect Customer アウトバウンドキャンペーンAmazon Connect Customer Profiles など) に移行して、統合されたパフォーマンス追跡と、1 つの統合アプリケーションを使用してインバウンド (カスタマーサポートなど) とアウトバウンド (プロアクティブコミュニケーションなど) を管理する機能を使用して、チャネル間でパーソナライズされたタイムリーなエンゲージメントを促進することをお勧めします。イベントコレクションとモバイル分析を使用している場合は、Amazon Kinesis を使用することをお勧めします。

Amazon Pinpoint コミュニケーションチャネル (SMS、MMS、プッシュ、WhatsApp、テキストから音声へのメッセージング機能) は、2024 年第 3 四半期に AWS End User Messaging へと名前が変更され、引き続き顧客とのメッセージ配信に関するデベロッパーのニーズに対応します。SMS、音声、モバイルプッシュ、OTP、電話番号の検証に関連する API の使用については、この変更による影響はありません。Amazon Pinpoint を使用して E メールを送信している場合は、Amazon Simple Email Service (SES) に移行することをお勧めします。Amazon Pinpoint で E メール配信性能ダッシュボードを使用している場合、2026 年 10 月 30 日までに SES で同様の機能が提供されます。

適切な移行パスの選択

Amazon Connect カスタマーアウトバウンドキャンペーンと Amazon Simple Email Service を使用した AWS エンドユーザーメッセージング (EUM) は、さまざまなユースケースに対応します。移行を開始する前に、ワークロードの特性を確認して、適切な送信先を決定します。

ワークロードに以下が含まれている場合は、Amazon Connect カスタマーアウトバウンドキャンペーンを検討してください。

  • 音声、SMS、E メール、WhatsApp にわたるパーソナライズされたカスタマーエンゲージメント

  • 予測ダイヤル、プログレッシブダイヤル、顧客セグメンテーションなどの AI 主導のコンタクト戦略

  • リアルタイムルーティングによるエージェントアシストアウトバウンド通話

  • 1 つのアプリケーションで調整されたインバウンドおよびアウトバウンドエンゲージメント

ワークロードに以下が含まれている場合は、 AWS エンドユーザーメッセージングと Amazon Simple Email Service を検討してください。

  • Amazon Connect Customer アウトバウンドキャンペーンの制限または保証された配信 SLAs「サービスクォータ」を参照)

  • エージェントの関与や AI 主導の決定は不要

  • 顧客セグメンテーション、問い合わせオーケストレーション、問い合わせ制限管理が不要

両方のパターンを組み合わせたワークロードでは、Amazon Connect Customer をエージェントアシストエンゲージメントに使用し、 AWS エンドユーザーメッセージングを Amazon Simple Email Service で使用して大量のトランザクション配信を行うことができます。

自動移行のサポートについては、 AWS 「 Marketplace での Pronetx 移行ツール」を参照してください。

移行ステップ: Amazon Pinpoint エンゲージメントの移行機能

エンゲージメント機能をご希望のお客様

セグメント、メッセージテンプレート、キャンペーン、ジャーニー、分析など、Connect Customer のプロアクティブなエンゲージメント機能を使用するには、このガイドに従って Amazon Pinpoint エンゲージメント機能を Connect Customer に移行してください。

エンドポイントとセグメントの移行

Amazon Pinpoint エンドポイントは、Connect Customer Profiles としてモデル化できます。Customer Profiles では、複数のエンドポイントを 1 つのプロファイルに結合できるため、最大 3 つの E メールアドレスと 4 つの電話番号を 1 つのプロファイルとしてモデル化できます。エンドポイントを移行するために、以下のことができます。

  1. フィルターなしで Amazon Pinpoint セグメントを作成し、すべてのエンドポイントを効果的に包含する。

  2. そのセグメントを S3 バケットまたはローカルマシンにエクスポートする。

  3. 変換されたエンドポイントを Customer Profiles にアップロードし、Customer Profiles の S3 コネクタを使用して Customer Profiles へのデータ統合を作成する

単一の Customer Profile でエンドポイントを集約する場合は、ダウンロードした Amazon Pinpoint セグメントを解析して、単一のプロファイルで E メールアドレスと電話番号を収集できます。エクスポートされたファイルを JSON 形式で読み取るためのサンプル Python スクリプトを次に示します。Customer Profiles にインポートできるプロファイルも用意しました。

from collections import defaultdict import json def process_pinpoint_endpoints(input_file, output_file): # Dictionary to store grouped endpoints by user ID grouped_endpoints = defaultdict(list) endpoints = [] # Read the input file with open(input_file, 'r') as file: for line in file: endpoints.append(json.loads(line)) # Group endpoints by user ID for endpoint in endpoints: user_id = endpoint.get('User', {}).get('UserId') if user_id: grouped_endpoints[user_id].append(endpoint) # Convert grouped endpoints to Customer Profiles format # We will assume the userId is stored as an AccountNumber # since the AccountNumber can be queried customer_profiles = [] for user_id, user_endpoints in grouped_endpoints.items(): profile = { 'AccountNumber': user_id, 'Attributes': {}, 'Address': {} } phone_numbers = set() email_addresses = set() output_dict = {} for endpoint in user_endpoints: # Extract attributes attributes = endpoint.get('Attributes', {}) for key, value_list in attributes.items(): if len(value_list) == 1: output_dict[key] = value_list[0] else: for i, item in enumerate(value_list): output_dict[f"{key}_{i}"] = item demographics = endpoint.get('Demographic') for key, value in demographics.items(): attributes[f"Demographic_{key}"] = value location = endpoint.get('Location', {}) profile['Address']['City'] = location['City'] profile['Address']['Country'] = location['Country'] profile['Address']['PostalCode'] = location['PostalCode'] profile['Address']['County'] = location['Region'] profile['Attributes']['Latitude'] = location['Latitude'] profile['Attributes']['Longitude'] = location['Longitude'] metrics = endpoint.get('Metrics', {}) for key, value in metrics.items(): profile['Attributes'][f"Metrics_{key}"] = str(value) user = endpoint.get('User', {}) user_attributes = user.get('UserAttributes', {}) for key, value_list in user_attributes.items(): if len(value_list) == 1: output_dict[key] = value_list[0] else: for i, item in enumerate(value_list): output_dict[f"UserAttributes.{key}_{i}"] = item profile['Attributes'].update(output_dict) # Extract phone number address = endpoint.get('Address') if (endpoint.get('ChannelType') == 'SMS' or endpoint.get('ChannelType') == 'VOICE') and address: phone_numbers.add(address) # Extract email address if endpoint.get('ChannelType') == 'EMAIL' and address: email_addresses.add(address) # Assigning the phone numbers to the different parameters in the Customer Profile for i, phone_number in enumerate(phone_numbers): if i == 0: profile['PhoneNumber'] = phone_number elif i == 1: profile['HomePhoneNumber'] = phone_number elif i == 2: profile['MobilePhoneNumber'] = phone_number elif i == 3: profile['BusinessPhoneNumber'] = phone_number else: profile['Attributes'][f"PhoneNumber_{i}"] = phone_number # Assigning the email addresses to the different parameters in the Customer Profile for i, email_address in enumerate(email_addresses): if i == 0: profile['EmailAddress'] = email_address elif i == 1: profile['PersonalEmailAddress'] = email_address elif i == 2: profile['BusinessEmailAddress'] = email_address else: profile['Attributes'][f"EmailAddress_{i}"] = email_address customer_profiles.append(profile) # Write the output to a file with open(output_file, 'w') as f: json.dump(customer_profiles, f, indent=2) print(f"Processed {len(endpoints)} endpoints into {len(customer_profiles)} customer profiles.") # Example usage input_file = 'pinpoint_endpoints.json' output_file = 'customer_profiles.json' process_pinpoint_endpoints(input_file, output_file)

チャネル設定の移行

Connect Customer で SMS および E メール通信を有効にするには、オンボーディングステップに従います。

テンプレートの移行

Connect Customer のテンプレートは、Amazon Pinpoint と同じメッセージレンダリングエンジン (ハンドルバー) を使用します。ただし、属性プレースホルダーの表現は異なります。

  1. 既存の Amazon Pinpoint API を使用して、テンプレート (get-email-templateget-sms-template など) を取得できます。または、こちらのガイドに従ってテンプレートを編集し、その内容をコピーすることもできます。

  2. テンプレートを取得したら、プレースホルダーを更新します。例えば、Amazon Pinpoint テンプレートでは、以前は {{User.UserAttributes.PurchaseHistory}} のようなプレースホルダーが使用されていました。これらは {{Attributes.Customer.Attributes.PurchaseHistory}} に変更できます。

  3. 次に、create-message-template API を使用するか、 このガイドを使用してメッセージテンプレートを作成することで、Q in Connect Customer でテンプレートを作成します。

属性をマッピングするには、前にエンドポイントをプロファイルにマッピングしたときに行ったマッピングに従い、Attributes.Customer のプレフィックスを付けます。

キャンペーンの移行

キャンペーンごとに、get-campaign API を使用して定義を取得し、キャンペーン作成ガイドを使用して Connect Customer で再作成することをお勧めします。

ジャーニーの移行

ジャーニーが Amazon Connect Customer アウトバウンドキャンペーンでサポートされるようになりました。Amazon Connect Customer キャンペーンオーケストレーション機能を使用してAmazon Connect Amazon Pinpoint ジャーニーを再作成できます。get-journey API を使用してジャーニー定義を取得し、Amazon Connect カスタマージャーニー作成ガイドを使用して再作成します。

イベント収集とモバイル分析のお客様

Amplify SDK のお客様

Amplify SDK を使用して Amazon Pinpoint にイベントを送信し、エンドポイントの更新、キャンペーンやジャーニーのトリガー、アプリケーションの使用状況の分析を行う場合は、Kinesis の使用に移行できます。Kinesis を使用すると、選択したコンピューティングプラットフォームにイベントをストリーミングして Customer Profiles に更新を送信し、アプリケーションユーザーのプロファイルを更新して Connect Customer キャンペーンをトリガーできます。

Put-Events のお客様

Amazon Pinpoint を使用してウェブ/モバイルアプリケーションから Kinesis ストリームにイベントをストリーミングするのみの場合、Amplify SDK を使用してイベントを Kinesis に直接ストリーミングできるようになりました。

使用できない機能

現時点では、以下の Amazon Pinpoint エンゲージメント機能は Connect Customer では使用できません。

  • アプリケーション内メッセージング

  • PUSH (GCM、APNS、BAIDU など) 通知は、キャンペーンではネイティブにサポートされていません。ただし、Amazon Connect カスタマープッシュテンプレートで Lambda アクションを使用して、ジャーニーを通じてプッシュ通知を送信できます。

  • カスタムチャネルはジャーニーで使用できますが、キャンペーンでは使用できません。

オフボーディングステップ: データをサードパーティーにエクスポートする

すべての Amazon Pinpoint データを削除する場合は、delete-app API を使用して自由にアプリケーションを削除できます。次に、テンプレートの削除に関するこちらのガイドに従って、未使用のメッセージテンプレートがあれば削除してください。

または、すべてのリソースを抽出して保存する場合は、以下の手順に従います。

エンドポイント

エンドポイントをオフボーディングする場合は、以下のことができます。

  • フィルターなしで Amazon Pinpoint セグメントを作成し、すべてのエンドポイントを効果的に包含する。

  • そのセグメントを S3 バケットまたはローカルマシンにエクスポートする。

セグメント、キャンペーン、およびジャーニー

セグメント、キャンペーン、およびジャーニーをオフボーディングするには、AWS の API または UI を使用してそれらを取得します。そのためには、get-segmentget-campaignget-journey の各 API を使用できます。

メッセージテンプレート

テンプレートをオフボーディングするには、list-templates API の後にチャネル固有の API を使用できます。

Amazon Pinpoint とモバイル分析

Amazon Pinpoint Analytics または Mobile Analytics からイベントと KPI をオフボーディングするには、次のオプションを使用できます。

  1. 移行前に将来の raw イベントをエクスポートするには、イベントデータストリームにオンボーディングできます。

  2. 次のコマンドを使用して、過去 3 か月間の KPI をエクスポートできます。

移行の一環として Mobile Analytics アプリケーションを削除する必要があるお客様は、次の Python スクリプトを使用できます。このスクリプトは AWS 、署名バージョン 4 を使用して Mobile Analytics API で認証し、Python 3.11 以降 (Python 3.11 のダウンロード) を必要とします。

  1. 次のスクリプトを delete_mobile_analytics_application.py として保存します。

    # Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. # # This file is licensed under the Apache License, Version 2.0 (the "License"). # You may not use this file except in compliance with the License. A copy of the # License is located at # # http://aws.amazon.com/apache2.0/ # # This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS # OF ANY KIND, either express or implied. See the License for the specific # language governing permissions and limitations under the License. # # ABOUT THIS PYTHON SAMPLE: This sample is part of the AWS General Reference # Signing AWS API Requests top available at # https://docs.aws.amazon.com/general/latest/gr/sigv4-signed-request-examples.html # # AWS Version 4 signing example # Delete Mobile Analytics application # See: http://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html # This version makes a DELETE request and passes the signature # in the Authorization header. import sys, os, base64, datetime, hashlib, hmac import requests # pip install requests import argparse # Parse command line arguments parser = argparse.ArgumentParser(description='Delete a Mobile Analytics application') parser.add_argument('--appId', type=str, help='Mobile Analytics application ID to be deleted', required=True) args = parser.parse_args() # ************* REQUEST VALUES ************* delimiter = "/" method = 'DELETE' service = 'mobileanalytics' host = 'mobileanalytics.us-east-1.amazonaws.com' region = 'us-east-1' appId = args.appId # Use the appId from command line arguments endpoint = 'https://mobileanalytics.us-east-1.amazonaws.com/2016-07-01/apps' + delimiter + appId request_parameters = '' # Function for signing. Refer the AWS documentation below for more details. # http://docs.aws.amazon.com/general/latest/gr/signature-v4-examples.html#signature-v4-examples-python def sign(key, msg): return hmac.new(key, msg.encode('utf-8'), hashlib.sha256).digest() # Function for computing signature key. Refer the AWS documentation below for more details. # http://docs.aws.amazon.com/general/latest/gr/signature-v4-examples.html#signature-v4-examples-python. def getSignatureKey(key, dateStamp, regionName, serviceName): kDate = sign(('AWS4' + key).encode('utf-8'), dateStamp) kRegion = sign(kDate, regionName) kService = sign(kRegion, serviceName) kSigning = sign(kService, 'aws4_request') return kSigning # Read AWS access key from environment variables or configuration file. Best practice is NOT # to embed credentials in code. access_key = os.environ.get('AWS_ACCESS_KEY_ID') secret_key = os.environ.get('AWS_SECRET_ACCESS_KEY') session_token = os.environ.get('AWS_SESSION_TOKEN') if access_key is None or secret_key is None: print('No access key is available.') sys.exit() # Create a date for headers and the credential string t = datetime.datetime.now(datetime.UTC) amzdate = t.strftime('%Y%m%dT%H%M%SZ') datestamp = t.strftime('%Y%m%d') # Date w/o time, used in credential scope # ************* TASK 1: CREATE A CANONICAL REQUEST ************* # http://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html # Step 1 is to define the verb (GET, POST, etc.)--already done with defining "method" variable above. # Step 2: Create canonical URI--the part of the URI from domain to query # string (use '/' if no path) canonical_uri = '/2016-07-01/apps' + delimiter + appId # Step 3: Create the canonical query string. In this example (a DELETE request), # request parameters are in the query string. Query string values must # be URL-encoded (space=%20). The parameters must be sorted by name. # For this example, the query string is pre-formatted in the request_parameters variable. canonical_querystring = request_parameters # Step 4: Create the canonical headers and signed headers. Header names # must be trimmed and lowercase, and sorted in code point order from # low to high. Note that there is a trailing \n. canonical_headers = 'host:' + host + '\n' + 'x-amz-date:' + amzdate + '\n' # Step 5: Create the list of signed headers. This lists the headers # in the canonical_headers list, delimited with ";" and in alpha order. # Note: The request can include any headers; canonical_headers and # signed_headers lists those that you want to be included in the # hash of the request. "Host" and "x-amz-date" are always required. signed_headers = 'host;x-amz-date' # Step 6: Create payload hash (hash of the request body content). For GET # requests, the payload is an empty string (""). payload_hash = hashlib.sha256(request_parameters.encode('utf-8')).hexdigest() # Step 7: Combine elements to create canonical request canonical_request = method + '\n' + canonical_uri + '\n' + canonical_querystring + '\n' + canonical_headers + '\n' + signed_headers + '\n' + payload_hash # ************* TASK 2: CREATE THE STRING TO SIGN************* # Match the algorithm to the hashing algorithm you use, either SHA-1 or # SHA-256 (recommended) algorithm = 'AWS4-HMAC-SHA256' credential_scope = datestamp + '/' + region + '/' + service + '/' + 'aws4_request' string_to_sign = algorithm + '\n' + amzdate + '\n' + credential_scope + '\n' + hashlib.sha256( canonical_request.encode('utf-8')).hexdigest() # ************* TASK 3: CALCULATE THE SIGNATURE ************* # Create the signing key using the function defined above. signing_key = getSignatureKey(secret_key, datestamp, region, service) # Compute signature by invoking hmac.new method by passing signingkey, string_to_sign signature = hmac.new(signing_key, string_to_sign.encode('utf-8'), hashlib.sha256).hexdigest() # ************* TASK 4: ADD SIGNING INFORMATION TO THE REQUEST ************* # The signing information can be either in a query string value or in # a header named Authorization. This code shows how to use a header. # Create authorization header and add to request headers authorization_header = algorithm + ' ' + 'Credential=' + access_key + '/' + credential_scope + ', ' + 'SignedHeaders=' + signed_headers + ', ' + 'Signature=' + signature # The request can include any headers, but MUST include "host", "x-amz-date", # and (for this scenario) "Authorization". "host" and "x-amz-date" must # be included in the canonical_headers and signed_headers, as noted # earlier. Order here is not significant. # Python note: The 'host' header is added automatically by the Python 'requests' library. headers = { 'x-amz-date': amzdate, 'accept': 'application/hal+json', 'content-type': 'application/json; charset=UTF-8', 'Authorization': authorization_header} if session_token: headers['X-Amz-Security-Token'] = session_token # ************* SEND THE REQUEST ************* request_url = endpoint + '?' + canonical_querystring print('\nBEGIN REQUEST++++++++++++++++++++++++++++++++++++') print('Request URL = ' + request_url) print('Request Headers = ', headers) r = requests.delete(request_url, data=request_parameters, headers=headers) print('\nRESPONSE++++++++++++++++++++++++++++++++++++') print('Response code: %d\n' % r.status_code) print(r.text)
  2. 有効な AWS 認証情報が環境変数として設定されていることを確認します。

  3. Mobile Analytics アプリケーション ID を使用してスクリプトを実行します。

    python delete_mobile_analytics_application.py --appId <YOUR_MOBILE_ANALYTICS_APP_ID>

このスクリプトは Mobile Analytics API に対して DELETE リクエストを行い、指定されたアプリケーションを削除します。これは、削除する必要がある Mobile Analytics アプリケーションごとに必ず実行してください。

注記

Active Mobile Analytics のお客様は、Amazon Pinpoint のサポート終了日まで、putEvents API を通じてイベントを引き続き取り込み、Amazon Pinpoint で表示できます。

概要

少なくとも 1 つの Amazon Pinpoint アカウントを持つ組織は、サービスのサポートが終了する 2026 年 10 月 30 日まで、セグメント、キャンペーン、ジャーニー、分析、E メールなど、Amazon Pinpoint のエンゲージメント機能を引き続き使用できます。

その他のリソース

以下の追加のリソースが利用可能です。

サポートが必要な場合やフィードバックが必要な場合は、AWS サポート にお問い合わせください。