

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

# メッセージを送信する
<a name="reference-send-message"></a>

 AWS エンドユーザーメッセージングプッシュ API は、トランザクションプッシュ通知を特定のデバイス識別子に送信できます。このセクションでは、 AWS SDK を使用して AWS エンドユーザーメッセージングプッシュ API を介してプッシュ通知を送信するために使用できる完全なコード例を示します。

これらの例を使用して、 AWS エンドユーザーメッセージングプッシュがサポートするプッシュ通知サービスを介してプッシュ通知を送信できます。現在、 AWS エンドユーザーメッセージングプッシュは、Firebase Cloud Messaging (FCM)、Apple Push Notification Service (APNs)、Baidu Cloud Push、Amazon Device Messaging (ADM) のチャネルをサポートしています。

エンドポイント、セグメント、チャネルのコード例の詳細については、「[コード例](https://docs.aws.amazon.com/pinpoint/latest/developerguide/service_code_examples.html)」を参照してください。

**注記**  
Firebase Cloud Messaging (FCM) サービスを介してプッシュ通知を送信する場合は、 AWS エンドユーザーメッセージングプッシュ API への呼び出し`GCM`でサービス名を使用します。Google Cloud Messaging (GCM) サービスは、2018 年 4 月 10 日に Google によって停止されました。ただし、 AWS エンドユーザーメッセージングプッシュ API は、GCM `GCM`サービスの中止前に記述された API コードとの互換性を維持するために、FCM サービスを介して送信するメッセージにサービス名を使用します。

------
#### [ GCM (AWS CLI) ]

次の例では、[send-messages](https://docs.aws.amazon.com/cli/latest/reference/pinpoint/send-messages.html) を使用して で GCM プッシュ通知を送信します AWS CLI。token をデバイスの一意のトークン**に置き換え、*611e3e3cdd47474c9c1399a50example* をアプリケーション識別子に置き換えます。

```
aws pinpoint send-messages \
--application-id 611e3e3cdd47474c9c1399a50example \
--message-request file://myfile.json \
--region us-west-2
      
Contents of myfile.json:
{
  "Addresses": {
    "token": {
      "ChannelType" : 'GCM'
    }
  },
  "MessageConfiguration": {
    "GCMMessage": {
      "Action": "URL",
      "Body": "This is a sample message",
      "Priority": "normal",
      "SilentPush": True,
      "Title": "My sample message",
      "TimeToLive": 30,
      "Url": "https://www.example.com"
      }
  }
}
```

次の例では、[send-messages](https://docs.aws.amazon.com/cli/latest/reference/pinpoint/send-messages.html) を使用して、 ですべてのレガシーキーを使用して GCM プッシュ通知を送信します AWS CLI。token をデバイスの一意のトークン**に置き換え、*611e3e3cdd47474c9c1399a50example* をアプリケーション識別子に置き換えます。

```
aws pinpoint send-messages \
--application-id 611e3e3cdd47474c9c1399a50example \ 
--message-request 
'{
  "MessageConfiguration": {
    "GCMMessage":{
      "RawContent": "{\"notification\": {\n \"title\": \"string\",\n \"body\": \"string\",\n \"android_channel_id\": \"string\",\n \"body_loc_args\": [\n \"string\"\n ],\n \"body_loc_key\": \"string\",\n \"click_action\": \"string\",\n \"color\": \"string\",\n \"icon\": \"string\",\n \"sound\": \"string\",\n \"tag\": \"string\",\n \"title_loc_args\": [\n \"string\"\n ],\n \"title_loc_key\": \"string\"\n },\"data\":{\"message\":\"hello in data\"} }", 
      "TimeToLive" : 309744
     }
   }, 
  "Addresses": {
    "token": {
      "ChannelType":"GCM"
      }
   }
}'
\ --region us-east-1
```

次の例では、[send-messages](https://docs.aws.amazon.com/cli/latest/reference/pinpoint/send-messages.html) を使用して、 を使用して FCMv1 メッセージペイロードで GCM プッシュ通知を送信します AWS CLI。token をデバイスの一意のトークン**に置き換え、*611e3e3cdd47474c9c1399a50example* をアプリケーション識別子に置き換えます。

```
aws pinpoint send-messages \
--application-id 6a2dafd84bec449ea75fb773f4c41fa1 \
--message-request 
'{
  "MessageConfiguration": {
    "GCMMessage":{
      "RawContent": "{\n \"fcmV1Message\": \n {\n \"message\" :{\n  \"notification\": {\n \"title\": \"string\",\n \"body\": \"string\"\n },\n \"android\": {\n \"priority\": \"high\",\n \"notification\": {\n \"title\": \"string\",\n \"body\": \"string\",\n \"icon\": \"string\",\n \"color\": \"string\",\n \"sound\": \"string\",\n \"tag\": \"string\",\n \"click_action\": \"string\",\n \"body_loc_key\": \"string\",\n \"body_loc_args\": [\n \"string\"\n ],\n \"title_loc_key\": \"string\",\n \"title_loc_args\": [\n \"string\"\n ],\n \"channel_id\": \"string\",\n \"ticker\": \"string\",\n \"sticky\": true,\n \"event_time\": \"2024-02-06T22:11:55Z\",\n \"local_only\": true,\n \"notification_priority\": \"PRIORITY_UNSPECIFIED\",\n \"default_sound\": false,\n \"default_vibrate_timings\": true,\n \"default_light_settings\": false,\n \"vibrate_timings\": [\n \"22s\"\n ],\n \"visibility\": \"VISIBILITY_UNSPECIFIED\",\n \"notification_count\": 5,\n \"light_settings\": {\n \"color\": {\n \"red\": 1,\n \"green\": 2,\n \"blue\": 3,\n \"alpha\": 6\n },\n \"light_on_duration\": \"112s\",\n \"light_off_duration\": \"1123s\"\n },\n \"image\": \"string\"\n },\n \"data\": {\n \"dataKey1\": \"priority message\",\n \"data_key_3\": \"priority message\",\n \"dataKey2\": \"priority message\",\n \"data_key_5\": \"priority message\"\n },\n \"ttl\": \"10023.32s\"\n },\n \"apns\": {\n \"payload\": {\n \"aps\": {\n \"alert\": {\n \"subtitle\": \"string\",\n \"title-loc-args\": [\n \"string\"\n ],\n \"title-loc-key\": \"string\",\n \"launch-image\": \"string\",\n \"subtitle-loc-key\": \"string\",\n \"subtitle-loc-args\": [\n \"string\"\n ],\n \"loc-args\": [\n \"string\"\n ],\n \"loc-key\": \"string\",\n \"title\": \"string\",\n \"body\": \"string\"\n },\n \"thread-id\": \"string\",\n \"category\": \"string\",\n \"content-available\": 1,\n \"mutable-content\": 1,\n \"target-content-id\": \"string\",\n \"interruption-level\": \"string\",\n \"relevance-score\": 25,\n \"filter-criteria\": \"string\",\n \"stale-date\": 6483,\n \"content-state\": {},\n \"timestamp\": 673634,\n \"dismissal-date\": 4,\n \"attributes-type\": \"string\",\n \"attributes\": {},\n \"sound\": \"string\",\n \"badge\": 5\n }\n }\n },\n \"webpush\": {\n \"notification\": {\n \"permission\": \"granted\",\n \"maxActions\": 2,\n \"actions\": [\n \"title\"\n ],\n \"badge\": \"URL\",\n \"body\": \"Hello\",\n \"data\": {\n \"hello\": \"hey\"\n },\n \"dir\": \"auto\",\n \"icon\": \"icon\",\n \"image\": \"image\",\n \"lang\": \"string\",\n \"renotify\": false,\n \"requireInteraction\": true,\n \"silent\": false,\n \"tag\": \"tag\",\n \"timestamp\": 1707259524964,\n \"title\": \"hello\",\n \"vibrate\": [\n 100,\n 200,\n 300\n ]\n },\n \"data\": {\n \"data1\": \"priority message\",\n \"data2\": \"priority message\",\n \"data12\": \"priority message\",\n \"data3\": \"priority message\"\n }\n },\n \"data\": {\n \"data7\": \"priority message\",\n \"data5\": \"priority message\",\n \"data8\": \"priority message\",\n \"data9\": \"priority message\"\n }\n }\n \n}\n}", 
      "TimeToLive" : 309744
    }
  }, 
  "Addresses": {
    token: {
      "ChannelType":"GCM"
    }
   }
}'
\ --region us-east-1
```

GCM に `ImageUrl`フィールドを使用する場合、pinpoint はキーが であるフィールドをデータ通知として送信します。これにより`pinpoint.notification.imageUrl`、イメージがすぐにレンダリングされない場合があります。RawContent を使用するか、アプリとの統合などのデータキーの処理を追加してください AWS Amplify。

------
#### [ Safari (AWS CLI) ]

 AWS エンドユーザーメッセージングプッシュを使用して、Apple の Safari ウェブブラウザを使用する macOS コンピュータにメッセージを送信できます。Safari ブラウザにメッセージを送信するには、Raw メッセージの内容を指定し、メッセージのペイロードに特定の属性を含める必要があります。これを行うには、*Amazon Pinpoint ユーザーガイド*の [raw メッセージペイロードを使用してプッシュ通知テンプレートを作成する](https://docs.aws.amazon.com//pinpoint/latest/userguide/message-templates-creating-push.html#message-templates-creating-push-raw)か、[キャンペーン](https://docs.aws.amazon.com//pinpoint/latest/userguide/campaigns-message.html#campaigns-message-push)メッセージで raw メッセージの内容を直接指定します。

**注記**  
この特別な属性は、Safari ウェブブラウザを使用する macOS ラップトップおよびデスクトップコンピュータに送信するために必要です。iPhone や iPad などの iOS デバイスへの送信には必要ありません。

Safari ウェブブラウザにメッセージを送信するには、Raw メッセージペイロードを指定する必要があります。Raw メッセージのペイロードは、`aps` オブジェクト内に `url-args` 配列を含む必要があります。`url-args` 配列は、Safariウェブブラウザにプッシュ通知を送信するために必要です。ただし、配列に空の要素が 1 つ含まれていてもかまいません。

次の例では、[send-messages](https://docs.aws.amazon.com/cli/latest/reference/pinpoint/send-messages.html) を使用して、 を使用して Safari ウェブブラウザに通知を送信します AWS CLI。token をデバイスの一意のトークン**に置き換え、*611e3e3cdd47474c9c1399a50example* をアプリケーション識別子に置き換えます。

```
aws pinpoint send-messages \ 
--application-id 611e3e3cdd47474c9c1399a50example \ 
--message-request 
'{
  "Addresses": {
    "token": 
    {
      "ChannelType":"APNS"
    }
  },
  "MessageConfiguration": {
    "APNSMessage": {
        "RawContent": 
          "{\"aps\": {\"alert\": { \"title\": \"Title of my message\", \"body\": \"This is a push notification for the Safari web browser.\"},\"content-available\": 1,\"url-args\": [\"\"]}}"
     }
  }
}'
\ --region us-east-1
```

Safari のプッシュ通知について詳しくは、『Apple デベロッパーウェブサイト』の「[Configuring Safari Push Notifications](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/NotificationProgrammingGuideForWebsites/PushNotifications/PushNotifications.html)」をご覧ください。

------
#### [ APNS (AWS CLI) ]

次の例では、[send-messages](https://docs.aws.amazon.com/cli/latest/reference/pinpoint/send-messages.html) を使用して、 で APNS プッシュ通知を送信します AWS CLI。token をデバイスの一意のトークン**に、*611e3e3cdd47474c9c1399a50example* をアプリケーション識別子に、*GAME\$1INVITATION* を一意の識別子に置き換えます。

```
aws pinpoint send-messages \
--application-id 611e3e3cdd47474c9c1399a50example \
--message-request 
'{
    "Addresses": {
     "token":
    {
      "ChannelType":"APNS"
    }
  },
  "MessageConfiguration": {
    "APNSMessage": {
      "RawContent": "{\"aps\" : {\"alert\" : {\"title\" : \"Game Request\",\"subtitle\" : \"Five Card Draw\",\"body\" : \"Bob wants to play poker\"},\"category\" : \"GAME_INVITATION\"},\"gameID\" : \"12345678\"}"
      }
    }
}'
\ --region us-east-1
```

------
#### [ JavaScript (Node.js) ]

この例を使用して、Node.js で AWS SDK for JavaScript を使用してプッシュ通知を送信します。この例は、SDK for JavaScript in Node.js がすでにインストールされ、設定されていることを前提としています。

この例では、共有認証情報ファイルを使用して、既存の ユーザーのアクセスキーとシークレットアクセスキーを指定するものと想定しています。詳細については、『*AWS SDK for JavaScript in Node.js デベロッパーガイド*』の「[認証情報の設定](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/setting-credentials.html)」を参照してください。

```
'use strict';

const AWS = require('aws-sdk');

// The AWS Region that you want to use to send the message. For a list of
// AWS Regions where the API is available
const region = 'us-east-1';

// The title that appears at the top of the push notification.
var title = 'Test message sent from End User Messaging Push.';

// The content of the push notification.
var message = 'This is a sample message sent from End User Messaging Push by using the '
            + 'AWS SDK for JavaScript in Node.js';

// The application ID that you want to use when you send this 
// message. Make sure that the push channel is enabled for the project that 
// you choose.
var applicationId = 'ce796be37f32f178af652b26eexample';

// An object that contains the unique token of the device that you want to send 
// the message to, and the push service that you want to use to send the message.
var recipient = {
  'token': 'a0b1c2d3e4f5g6h7i8j9k0l1m2n3o4p5q6r7s8t9u0v1w2x3y4z5a6b7c8d8e9f0',
  'service': 'GCM'
  };

// The action that should occur when the recipient taps the message. Possible
// values are OPEN_APP (opens the app or brings it to the foreground),
// DEEP_LINK (opens the app to a specific page or interface), or URL (opens a
// specific URL in the device's web browser.)
var action = 'URL';

// This value is only required if you use the URL action. This variable contains
// the URL that opens in the recipient's web browser.
var url = 'https://www.example.com';

// The priority of the push notification. If the value is 'normal', then the
// delivery of the message is optimized for battery usage on the recipient's
// device, and could be delayed. If the value is 'high', then the notification is
// sent immediately, and might wake a sleeping device.
var priority = 'normal';

// The amount of time, in seconds, that the push notification service provider
// (such as FCM or APNS) should attempt to deliver the message before dropping
// it. Not all providers allow you specify a TTL value.
var ttl = 30;

// Boolean that specifies whether the notification is sent as a silent
// notification (a notification that doesn't display on the recipient's device).
var silent = false;

function CreateMessageRequest() {
  var token = recipient['token'];
  var service = recipient['service'];
  if (service == 'GCM') {
    var messageRequest = {
      'Addresses': {
        [token]: {
          'ChannelType' : 'GCM'
        }
      },
      'MessageConfiguration': {
        'GCMMessage': {
          'Action': action,
          'Body': message,
          'Priority': priority,
          'SilentPush': silent,
          'Title': title,
          'TimeToLive': ttl,
          'Url': url
        }
      }
    };
  } else if (service == 'APNS') {
    var messageRequest = {
      'Addresses': {
        [token]: {
          'ChannelType' : 'APNS'
        }
      },
      'MessageConfiguration': {
        'APNSMessage': {
          'Action': action,
          'Body': message,
          'Priority': priority,
          'SilentPush': silent,
          'Title': title,
          'TimeToLive': ttl,
          'Url': url
        }
      }
    };
  } else if (service == 'BAIDU') {
    var messageRequest = {
      'Addresses': {
        [token]: {
          'ChannelType' : 'BAIDU'
        }
      },
      'MessageConfiguration': {
        'BaiduMessage': {
          'Action': action,
          'Body': message,
          'SilentPush': silent,
          'Title': title,
          'TimeToLive': ttl,
          'Url': url
        }
      }
    };
  } else if (service == 'ADM') {
    var messageRequest = {
      'Addresses': {
        [token]: {
          'ChannelType' : 'ADM'
        }
      },
      'MessageConfiguration': {
        'ADMMessage': {
          'Action': action,
          'Body': message,
          'SilentPush': silent,
          'Title': title,
          'Url': url
        }
      }
    };
  }

  return messageRequest
}

function ShowOutput(data){
  if (data["MessageResponse"]["Result"][recipient["token"]]["DeliveryStatus"]
      == "SUCCESSFUL") {
    var status = "Message sent! Response information: ";
  } else {
    var status = "The message wasn't sent. Response information: ";
  }
  console.log(status);
  console.dir(data, { depth: null });
}

function SendMessage() {
  var token = recipient['token'];
  var service = recipient['service'];
  var messageRequest = CreateMessageRequest();

  // Specify that you're using a shared credentials file, and specify the
  // IAM profile to use.
  var credentials = new AWS.SharedIniFileCredentials({ profile: 'default' });
  AWS.config.credentials = credentials;

  // Specify the AWS Region to use.
  AWS.config.update({ region: region });

  //Create a new Pinpoint object.
  var pinpoint = new AWS.Pinpoint();
  var params = {
    "ApplicationId": applicationId,
    "MessageRequest": messageRequest
  };

  // Try to send the message.
  pinpoint.sendMessages(params, function(err, data) {
    if (err) console.log(err);
    else     ShowOutput(data);
  });
}

SendMessage()
```

------
#### [ Python ]

 AWS SDK for Python (Boto3)を使用してプッシュ通知を送信するには、この例を使用します。この例は、SDK for Python (Boto3) がすでにインストールされ、設定されていることを前提としています。

この例では、共有認証情報ファイルを使用して、既存の ユーザーのアクセスキーとシークレットアクセスキーを指定するものと想定しています。詳細については、『*AWS SDK for Python (Boto3) API Reference*』の「[認証情報](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/setting-credentials.html)」を参照してください。

```
import json
import boto3
from botocore.exceptions import ClientError

# The AWS Region that you want to use to send the message. For a list of
# AWS Regions where the API is available
region = "us-east-1"

# The title that appears at the top of the push notification.
title = "Test message sent from End User Messaging Push."

# The content of the push notification.
message = ("This is a sample message sent from End User Messaging Push by using the "
           "AWS SDK for Python (Boto3).")

# The application ID to use when you send this message.
# Make sure that the push channel is enabled for the project or application
# that you choose.
application_id = "ce796be37f32f178af652b26eexample"

# A dictionary that contains the unique token of the device that you want to send the
# message to, and the push service that you want to use to send the message.
recipient = {
    "token": "a0b1c2d3e4f5g6h7i8j9k0l1m2n3o4p5q6r7s8t9u0v1w2x3y4z5a6b7c8d8e9f0",
    "service": "GCM"
    }

# The action that should occur when the recipient taps the message. Possible
# values are OPEN_APP (opens the app or brings it to the foreground),
# DEEP_LINK (opens the app to a specific page or interface), or URL (opens a
# specific URL in the device's web browser.)
action = "URL"

# This value is only required if you use the URL action. This variable contains
# the URL that opens in the recipient's web browser.
url = "https://www.example.com"

# The priority of the push notification. If the value is 'normal', then the
# delivery of the message is optimized for battery usage on the recipient's
# device, and could be delayed. If the value is 'high', then the notification is
# sent immediately, and might wake a sleeping device.
priority = "normal"

# The amount of time, in seconds, that the push notification service provider
# (such as FCM or APNS) should attempt to deliver the message before dropping
# it. Not all providers allow you specify a TTL value.
ttl = 30

# Boolean that specifies whether the notification is sent as a silent
# notification (a notification that doesn't display on the recipient's device).
silent = False

# Set the MessageType based on the values in the recipient variable.
def create_message_request():

    token = recipient["token"]
    service = recipient["service"]

    if service == "GCM":
        message_request = {
            'Addresses': {
                token: {
                    'ChannelType': 'GCM'
                }
            },
            'MessageConfiguration': {
                'GCMMessage': {
                    'Action': action,
                    'Body': message,
                    'Priority' : priority,
                    'SilentPush': silent,
                    'Title': title,
                    'TimeToLive': ttl,
                    'Url': url
                }
            }
        }
    elif service == "APNS":
        message_request = {
            'Addresses': {
                token: {
                    'ChannelType': 'APNS'
                }
            },
            'MessageConfiguration': {
                'APNSMessage': {
                    'Action': action,
                    'Body': message,
                    'Priority' : priority,
                    'SilentPush': silent,
                    'Title': title,
                    'TimeToLive': ttl,
                    'Url': url
                }
            }
        }
    elif service == "BAIDU":
        message_request = {
            'Addresses': {
                token: {
                    'ChannelType': 'BAIDU'
                }
            },
            'MessageConfiguration': {
                'BaiduMessage': {
                    'Action': action,
                    'Body': message,
                    'SilentPush': silent,
                    'Title': title,
                    'TimeToLive': ttl,
                'Url': url
                }
            }
        }
    elif service == "ADM":
        message_request = {
            'Addresses': {
                token: {
                    'ChannelType': 'ADM'
                }
            },
            'MessageConfiguration': {
                'ADMMessage': {
                    'Action': action,
                    'Body': message,
                    'SilentPush': silent,
                    'Title': title,
                    'Url': url
                }
            }
        }
    else:
        message_request = None

    return message_request

# Show a success or failure message, and provide the response from the API.
def show_output(response):
    if response['MessageResponse']['Result'][recipient["token"]]['DeliveryStatus'] == "SUCCESSFUL":
        status = "Message sent! Response information:\n"
    else:
        status = "The message wasn't sent. Response information:\n"
    print(status, json.dumps(response,indent=4))

# Send the message through the appropriate channel.
def send_message():

    token = recipient["token"]
    service = recipient["service"]
    message_request = create_message_request()

    client = boto3.client('pinpoint',region_name=region)

    try:
        response = client.send_messages(
            ApplicationId=application_id,
            MessageRequest=message_request
        )
    except ClientError as e:
        print(e.response['Error']['Message'])
    else:
        show_output(response)

send_message()
```

------

## その他のリソース
<a name="reference_additional_resources-send-message"></a>
+ プッシュチャネルテンプレートの詳細については、*Amazon Pinpoint ユーザーガイド*」の[「プッシュ通知テンプレートの作成](https://docs.aws.amazon.com/pinpoint/latest/userguide/message-templates-creating-push.html)」を参照してください。