Q&A

Messaging APIとAPIGatewayとLambdaで実現したい

前提・実現したいこと

https://dev.classmethod.jp/articles/lambda-line-bot-tutorial/ こちらの記事のようにおうむ返しのLINEBOTを作成するのがゴールです

発生している問題・エラーメッセージ

Webhookの検証の際200以外のコードが帰ってくることです。

該当のソースコード

CloudWatch Logsで確認したところ console.log('署名認証エラー'); の部分が返ってきていました。

試したこと

https://dev.classmethod.jp/articles/lambda-line-bot-tutorial/ ifの条件が通っていないとのことなので それぞれconsole.logでCloudWatch Logsに出力させたところ

signatureには値が入っていましたが checkHeaderはundefindになっていました。

よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

pythonで試した時も同様の結果が出力されました。 以下はCloudWatchLogsの結果です [ERROR] KeyError: 'X-Line-Signature' Traceback (most recent call last):   File "/var/task/lambda_function.py", line 7, in lambda_handler     signature = event["headers"]["X-Line-Signature"]

  • 0
  • 5
  • 3229
  • twitter facebook

Yutaの方法は正しい

  • 0

X-Line-Signatureが格納されているeventをline developers上のwebhook検証を通してprintするとリクエスト検証用に用意されているキーを格納している変数が「X-Line-Signature」ではなく,「x-line-signature」と小文字を含んだ変数になっていることを先日確認しました.参考にされているサイトのソースコード8行目に記されている'X-Line-Signature'を'x-line-signature'に置き換えることでwebhook検証からは成功コードが帰ってくると思います.しかし,実機で動かす場合にはlineサーバーから送られてくるeventにはX-Line-Signatureという名のリクエスト検証キーが送られてくるので,実機で動かす際には元に戻す必要がありました.自分も同じ問題に悩んでいたので助けになればと思います.(*検証段階で変更されている変数名をしっかり覚えてないので一度eventを表示してご自身で確認されてください.)

  • 3

12/7時点で現在もいろいろと試していますが、うまくいっていません。 またうまくいきましたら記載いたします。

  • 0

checkHeader が undefind とのことで API Gwateway から Lambda に HTTP header が渡っていない可能性があります。 以下サイトを参考にマッピングテンプレートの設定を試してみてください。

https://aws.amazon.com/jp/premiumsupport/knowledge-center/custom-headers-api-gateway-lambda/

  • 0

https://qiita.com/konikoni428/items/fd1ab5993bc5526726bb

pythonでも試しましたが、同様のエラーになりました。 この200以外のエラーの中身を見る方法などはありますでしょうか?

  • 0
本当によろしいですか? question.vm