2016-07-13 58 views
10

Chciałbym wysłać wiadomość SMS z funkcji AWS Lambda za pomocą metody publikowania boto3, aby powiadomić użytkownika o problemach za pośrednictwem wiadomości SMS. Moja funkcja lambda jest napisana w Pythonie i korzystam z modułu boto3. Moja funkcja lambda ma pełne prawa do SNS. Że ten kod,Jak wysłać wiadomość SMS za pośrednictwem usługi SNS AWS przy użyciu usługi boto3 w funkcji AWS Lambda?

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

Według boto3 documentation, publikowania sposób przyjmuje następujące parametry

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

Wymaga parametr „Message”, a jeden z trzech następujących parametrów, jak to opisano w dokumenty:

TopicArn (ciąg) - Temat, który chcesz opublikować.

Jeśli nie zostanie podana wartość parametru TopicArn, należy podać wartość parametru PhoneNumber lub TargetArn dla numeru telefonu PhoneNumber lub TargetArn.

TargetArn (ciąg) - albo TopicArn, albo EndpointArn, ale nie obie.

Jeśli nie określono wartości parametru TargetArn, należy podać wartość parametrów PhoneNumber lub TopicArn.

Numer telefonu (ciąg) - Numer telefonu, pod który chcesz wysłać wiadomość SMS o numerze . Użyj formatu E.164.

Jeśli nie zostanie podana wartość parametru PhoneNumber, należy podać wartość parametru TargetArn lub TopicArn.

Po wykonaniu mojego kodu zwracany jest błąd sprawdzania poprawności parametru. Stwierdza,

nieznane parametr na wejściu: "PhoneNumber", musi być jeden: TopicArn, TargetArn,> Wiadomo, temat, MessageStructure, MessageAttributes”

Więc dokumentacja wydaje się wskazywać. Ten numer telefonu jest poprawnym parametrem, ale w przypadku jego użycia wystąpi błąd, a informacja zwrotna z błędu wskazuje, że numer telefonu nie jest możliwym parametrem. Podejrzewam, że brakuje mi czegoś oczywistego i prostego, ale przydałaby mi się pomoc:

I wiem, że istnieją inne sposoby wysyłania wiadomości SMS, takich jak em wszystkie bramki i inny dostawca dostarczyli rozwiązania takie jak Twilio, ale chciałbym kontynuować trasę opartą na SNS i zrozumieć, gdzie się nie udałem.

+0

Czy to ostatecznie zadziałało dla Ciebie? Twoja inwokacja wydaje się słuszna, ponieważ w tym właśnie zadziałała – Atifm

Odpowiedz

16

Właściwie twój przykład wygląda dobrze. Oto, co wypróbowałem:

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

Pracowałem jak urok. Zalecam, aby najpierw użyć awscli skonfigurowanego z danymi uwierzytelniającymi konta root i zabrać kod dla dysku testowego. Po zakończeniu pracy utwórz nowego użytkownika z odpowiednimi uprawnieniami lub zastosuj go do roli Wystąpienie.

Należy utworzyć zasadę, która umożliwia SNS: publikowanie w zasobie: * (zezwalaj na SMS-y dla wszystkich) lub zasób: "+17702233322" (umożliwia wpisanie tekstu pod określony numer).

+1

W ogóle nie zmieniłem kodu; działało jak jest. Musiała być aktualizacja boto3 lub coś takiego, ponieważ gdy używam, aby uzyskać nieprawidłowy błąd parametru, nie otrzymuję już niczego, ale dobroć. Dziękuję za odesłanie mnie do mojego kodu, aby włączyć tę funkcję. – kelflanagan

+1

Bez obaw. Tak, kiedy próbowałem twojego kodu, działało dobrze, więc pomyślałem, że coś innego musi być ważne. Cieszę się, że to działało w końcu. – Atifm

+0

Hi @atifm Próbowałem tego kodu. Otrzymałem 200 jako kod odpowiedzi. Ale nie otrzymałem żadnej wiadomości tekstowej. Czy możesz zaproponować jakikolwiek możliwy powód lub jak rozwiązać ten problem? – Naveen