目次
1.はじめに
AWS Amazon Connectがそろそろ東京リージョンで利用可能となる冬のある日。
社長の内から、
「忘年会で使うからAmazon Connectつかって電話で抽選するシステム用意して」
というミッションを受けたので、
Amazon Connectでできることを検証しながらやってみよーということになりました。
今回はプラスちょっとIoTということで、SORACOMの
SORACOM LTE-M Button powered by AWS
を使って電話をかけるところもトライしてみました。
2. やりたいこと
忘年会で使える抽選アプリをつくる。
機能は以下。
- アプリの電話番号にかけると、抽選に登録される
- 登録完了を伝えるSMSが送られてくる
- IoTボタンを押すとランダムな人にランダムな賞品が当選する
- 当選した人に電話がかかり、どの賞品が当たったかを音声で伝える
3. 構成
【赤線】
ユーザーがアプリの電話番号に電話をかけると、Amazon Connect内でAWS Lambdaをキック。
ユーザーの番号情報をDynamoDBへ登録。
DBへの登録を完了すると、Amazon SNS(Simple Notification Service)を利用してSMSを送信。
登録が完了し、SMSが送信されたというメッセージを再生した後、通話は自動で切断される。
【青線】
抽選運営者がIoTボタンを押すと、Lambdaをキック。
LambdaがDynamoDBからランダムな賞品と当選者を選出する。
Lambda -> Amazon Connectから当選者の登録電話番号に通話をかける。
当選者が電話にでると、当選した賞品名が伝えられる。
4. Amazon Connectのポイント
Amazon ConnectからLambdaを呼び出した場合、そのレスポンスには
$.External.{keyname}
でアクセスできる。
一方、LambdaからAmazon Connectを呼び出し、そのAmazon Connect内で
Lambdaから渡した属性(Attributes)を使いたい場合、
$.Attributes.{keyname}
でアクセスできる。
5. Lambdaのポイント
ぶっちゃけLambdaを使うのもNode.jsを使うのも初めてだったので、
初歩的な部分で結構詰まりました。
以下にパーツとして使えそうなコードをおいておきます。
1 2 |
//かけてきた相手の電話番号を取得 var telnum = event.Details.ContactData.CustomerEndpoint.Address; |
Amazon SNSをキックしてSMSを送信するはっきりとした記事がなかった気がするので、
SMS送信は以下を利用してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
var AWS = require("aws-sdk"); var sns = new AWS.SNS(); var telnum = "+8190XXXXYYYY"; //set your phone number console.log("Sending SMS..."); var sms_params = { Message: 'This is simple message from AWS Lambda.', MessageAttributes: { 'AWS.SNS.SMS.SMSType': { DataType: 'String', StringValue: 'Promotional' }, 'AWS.SNS.SMS.SenderID': { DataType: 'String', StringValue: 'SenderName' } }, PhoneNumber: telnum }; sns.publish(sms_params, function(err, data) { if (err) { console.log("Unable to send message. Error JSON:", JSON.stringify(err, null, 2)); callback(null, {body: 'smsfail'}); } else { console.log("Sent message:", JSON.stringify(data, null, 2)); callback(null, {body: 'success'}); } }); |
6. DynamoDBのポイント
DynamoDBを使うのも初めてでした。NoSQLがなんだかよくわかっていないまま触ってヤケドしました。
結論だけ言えば、RDS使えばよかったー!
全体の中で一番時間がかかった部分です。
DynamoDBの(若干の)理解と、Lambdaからの操作、そしてテーブル構造の作り直し。
諸々勉強できましたがしばらく使うことはなさそうです。。
7. 実際に動かしてみた
8. おわりに
音声通話を簡単にシステムとして組み込むことができます。
現状は音声認識として活用できるAmazon Lexが日本語に対応していないので、
リアルタイムで対話応対することは難しいが、
現状の仕組みだけでも十二分に様々なシステムで活用可能だと思います。
電話をメインとするシステムだけでなく、お客さんへの重要な定期連絡には通話で行うなど、
オプション的に通話を取り入れてもいいと思います。
今回やっている中でちょっと微妙だなと思ったのは、
Amazon Pollyの音声合成は調整なしだとだいぶ読み方が面白い感じになるということです。
次回は音声合成にチャレンジしたいと思います。
忘年会は盛況のうちに終了しました。
- 組織内のIPv4アドレス(EIP)を自動通知してコスト削減する - 2024-12-03
- 組織内のAWSコスト最適化のためにやっている7つのこと - 2024-12-01
- Amazon Connect Contact Lens + iPaaSで生成AI活用&他サービス連携を簡単に実現!– Amazon Connect アドベントカレンダー 2024 - 2024-12-01
- AWS Step Functionsの基本を再学習しました - 2024-09-23
- Amazon SESでバウンスメールを管理する - 2024-07-07