2017-04-25 115 views
12

我通過節點SDK從AWS發送SMS。短信發送很好,我正在嘗試收到傳送信息。顯然,這不是那麼容易,人們必須建立SNS將日誌發送到CloudWatch的和解析的CloudWatch獲得配送信息查找郵件ID:https://stackoverflow.com/a/40327061/2054629獲取AWS SMS的交付狀態

如果我通過SNS網絡接口發送短信,登錄我看到CloudWatch的日誌,但不是在我通過節點SDK發送它們時。在從節點發送它們之前,我無法獲得有關如何設置的信息。

理想情況下,我想實現的東西,如:

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

只發送短信請求,AWS和喜歡的東西

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

我不確定是否必須設置SNS應用程序才能獲取日誌,而且我不想保持簡單。

回答

1

通過更改導入語句(缺少對ES5/6的支持),您的代碼似乎可以與nodejs v6一起正常工作。在啓用日誌記錄到cloudwatch之後,每條SMS(通過Web界面和此代碼)都會在CloudWatch日誌中創建日誌流。我認爲您應該重新安裝AWS SDK或避免使用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' } 
+0

我不認爲ES6是一個問題。如何從節點SDK獲取與SMS相對應的CloudWatch日誌? – Guig

0

您可能已經完成了此操作,但爲了配置SMS傳遞的cloudwatch日誌,您必須配置SMS首選項。爲此,您需要創建一個IAM角色以允許cloudwatch日誌訪問。通過AWS控制檯執行它非常簡單。步驟如下:http://docs.aws.amazon.com/sns/latest/dg/sms_preferences.html

如果需要,您甚至可以控制成功交付的百分比+失敗的SMS。完成此操作後,無論您發送SMS的方式如何,都應該開始查看CloudWatch日誌。

我想將此添加爲評論,但我沒有足夠的代表。如果它不起作用,我會刪除這個答案。