AWS IoT 1-Clickで呼び鈴を作ってみる

手軽にIoTデバイスを入手して実践できるAWS IoT 1-Clickを使って呼び鈴を作ってみます。
AWS IoT Enterprise ButtonはAmazonで購入できます。


デバイスのセットアップはこちらを参考に済ませます。


呼び鈴といってもボタンをトリガーにLambdaを呼び出しAmazon Connectで電話をかけるだけです。

まずは、以前書いた記事を参考にAmazon ConnectフローとLambdaを作ります。
https://www.blog.danishi.net/2019/11/13/post-2503/
import boto3
import logging


def lambda_handler(event, context):
    
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)
    
    logger.info(event)
    
    client = boto3.client('connect')
    
    attributes = event['placementInfo']['attributes']
    phone_number = attributes['phoneNumber']

    result = client.start_outbound_voice_contact(
        InstanceId='***********************************',
        ContactFlowId='***********************************',
        SourcePhoneNumber='+81XXXYYYYZZZZ',
        DestinationPhoneNumber=phone_number,
    )

    return {
        'result': result['ResponseMetadata'],
    }
AWS IoT 1-Clickから電話番号を受け取ってAmazon Connectに渡して架電して音声読み上げを行います。

次に呼び出し側のAWS IoT 1-Clickプロジェクトを作成します。
デバイスに割り当てるプレイスメントのテンプレートを作ります。
先ほど作ったLambdaを割り当てます。
プロジェクトとテンプレートを作成したら次はボタンとパラメータを割り当てるプレイスメントを作ります。
事前に登録したボタンと、パラメータとして渡す電話番号を設定すれば完了です。

早速ボタンを押してみると、3秒後くらいに電話が鳴り、取ると設定した文章が読み上げられます。
レポートから実行結果も確認できます。

Lambdaが実際に受け取るパラメータは次のようになります。
{
    "deviceInfo": {
        "deviceId": "G03XXXXXXXXXXXJP",
        "type": "button",
        "remainingLife": 99.35,
        "attributes": {
            "projectRegion": "ap-northeast-1",
            "projectName": "IoT_Chaime",
            "placementName": "Entrance",
            "deviceTemplateName": "phone_place"
        }
    },
    "deviceEvent": {
        "buttonClicked": {
            "clickType": "SINGLE",
            "reportedTime": "2020-03-12T23:50:18.755Z"
        }
    },
    "placementInfo": {
        "projectName": "IoT_Chaime",
        "placementName": "Entrance",
        "attributes": {
            "phoneNumber": "+8190XXXXYYYY"
        },
        "devices": {
            "phone_place": "G03XXXXXXXXXXXJP"
        }
    }
}
プレイスメントに割り当てたパラメータに加え、どのプレイスメントからどのボタンが押されたかと押下のタイプ(SINGLE、DOUBLE、LONG)が取れるので、アイディア次第でバリデーションのある制御ができそうです。