【完全無料】LINEチャットbotをサクッと作ろう

- [x] なんだか難しそう,,
- [x] botの意味もよく分からない,,
- [x] 途中で有料になりそうで不安だな,,

<br>
私も最初はそう思っていましたが、やってみると全無料で、サクッと作成できました。
最後まで読んでいただくと**メッセージ自動送信bot**、が作成できます。
<br>


<details>
<summary><strong>〜目次〜</strong></summary>
[1. LINEMessagingAPI](#1-linemessagingapi)
[2. Lineの操作](#2-lineの操作)
　 [2-1. モジュールのインストール](#2-1-モジュールのインストール)
　 [2-2. jsonファイルの作成](#2-2-jsonファイルの作成)
　 [2-3. jsonの読み込み](#2-3-jsonの読み込み)
　 [2-4. 送信モジュールのインポート](#2-4-送信モジュールのインポート)
　 [2-5. 使用するチャンネルの指定](#2-5-使用するチャンネルの指定)
　 [2-6. テキストの作成](#2-6-テキストの作成)
　 [2-7. LINEメッセージの送信](#2-7-lineメッセージの送信)
[3. GitHubの登録とファイルのpush](#3-githubの登録とファイルのpush)
　 [3-1. GitHubの登録](#3-1-githubの登録)
　 [3-2. Repositoryと作業ディレクトリの紐付け](#3-2-repositoryと作業ディレクトリの紐付け)
[4. GitHubActionsで送信の自動化](#4-githubactionsで送信の自動化)
　 [4-1. pythonファイルの作成](#4-1-pythonファイルの作成)
　 [4-2. main.pyのpush](#4-2-mainpyのpush)
　 [4-3. GitHubActionsの設定](#4-3-githubactionsの設定)
　 [4-4. 自動送信のタイミング指定](#4-4-自動送信のタイミング指定)
[5. 終わりに](#5-終わりに)
</details>


#1. LINEMessagingAPI
[LINEMessagingAPI](https://developers.line.biz/ja/docs/messaging-api/overview/)からログイン
ログインアカウントは自分の個人アカウント。ビジネスアカウントがある方はどちらを使用していただいても構いません。

<br>
ダッシュボード画面が表示されたら、Provider(誰が提供するか)を作成
nameは自由に決めて下さい。

|![スクリーンショット_2021-04-09_10_09_25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/912206/ceec5555-0f92-a290-55b6-66e7c8045846.png)|
|:-:|

<br>
モバイル画像のLINE Messaging API選択がある方はそちらを選択して下さい。
ikon画像(誰から届くか)の選択
Channel nameはメッセージを送ってくる人の名前や企業名など

|![スクリーンショット_2021-04-09_10_39_53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/912206/4d7faafe-88e7-81f7-92f3-1c4cfe48016c.png)|
|:-:|

<br>
description(今から作成する自動メッセージbotの説明)
記入は必要ですが、詳しく書く必要はありません。
Categoryは当てはまる項目を選択しましょう。

|![スクリーンショット_2021-04-09_10_48_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/912206/e85316dc-8e0b-357e-bd11-eb159f06ccd8.png)|
|:-:|

<br>
2つのチェックボックスにチェックを入れたら、createを押して作成を完了します。

|![スクリーンショット_2021-04-09_10_54_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/912206/4b7c4e0e-79ea-c42b-3b46-58178e1e5887.png)|
|:-:|

<br>
MessagingAPIのタブを選択するとIDとQRコードが出来上がっているはずです。
どちらかを使って友達登録をしていきます。
LINEにデフォルトメッセージが送信されていることも確認しておきましょう。

|![スクリーンショット_2021-04-09_11_01_57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/912206/feda5342-06e1-d738-cf1d-08a6469456a4.png)|
|:-:|

<br>
そのまま下の方にスクロールしていくと、Channel access tokenの項目があるので、ISSUEを押して、トークンを発行しておきましょう。

|![スクリーンショット_2021-04-09_12_02_37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/912206/dc9edab9-b04b-cc6c-1b9c-7663cba6be4b.png)|
|:-:|

<br>
次にBasic settingsのタブに移動して、一番下にYour user IDが記載されていることも確認しておきましょう。
![スクリーンショット_2021-04-09_11_10_18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/912206/fe47df66-2452-0309-64f7-e094df660b9a.png)

|![スクリーンショット_2021-04-09_12_06_08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/912206/9f215d2a-f34d-538b-dac8-3b341f9b738f.png)|
|:-:|


登録が完了したらbot作成準備は終わりです。
次は、コードを書いていきます。

<br>
#2. LINEの操作
####2-1. モジュールのインストール
```python
# LINE操作に必要なline-bot-sdkをインストール
!pip install line-bot-sdk
```

<br>
####2-2. jsonファイルの作成
```python
# jsonでのクォーテーションは"ダブル"を使用
{
"CHANNEL_ACCESS_TOKEN":"取得したアクセストークン"
"USER_ID":"取得したYour user ID"
}
```
ここで注意しなければならないのが、改行です。
トークンがかなり長いですので、勝手に改行されてしまいエラーになる場合があります。
ですので、改行は元に戻しておいて下さい。
戻したらjsonファイルは保存しておきます。

<br>
####2-3. jsonの読み込み
```python
import json

# `r`はread読み込みのｒです。
file = open('info.json','r')
info = json.load(file)
```
infoでjsonファイルを出力してファイルを読み込めているか確認してみましょう。
>`出力結果`
{'CHANNEL_ACCESS_TOKEN': 'EVRKXIelyjNBT---------=',
 'USER_ID': 'U------'}

<br>
####2-4. 送信モジュールのインポート
```python
from linebot import LineBotApi
from linebot.models import TextSendMessage
```
LINEにテキストを送る為のものです。

<br>

####2-5. 使用するチャンネルの指定
```python
CHANNEL_ACCESS_TOKEN = info["CHANNEL_ACCESS_TOKEN"]

line_bot_api = LineBotApi(CHANNEL_ACCESS_TOKEN)
```
一行目で作成した関数を使用して、LineBotApiで読み込みます。
チャンネルを使用する宣言だと思って下さい。


<br>


####2-6. テキストの作成
```python
import random

rdm = ['aaa','bbb','ccc']

# choiceでランダムにリスト内のテキストを表示
val = random.choice(rdm)
val
```
毎日自動で送られてくるメッセージをランダムにします。
aaa,bbb,cccは後で、好きな名言やメッセージを自由に変更できます。
ですので今回は、動くコードの作成を優先して進めていきます。
>`出力結果`
bbb

<br>


####2-7. LINEメッセージの送信
```python
def main():
    USER_ID = info["USER_ID"]

# どんなテキストを送るか
    messages=TextSendMessage(val)

# 誰に送るか
    line_bot_api.push_message(USER_ID,messages)
    
if __name__ == "__main__":
    main()
```
これを実行すると、LINEメッセージが届きます。


<br>
#3. GitHubの登録とファイルのpush
####3-1. GitHubの登録
Repositoriesを作成します。
NEWを押してRepository nameを自由に決めて下さい。
public(公開)かprivate(非公開)を選択できるのですが今回はprivateを選択します。
選択が終わればcreating Repositoryを押して完了

|![スクリーンショット_2021-04-09_12_21_57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/912206/5c6b07fa-59f7-8978-8ae7-3c885878afc5.png)|
|:-:|

<br>
ページを戻ると、アカウントの横にRepositoryが確認できるかと思います。
そのページの一段目のHTTPSをコピーして下さい。

|![スクリーンショット_2021-04-09_12_26_48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/912206/aff0a42d-a800-ba57-ea76-3dfa61fbd44d.png)|
|:-:|

<br>
####3-2. Repositoryと作業ディレクトリの紐付け
jupyterに戻ってターミナルから紐付けていきます。

```python
# jupyterターミナルに記述
git init
```
>`git initの出力結果`
Reinitialized existing Git repository in /Users/name/.git/

```python
git remote add origin コピーしたURL
```
>`add originの出力結果`
origin コピーしたURL(fetch)
origin コピーしたURL(push)

```python
# .(ドット)で全てをaddする
git add .

# 変更履歴の保存
git commit -m'1st commit'
```

>`commitの出力結果`
master(root-commit)798asf9] 1st commit
5 file changeed, 468 insertions(+)
create mode 100644 json
create mode 100644 checkpoint
create mode 100644 info.json
create mode 100644 jpg
create mode 100644 ------.ipynb

5つのファイルを作成し、ローカル上での変更はできました。
次は変更した内容をGit上に送信します。

```python
# Gitに作成したファイルをpush
git push origin master
```
ズラーっと読み込みが始まります。
GitHubのマイページを見ると作成や設定したファイルが追加されています。

<br>
#4. GitHubActionsで送信の自動化
####4-1. pythonファイルの作成

```python
import json
from linebot import LineBotApi
from linebot.models import TextSendMessage

file = open('info.json','r')
info = json.load(file)

import random

rdm = ['aaa','bbb','ccc']
val = random.choice(rdm)
val

CHANNEL_ACCESS_TOKEN = info["CHANNEL_ACCESS_TOKEN"]
line_bot_api = LineBotApi(CHANNEL_ACCESS_TOKEN)

def main():
    USER_ID = info["USER_ID"]
    messages=TextSendMessage(text="val")
    line_bot_api.push_message(USER_ID,messages)
    
if __name__ == "__main__":
    main()
```
jupyterでテキストファイルを追加して、名前を**main.py**に変更します。
実行に必要なコードだけを、ここコピペしておきます。

<br>
####4-2. main.pyのpush
```python
# ターミナル上
# 追加の宣言
git add .

# ローカル設定をGitHub上に追加
git commit -m'create main.py'
git push origin master
```
GitHubをリロードすると、main.py追加されていることが確認できます。

<br>

####4-3. GitHubActionsの設定
setup thisworkflowを選択しymlファイルを作成し下のコードをコピペして下さい。
ファイル名はmain.ymlに変更しておくと分かり易いです。
ちなみにymlはjsonよりも簡易なファイルだと思って下さい。

```python
# ワークフロー名
name: linechatbot

# 実行のタイミング
# 自動送信のイミングは後で変更可能
on:
  push:

jobs:
  build:
    # Ubuntuの最新版環境内で処理を実行することを指定
    runs-on: ubuntu-latest

    # 実行する処理＆コマンド指定
    steps:
      # リポジトリからチェックアウトして以下の処理を実行していく
      - uses: actions/checkout@v2
      - name: Set up Python 3.8
        uses: actions/setup-python@v1
        with:
          python-version: 3.8
      - name: Install dependencies
        run: |
          # pip更新
          python -m pip install --upgrade pip
          # 必要なパッケージインストール
          pip install line-bot-sdk
      - name: Run script
        run: |
          # main.pyの実行
          python main.py
```
実行に時間は少しかかりますが、LINEメッセージが届くはずです。
ここでエラーになる場合は、指定のファイル名が違う可能性があるので確認してみて下さい。

<br>
####4-4. 自動送信のタイミング指定
```
on:
  schedule:
    - cron: '0 22 * * *'
```
github actionsのcronの時刻はUTCなので、日本時間に合わせるためにUTCマイナス15をすれば合います。
朝7時に受信するなら'0 22 * * *'で記述します。

<br>
#5. 終わりに
最後まで読んで頂きありがとうございました。
次の投稿では、今回作成したbotのページに、自分のSNSやブログ、プロフィールも追加していきます。
まだまだ初学者ですので、もっと良い記述の方法があればご指摘お願い致します！