[Amazon Connect] 星占いをメールで受け取るシステムを雑に作ってみた

Amazon Connectでは、発信元の電話番号の取得やLambdaの実行が可能です。 今回は、星占いのメールを受け取るサービスを雑に作ってみました。
2018.10.21

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

1 はじめに

Amazon Connect(以下、Connect)では、発信元の電話番号の取得やLambdaの実行が可能です。 今回は、Connectで星占いのメールを受け取るサービスを雑に作ってみました。

最初に使ってみたようすです。

2 問い合わせフロー

設定した問い合わせフローは、次のようなものです。内容は、概ね以下のとおり。

  • 言語を日本語に設定
  • アナウンスと共にユーザーの入力を受け付ける
  • Lambdaの実行
  • 結果のアナウンス

そして、Lambdaの実行時には、システム保存済みのお客様入力をパラメータ(inputData)として送っています。

3 Lambdaの実装

下記のJSONは、Lambdaが呼び出された際に、Connectから送られてくるJSONです。

発信元の電話番号は、Details.ContactData.CustomerEndpoint.Addressから、ユーザーの入力は、パラメータinputDataから、それぞれ取り出せます。

{
    "Details": {
        "ContactData": {
            "Attributes": {},
            "Channel": "VOICE",
            "ContactId": "8c088600-9ec5-4cb9-9a79-bf9b5c797a89",
            "CustomerEndpoint": {
                "Address": "+819012345678",
                "Type": "TELEPHONE_NUMBER"
            },
            "InitialContactId": "8c088600-9ec5-4cb9-9a79-bf9b5c797a89",
            "InitiationMethod": "INBOUND",
            "InstanceARN": "arn:aws:connect:ap-southeast-2:xxxxxxxx:instance/9f2c9c33-43d0-487a-a25c-9029828467ee",
            "MediaStreams": {
                "Customer": {
                    "Audio": null
                }
            },
            "PreviousContactId": "8c088600-9ec5-4cb9-9a79-bf9b5c797a89",
            "Queue": null,
            "SystemEndpoint": {
                "Address": "+818001236882",
                "Type": "TELEPHONE_NUMBER"
            }
        },
        "Parameters": {
            "inputData": "19801221"
        }
    },
    "Name": "ContactFlowEvent"
}

実装したLambdaのコードが、下記のとおりです。

var AWS = require('aws-sdk');

exports.handler = async function(event, context) {
// 発信元の電話番号
const phoneNumber = event.Details.ContactData.CustomerEndpoint.Address;
// ユーザーの入力値(誕生日)
const birthday = event.Details.Parameters.inputData;

// 誕生日から星占いの結果を取得する
const message = getHoroscope(birthday);

// 結果をメールで送信する
const SNS = new AWS.SNS();
const params = {
Message: message,
PhoneNumber: phoneNumber
};
await SNS.publish(params).promise();
return {};
};

function getHoroscope(birthday) {
//・・・略・・・
}

4 最後に

星占いのコンテンツは別として、これぐらいの仕組みなら瞬殺(実際は、30分程度かかりました・・・)で出来てしまいます。

システム構築のリソースの一つとして、Connectを掌握しておくと、少し幸せになれるかも知れません。