AWS Lambda Function URLsでEverything(It's you)をおうむ返しするLINE bot

Lambda関数をHTTPSエンドポイントから実行可能になったとのことで、LINEおうむ返しbotを作って「Everything(It's you)」してみました。


https://aws.amazon.com/jp/about-aws/whats-new/2022/04/aws-lambda-function-urls-built-in-https-endpoints/


## 必要なもの

1. AWSアカウント（Lambda作成）
2. LINE Developers登録

## Lambda側

#### 関数の新規作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119864/cf90d3b5-78bc-336f-06ec-a6e137b5c94c.png)

こんな感じに作成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119864/6cdef038-fdd2-2a37-e0c0-00bd0dda8cd0.png)


#### 関数URLの作成

「設定」-「関数URL」より作成できます。
これが試してみたかっただけなんですがね笑

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119864/87778857-1eca-839c-cfe3-7cfdee1b0076.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119864/b85cee29-92a8-ad97-ec42-206334de218d.png)

URLが発行されます。これをLINE側Webhookに設定します（後述）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119864/c20a77e3-efe1-e460-4c6c-22268fe0afae.png)


#### 環境変数の設定

LINE側でチャネルを作成したのち、最終的に`Channel secret`と`Channel access token`が必要になるので、あとで以下のような感じにLambdaの環境変数に設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119864/0726e6dd-851e-5de3-3001-ca35eb56bb80.png)

#### サンプルソース

https://github.com/happy2mylife/line-bot-sample-nodejs


## LINE側

#### LINE Developer Console登録

以下にアクセスしデベロッパー登録をします。

https://developers.line.biz/ja/

#### 新規プロバイダ＆チャネルを作成

Messaging APIを選択します。

<img width="60%" alt="sec" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119864/74361b49-8be7-7fda-aa5e-f15000fa11e5.png">

新規チャネル作成画面になるので、最低限必須の項目を設定します。

| 設定項目 | 例 |
|:-:|:-:|
|  国 |日本 |
|  チャネル名 |サンプルLambdaUrl   |
|チャネル説明   |サンプルLambdaUrl   |
|大業種   | 個人  |
|小業種   | 個人（その他）  |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119864/cf91cd6d-e2d7-f3e7-8f33-6a38dca181f7.png)

#### チャネル作成後

LINE Official Account Managerのリンクをクリックし、

<img width="60%" alt="sec" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119864/27a67de2-cfa3-7ff8-8796-bd947547c581.png">

「応答設定」から「応答メッセージ」を「オフ」にします。
「オン」のままだとLINEから送信したメッセージがbotに届かずに、自動応答されてしまいます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119864/4307dde9-ef48-ca8d-b1b8-e90d7153dc15.png)


#### チャネルシークレットの確認

Developer Consoleに戻り、「チャネル基本設定」から`チャネルシークレット`を確認し、この値をLambdaの環境変数に設定します。

<img width="60%" alt="sec" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119864/24a76e41-f053-d8fb-f5f2-6ae8029245ae.png">


#### チャネルアクセストークンの発行

「Messaging API設定」から`チャネルアクセストークン`確認します。
「発行」を押すとトークンが発行されますので、この値をLambdaの環境変数に設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119864/4d6e6dc2-cd57-f764-4d3e-d9b0d183945c.png)

#### Webhookを設定

「Messaging API設定」にて、Webhook URLにLambda URLを設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119864/ca74de94-1783-86bb-570a-621331600b76.png)

Webhookの利用をオンにし、検証を押すと「成功」と応答されれば、Lambdaとの疎通確認OKです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119864/bbdde40e-d684-cee8-0650-7dc0dfc85a67.png)


## 再びLambda側へ

#### おうむ返しボットのソースコードをアップロード

zipファイルに固めてアップロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119864/405cde78-666b-437a-a9ee-f19f20a4e64b.png)


https://github.com/happy2mylife/line-bot-sample-nodejs

## Botを友達追加

Messaging API設定にあるQRコードを読み取り、友達追加します。

<img width="60%" alt="add.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119864/34706d49-0a8f-6ce2-0dad-c9edc6eb2774.jpeg">

メッセージ送信！Everything(It's you)成功です！

<img width="60%" alt="bot.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119864/cb71a2a0-8868-3e20-fdfc-50d3024ec315.jpeg">



# おわりに

Lambdaがより楽しくなった気がする！