はじめに
前回、Lambda + API GatewayでAPIをサクッと作れることが分かったので、
このままLine Message APIから、API Gatewayを呼び出してみよう!
ついでに、Google Cloud Visionで画像解析の結果を取得して返してみよう!
ってことで、いろいろまとめてみました。
Line Message APIにはSDK、
Google Cloud Vision APIにはClient
が用意されており、意外と簡単に作れちゃいます。
botのソースコードについてはgithub上を参照してください。
試してみる
LINEアカウントの準備
まずLINE Business CenterのDeveloper Trialよりアカウントを作成。
アカウントが作成できると、アカウントリストに「LINE@ Developer」が作成されるので、「LINE@ MANAGER」へアクセス。
「アカウント設定」→「Bot設定」より「APIを利用する」を押下。
下記、Bot設定を行い、保存。
- Webhook送信:利用する
- 自動応答メッセージ:利用しない
こんな感じですね。
Google Cloud Vision APIの準備
何はともあれGoogleのアカウントが必要です。
Googleアカウントを作成後、Google Cloud Platformにログインします。
なお、Google Cloud Visionは無料枠があるものの、課金を有効にしないと利用できないので、クレジットカードを登録する必要があります。
なので、その辺りの設定を行ってください。
プロジェクト名は適当な感じで作成。
google APIを利用する枠を押下。
すると、APIを検索する画面に遷移しますので、「Cloud Vision」と入力し、「Google Cloud Vision API」のリンクを押下。
楽だけど、長い。。。
次に認証情報を作成します。
左メニューの「認証情報」を押下し、「認証情報を作成」ボタンを押下します。
すると、何種類か出てくるのですが、今回は「Google Cloud API向け」と書かれてる「サービス アカウント キー」を選択します。
取り急ぎサービスアカウントキーは初めからある「Compute Engine default service account」を選択し、キーのタイプはJSONで作成します。
すると、作成されたキーファイルがダウンロードされます。
こちらは、後ほどGoogleのSDKから利用しますので、とっておいてください。
Line Message API用のWebhook URLのendpointの作成
環境
- Serverless:1.4.0
- Python:2.7.11
- pip:9.0.1
手順
今回、新たにプロジェクトを作成します。今回もpythonで作成します。
$ serverless create --template aws-python --path detectImage-linebot-service
$ cd detectImage-linebot-service
line-bot用のSDKとGoogleAPIのクライアントをvendor配下にインストール。
line-bot-sdk>=1.0.2
google-api-python-client>=1.5.0
$ pip install -r requirements.txt -t vendor
endpointをcallbackという名前で用意.
provider:
name: aws
runtime: python2.7
region: ap-northeast-1
custom:
stage: "${opt:stage, self:provider.stage}"
functions:
callback:
handler: handler.callback
events:
- http:
path: callback
method: post
environment: ${file(env-${self:custom.stage}.yml)}
plugins:
- serverless-offline
env-**.ymlには各自のキーを環境変数として登録します。1
LINE_CHANNEL_SECRET: "XXX"
LINE_CHANNEL_ACCESS_TOKEN: "XXX"
GOOGLE_APPLICATION_CREDENTIALS: "ダウンロードしたサービスアカウントキーのファイルパス"
あとは、Line Message APIからのリクエストを受け、
Google Cloud Vision APIにリクエストして、
そのレスポンスを解析して、
Line Message API経由で返す
ようにプログラミングして、デプロイ。
デプロイ結果のendpoints「https://XXXXXXXXXX.execute-api.XXX.amazonaws.com/dev/callback」を
LINE Developersの「Webhook URL」に設定してあげればOK。
あっという間に、Lineから画像認識してくれるbotの出来上がりです。
所感
LINE BOT API Trialの頃よりも、ドキュメントやSDKが整備されていて、かなりLine botの作成は簡単になっていると感じました。
また、Google Cloud Vision APIもサービスアカウントキーのパスさえ環境変数に設定しておけば、Client側で勝手によしなにやってくれ、手間いらず。
以前よりも簡単にMyBotが作れ、各サービスとの連携もし易くなっていますので、皆さんも是非お試しください。