SNS通知メッセージ

デバイス側での状態の変化、注文状態、サブスクリプションステータスなどのAmazonからの通知は、Amazonの Simple Notification Service(SNS)を使って送信されます。Amazon SNSを使用すると、タイムクリティカルなメッセージをアプリケーションが「push」メカニズムを通じて複数のサブスクライバーに送信できるため、サブスクライバーが更新を定期的にチェックする必要がありません。たとえば、Dash Replenishmentサービス(DRS)はデバイスの登録解除やイベントエラーをSNSを使って皆さま(デバイスのメーカー)に通知します。また配送ステータスを提示する際にも通知が使用されます。

以降のセクションでは、参考としてさまざまな通知の例を紹介しています。

バージョン管理

ユーザーに直接影響を及ぼさずに機能を段階的に更新するために、DRSではバージョンによるが使用されます。

OrderPlacedNotification

OrderPlacedNotificationは、Replenish API呼び出しをDRSが受信し、かつ生成された注文で問題が一切発生しなかったときに送信されます。デバイスのメーカーはこのメッセージの受領をもって、Replenish APIリクエストから受理された注文が、24時間以内にAmazonのユーザーによってキャンセルされない限り、商品が発送されることを把握します。

注文実行通知の例は次のとおりです。

バージョン2.0

{
    "notificationInfo": {
        "notificationType": "OrderPlacedNotification",
        "lwaClientId": "amzn1.application-oa2-client.6b68exxxxxxxxxx9",
        "notificationTime": "2016-12-02T21:09:58.689Z",
        "notificationId": "amzn1.dash.notification.v1.xxxxxxxxxxxxx13",
        "version": "2015-06-05"
    },
    "deviceInfo": {
        "deviceIdentifier": {
            "serialNumber": "mySerialNumber"
        },
        "productIdentifier": {
            "modelId": "myDeviceModel"
        }
    },
    "customerInfo": {
        "directedCustomerId": "amzn1.account.AH54JCXQ7WZKCZOFxxxxxxxx"
        },
    "orderInfo": {
        "instanceId": "amzn1.dash.v2.o.ci45xxxxxxxxxxx",
        "slotId": "myProduct",
        "productInfo": [{
            "quantity": 1.0,
            "unit": "count",
            "asin": "myAsinNumber",
            "estimatedDeliveryDate": "2016-12-09T07:59:59Z"
        }],        
    }
}

...

{
    "MessageAttributes": {
        "version": {
            "type": "String",
            "Value": 2.0
        }
    }
}

バージョン1.0

{
    "notificationInfo": {
        "notificationType": "OrderPlacedNotification",
        "lwaClientId": "amzn1.application-oa2-client.6b68exxxxxxxxxx9",
        "notificationTime": "2015-10-01T20:19:39.959Z",
        "notificationId": "amzn1.dash.notification.v1.xxxxxxxxxxxxx13",
        "version": "2015-06-05"
    },
    "deviceInfo": {
        "deviceIdentifier": {
            "serialNumber": "mySerialNumber"
        }
        ,
        "productIdentifier": {
            "modelId": "myDeviceModel"
        }
    },
    "customerInfo": {
        "directedCustomerId": "amzn1.account.AHxxxxxxxxGA2O5Q"
    },
    "orderInfo": {
        "instanceId": "amzn1.dash.v2.o.ci43xxxxxxxxxx0",
        "slotId": "myProduct",
        "productInfo":[ {
            "quantity": 12.0,
            "unit": "count"
        }],
        "estimatedDeliveryDate": "2015-10-07T06:59:59Z"
        }
    }
}

バージョンに関する注意

OrderPlacedNotification のv2.0については、次の変更点に注意してください。

  • asin情報がproductInfo内に含まれるようになりました
  • estimatedDeliveryDateproductInfo内に含まれるようになりました
  • MessageAttributesは、バージョン通知メッセージのバージョンを識別するために使用されます

OrderCancelledNotification

OrderCancelledNotificationは、次の2つの状況で送信されます。

  1. 正常に実行された注文が、ユーザーによって手動でキャンセルされたとき。

  2. Replenish APIリクエストがAmazon注文エラー解決フローをたどることになり、Amazonのユーザーが72時間以内に問題を解決できなかったとき。

OrderCancelledNotificationの例は次のとおりです。

{
    "notificationInfo": {
        "notificationType": "OrderCancelledNotification",
        "lwaClientId": "amzn1.application-oa2-client.6b68exxxxxxxxxx9",
        "notificationTime": "2015-10-01T20:20:29.461Z",
        "notificationId": "amzn1.dash.notification.v1.xxxxxxxxxxxxx13",
        "version": "2015-06-05"
    },
    "deviceInfo": {
        "deviceIdentifier": {
            "serialNumber": "mySerialNumber"
        },
        "productIdentifier": {
            "modelId": "myDeviceModel"
        }
    },
    "customerInfo": {
        "directedCustomerId": "amzn1.account.AHxxxxxxxxGA2O5Q"
    },
    "orderInfo": {
        "instanceId": "amzn1.dash.v2.o.ci43xxxxxxxxxx0",
        "slotId": "myProduct"
    }
}

DeviceRegisteredNotification

DeviceRegisteredNotificationは、ユーザーがLWAに成功したときに送信されます。この通知は、ユーザーがASINを選択する前にトリガーされます。

DeviceRegisteredNotificationの例は次のとおりです。

{
    "notificationInfo": {
        "notificationType": "DeviceRegisteredNotification",
        "lwaClientId": "amzn1.application-oa2-client.6b68exxxxxxxxxx9",
        "notificationTime": "2015-10-01T02:23:52.747Z",
        "notificationId": "amzn1.dash.notification.v1.xxxxxxxxxxxxx13",
        "version": "2015-06-05"
    },
    "deviceInfo": {
        "deviceIdentifier": {
            "serialNumber": "mySerialNumber"
        },
        "productIdentifier": {
            "modelId": "myDeviceModel"
        }
    },
    "customerInfo": {
        "directedCustomerId": "amzn1.account.AHxxxxxxxxGA2O5Q"
    }
}

DeviceDeregisteredNotification

DeviceDeregisteredNotificationは、次のように、さまざまな理由で送信されます。

  1. デバイスのメーカーがDeregistration APIを呼び出した。

  2. AmazonのユーザーがAmazon.co.jpにアクセスし、Amazon.co.jpの管理ページからデバイスの登録を解除した。

  3. AmazonのユーザーがAmazonカスタマーサービスに連絡し、カスタマーサービスエージェントがユーザーの代理でデバイスの登録を解除した。

  4. AmazonのユーザーがManage Login with AmazonのWebサイトにアクセスし、デバイスのメーカーとの関連付けを解除した。これにより、デバイスのメーカーに関連付けられているユーザーの全デバイスの登録が解除されます。

DeviceDeregisteredNotificationの例は次のとおりです。

{
    "notificationInfo": {
        "notificationType": "DeviceDeregisteredNotification",
        "lwaClientId": "amzn1.application-oa2-client.6b68exxxxxxxxxx9",
        "notificationTime": "2015-09-29T18:03:28.669Z",
        "notificationId": "amzn1.dash.notification.v1.xxxxxxxxxxxxx13",
        "version": "2015-06-05"
    },
    "deviceInfo": {
        "deviceIdentifier": {
            "serialNumber": "mySerialNumber"
        },
        "productIdentifier": {
            "modelId": "myDeviceModel"
        }
    },
    "customerInfo": {
        "directedCustomerId": "amzn1.account.AHxxxxxxxxGA2O5Q"
    }
}

SubscriptionChangedNotification

SubscriptionChangedNotificationは、次の4つの状況で送信されます。

  • ユーザーが新しいLWAデバイス登録を完了したとき

  • それまで選択したことのないASINをユーザーが選択したとき

  • 以前に入力されたASINの選択をユーザーがクリアしたとき

  • ユーザーがサブスクリプションのオンとオフを切り替えたとき

SubscriptionChangedNotificationの例は次のとおりです。

バージョン2.0

{
    "notificationInfo": {
        "notificationType": "SubscriptionChangedNotification",
        "lwaClientId": "amzn1.application-oa2-client.6b68exxxxxxxxxx9",
        "notificationTime": "2016-12-06T19:33:27.368Z",
        "notificationId": "amzn1.dash.notification.v1.xxxxxxxxxxxxx13",
        "version": "2015-06-05"
    },
    "deviceInfo": {
        "deviceIdentifier": {
            "serialNumber": "MySerialNumber"
        },
        "productIdentifier": {
            "modelId": "myDeviceModel"
        }
    },
    "subscriptionInfo": {
        "slotsSubscriptionStatus": {
            "SlotId1": {
                "subscribed":true,
                "productInfoList": [{
                    "quantity":1.0,
                    "unit": "count",
                    "asin": "myAsinNumber"
                }]
            },
            "SlotId2": {
                "subscribed":false,
                "productInfoList":[{
                  "quantity":1.0,
                  "unit": "count",
                  "asin": "myAsinNumber"
                }]
            }
        }
    },
    "customerInfo": {
        "directedCustomerId": "amzn1.account.AGY3J5MxxxxxxO4WRHHQA"
    }
}

...

{
    "MessageAttributes": {
        "version": {
            "type": "String",
            "Value": 2.0
        }
    }
}

バージョン1.0

{
    "notificationInfo": {
        "notificationType": "SubscriptionChangedNotification",
        "lwaClientId": "amzn1.application-oa2-client.6b68exxxxxxxxxx9",
        "notificationTime": "2015-09-30T23:27:50.771Z",
        "notificationId": "amzn1.dash.notification.v1.xxxxxxxxxxxxx13",
        "version": "2015-06-05"
    },
    "deviceInfo": {
        "deviceIdentifier": {
            "serialNumber": "mySerialNumber"
        },
        "productIdentifier": {
            "myDeviceModel": "myDeviceModel"
        }
    },
    "subscriptionInfo": {
        "slotsSubscriptionStatus": {
            "myFirstSlot": true,
            "mySecondSlot": true
        }
    },
    "customerInfo": {
        "directedCustomerId": "amzn1.account.AHxxxxxxxxGA2O5Q"
    }
}

バージョンに関する注意

SubscriptionChangedNotification のv2.0については、次の変更点に注意してください。

  • slotsSubscriptionStatusの構造体が変更されています。各スロットIDは、ブール型のsubscribedブーリアンとproductInfoList構造体(quantityunitasin)を含んだ構造体にマッピングされています。

  • subscribedfalseに設定されている場合でもフィールドquantityunitasinをスロットに入力できます。この組み合わせは、ユーザーがこれらの値で以前にサブスクライブしていたことを示します。

ItemShippedNotification

ItemShippedNotificationは、Replenish APIリクエストが正常に受信されて注文が確定し、ユーザーによってキャンセルされず、かつAmazonフルフィルメントによって商品がユーザーに発送されたときに送信されます。

ItemShippedNotificationの例は次のとおりです。

バージョン2.0

{
    "notificationInfo": {
        "notificationType": "ItemShippedNotification",
        "lwaClientId": "amzn1.application-oa2-client.6b68exxxxxxxxxx9",
        "notificationTime": "2016-12-02T01:41:59.936Z",
        "notificationId": "amzn1.dash.notification.v1.xxxxxxxxxxxxx13",
        "version": "2015-06-05"
    },
    "deviceInfo": {
        "deviceIdentifier": {
            "serialNumber": "mySerialNumber"
        },
        "productIdentifier": {
            "modelId": "myDeviceModel"
        }
    },
    "customerInfo": {
        "directedCustomerId": "amzn1.account.AGY3J5MKHWP6I2RHDYPJO4WRHHQA"},
        "orderInfo": {
            "instanceId": "amzn1.dash.v2.o.ci43xxxxxxxxxx0",
            "slotId": "myProduct",
            "productInfo": [{
                "quantity":1.0,
                "unit": "count",
                "asin": "myAsinNumber",
                "estimatedDeliveryDate": "2016-11-16T07:59:59Z"
            }]
        }
    }
}

...

{
    "MessageAttributes": {
        "version": {
            "type": "String",
            "Value": 2.0
        }
    }
}

バージョン1.0

{
    "notificationInfo": {
        "notificationType": "ItemShippedNotification",
        "lwaClientId": "amzn1.application-oa2-client.6b68exxxxxxxxxx9",
        "notificationTime": "2015-10-01T20:43:28.626Z",
        "notificationId": "amzn1.dash.notification.v1.xxxxxxxxxxxxx13",
        "version": "2015-06-05"
    },
    "deviceInfo": {
        "deviceIdentifier": {
            "serialNumber": "mySerialNumber"
        },
        "productIdentifier": {
            "modelId": "myDeviceModel"
        }
    },
    "customerInfo": {
        "directedCustomerId": "amzn1.account.AHxxxxxxxxGA2O5Q"
    },
    "orderInfo": {
        "instanceId": "amzn1.dash.v2.o.ci43xxxxxxxxxx0",
        "slotId": "myProduct",
        "productInfo": [{
            "quantity": 12.0,
            "unit": "Count"
        }],
        "estimatedDeliveryDate": "2015-10-07T06:59:59Z"
    }
}

バージョンに関する注意

ItemShippedNotification のv2.0については、次の変更点に注意してください。

  • asin information is now included inside productInfo
  • estimatedDeliveryDate is now inside productInfo
  • MessageAttributes are used to identify version notification message version

v2.0の通知への移行

新しいベンダーとそれに関連付けられているデバイスは、登録の過程で自動的にv2.0通知をサブスクライブするように設定されます。ただし、既存のベンダーによって新たに登録されたデバイスでは、過去に登録されたデバイスに合わせて最も多く利用されているバージョンの通知を受信します。たとえば、v1.0通知をサブスクライブしているデバイスのベンダーが新しいデバイスを登録する場合、そのベンダーはv1.0の通知を受信することになります。

OrderPlacedNotificationItemShippedNotificationSubscriptionChangedNotification の各通知をv2.0に移行するには、以下の手順に従ってください。

  1. テストモデルTestNotifV2ForVendors を使用し、トピック arn:aws:sns:us-east-1:300797413096:TestNotifV2ForVendors をサブスクライブします。
  2. このモデル用に新しいテストデバイスを作成します。注文を実行するか、デバイスのサブスクリプションステータスを変更して、v2.0の通知をトリガーします。前掲のv2.0の仕様に基づいて通知を解析・処理してください。レスポンスの解析処理が、前掲の仕様に準拠していることを確認してください。
  3. v2.0の通知を正しく処理していることを確認したら、DRSフォーラムで、次の情報を含む新規投稿を作成します。
    • 件名: Upgrade SNS Notifications to v2.0
    • v2.0にアップグレードしようとしているのはどの通知メッセージか
    • 新しい通知を使用するのはどのデバイスモデルか
  4. それらの通知がv2.0にアップグレードされた時点で、Amazonから通知が届きます。