Получение статистики доставки SNS как подписчика - PullRequest
0 голосов
/ 08 июля 2019

Я новичок в AWS, я пытаюсь отправлять OTP-сообщения на телефоны, используя SNS Amazon.Я использовал следующую ссылку: https://docs.aws.amazon.com/sns/latest/dg/sms_publish-to-phone.html

для отправки в качестве подписчика напрямую на телефоны без необходимости создания темы.Я пытаюсь вернуть статистику доставки для каждого из этих сообщений.Я не могу решить эту задачу, копаясь в документе с любительскими знаниями.Может ли кто-нибудь направить меня в правильном направлении в поиске решения для этого варианта использования

Код:

public static void main(String[] args) {    
    BasicAWSCredentials basicAwsCredentials = new BasicAWSCredentials(aws_access_key_id,aws_secret_access_key);
    AmazonSNS snsClient = AmazonSNSClient
            .builder()
            .withRegion("ap-southeast-1")
            .withCredentials(new AWSStaticCredentialsProvider(basicAwsCredentials))
            .build();

    String message     = "My SMS message";
    String phoneNumber = "014532154789";

    //<set SMS attributes>
    Map<String, MessageAttributeValue> smsAttributes = new HashMap<String, MessageAttributeValue>();
    smsAttributes.put("AWS.SNS.SMS.SenderID", new MessageAttributeValue()
            .withStringValue("JOKER123")    //The sender ID shown on the device.
            .withDataType("String"));
    smsAttributes.put("AWS.SNS.SMS.SMSType", new MessageAttributeValue()
            .withStringValue("Promotional") //Sets the type to promotional.
            .withDataType("String"));

    sendSMSMessage(snsClient, message, phoneNumber, smsAttributes);
}

public static void sendSMSMessage(AmazonSNS snsClient, String message, String phoneNumber, Map<String, MessageAttributeValue> smsAttributes) {      
    try {
        PublishResult result = snsClient.publish(new PublishRequest()
                .withMessage("Your otp for InteropX is "+App.genCode())
                .withPhoneNumber(phoneNumber)
                .withMessageAttributes(smsAttributes));
        System.out.println(result);         // Prints the message ID.
        System.out.println("Your otp for InteropX is "+App.genCode());
    } catch(Exception e) {
        e.printStackTrace();
    }
}

public static String genCode() throws NoSuchAlgorithmException, InvalidKeyException {

    final TimeBasedOneTimePasswordGenerator totp = new TimeBasedOneTimePasswordGenerator();

    final Key key;
    {
        final KeyGenerator keyGenerator = KeyGenerator.getInstance(totp.getAlgorithm());
        keyGenerator.init(512);
        key = keyGenerator.generateKey();
    }
    final Instant now = Instant.now();
    System.out.println(key);

    return String.format("%06d", totp.generateOneTimePassword(key, now));
}
...