Help us understand the problem. What is going on with this article?

【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です。
スクリーンショット 2018-03-18 18.38.54.png


画像の設定

  1. URLから画像をダウンロードしてアプロードします。
  2. ボタンを押すとテキストで「カウントアップ」「カウントダウン」を送信できる様にします。 スクリーンショット 2018-03-18 18.38.17.png

リッチメニュー完成

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


メニューを削除する

LINE@MANAGERのbot名から アカウント設定 > 基本設定 > アカウントページメニューを非表示にします。
スクリーンショット 2018-03-18 18.50.06.png


まとめ

  • データベースを使って数を保存する機能を実装した。
  • リッチメニューを使って操作を行える様にした。
4geru
エンジニア初心者です。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away