LINE Message APIで10分間隔でメッセージが通知されるまでのメモ
おうむ返しが出来る様になり、次は自分が設定したメッセージが
10分間隔で送られて来る様に設定する!
おうむ返しで作成したのをそのまま使う
もしおうむ返しをしてみたい方はこちらの記事をどうぞ
LINE Message APIでRailsを使っておうむ返し - ムーのしょ〜もない様でしょ〜もなくもないブログ
まずはherokuの設定から
herokuのResourcesから、Add-onsでHeroku Schedulerを検索
そして10分間隔に設定
次にrailsの設定
この時にrailsのrake taskを勉強
rake taskって何?って方は下の記事をお読みください 何回も何回も読みました
・rakeタスクについて
railsで定期的にバッチ回すwhenever
https://qiita.com/yumiyon/items388fbb84450f49a6ab0d
railsでrakeタスクの作成
https://qiita.com/suzuki_koya/items/787b5562d2ae1a215d94
railsのrakeについて
https://qiita.com/you8/items/ce893fa27b19fd6da031
rakeとは
http://opiyotan.hatenablog.com/entry/rails-rake-task
rake taskの作り方と、意外とハマりがちな引数の扱い
https://bottoms-programming.com/archives/rake-task-handling-of-arguments.html
rakeタスクの作り方
https://yatta47.hateblo.jp/entry/2016/02/19/232718
タスクを生成
$ rails g task reminder_task
次にコントローラーを生成
$ rails g controller webhook kokodayo
description(説明)とtask(タスク)を記述
lib/tasks/reminder_task.rake
namespace :reminder_task do desc "ここにタスクのお題" task :koko => :environment do webhook = WebhookController.new puts webhook.kokodayo end end
見てきた記事でモデルにアクセスする時はenvironmentが
必要と書いてて、てっきりモデルはMVCのMの事だと思っていた
けどそうではないみたい
次にWebhookcontrollerのアクションを定義
app/controllers/webhook_controller.rb
def kokodayo puts "メッセージ" end
ここでrakeタスクに追加されているか確認
$ rake -T
rake reminder_task:koko # ここにタスクのお題
追加されているか確認が出来たら
$ rake reminder_task:koko
「メッセージ」が出力されたら成功!!
色々調べてエラーとの戦いやったから出力された時嬉しかった(☝︎ ՞ਊ ՞)☝︎
次に、今のままだとLINE Message APIの
コードを書き込んだ時にローカルで確認が出来ないから
環境変数を設定してローカルでも確認出来る様する。
環境変数に関する記事はこちらを参考にしました
【Ruby on Rails】GitHubに公開したくない変数や値を隠してpushする方法 - Qiita
Ruby | dotenv gem で 環境変数をスマートに管理 #ruby #dotenv - Qiita
環境変数の設定
gem 'dotenv-rails'
をインストールだけどもう既にインストールしてあるから
今回はしなくても大丈夫!
環境変数を定義
dotenvでは.envというファイルの中に書いてあるデータを参照
(appやdbやGemfileがあるディレクトリ)に作成し、
公開したくないデータを定義します。
LINE チャネルのTOKEN SECRET IDをセットする。
LINE_CHANNEL_SECRET='xxxxxxxxxxxxxxxxxxxxxxxxxxxxx' LINE_CHANNEL_TOKEN='yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy' LINE_USER_ID='zzzzzzzzzzzzzzzzzzzzzz'
.gitignore
/.env
Webhookcontrollerのkokodayoアクションを書き換える
LINE Message APIドキュメントに記載されているコードを参照する
app/controller/webhook_controller.rb
class WebhookController < ApplicationController require 'line/bot' def kokodayo message = { "type": "text", "text": "メッセージ" } client = Line::Bot::Client.new { |config| config.channel_secret = ENV["LINE_CHANNEL_SECRET"] config.channel_token = ENV["LINE_CHANNEL_TOKEN"] } response = client.push_message(ENV["LINE_USER_ID"], message) end end
これでherokuにpushをしたら10分間隔で通知が来るはず!
こない!こない!こない!
herokuの環境変数を設定し直したり、チャネルの設定を見直したり、自分のコードを見直したり
それでも通知がこない!
そこでherokuスケジューラーの設定を変更
rake reminder_task
を
rake reminder_task:koko
にしたらしっかりと10分間隔で通知が出来ました。