質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

3回答

613閲覧

AWSのLambdaでの途中からでもパラメータを正常に取得する方法

akira777

総合スコア8

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2022/05/12 02:27

編集2022/05/19 02:11

AmazonConnectの「キューメトリクスの取得」ブロックは、キューがアクティブではない(キューに 1 つもコールがない、キューのエージェントがオンラインではない) 場合は、エラーになります。(下の画像)
そこで、「人員の確認」ブロックを配置してアクティブの場合のみ「キューメトリクスの取得」をすることでエラーを回避しようかと思いましたが、Lambdaで合算されません。(上の画像)
原因は「tq1」「tq2」「tq3」の全てを取得しないからだと思われます。
ランダムで「tq1」を取得しないで「tq2」のみ取得したり、「tq2」と「tq3」のみ取得など・・・
全てのキューがアクティブの状態であれば、パラメータ取得は問題ありません。
この場合、合算する方法などあれば、ご教示いただけると助かります。
よろしくお願いいたします。
イメージ説明
イメージ説明

import json
import logging
import traceback

#ログ設定
logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):

TODO implement

#AmazonConnectのコールフローからパラメータ取得し、値をセットする
Attributes = event.get('Details', {}).get('ContactData', {}).get('Attributes', {})
tq1 = str(Attributes.get('tq1', ''))
tq2 = str(Attributes.get('tq2', ''))
tq3 = str(Attributes.get('tq3', ''))

#キューの待ち呼数の値を文字列から整数に変換して合算する
StayCallCount = int(tq1) + int(tq2) + int(tq3)

#待ち呼数合算値をセットして、AmazonConnectに返す
return {
'StayCallCount': StayCallCount
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu_1985

2022/05/12 06:01

具体的にはどういうエラーが出ているんでしょうか。 単純にdictにキーが存在しない場合の処理を書けば良さそうに思えます https://teratail.com/questions/184274
akira777

2022/05/12 08:57

ありがとうございます。 エラーは下記の内容となります。 [ERROR] ValueError: invalid literal for int() with base 10: '' Traceback (most recent call last):   File "/var/task/lambda_function.py", line 20, in lambda_handler     StayCallCount = int(tq1) + int(tq2) + int(tq3)
guest

回答3

0

ベストアンサー

キーが存在しない場合のみ「0」を入れることは可能でしょうか?
下記ですと常に「0」となります。
tq1 = str(Attributes.get('tq1', '0'))

ん〜、よくわからず。
上記のコードがまさしく、

  •  「tq1」が存在する場合はその値、存在しない場合は「0」を取得する

コードかと思いますが。
もし本当に「常に0」となっているのであれば、上記に到達するまでのコードに誤りがないか確認すべきかと思います。

投稿2022/05/17 13:19

編集2022/05/17 13:21
ninja250r

総合スコア152

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ご返答、ありがとうございます。
下記は既に試しており、エラーが発生しないのですが、最後のStayCallCountで加算されず困っておりました。
tq1 = Attributes.get('tq1', '0')
tq2 = Attributes.get('tq2', '0')
tq3 = Attributes.get('tq3', '0')
よろしくお願いします。

投稿2022/05/12 12:49

akira777

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu_1985

2022/05/13 04:30

それは常に発生しないのでしょうか? 0ではなくそれぞれ別の数字を入れたら合計値でデバッグできませんか?
akira777

2022/05/13 08:15

お世話になります。 ここの数字は、AmazonConnectのメトリクスの取得から取得するので、他の数字を入れても解決いたしません。 0の数字を入れることで、メトリクスの取得からの数字が取得できておりません。 よろしくお願いいたします。
akira777

2022/05/16 05:10

お世話になります。 値を0に指定すると下記になります。 ここは「0」固定ではなく、フローから値を取得いたします。 "Parameters": { "Value": "0", "Key": "tq3" }, 当然ですが、合算値も下記のように「0」になります。 "ExternalResults": { "StayCallCount": "0" }, "Parameters": { "FunctionArn": "arn:aws:lambda:ap-northeast-1:234266471170:function:Queue_Sum_TEST", "TimeLimit": "3000" }, よろしくお願いいたします。
akira777

2022/05/16 05:45

キーが存在する場合は、通常通り値をフローから取得いたしますが、 キーが存在しない場合のみ「0」を入れることは可能でしょうか? 下記ですと常に「0」となります。 tq1 = str(Attributes.get('tq1', '0')) また、下記ですとキーが存在しない場合はエラーになってしまいます。 tq1 = str(Attributes.get('tq1', '')) よろしくお願いいたします。
akira777

2022/05/19 00:19

ありがとうございます。 コードは下記がすべてとなります。 特に原因が分からず、困っております。 import json import logging import traceback #ログ設定 logger = logging.getLogger() logger.setLevel(logging.INFO) def lambda_handler(event, context): # TODO implement #コールフローからパラメータ取得 Attributes = event.get('Details', {}).get('ContactData', {}).get('Attributes', {}) tq1 = str(Attributes.get('tq1', '0')) tq2 = str(Attributes.get('tq2', '0')) tq3 = str(Attributes.get('tq3', '0')) #計算した値を文字列から整数に変換してStayCallCountに入れる StayCallCount = int(tq1) + int(tq2) + int(tq3) return { 'StayCallCount': StayCallCount }
akira777

2022/05/19 01:05

すいません、質問です。 全てのパラメータを取得すると「0」でも加算されますが、tq1などのパラメータを取得しない場合ですと、加算されません。 そもそもtq1を通過させず、いきなりtq2のみ取得するなどした場合のみ、加算されません。 よろしくお願いいたします。
yu_1985

2022/05/20 05:59

「0でも加算される」と「加算されない」の違いはなんでしょうか?
akira777

2022/05/20 06:30

お世話になります。 加算されるのは下の画像となります。 下の画像の「キューメトリクスの取得」で値を取得する場合は加算されます。 上の画像で「人員の確認」から「キューメトリクスの取得」すると値が取得されず、加算されません。 よろしくお願いいたします。
guest

0

Attributes.get('tq1', '')だとキーが存在しない場合空文字が入るので、後ろでintにキャストする時にエラーになってるのでは。
'0'にしたらどうなるでしょうか。

投稿2022/05/12 10:00

yu_1985

総合スコア7445

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問