Edited at

【LINE bot】リッチメニューを使ったカウントbot

More than 1 year has passed since last update.


はじめに


  • Line bot勉強会の資料です。

  • このスライドでは環境構築を目的としています。


  • おみくじの続きから作成します。



LINE bot勉強会の流れ

流れ
step1
step2
step3

機能
おみくじbot
カウントbot
最寄駅検索bot

学ぶこと
LINE botの作り方
DB・リッチニュー
ボタンアクション・URIスキーマ・外部API

その他TIPS



今回学ぶこと


  1. DBの作成

  2. リッチメニューについて



DBの作成



DBに必要なパッケージを入れる

GemfileにDB関連のパッケージを追加する


Gemfile


gem "activerecord", "< 5.0.0"
gem "sinatra-activerecord"
gem 'sqlite3', group: :development
gem 'pg', '~> 0.19.0', group: :production




Rakefileを書く

rubyのコマンドを記述するファイル

touch Rakefile


Rakefile

require 'sinatra/activerecord'

require 'sinatra/activerecord/rake'
require './models.rb'



migrateファイルを書く

$ bundle exec rake db:create_migration NAME=create_counts


db/migrate/....._create_counts.rb

class CreateCounts < ActiveRecord::Migration

def change
create_table :counts do |t|
t.integer :number
t.timestamps null: false
end
end
end



models.rbを作る

$ touch models.rb


models.rb

ActiveRecord::Base.establish_connection(ENV['DATABASE_URL']||"sqlite3:db/development.db")

class Count < ActiveRecord::Base

end




migrateファイルを反映

$ bundle exec rake db:migrate

== ....... CreateCounts: migrating =====================================
-- create_table(:counts)
-> 0.0011s
== ....... CreateCounts: migrated (0.0012s) ============================



app.rbに反映する

require 'bundler/setup'

Bundler.require
require 'line/bot'
require './models'



gitignoreの追加


  • .gitignoreを追加します。

$ touch .gitignore


.gitignore

db/development.db

db/schema.rb



ここまでのチェック

rubyの動的実行を行います

Countが新しくできることを確認します。

$ irb 

2.3.0 :001 > require './app'
=> true
2.3.0 :002 > Count.new
=> #<Count id: nil, number: nil, created_at: nil, updated_at: nil>



Countの初期化

app.rbにCountがない場合に新たなカラムを追加します。


app.rb

before do

if Count.all.empty?
Count.create(number: 0)
end
end



herokuの設定

$ heroku addons:create heroku-postgresql

$ heroku run rake db:migrate



カウントアップしよう!

カウントアップのメッセージを受け取った時に数をあげます


app.rb

if event.message['text'] =~ /おみくじ/

message[:text] = ["大吉", "中吉", "小吉", "凶", "大凶"].shuffle.first
elsif event.message['text'] =~ /カウントアップ/
c = Count.first.number + 1
Count.first.update(number: c)
message[:text] = "カウントアップ > 数は#{c}だよ"
end



カウントアップ解説1

Countデータベースの一番初めの要素のnumberを取得し1足します。


app.rb

c = Count.first.number + 1




カウントアップ解説2

Countの最初の要素のデータを更新します。

データベースの操作はActiveRecordは、Railsでも同様の物を使っています。updateの他にも様々な操作があるので見て見ましょう


app.rb

Count.first.update(number: c)




カウントアップ解説3

変数は""の中で#{}で囲むことにより文字列の中で表現できます。


app.rb

message[:text] = "数は#{c}だよ"




同様にカウントダウンを作ります。



リッチメニューの導入


  • LINEにはリッチメニューというボタンを押したらアクションを起こしてくれる機能があります。

  • リッチメニューはプログラミングをしなくても使えるため非常に便利です。


  • LINE@MANAGERから設定できます。

  • アカウント一覧 > bot名 > リッチコンテンツ をクリックします。



リッチメニューの設定

リッチメニューの設定は次の様にしてください。

テンプレートの画像タイプは6です。



画像の設定



  1. URLから画像をダウンロードしてアプロードします。

  2. ボタンを押すとテキストで「カウントアップ」「カウントダウン」を送信できる様にします。




リッチメニュー完成

カウントアップの隣にデフォルのとメニューが残っています。次にメニューを消します。



メニューを削除する

LINE@MANAGERのbot名から アカウント設定 > 基本設定 > アカウントページメニューを非表示にします。



まとめ


  • データベースを使って数を保存する機能を実装した。

  • リッチメニューを使って操作を行える様にした。