はじめに

Vonage SMS APIを使用し、Amazon API Gateway & AWS LambdaでREST APIを作成してブラウザから無料でSMSメッセージを送信する方法を作成してみました。

同じように作成する場合は、Vonageの無料アカウントを作成しお試しください。

Vonageとは

SMS、認証、Voice/音声通話、ビデオなど、様々なチャネルをクラウドAPIで提供しているコミュニケーションプラットフォームCPaasです。
Vonage

構成図


今回はシンプルにAmazon API Gateway & AWS LambdaをSAMを使用し作成しています。

コード

ファイル構成

1
2
3
4
5
6
7
.
├── function
│   └── app.py
├── layers
│   └── requirements.txt
├── samconfig.toml
└── template.yaml

app.py

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import json
import os
 
import vonage
 
 
def lambda_handler(event, context):
    try:
        client = vonage.Client(key=os.environ['VONAGE_API_KEY'], secret=os.environ['VONAGE_API_SECRET'])
        response_data = vonage.Sms(client).send_message(
            {
                "from": "Vonage APIs",
                "to": event['queryStringParameters']['phone_number'],
                "text": event['queryStringParameters']['message'],
            }
        )
        if response_data["messages"][0]["status"] == "0":
            return {
                'statusCode': 200,
                'body': json.dumps('Message sent successfully.')
            }
        else:
            raise Exception(f"{response_data['messages'][0]['error-text']}")
    except Exception as e:
        return {
            'statusCode': 400,
            'body': json.dumps(f"Message failed with error: {str(e)}")
        }

template.yaml

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Resources:
  SendSmsInVonageFunction:
    Type: 'AWS::Serverless::Function'
    Properties:
      FunctionName: send-sms-in-vonage
      Handler: app.lambda_handler
      Runtime: python3.11
      CodeUri: ./function/
      MemorySize: 128
      Timeout: 30
      Environment:
        Variables:
          VONAGE_API_KEY: "13ae9e6f"
          VONAGE_API_SECRET: "3pyF2RuLMKJXUF62"
      Layers:
        - !Ref VonageLayer
      Events:
        VonageSmsApi:
          Type: Api
          Properties:
            Path: /send
            Method: get
  VonageLayer:
    Type: AWS::Serverless::LayerVersion
    Properties:
      Description: VonageLayer
      ContentUri: ./layers/
      CompatibleRuntimes:
        - python3.11
      LayerName: !Sub vonage-layer
      RetentionPolicy: DELETE
    Metadata:
      BuildMethod: python3.11

作成時の注意点

  • vonageをレイヤーに追加するようにする
  • Vonageアカウントを作成したらVonage API DashboardからAPI keyとAPIシークレットを取得し環境変数に追加するようにする
  • 電話番号は国番号+電話番号(最初の0は除く) 例:日本で09012345678なら819012345678になる

動作確認

  1. コードの作成ができたらsam build & sam deployをする。
  2. コンソールでリソースができていることを確認する。
  3. 作成したAPIにGETリクエストをする。
  4. SMSが送られてきたら成功!


終わりに

以上のように、誰でも無料で簡単にSMSを送信するAPIを作ることができます。画面に組み込んだりAPI以外の方法でSMSを送信したりと様々なユースケースで活用することができます。

Vonageを使えば簡単にブラウザから電話の発信をすることができ、様々なコミュニケーションツールの作成に活用することができます。

通話機能に関しては、無料アカウントでは使用できなかったり対象国の法律による制限があるので注意が必要です。