2016-07-13 38 views
10

Tôi muốn gửi một tin nhắn SMS từ một hàm AWS Lambda bằng cách sử dụng phương thức xuất bản boto3 để thông báo cho người dùng về các vấn đề qua SMS. Hàm lambda của tôi được viết bằng Python và tôi đang sử dụng mô-đun boto3. Hàm lambda của tôi có đầy đủ quyền đối với SNS. Tôi có mã này,Làm cách nào để gửi tin nhắn SMS qua AWS SNS bằng boto3 trong chức năng AWS Lambda?

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

Theo boto3 documentation, các công bố phương pháp chấp nhận các thông số sau,

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

Nó đòi hỏi một "Message" tham số và một trong ba thông số sau như mô tả trong tài liệu:

TopicArn (chuỗi) - Chủ đề bạn muốn xuất bản lên.

Nếu bạn không chỉ định giá trị cho tham số TopicArn, bạn phải chỉ định giá trị cho tham số PhoneNumber hoặc TargetArn.

TargetArn (chuỗi) - Hoặc TopicArn hoặc EndpointArn, nhưng không phải cả hai.

Nếu bạn không chỉ định giá trị cho tham số TargetArn, bạn phải chỉ định giá trị cho tham số PhoneNumber hoặc TopicArn.

Số điện thoại (chuỗi) - Số điện thoại mà bạn muốn gửi tin nhắn SMS. Sử dụng định dạng E.164.

Nếu bạn không chỉ định giá trị cho tham số PhoneNumber, bạn phải chỉ định giá trị cho tham số TargetArn hoặc TopicArn.

Khi mã của tôi được thực hiện, lỗi xác thực thông số được trả về. Nó khẳng định,

tham số không rõ trong đầu: "PhoneNumber", phải là một trong: TopicArn, TargetArn,> Tin nhắn, Chủ đề, MessageStructure, MessageAttributes"

Vì vậy, các tài liệu dường như chỉ ra. rằng PhoneNumber là thông số hợp lệ, nhưng khi được sử dụng, lỗi xảy ra và phản hồi từ lỗi cho biết rằng PhoneNumber không phải là thông số có thể. Tôi nghi ngờ rằng tôi thiếu một cái gì đó hiển nhiên và đơn giản, nhưng có thể sử dụng một số trợ giúp. biết có những cách khác để gửi tin nhắn SMS như em ail gateway và các nhà cung cấp khác cung cấp các giải pháp như Twilio, nhưng tôi muốn theo đuổi lộ trình SNS và hiểu nơi tôi đã đi sai.

+0

Điều này cuối cùng có hiệu quả với bạn không? Lời kêu gọi của bạn có vẻ đúng, như trong nó chỉ làm việc cho tôi – Atifm

Trả lời

16

Thực tế ví dụ của bạn có vẻ đúng. Đây là những gì tôi đã thử

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

Làm việc như một sự quyến rũ. Tôi khuyên bạn nên sử dụng awscli được cấu hình với thông tin đăng nhập tài khoản gốc của bạn trước tiên và lấy mã cho một ổ đĩa thử nghiệm. Một khi nó làm việc hoặc tạo một người dùng mới chỉ với các quyền mà bạn cần, hoặc áp dụng nó cho một vai trò Instance.

Bạn cần tạo chính sách cho phép SNS: Xuất bản trên tài nguyên: * (cho phép nhắn tin cho mọi người) hoặc tài nguyên: '+17702233322' (cho phép văn bản đến một số cụ thể).

+1

Tôi đã không kết thúc việc sửa đổi mã của tôi cả; nó hoạt động như vậy. Có phải là một bản cập nhật boto3 hoặc một cái gì đó bởi vì nơi tôi sử dụng để có được một lỗi tham số không hợp lệ, tôi không còn nhận được bất cứ điều gì, nhưng lòng tốt. Cảm ơn bạn đã gửi lại cho tôi mã của tôi để bật tính năng này. – kelflanagan

+1

Không phải lo lắng. Vâng khi tôi thử mã của bạn, nó hoạt động tốt, vì vậy tôi đã tìm ra một thứ khác phải là vấn đề. Vui mừng nó làm việc cuối cùng. – Atifm

+0

Xin chào @atifm Tôi đã thử mã này. Tôi nhận được 200 là mã phản hồi. Nhưng không nhận được bất kỳ tin nhắn văn bản nào. Bạn có thể đề xuất bất kỳ lý do nào có thể hoặc Làm thế nào để giải quyết điều này, xin vui lòng? – Naveen

Các vấn đề liên quan