この記事は公開されてから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を掌握しておくと、少し幸せになれるかも知れません。