djangoでline botを作る
line botをdjangoを使って作る
まずはline developersのアカウントを取得するためlineのアカウントでログイン
左上のconsole homeから新規provider をcreateする
そのしたのproviderからcreate new channelを選択し、channel typeはmessaging API
その後はそれぞれの設定をする。ここまでするとqrコードで自分の作るline botが登録できるようになる。
今回は予約botを作るのでLINEでよく見るこういうようなメニュー(リッチメニュー と言います)を押したらメッセージを送り、それに対して、line bot側がいつにしますか?というメッセージとともにlineのテンプレートメッセージというものを使って日時表示カルーセル とともにline botがメッセージを送り返す。それに対してユーザーが日時を選択すると予約ができるというシステムを作っていきます
まずはここにログインして先ほど作ったアカウントを選択
- 左のメニューからリッチメニューを選択右上の作成ボタンをクリック
- 表示設定はタイトル以外はデフォルトでOK
- その下のコンテンツ設定はテンプレートを選択し画像を貼るか、自分で文字入りの画像を作る
- 作れたらアクションのところでタイプをテキストにして予約にする
保存して実際に作ったメニューを自分のスマホでタップすると予約というメッセージが送られると思います。
djangoを使ってメッセージを返す
ここまで行ったら次はdjangoで送られてきたメッセージに対してメッセージテンプレートというものを使ってカルーセルをline botから送信したいと思います。
今回はpythonのバージョン・パッケージ管理システムであるanacondaを使ってdjangoをinstallします
入れてない人は↑の一番したからダウンロードしてください
anacondaが入れられたらanaconda navigatorを立ち上げて
- Environmentsを選択
- 左下のcreateを選択
- 名前をdjango37などにしてpythonを選択しversionは3.7を選択-
右下のcreateを選択し環境構築が完了
この状態ではまだdjangoは入ってないのでターミナルを開いて
$ conda activate django37
で環境を立ち上げる
その後
$ conda install django
でdjangoをinstallこれで環境ができました。
そしたらまずは
$ django-admin startproject reception_line_bot
でプロジェクトを作成します。
reception_line_bot/ manage.py reception_line_bot/ __init__.py settings.py urls.py asgi.py wsgi.py
こんな感じに作れたと思います。
次にアプリケーションを作ります。
$ cd reception_line_bot
でreception_line_botの中に入ってから,
$ python manage.py startapp bot
とすると
bot/ __init__.py admin.py apps.py migrations/ __init__.py models.py tests.py views.py
となったと思います。
次にエディタでreception_line_bot/urls.pyを編集していきます。
こうなっていると思いますが、urlpatternsのところにdjangoが受け取ったline botのリクエストをどのファイルのどの関数に送るかを指定します。
なので今回は
とします。receptionはこれからviews.pyに書く関数です。
views.pyにコードを書く前にline botを作成した時に発行されたチャンネルシークレットとアクセストークンはコードの中に直接書くとまずいので、jsonを通してviews.pyで受け取れるようにしたいと思います。なので一番上のline_reception_botの下にsetting.jsonを作り、
providersからチャネルを選択しmessaging APIの一番したでaccess tokenを発行し、コピペします。
次に
messaging APIの隣のBasic settingsのところからChannel secretを取得します。
その二つを先ほど作ったsetting.jsonにコピペしていきます
こんな感じ、(channel_secretとaccess_tokenは適当に変えました)
そしたらviews.pyを開いてユーザーが送ってきたメッセージに対して何か送るコードを書いていきます。
今日はここまでにして次回は何か送り返すところぐらいまで行けたらいいなと思っています。
anacondaとかpythonの知識はそこそこわかるようになってきたのですが。lineからのリクエストなどpostやgetやhttpなど見えないところがまだわかりません。がんばります。