2016-07-13 7 views
10

Ich möchte eine SMS-Nachricht von einer AWS-Lambda-Funktion mit der Boto3-Veröffentlichungsmethode senden, um den Benutzer über Probleme per SMS zu benachrichtigen. Meine Lambda-Funktion ist in Python geschrieben und ich verwende das Modul Boto3. Meine Lambda-Funktion hat volle Rechte an SNS. Ich habe diesen Code,Wie sende ich eine SMS-Nachricht über AWS SNS mit Boto3 in einer AWS Lambda-Funktion?

sns = boto3.client('sns') 
sns.publish(
    PhoneNumber = '+11234567890', 
    Message = 'Simple text message' 
) 

Nach dem boto3 documentation akzeptiert der veröffentlichen Methode die folgenden Parameter,

response = client.publish(
    TopicArn='string', 
    TargetArn='string', 
    PhoneNumber='string', 
    Message='string', 
    Subject='string', 
    MessageStructure='string', 
    MessageAttributes={ 
     'string': { 
      'DataType': 'string', 
      'StringValue': 'string', 
      'BinaryValue': b'bytes' 
     } 
    } 
) 

Es erfordert eine „Message“ Parameter und eine der folgenden drei Parameter wie beschrieben in Die Dokumentation:

TopicArn (string) - Das Thema, das Sie veröffentlichen möchten. Wenn Sie keinen Wert für den Parameter TopicArn angeben, müssen Sie einen Wert für die Parameter PhoneNumber oder TargetArn angeben.

TargetArn (string) - Entweder TopicArn oder EndpointArn, aber nicht beides. Wenn Sie keinen Wert für den Parameter TargetArn angeben, müssen Sie einen Wert für die Parameter PhoneNumber oder TopicArn angeben.

PhoneNumber (string) - Die Telefonnummer, an die Sie eine SMS-Nachricht senden möchten . Verwenden Sie das E.164-Format. Wenn Sie keinen Wert für den PhoneNumber-Parameter angeben, müssen Sie einen Wert für die Parameter TargetArn oder TopicArn angeben.

Wenn mein Code ausgeführt wird, wird ein Parameterüberprüfungsfehler zurückgegeben. Darin heißt es,

Unbekannter Parameter in-Eingang: "Phone", muss einer der folgenden sein: TopicArn, TargetArn,> Nachricht, Betreff MessageStructure, MessageAttributes“

So ist die Dokumentation scheint darauf hinzudeuten. dass PhoneNumber ein gültiger Parameter ist, aber wenn es verwendet wird, tritt ein Fehler auf und die Rückmeldung von dem Fehler zeigt an, dass PhoneNumber kein möglicher Parameter ist Ich vermute, dass ich etwas Offensichtliches und Einfaches verpasse, aber etwas Hilfe gebrauchen könnte

I weiß, dass es andere Möglichkeiten gibt, SMS-Nachrichten wie em zu senden ail-Gateways und andere Anbieter lieferten Lösungen wie Twilio, aber ich würde gerne die SNS-basierte Route verfolgen und verstehen, wo ich falsch gelaufen bin.

+0

Hat das letztendlich für Sie funktioniert? Ihre Invokation scheint richtig zu sein, da sie nur für mich funktioniert – Atifm

Antwort

16

Eigentlich sieht Ihr Beispiel richtig aus. Hier ist, was ich ausprobiert

import boto3 
sns = boto3.client('sns') 
number = '+17702233322' 
sns.publish(PhoneNumber = number, Message='example text message') 

Arbeitete wie ein Charme. Ich empfehle, zuerst awscli zu verwenden, das mit Ihren Root-Account-Zugangsdaten konfiguriert wurde, und den Code für ein Testlaufwerk zu verwenden. Sobald dies funktioniert, erstellen Sie entweder einen neuen Benutzer mit den erforderlichen Rechten oder wenden ihn auf eine Instanzrolle an.

Sie müssen eine Richtlinie erstellen, die SNS erlaubt: Veröffentlichen auf Ressource: * (ermöglichen Sie es, an alle zu senden) oder Ressource: '+17702233322' (Text auf eine bestimmte Nummer zulassen).

+1

Ich habe meinen Code überhaupt nicht verändert; es funktionierte wie es ist. Es muss ein Boto3-Update oder so etwas geben, weil ich dort, wo ich einen ungültigen Parameterfehler erhalte, nichts mehr bekomme, sondern Güte. Vielen Dank für die Rücksendung an meinen Code, um diese Funktion zu aktivieren. – kelflanagan

+1

Keine Sorgen. Ja, als ich deinen Code ausprobiert habe, hat es gut funktioniert, also habe ich mir gedacht, dass etwas anderes die Sache sein muss. Froh, dass es am Ende funktioniert hat. – Atifm

+0

Hallo @atifm Ich habe diesen Code ausprobiert. Ich habe 200 als Antwortcode. Habe aber keine SMS erhalten. Können Sie bitte einen möglichen Grund oder eine Lösung vorschlagen? – Naveen

Verwandte Themen