AWS Lambda でLine bot を作成する

# AWS Lambda でLine bot を作成する

Line bot を作成し、自動でメッセージを送受信する方法を解説します。

## LINE Developersコンソールからチャネルを作成

下記手順を参考にLINE Developersコンソールからチャネルを作成します。  
[Messaging APIの利用を有効にする](https://developers.line.biz/ja/docs/messaging-api/getting-started/#step-one-enable-use-of-messaging-api)

- [LINE Developersコンソール](https://developers.line.biz/console/)へログイン

<img src="https://websa12.z11.web.core.windows.net/image-data/202504/20250426/1745625536458.png" alt="image" width="70%"/>
👆`Messaging API`のチャンネルを作成

<img src="https://websa12.z11.web.core.windows.net/image-data/202504/20250426/1745625604436.png" alt="image" width="70%"/>

## Webhook用のLambda関数を作成する

👇これより先は下記記事の内容を前提とします
[REST API としてAWS Lambda関数を呼び出す](https://docs.saurus12.com/aws/apigateway_lambda)

- Lambda関数はフックした内容をprint=ログ出力するのみとします。

```python
import json

def lambda_handler(event, context):

    print("event")
    print(event)

    return_data = {}

    return {
        'statusCode': 200,
        'headers': {
            'Access-Control-Allow-Origin': '*'
        },
        'body': json.dumps(return_data)
    }

```

- API Gatewayは`POST`メソッドを作成します。  
![image](https://user-images.githubusercontent.com/38905609/181906589-bdbbdcf2-ff7f-4def-89f7-54fb9e975bda.png)

## Webhookを設定する

下記手順を参考にWebhookを設定します。
[Webhook URLを設定する](https://developers.line.biz/ja/docs/messaging-api/building-bot/#setting-webhook-url)

- API GatewayにデプロイしたURLを取得します。  
![image](https://user-images.githubusercontent.com/38905609/181906903-c8e06814-d195-4881-8255-89d5b35588f9.png)

- [LINE Developersコンソール](https://developers.line.biz/console/)へログインし、Webhookへ設定します。
![image](https://user-images.githubusercontent.com/38905609/181907710-9ccf73c4-06f1-44e2-b076-2918bbe33d8b.png)
![image](https://user-images.githubusercontent.com/38905609/181907763-3b3455e4-3220-4bbd-98ba-e020bc794a46.png)

- Webhookを有効化します。  
![image](https://user-images.githubusercontent.com/38905609/181908385-87fe6e32-702f-49bd-a160-47aed8746004.png)

- QRコードに表示されたQRコードを利用してAPIをお友達追加します。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2708851/017df4b9-2ff1-2844-ce9d-08845d88bf05.png)

- CloudWatchのログに'event:follow(お友達追加)'、'userID:ユーザID`が記録されることを確認します。
![image](https://user-images.githubusercontent.com/38905609/181908822-b40ddff3-6de6-42b0-9dbf-e05085fe2f0f.png)

## メッセージを送信する

### メッセージ送信のため、チャンネルアクセストークンを取得

- [チャネルアクセストークン](https://developers.line.biz/ja/docs/messaging-api/channel-access-tokens/)
- 手っ取り早く`長期のチャネルアクセストークン`を取得します。
- [長期のチャネルアクセストークン](https://developers.line.biz/ja/docs/messaging-api/channel-access-tokens/#long-lived-channel-access-tokens)
![image](https://user-images.githubusercontent.com/38905609/181907710-9ccf73c4-06f1-44e2-b076-2918bbe33d8b.png)
![image](https://user-images.githubusercontent.com/38905609/181912508-a7848d8d-dd7d-4e96-a4fb-16127187239e.png)
![image](https://user-images.githubusercontent.com/38905609/181913392-4faaf913-fe68-458b-b61e-ca1b323bd6fa.png)

### ユーザIDを指定してメッセージ送信

- 上記で確認したユーザIDを設定
- 上記で取得した`長期のチャネルアクセストークン`を設定
- [メッセージを送信する](https://developers.line.biz/ja/docs/messaging-api/sending-messages/)
- [プッシュメッセージを送る](https://developers.line.biz/ja/reference/messaging-api/#send-push-message)  

```python
import json
import urllib.request

main_logic()

def main_logic():
    print("main_logic start")

    access_token = "xxxx_access_token_xxxxxxxxxx"
    
    url = "https://api.line.me/v2/bot/message/push"
    method = "POST"
    headers = {
        'Authorization': "Bearer " + access_token,
        'Content-Type': 'application/json'
    }
    messages = [
        {
            "type": "text",
            "text": "テストメッセージです！！"
        }
    ]
    params = {
        "to":"Uxxxxxsend_userid_XXXXXXXXXXXXXXXXXXX"
        ,"messages": messages
    }
    request = urllib.request.Request(url, json.dumps(params).encode("utf-8"), method=method, headers=headers)
    with urllib.request.urlopen(request) as res:
        body = res.read()
        print(body)

```

## 👇前提記事

[REST API としてAWS Lambda関数を呼び出す](https://docs.saurus12.com/AWS/apigateway_lambda)

## 👇参考URL

- [LINE Developersコンソールでチャネルを作成する](https://developers.line.biz/ja/docs/messaging-api/getting-started/#using-console)
- [LINE Developersコンソール](https://developers.line.biz/console/)
- [LINE Official Account Manager](https://manager.line.biz/account/@592txukm/setting)
- [Webhook URLを設定する](https://developers.line.biz/ja/docs/messaging-api/building-bot/#setting-webhook-url)
- [チャネルアクセストークン](https://developers.line.biz/ja/docs/messaging-api/channel-access-tokens/)
- [長期のチャネルアクセストークン](https://developers.line.biz/ja/docs/messaging-api/channel-access-tokens/#long-lived-channel-access-tokens)
- [メッセージを送信する](https://developers.line.biz/ja/docs/messaging-api/sending-messages/)
- [プッシュメッセージを送る](https://developers.line.biz/ja/reference/messaging-api/#send-push-message)  

[keywords]
AWS lambda Line linebot  

[AWS Lambda でLine bot を作成する](https://docs.saurus12.com/aws/line_bot)