【LINE bot】最寄駅検索bot
はじめに
- Line bot勉強会の資料です。
- テンプレートってボタン操作を行う
- 外部APIと連携して、幅を広げる
LINE bot勉強会の流れ
流れ | step1 | step2 | step3 |
---|---|---|---|
機能 | おみくじbot | カウントbot | 最寄駅検索bot |
学ぶこと | LINE botの作り方 | DB・リッチニュー | ボタンアクション・URIスキーマ・外部API |
その他TIPS
-
可愛くするために
- スタンプの使い方
- 絵文字の使い方
今回学ぶこと
- URIスキームを使う
- APIを使う
ボタンの実装
ボタンについて
- ボタンはいくつかのアクションを起こすことができます。アクションの動作は次の一覧の通りです。
action | type | 動作 |
---|---|---|
ポストバック | postback | dataを返す |
メッセージ | message | ユーザーからメッセージを返す |
URI | uri | 指定したURIへ飛ばす |
日時選択 | datetimepicker | postbackに日付のデータを加える |
ドキュメントのボタンテンプレートをコピーします。
- ボタンテンプレートをコピーし関数の中に入れます。
app.rb
def template
{
"type": "template",
...
}
end
templateメソッドを呼びだす。
- 駅と打つとtemplateが返ってくるようにします。
app.rb
55 elsif event.message['text'] =~ /駅/
56 client.reply_message(event['replyToken'], template)
実行結果
- ボタンがついたテンプレートが返ってくる
位置情報を送る
uriスキーム
- uriアクションの中にはuriスキームという、カメラを立ち上げたり、マップを立ち上げたりする機能があります。
- 今回はその中からGPSを送信する。
line://nv/location
を利用します。
templateを編集する
- templateの中を必要最低限の要素だけにします。
app.rb
def template
{
"type": "template",
"altText": "位置検索中",
"template": {
"type": "buttons",
"title": "最寄駅探索探索",
"text": "現在の位置を送信しますか?",
"actions": [
{
"type": "uri",
"label": "位置を送る",
"uri": "line://nv/location"
}
]
}
}
end
eventを取得する
GPSのデータを送れるようになったので、次に受け取る処理を書きます。
app.rb
62 when Line::Bot::Event::MessageType::Location
63 p event["message"]["latitude"]
64 p event["message"]["longitude"]
# 65 APIを呼び出す関数です
65 p stations(event["message"]["longitude"], event["message"]["latitude"])
66 end
APIへのリクエストを投げる
- 今回はHeartRails Geo APIを利用して、最寄駅を検索します。
- リクエストの送り方。
app.rb
def stations(longitude, latitude)
uri = URI("http://express.heartrails.com/api/json")
uri.query = URI.encode_www_form({
method: "getStations",
x: longitude,
y: latitude
})
res = Net::HTTP.get_response(uri)
JSON.parse(res.body)["response"]["station"]
end
APIの結果をメッセージで表示する
- APIから返された値を駅名と路線の配列に変更し、改行文字で連結しメッセージとしてbotに返します。
app.rb
66 stations = stations(event["message"]["longitude"], event["message"]["latitude"])
67 message = stations.map{|station|
68 "#{station["name"]}駅 >> #{station["line"]}"
69 }.join("\n")
70 client.reply_message(event['replyToken'],{ type: 'text', text: message })
結果
- 最寄駅の情報を検索するbot完成
まとめ
Author And Source
この問題について(【LINE bot】最寄駅検索bot), 我々は、より多くの情報をここで見つけました https://qiita.com/4geru/items/30fa69c65e9fcdd12108著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .