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 終止支援

在仔細考慮之後,我們決定終止對 Amazon Pinpoint 的支援,自 2026 年 10 月 30 日起生效。自 2025 年 5 月 20 日起,Amazon Pinpoint 將不再接受新客戶。身為在 2025 年 5 月 20 日之前註冊服務的現有客戶,您可以繼續使用 Amazon Pinpoint 功能。2026 年 10 月 30 日之後,您將無法再使用 Amazon Pinpoint。

目前,客戶使用 Amazon Pinpoint 進行互動功能 (端點、客群、行銷活動、旅程和分析) 或其簡訊管道 APIs(SMS、MS、推送、WhatsApp 和文字轉語音訊息功能)。我們已為這兩組客戶建立了離職計劃。

這對您的意義

如果您使用的是 Amazon Pinpoint 參與功能 (端點、客群、行銷活動、旅程和分析),我們建議您遷移至 Amazon Connect 主動參與解決方案 (例如 Amazon Connect 對外行銷活動Amazon Connect 客戶設定檔),透過統一的效能追蹤和使用一個統一應用程式管理傳入 (例如客戶支援) 和對外 (例如主動通訊) 的能力,跨管道推動個人化、及時的參與。如果您使用事件收集和行動分析,我們建議您使用 Amazon Kinesis

Amazon Pinpoint 通訊管道 (SMS、MS、推送、WhatsApp 和文字轉語音訊息功能) 在 2024 Q3 季重新命名為AWS 最終使用者傳訊,並將繼續滿足開發人員與客戶傳遞訊息的需求。與 SMS、語音、行動推播、OTP 和電話號碼驗證相關的 APIs 使用不受此變更影響。如果您使用 Amazon Pinpoint 傳送電子郵件,我們建議您遷移至 Amazon Simple Email Service (SES)。如果您在 Amazon Pinpoint 中使用電子郵件可交付性儀表板,我們將在 2026 年 10 月 30 日之前在 SES 中提供類似的功能。

遷移步驟:Amazon Pinpoint 參與的轉換功能

尋求參與功能的客戶

若要使用 Amazon Connect 的主動參與功能,包括客群、訊息範本、行銷活動、旅程、分析,請遵循本指南將 Amazon Pinpoint 參與功能遷移至 Amazon Connect。

遷移端點和區段

Amazon Pinpoint 端點可以建模為 Amazon Connect 客戶設定檔。客戶設定檔可讓您將多個端點合併為單一設定檔,最多允許將 3 個電子郵件地址和 4 個電話號碼建模為單一設定檔。若要遷移端點,您可以

  1. 建立不含篩選條件的 Amazon Pinpoint 客群,有效涵蓋您的所有端點。

  2. 將該區段匯出至 S3 儲存貯體或本機電腦。

  3. 將轉換後的端點上傳至客戶設定檔,並使用客戶設定檔的 S3 連接器在客戶設定檔中建立資料整合

如果您想要在單一客戶設定檔下彙總端點,您可以剖析下載的 Amazon Pinpoint 區段,以收集單一設定檔下的電子郵件地址和電話號碼。以下是範例 Python 指令碼,以讀取 JSON 格式匯出的檔案,並建立可匯入客戶設定檔的設定檔。

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)

遷移頻道組態

依照加入步驟,在 Amazon Connect 中啟用簡訊電子郵件通訊。

遷移範本

Amazon Connect 中的範本使用與 Amazon Pinpoint 相同的訊息轉譯引擎 (控點)。不過,屬性預留位置的表示方式不同。

  1. 您可以使用現有的 Amazon Pinpoint APIs 來擷取範本 (例如 get-email-templateget-sms-template)。或者,您可以遵循本指南來編輯範本,以便複製其內容。

  2. 擷取範本之後,請更新其預留位置。例如,您先前使用的 Amazon Pinpoint 範本使用如 的預留位置{{User.UserAttributes.PurchaseHistory}}。這些現在可以變更為 {{Attributes.Customer.Attributes.PurchaseHistory}}

  3. 接著,使用 create-message-template API 或本指南建立訊息範本,在 Amazon Connect 中的 Q 中建立範本。

若要映射屬性,請遵循您先前將端點映射至設定檔時所做的映射,字首為 Attributes.Customer

遷移行銷活動

對於每個行銷活動,我們建議您使用 get-campaign API 來擷取其定義,然後使用行銷活動建立指南在 Amazon Connect 中重新建立它。 https://docs.aws.amazon.com/connect/latest/adminguide/how-to-create-campaigns.html

遷移旅程

Amazon Connect 尚未完全支援旅程。如果可以使用 Amazon Connect Campaigns 解決旅程使用案例,建議您評估這些案例。如果是,請遵循上述類似的方法,使用 get-journey API 來擷取其定義,然後使用行銷活動建立指南在 Amazon Connect 中重新建立它。

事件收集和行動分析客戶

Amplify SDK 客戶

如果您使用 Amplify SDK 將事件傳送至 Amazon Pinpoint 以更新端點、觸發行銷活動或旅程,或分析應用程式的使用情況,則可以使用 Kinesis 遷移至 。使用 Kinesis,您可以將事件串流到您選擇的運算平台,將更新傳送到客戶設定檔,以更新應用程式使用者的設定檔並觸發 Amazon Connect 行銷活動。

Put-Events 客戶

如果您只使用 Amazon Pinpoint 將事件從 Web/行動應用程式串流到 Kinesis 串流,您現在可以使用 Amplify SDK 將事件直接串流到 Kinesis。

無法使用的功能

目前,Amazon Connect 不提供下列 Amazon Pinpoint 參與功能。

  • 應用程式內傳訊

  • 行銷活動中的 PUSH (GCM、APNS、BAIDU 等) 通知

  • 自訂頻道

  • 匯入的區段

  • 旅程

離職步驟:將資料匯出至第三方

如果您想要刪除所有 Amazon Pinpoint 資料,只要使用 delete-app API 刪除應用程式即可。接下來,請使用本指南刪除範本,刪除任何未使用的訊息範本。

或者,如果您想要擷取並存放所有資源,請依照下列步驟進行。

端點

若要將端點移出,您可以

  • 建立不含篩選條件的 Amazon Pinpoint 客群,有效涵蓋您的所有端點。

  • 將該區段匯出至 S3 儲存貯體或本機電腦。

客群、行銷活動和旅程

若要下機您的客群、行銷活動和旅程,請使用我們的 APIs或 UI 來擷取它們。為此,您可以使用我們的 get-segmentget-campaignget-journey APIs。

訊息範本

若要退出範本,您可以使用 list-templates API,後面接著頻道特定的 APIs -

Amazon Pinpoint 和行動分析

若要從 Amazon Pinpoint Analytics 或 Mobile Analytics 卸載您的事件和 KPIs,您可以使用下列選項:

  1. 若要在遷移之前匯出未來的原始事件,客戶可以加入事件資料串流。

  2. 客戶可以使用下列命令匯出過去 3 個月的 KPIs:

對於需要在遷移過程中刪除 Mobile Analytics 應用程式的客戶,您可以使用下列 Python 指令碼。此指令碼使用 AWS Signature 第 4 版來驗證 Mobile Analytics API。

  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 應用程式執行此操作。

注意

作用中的 Mobile Analytics 客戶可以繼續透過 putEvents API 擷取事件,並在 Amazon Pinpoint 中檢視它們,直到 Amazon Pinpoint 支援結束日期為止。

Summary

擁有至少一個 Amazon Pinpoint 帳戶的組織可以繼續使用 Amazon Pinpoint 參與功能,包括客群、行銷活動、旅程、分析和電子郵件,直到 2026 年 10 月 30 日服務支援結束為止。

其他資源

可使用下列其他資源:

如果您需要協助或有意見回饋,請聯絡 AWS 支援