TwilioをLambdaで実行するまでのメモ

# これはなに
twilioを使うことがありそうだったので使用するまでのメモです。

[コミュニケーションAPIのTwilioとは？](https://cloudapi.kddi-web.com/magazine/twilio-lesson/what-is-twilio-of-the-communication-api)
> Twilioは『電話をかける』『SMSを送る』といった機能を、すでにTwilioのシステム内で作り上げています。
> これらの機能をAPIという形で提供しているため、お客様は簡単にTwilioの機能を自社システムに追加できるため、0から作る必要がないというわけです

# 準備
実際に使用するまでにいくつかの準備が必要となります。

## アカウント登録
下記URLより、アカウント登録が行えるので登録します。
トライアルで少額の金額がチャージされていますのでその料金分まで使用できます。
※自分の場合は500円チャージされてました。
[Twilio会員登録](https://www.google.com/aclk?sa=l&ai=DChcSEwjMp-m-7eL1AhXEqpYKHR8xBd4YABAHGgJ0bA&ae=2&sig=AOD64_1Gz15FPB9EHOZbI-Ff3cwwiNeq7A&ved=2ahUKEwj4juO-7eL1AhWEQN4KHQ1PAcMQqyQoAnoECAQQBw&dct=1&adurl=)


## 番号取得
[**Get a Trial Number**]をクリックし電話番号を取得。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435702/9e0d733f-b94f-103d-872e-b504d8205a53.png)

## アカウントSID・AUTHTOKENの取得
左側の四角ボタンをクリックするとコピれるので取っておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435702/290729f1-6c0b-fa88-ac93-38f463973b36.png)

## twilioモジュールのインストール

```
$ pip3 install twilio
```

## 環境変数の設定
上記で、コピペしておいたアカウントSID・AUTHTOKENを環境変数へセットしておきます。

```
export TWILIO_ACCOUNT_SID=xxxxxxxxxxxxx
export TWILIO_AUTH_TOKEN=xxxxxxxxxxxxxxxx
```

# 実際に電話をかけてみる
次は実際に自分の携帯にTwilioから電話をかけてみたいと思います。
今回はTwilioから公開されているサンプルコードを元に馴染のあるPythonを使用して作成していきます。
https://jp.twilio.com/ja/docs/voice/quickstart/python

## コード
今回はLambdaへ移植することも考え、<font color="OrangeRed">lambda_function.py</font>という名前で作成しています。

```lambda_function.py
import os
from twilio.rest import Client

# Find your Account SID and Auth Token at twilio.com/console
# and set the environment variables. See http://twil.io/secure
account_sid = os.environ['TWILIO_ACCOUNT_SID']
auth_token = os.environ['TWILIO_AUTH_TOKEN']
client = Client(account_sid, auth_token)

call = client.calls.create(
                        url='http://demo.twilio.com/docs/voice.xml',
                        to='+15558675310',
                        from_='+15017122661'
                    )

print(call.sid)
```

## 実行

```
$ python3 lambda_function.py
```
実際に自分の携帯へ非通知で電話がかかってきました。
![iOS の画像 (1) (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435702/f71da6d0-e480-1631-c402-e41b4014ce93.png)

# 実際にSMSを飛ばしてみる
次は実際に自分の携帯にTwilioからSMSを飛ばしてみたいと思います。
SMSに関してもTwilioから公開されているサンプルコードを元に作成してきます。

## コード
SMSに関しては、送信するメッセージ(body)を書き換えられます。デフォルトだと以下、
（Join Earth's mightiest heroes. Like Kevin Bacon.）

```lambda_function.py
# Download the helper library from https://www.twilio.com/docs/python/install
import os
from twilio.rest import Client


# Find your Account SID and Auth Token at twilio.com/console
# and set the environment variables. See http://twil.io/secure
account_sid = os.environ['TWILIO_ACCOUNT_SID']
auth_token = os.environ['TWILIO_AUTH_TOKEN']
client = Client(account_sid, auth_token)

message = client.messages \
                .create(
                     body="Join Earth's mightiest heroes. Like Kevin Bacon.",
                     from_='+15017122661',
                     to='+15558675310'
                 )

print(message.sid)
```
## 実行

```
$ python3 lambda_function.py
```
実行してみると、自分はメッセージを変えましたが問題無くSMSが届いていました。
※Set From yourから始まるメッセージは有料アカウントにすることで消せるそうです。
![20220203_161529076_ApplicationFrameHost.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435702/66bffdcc-355e-e51b-8bd2-ebf351008270.png)

# Lambdaへ移行する
ローカルで実行してきたサンプルコードをLambdaへ移行したいと思います。
## コード修正
電話とSMS共通で<font color="OrangeRed">lambda_handler</font>を追記して、元のコードのインデントを1つ落として下記のような状態にしておきます。

```lambda_function.py
import os
from twilio.rest import Client

def lambda_handler(event, context):

    # Find your Account SID and Auth Token at twilio.com/console
    # and set the environment variables. See http://twil.io/secure
    account_sid = os.environ['TWILIO_ACCOUNT_SID']
    auth_token = os.environ['TWILIO_AUTH_TOKEN']
    client = Client(account_sid, auth_token)

    call = client.calls.create(
                            url='http://demo.twilio.com/docs/voice.xml',
                            to='+15017122661',
                            from_='15558675310'
                        )

    print(call.sid)
```

## Lambda設定
インストールしたtwilioモジュールと<font color="OrangeRed">lambda_function.py</font>をzip圧縮し、アップロードしてきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435702/46c67972-3361-eab9-c231-005a7806a7e5.png)

### 環境変数設定
LambdaコンソールからアカウントSIDとAUTHTOKENを環境変数に設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435702/367f9e0f-01d3-a3de-763e-1b6f885a227b.png)

### テスト実行
Lambdaコンソールのテスト画面からテスト名のみ入力し実行します。
ローカルで実行された時と同じく電話やSMSが問題無く動作していたらLambdaへの移行は以上となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435702/1a03f33f-d3af-362b-1929-cf5d4cc9bbe3.png)

## おわりに
少額で通話やSMS送信が簡単に実現できるのがシンプルに凄いなと思いました(小並感)。
自分の携帯へ掛けたりすることで簡単にテストできたので興味がある方はぜひ試してみてください。