

### 質問したいこと

AWSのLambdaでLINE Botを作成しようとしています。  
様々なサイトを見ていたのですがLine-Bot-SDKを使用しているサイトが多いのでそちらを使用することにしました。

### 手順

1.AWSのCloud9で"pip install line-bot-sdk -t python"を使用してインストールし、"zip -r
lineBotSdk.zip python"でZIPを作成→ダウンロード

2.Lambdaでレイヤー作成(python 3.9)し、1で作成したZipファイルをアップロード

3.Lambdaで関数を作成(python 3.9)→2.で作成したレイヤーを入れて下記コードを入力

[code]

    import json
    import os
    
    
    # 環境変数からLINE Botのチャネルアクセストークンを取得
    LINE_CHANNEL_ACCESS_TOKEN = os.environ['LINE_CHANNEL_ACCESS_TOKEN']
    # チャネルアクセストークンを使用して、LineBotApiのインスタンスを作成
    LINE_BOT_API = LineBotApi(LINE_CHANNEL_ACCESS_TOKEN)
    
    def lambda_handler(event, context):
        #LINE_BOT_API.reply_message(replyToken, TextSendMessage(text="眠い"))
        
        return{
            'statusCode':200,
            'body':json.dumps('OK!!!!!')
        }
    
[/code]

4.Line DeveloperでWebHookにURLを入れて検証をクリック

上記の手順でやったところ、Lline-bot-
sdkを使用しているコードをコメントアウトすると正常に検証が完了するのですが、一つでもコメントアウトせずに実行するとエラーとなってしまいます。  
いろいろ調べてみたのですが原因がわかりません。もし何か不備などありましたら申し訳ございません。  
よろしくお願いします。

### LINE Developerの設定

Web Hookの利用→ON  
チャネルアクセストークン→作成済み  
応答機能→webhookのみオン

### 追記

line-bot-sdkを導入しないでやろうともしましたがこちらも既読はつくのですが返信も返ってこずタイムアウトしてしまいました。

[code]

    import json
    import urllib.request
    import os
    
    
    # 環境変数からLINE Botのチャネルアクセストークンを取得
    LINE_CHANNEL_ACCESS_TOKEN = os.environ['LINE_CHANNEL_ACCESS_TOKEN']
    # チャネルアクセストークンを使用して、LineBotApiのインスタンスを作成
    # LINE_BOT_API = LineBotApi(LINE_CHANNEL_ACCESS_TOKEN)
    
    def lambda_handler(event, context):
        for message_event in json.loads(event['body'])['events']:
            url = 'https://api.line.me/v2/bot/message/reply'
            headers = {
                'Content-Type': 'application/json',
                'Authorization': 'Bearer ' + LINE_CHANNEL_ACCESS_TOKEN
            }
            body = {
                'replyToken': json.loads(event['body'])['events'][0]['replyToken'],
                'messages': [
                    {
                        "type": "text",
                        "text": message_event['message']['text'],
                    }
                ]
            }
            req = urllib.request.Request(url, data=json.dumps(body).encode('utf-8'), method='POST', headers=headers)
            with urllib.request.urlopen(req) as res:
                logger.info(res.read().decode("utf-8"))
        return {
            'statusCode': 200,
            'body': json.dumps('Hello from Lambda!')
        }
    
[/code]

### 参考サイト

【line-bot-sdk導入・使用方法】  
<https://www.ryucom.co.jp/blog/aws/4713#toc_id_3>

【line-bot-sdkなしでLINE Bot作成】  
<https://zenn.dev/han_aru/articles/4dab1232e819d8>


CC BY-SA 4.0
2023-01-24T15:07:11.517
93550
2023-01-24T15:07:11.517
46953
question
python python3 aws aws-lambda line
AWS LambdaでLineBotSDKを使用したい