9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Amazon Connect】初心者がLambdaとの連携でひっかかったこと

Last updated at Posted at 2023-02-09

みなさんこんにちは!
早いものでそろそろ社会人一年目になろうとしている新卒エンジニアです。

現在の部署に配属されてはじめに行ったのがAmazon ConnectとLambdaの連携だったのですが当初は思ったようにいかないことが多く、
近い未来で自分が後輩に教える立場になったときに過去の自分がどこで躓いていたかを記録したいと思い今回この記事を作成することにしました。

使い慣れている方にとっては当たり前の内容ばかりになるとは思いますが、これからLambdaを触ってみたい方、同じような躓きをしている方の参考になれば幸いです。

ちなみに、Lambdaを初めて触った時点での私のスペックを簡単に紹介します。

  • AWS自体入社後の新人研修で初めて触ったレベルの初心者
  • Amazon Connectは研修で一度簡単なコールセンターを作成した経験あり
  • Python歴は独学で3年程度、主に機械学習などの目的で使用していた
  • Python3エンジニア認定基礎試験取得済(別記事に合格体験記があります)

上記の理由から今回Lambdaの記述にはある程度使い慣れているPythonを使用することにしました。
ここから私が実際にAmazon ConnectとLambdaの連携で躓いた点について書いていきます。

①コンタクトフローの情報を受け取りたい

はじめに実装したかったLambda関数がコンタクトIDと顧客の電話番号をS3にcsvで保存するというものだったのですが、これらの情報の取得方法がわかりませんでした。

Lambdaがeventで受け取るデータはjsonデータで、以下のようになっています。

event
{
  "Details": {
    "ContactData": {
      "Attributes": {},
      "Channel": "VOICE",
      "ContactId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
      "CustomerEndpoint": {
        "Address": "+xxxxxxxxxx",
        "Type": "TELEPHONE_NUMBER"
      },
      "CustomerId": "",
      "Description": "",
      "InitialContactId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
      "InitiationMethod": "INBOUND",
      "InstanceARN": "arn:aws:connect:ap-northeast-1:xxxxxxxxxxxx:instance/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "LanguageCode": "ja-JP",
      "MediaStreams": {
        "Customer": {
          "Audio": ""
        }
      },
      "Name": "",
      "PreviousContactId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "Queue": "",
      "References": {},
      "SystemEndpoint": {
        "Address": "+xxxxxxxxxx",
        "Type": "TELEPHONE_NUMBER"
      }
    },
    "Parameters": {
    }
  },
  "Name": "ContactFlowEvent"
}

上記を参考に、LambdaでコンタクトID、顧客の電話番号を取得したい場合以下のように記述します。

Lambda1
def lambda_handler(event, context):
    contactid = event['Details']['ContactData']['ContactId']
    customer_phone_num = event['Details']['ContactData']['CustomerEndpoint']['Address']
...

②returnでエラーになる

下記は私がはじめに作成したLambdaのreturn箇所です。

Lambda2-1
...
    return 200

このままではエラーになります。
ドキュメントを確認すると、以下のように記述されています。

関数から返される出力は、英数字、ダッシュ、アンダースコアのみが含まれる値を持つ、キーと値のペアのフラットオブジェクトである必要があります。

下記のように修正することで解決することができました!

Lambda2-2
...
    return {"statuscode": 200}

③作成した関数を呼び出したい

無事Lambda関数の作成が完了したら、あとはフローで呼び出すだけです。
早速「Lambda関数を呼び出す」ブロックを配置し関数を選択しようとしたのですが、作成した関数が表示されませんでした。

Amazon ConnectのフローでLambda関数を呼び出したい場合、事前にそのLambdaを紐づけておく必要があります。

【手順】
1.Amazon Connectコンソールから対象のインスタンスエイリアスを選択する
エイリアス選択.png
※実際の画面では赤枠内にインスタンス名が表示されています

2.左側ナビゲーションメニューから問い合わせフローを選択する

3.AWS LambdaセクションでLambda関数ドロップダウンボックスから対象のLambdaを選択
関数選択.png

4.Add Lambda Functionボタンを押す

最後に

過去の自分がわからなかったところを振り返ったことで、初心にかえることができた気がします。
ここまでお読みくださりありがとうございました!

参考

9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?