このハンズオンでは、顧客の電話番号をキーにして外部の Dynamo DB に格納された顧客情報を検索し、顧客の会員レベルを取得します。そして、会員レベルに応じたキューにルーティングします。これはレガシーな音声システムにおいて、”データベースルーティング”と呼ばれることもあるテクニックの一つです。データベースルーティングの例を以下に示します。
また、こうしたテクニックを使うことで、Amazon Connect では問い合わせフローを集約し、運用効率を劇的に向上させることが可能です。例えば、公開している電話番号が100個あり、対応するキューも100個ある場合、データベースルーティングを活用することでシンプルな問い合わせフローを一つ用意するだけですみます。
こうしておけば、番号の追加・削除を行う場合も、Dynamo DB の項目をメンテナンスするだけですみます。問い合わせフローを編集する必要はありません。
このハンズオンでは、以下のような作業を実施します。
このハンズオンでは、“1.準備” の章の作業が完了していることを前提にしています。まだ、Amazon Connect インスタンスの作成や電話番号の取得が済んでいない方は、先に “1.準備” の作業を実施してください。
ポリシーの作成画面で”JSON”タブを選択し、以下のテキストをエディターに貼り付けます。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"lambda:*",
"dynamodb:*"
],
"Resource": "*"
}
]
}
右下の”次のステップ:タグ”ボタンを押し、続いて”次のステップ:確認”ボタンを押します。
名前の欄には lambdaDynamo
と入力し、右下の”ポリシーの作成”ボタンを押します。
lambdaDynamo
と入力します。先ほど作成した lambdaDynamo ポリシーが表示されるので、チェックボックスをオンにして、”次のステップ:タグ”を押します。lambdaDynamoRole
と入力して、”ロールの作成”ボタンを押します。
membershipTable
phoneNumber
membershipLevel
パーティションキーに phoneNumber
と入力し、下の方までスクロールして”インデックスの作成”ボタンを押します。
左側のナビゲーションペインで”項目の探索”を選択し、membershipTable にチェックを入れます。そして、”項目の作成”ボタンを押します。
phoneNumberフィールドには自分がテストに使う電話番号(例えば、自分の携帯電話番号)、メンバーシップレベルには Platinum
と入力し、”項目の作成”ボタンを押します。
getMembership
と入力します。ランタイムは Node.js 16.x を選択します。さらに、 デフォルトの実行ロールの変更 メニューを展開し、上で作成した lambdaDynamo ロールを選択します。最後に、右下の”関数の作成”ボタンを押します。
index.js のコードを以下のものに置き換え、”Deploy”ボタンを押します。
var AWS = require("aws-sdk");
var docClient = new AWS.DynamoDB.DocumentClient();
exports.handler = (event, context, callback) => {
var phoneNumber = event.Details.ContactData.CustomerEndpoint.Address;
var paramsQuery = {
TableName: 'membershipTable',
KeyConditionExpression: "phoneNumber = :varNumber",
IndexName: "phoneNumber-index",
ExpressionAttributeValues: {
":varNumber": phoneNumber
}
};
docClient.query(paramsQuery, function(err, data) {
if (err) {
console.log(err); // an error occurred
context.fail(buildResponse(false));
}
else {
console.log("DynamoDB Query Results:" + JSON.stringify(data));
if (data.Items.length === 1) {
console.log(data.Items[0].membershipLevel);
var membershipLevel = data.Items[0].membershipLevel;
callback(null, buildResponse(true, membershipLevel));
}
else {
console.log("PhoneNumber not found");
callback(null, buildResponse(true, "none"));
}
}
});
};
function buildResponse(isSuccess, membershipLevel) {
if (isSuccess) {
return {
membershipLevel: membershipLevel,
lambdaResult: "Success"
};
}
else {
console.log("Lambda returned error to Connect");
return { lambdaResult: "Error" };
}
}
“Test”ボタンの右の ▼ を押して、”Configure test event”を選択します。イベント名に amazonConnectTestEvent
と入力し、イベントのペイロードを以下のものに置き換えて、右下の”作成”ボタンを押します。
{
"Name": "ContactFlowExecution",
"Details": {
"Parameters": {
"key1": "value1",
"key2": "value2"
},
"ContactData": {
"ContactId": "ASDAcxcasDFSSDFs",
"InitialContactId": "Acxsada-asdasdaxA",
"PreviousContactId": "Acxsada-asdasdaxA",
"Channel": "Voice",
"InstanceARN": "",
"InitiationMethod": "INBOUND/OUTBOUND/TRANSFER/CALLBACK",
"SystemEndpoint": {
"Type": "TELEPHONE_NUMBER",
"Address": "01234567"
},
"CustomerEndpoint": {
"Type": "TELEPHONE_NUMBER",
"Address": "+8190********"
},
"Queue": {
"Name": "PrimaryPhoneQueue",
"ARN": ""
},
"Attributes": {
"key1": "value",
"key2": "value"
}
}
}
}
ここで、 CustomerEndpoint.Address の値は先ほど DynamoDB に登録した電話番号に変更してください。
Silver
という名前のキューを作成します。オペレーション時間は Basic Hours
を選択してください。
Platinum = 1, Gold = 2, Silver = 3
)。完了したら最後に、右上の”保存”ボタンを押します。
テストコールを実行してみてください。
ハンズオン #1は以上となります。