こんにちは。
ソフトウェア開発部の兼岡です。
今回は、展示会のデモ用に作成したLINE BOTをご紹介します。
LINE BOTに「今どこ?」と話しかけると、GPS端末「SVL-200」の現在位置情報を教えてくれる、というものです。
システム構成
SVL-200を自動車に設置し、位置情報を計測します。
BOTアプリサーバは FASTIO API で計測データを取得、位置情報を応答メッセージで返却します。
LINE BOTにメッセージを送るとWebhookがトリガーされ、BOTアプリサーバのWebhook URLにリクエストが送信される、という流れになります。
1.LINE Messaging APIに登録
LINE Developers から登録します。
※事前にLINEアカウントの登録が必要です。
2.LINE DevelopersでBOTの設定
登録が完了すると、プロバイダー及びチャネルの設定画面が表示されます。
チャネル基本設定で必要事項を入力、Messaging APIを使用するのに必要な以下の項目を確認しておきます。
- Channel Secret:チャネル毎に固有な秘密鍵です。
- アクセストークン(ロングターム):APIを利用する際に必要なトークンです。
※ロングターム:有効期限が非常に長期的なアクセストークンです。
3.BOT作成
SDK of the LINE Messaging API for PHP をインストールして、以下の2つのファイルを使用します。
- line-bot-sdk-tiny/LINEBotTiny.php
- line-bot-sdk-tiny/echo_bot.php
以下、ソースコードです。
echo_bot.php のファイル名を index.php へ変更し、内容を一部書き換えました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
<?php /** * Copyright 2016 LINE Corporation * * LINE Corporation licenses this file to you under the Apache License, * version 2.0 (the "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at: * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. */ require_once('./LINEBotTiny.php'); require_once('./FastioApi.php'); require_once('./GeoLocation.php'); $channelAccessToken = '<your channel access token>'; $channelSecret = '<your channel secret>'; $baseUrl = '<FASTIO API URL>'; $code = '<FASTIO API認証コード>'; $clientId = '<FASTIO クライアントID>'; $termId = '<FASTIO 端末ID>'; $client = new LINEBotTiny($channelAccessToken, $channelSecret); foreach ($client->parseEvents() as $event) { switch ($event['type']) { case 'message': $message = $event['message']; switch ($message['type']) { case 'text': if ((strpos($message['text'], 'どこ') !== false) || (strpos($message['text'], '位置') !== false)) { $conf = array( 'BASE_URL' => $baseUrl, 'DRIVER' => 'curl', 'CODE' => $code, 'CLIENT_ID' => $clientId, ); // FASTIO API 端末現在地データ取得 // APIアクセストークンの取得、最新端末現在地データの取得を行います $api = new FastioApi($conf); $res = $api->getNewest($termId); if (isset($res['newest'][0]['s_time'])) { $data = $res['newest'][0]; // 緯度経度による住所検索 $geo = new GeoLocation(); $address = $geo->searchByGeoLocation($data); $client->replyMessage([ 'replyToken' => $event['replyToken'], 'messages' => [ [ 'type' => 'location', 'title' => '位置情報', 'address' => $address, 'latitude' => $data['latitude'], 'longitude' => $data['longitude'] ] ] ]); } else { $client->replyMessage([ 'replyToken' => $event['replyToken'], 'messages' => [ [ 'type' => 'text', 'text' => '24時間以内の計測データがありません。' ] ] ]); } } break; default: error_log('Unsupported message type: ' . $message['type']); break; } break; default: error_log('Unsupported event type: ' . $event['type']); break; } }; |
LINE Developersのチャネル基本設定で確認した、秘密鍵とアクセストークンをそれぞれ書き換えます。
1 2 3 |
$channelAccessToken = '<your channel access token>'; $channelSecret = '<your channel secret>'; |
FASTIO APIを利用して計測データを取得します。
端末の現在地データ取得APIについては、5分でわかるFASTIO API ~位置情報をGoogleMAPに表示してみる~ にて紹介してます。
1 2 3 4 5 |
// FASTIO 端末現在地データ取得 API // APIアクセストークンの取得、最新端末現在地データの取得を行います $api = new FastioApi($conf); $res = $api->getNewest($termId); |
Messaging APIからの応答メッセージ等は Messaging APIリファレンス を参照しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$client->replyMessage([ 'replyToken' => $event['replyToken'], 'messages' => [ [ 'type' => 'location', 'title' => '位置情報', 'address' => $address, 'latitude' => $data['latitude'], 'longitude' => $data['longitude'] ] ] ]); |
4.BOTアプリサーバにソースをデプロイ
デプロイ方法については割愛します。
今回は弊社開発サーバを使用しましたが、Messaging APIを試す例として heroku を利用するケースが多いようです。
5.Webhook URLの設定
Webhook URLにBOTのアクセスURLを設定します。
LINE BOTにメッセージを送信すると、このURLにリクエストが送られます。
6.動作確認
LINE BOTに「今どこ?」と話しかけることで、位置情報を表示することができました!
最後に
今回は、SVL-200で位置情報を取得しましたが、例えば、温湿度計を設置して室温を見る、はかり計を用いてモノの残量を確認する等、様々な使い方ができるかと思います。
以上、FASTIOとLINE Messaging APIを利用した一例のご紹介でした。