回答編集履歴
2
余計な部分を削除
test
CHANGED
@@ -4,21 +4,21 @@
|
|
4
4
|
|
5
5
|
|
6
6
|
|
7
|
-
いいえ。JSON.parseしようとしたevent.bodyがundefined
|
7
|
+
いいえ。JSON.parseしようとしたevent.bodyがundefinedだった可能性が高いです。例えば以下のコードで同様のエラーが得られます。
|
8
8
|
|
9
9
|
|
10
10
|
|
11
11
|
```javascript
|
12
12
|
|
13
|
-
const data = {
|
13
|
+
const data = {};
|
14
14
|
|
15
|
-
JSON.parse(data.
|
15
|
+
JSON.parse(data.foo);
|
16
16
|
|
17
17
|
```
|
18
18
|
|
19
19
|
|
20
20
|
|
21
|
-
JSON.parseは文字列
|
21
|
+
JSON.parseは渡されたJSONの文字列の先頭が`{`なら「Objectかな…」`[`なら「Arrayかな…」、`1`なら「Numberかな…」、と解析できますが、`undefined`だと「先頭uなの!?」となって、結局
|
22
22
|
|
23
23
|
|
24
24
|
|
@@ -34,11 +34,11 @@
|
|
34
34
|
|
35
35
|
|
36
36
|
|
37
|
-
エラーを
|
37
|
+
エラーを先まで見ると、どこで止まったかが書いてあります。
|
38
38
|
|
39
39
|

|
40
40
|
|
41
|
-
スクリプトの29行目の29文字目でエラーになった
|
41
|
+
スクリプトの29行目の29文字目でエラーになったようです。スクリプトの29行目を確認しましょう。
|
42
42
|
|
43
43
|
```javascript
|
44
44
|
|
@@ -48,13 +48,13 @@
|
|
48
48
|
|
49
49
|
```
|
50
50
|
|
51
|
-
|
51
|
+
`JSON.parse`のところだと分かります。このことから、`event.body`が変で、JSONの文字列が渡らなかったのかな、と予想できます。なので、原因を調べるために、以下のように1行追加して、もう一度テストしてみてください。困ったときは、おかしい行の前で`console.log`すれば、たいていの問題は原因がわかります。
|
52
52
|
|
53
53
|
```
|
54
54
|
|
55
55
|
// メッセージの編集
|
56
56
|
|
57
|
-
console.log(event);
|
57
|
+
console.log(event); // 追加
|
58
58
|
|
59
59
|
const parameters = JSON.parse(event.body).result.parameters;
|
60
60
|
|
@@ -62,7 +62,7 @@
|
|
62
62
|
|
63
63
|
|
64
64
|
|
65
|
-
今回の場合、API Gatewayからのアクセス、つまり、HTTPのリクエストがトリガーとなります。このときのeventオブジェクトは、HTTPのヘッダの情報やアクセス元の情報が入っていて、Lambdaのコンソールからテストしたときのような、単純な構造にはなっていません。
|
65
|
+
今回の場合、API Gatewayからのアクセス、つまり、HTTPのリクエストがトリガーとなります。このときのeventオブジェクトには、HTTPのヘッダの情報やアクセス元の情報が入っていて、Lambdaのコンソールからテストしたときのような、単純な構造にはなっていません。
|
66
66
|
|
67
67
|
|
68
68
|
|
@@ -88,7 +88,9 @@
|
|
88
88
|
|
89
89
|
|
90
90
|
|
91
|
+
ここが問題なければ、AWSLambda → Slackは問題ありません。
|
92
|
+
|
91
|
-
|
93
|
+
次はAPIGatewayのコンソールからAPIGateway → AWSLambdaをテストしましょう。
|
92
94
|
|
93
95
|
|
94
96
|
|
@@ -100,4 +102,6 @@
|
|
100
102
|
|
101
103
|
|
102
104
|
|
105
|
+
ここが問題なければ、APIGateway → AWSLambdaも問題ありません。
|
106
|
+
|
103
|
-
|
107
|
+
次はDialogflow → APIGatewayを確認することになりますが、長くなったので回答はここまでとします。
|
1
エラー本文の説明を追加しました
test
CHANGED
@@ -1,8 +1,44 @@
|
|
1
|
+
> SyntaxError: Unexpected token u in JSON at position 0
|
2
|
+
|
3
|
+
> コールバックと引数が一致していない?のでしょうか
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
いいえ。JSON.parseしようとしたevent.bodyがundefinedであった可能性が高いです。例えば以下のようなコードで同様のエラーが得られます。
|
8
|
+
|
9
|
+
|
10
|
+
|
11
|
+
```javascript
|
12
|
+
|
13
|
+
const data = {foo: '123'};
|
14
|
+
|
15
|
+
JSON.parse(data.bar);
|
16
|
+
|
17
|
+
```
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
JSON.parseは文字列を解析してからJavaScriptの値を生成しますので、先頭が`{`なら「Objectかな…」`[`なら「Arrayかな…」、`1`なら「Numberかな…」、のように解析できますが、`undefined`だと「先頭uなの!?」となって、結局
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
```
|
26
|
+
|
27
|
+
SyntaxError: Unexpected token u in JSON at position 0
|
28
|
+
|
29
|
+
```
|
30
|
+
|
31
|
+
|
32
|
+
|
1
|
-
|
33
|
+
とエラーを出して止まります。
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
エラーをもう少し見ると、どこで止まったかが書いてあります。
|
2
38
|
|
3
39
|

|
4
40
|
|
5
|
-
スクリプトの29行目の29文字目でエラーになった
|
41
|
+
スクリプトの29行目の29文字目でエラーになったそうです。なので、スクリプトの29行目を確認しましょう。
|
6
42
|
|
7
43
|
```javascript
|
8
44
|
|