2017-04-25 3 views
12

J'envoie des SMS depuis AWS via le noeud SDK. Les SMS vont bien et j'essaie d'obtenir des informations de livraison. Apparemment, ce n'est pas facile et il faut configurer SNS pour envoyer des journaux à CloudWatch et pour analyser CloudWatch pour obtenir les informations de livraison regardant la MessageId: https://stackoverflow.com/a/40327061/2054629Obtention du statut de livraison d'AWS SMS

Si je vous envoie des sms via l'interface web SNS, les journaux que je vois les journaux dans CloudWatch , mais pas quand je les envoie via le nœud SDK. Je n'ai pas pu obtenir d'informations sur la façon de configurer les choses avant de les envoyer depuis un noeud.

Idéalement, je veux réaliser quelque chose comme:

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

Actuellement, j'ai:

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); 
    }); 
    }); 
} 

qui envoient seulement une demande de SMS à AWS et résout avec quelque chose comme

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

Je ne suis pas sûr si on doit configurer une application SNS pour être en mesure d'obtenir des journaux ou non, et je préfère ne pas pour garder les choses simples.

Répondre

1

Votre code semble fonctionner correctement avec nodejs v6 en changeant l'instruction import (manque de support ES5/6). Après avoir activé la journalisation sur cloudwatch, chaque SMS (via l'interface Web et ce code) crée une trace de journal dans les journaux CloudWatch. Je pense que vous devez réinstaller AWS SDK ou éviter d'utiliser ES5/6 pour que le SDK fonctionne correctement.

Pour la deuxième question, si le message n'a pas été livré, vous obtiendrez une erreur:

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

si le message a été envoyé avec succès, vous obtenez une réponse comme:

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

Je ne pense pas que ES6 est un problème. Comment puis-je obtenir les journaux CloudWatch correspondant au SMS à partir du nœud SDK? – Guig

0

Vous l'avez peut-être déjà fait, mais pour configurer les journaux cloudwatch pour les livraisons de SMS, vous devez configurer les préférences SMS. Pour cela, vous devez créer un rôle IAM pour autoriser l'accès aux journaux cloudwatch. C'est très simple de le faire via la console AWS. Les étapes sont données à http://docs.aws.amazon.com/sns/latest/dg/sms_preferences.html

Vous pouvez même contrôler le pourcentage de livraisons réussies + SMS qui ont échoué si vous le souhaitez. Une fois cela fait, vous devriez commencer à voir les journaux de cloudwatch quelle que soit la façon dont vous avez envoyé le SMS.

Je voulais ajouter ceci comme commentaire mais je n'ai pas assez de rep. Je vais supprimer cette réponse si cela ne fonctionne pas.