Получение статуса доставки SMS-сообщений AWS

Я посылаю sms из AWS через node SDK. SMS идут хорошо, и я пытаюсь получить информацию о доставке. По-видимому, это не так просто, и нужно настроить SNS для отправки журналов в Cloudwatch и разбора CloudWatch, чтобы получить информацию о доставке, просматривающую MessageId: qaru.site/info/458510/...

Если я отправляю sms через веб-интерфейс SNS, журналы я вижу журналы в cloudwatch, но не тогда, когда я отправляю их через SDK node. Я не мог получить информацию о том, как настроить вещи перед отправкой их из node.

В идеале я хочу добиться чего-то вроде:

const sendSMS = async (message, number) => {
    // send the SMS
    // wait to get delivery info
    // resolve with delivery info, or reject if failed
}

В настоящее время у меня есть:

import AWS from 'aws-sdk';

AWS.config.update({
  accessKeyId: accessKey,
  secretAccessKey: secretKey,
  region: 'us-east-1',
});

const sns = new AWS.SNS();

const sendSMS = async (message, number) => {
  return await new Promise((resolve, reject) => {
    sns.publish({
      Message: message,
      MessageStructure: 'string',
      PhoneNumber: number,
    }, (err, res) => {
      if (err) { return reject(err); }
      resolve(res);
    });  
  });
}

которые отправляют только SMS-запрос в AWS и решают что-то вроде

{
  ResponseMetadata: { RequestId: '7e0999a3-xxxx-xxxx-xxxx-xxxxxxxxxxxx' },
  MessageId: 'f7f21871-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
}

Я не уверен, что нужно настроить приложение SNS для получения журналов или нет, и я не хочу, чтобы все было просто.

Ответ 1

Ваш код, похоже, отлично работает с nodejs v6, изменив оператор импорта (отсутствие поддержки ES5/6). После включения регистрации в cloudwatch, каждое SMS-сообщение (как через веб-интерфейс, так и этот код) создает пароли журнала в журналах CloudWatch. Я думаю, что вы должны переустановить SDK AWS или не использовать ES5/6, чтобы заставить SDK работать правильно.

Для второго вопроса, если сообщение не было доставлено, вы получите сообщение об ошибке:

(err, res) => {
      if (err) { return reject(err); }
      resolve(res);
    }); 

Если сообщение было успешно отправлено, вы получите ответ вроде:

{ ResponseMetadata: { RequestId: 'e31feda6-669c-5b13-XXX-bc25b07877b5' },
  MessageId: '53555115-6acb-5684-XXXX-0096bc2f6a22' }

Ответ 2

Возможно, вы уже это сделали, но для настройки журналов cloudwatch для доставки SMS вы должны настроить настройки SMS. Для этого вам нужно создать роль IAM, чтобы разрешить доступ к журналам cloudwatch. Это очень просто сделать с помощью консоли AWS. Этапы приведены в http://docs.aws.amazon.com/sns/latest/dg/sms_preferences.html

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

Я хотел добавить это как комментарий, но мне не хватает репутации. Я удалю этот ответ, если он не работает.