- PdM(楽楽シリーズ)
- フロントエンドエンジニア
- 業務改善(BPR)
- Other occupations (77)
-
Development
- フロントエンドエンジニア
- Javaエンジニア(楽楽明細)
- エンジニアオープンポジション
- ブリッジSE(大阪)
- PM(楽楽シリーズ)
- オフショアPJマネージャー
- Webエンジニア(大阪PHP)
- テックリード(大阪/PHP)
- ブリッジSE/オフショア開発
- フロントエンドマネージャー候補
- プロジェクトマネージャー
- エンジニアリングマネージャ
- AI導入エンジニア
- プロダクト開発部長
- Web Engineer
- Webエンジニア
- フロントエンド(リーダー)
- Mobile Engineer
- Android/iOSアプリ
- 社内SE(大阪/セキュリティ)
- インフラエンジニア
- インフラエンジニア/マネージャ
- DevOps Engineer
- 社内SE(データエンジニア)
- 戦略企画・データマネジメント
- QAリーダー/マネージャー
- システム企画
- 品質管理/技術支援チーム
- AI/機械学習エンジニア
- データ基盤エンジニア
- Engineering
- UIデザイナー(リーダー)
- コーポレートデザイナー
- UIデザイナー
-
Business
- PdM(楽楽シリーズ)
- 開発マネージャー
- プロジェクトマネージャ(大阪)
- 導入支援/導入コンサルタント
- プロダクトマネージャー
- プロダクトマネージャー(AI)
- PMMプロダクトマーケティング
- プロダクトセキュリティ
- 技術推進部長
- 労務
- 総務
- IR
- HRBP
- データマネジメント・マーケ戦略
- 経営企画
- コーポレート広報
- 内部監査(業務監査)
- 営業企画(イネーブルメント)
- ITセールス(名古屋)
- セールスマネージャー
- 法人営業/カスタマーサクセス
- フィールドセールス(名古屋)
- フィールドセールス(法人営業)
- フィールドセールス
- ITセールス(広島)
- 法人営業
- フィールドセールス(東京)
- 営業企画(戦略立案)
- ITセールス
- ビジネスオープン
- ITセールス経験者
- オンラインマーケティング
- オフラインマーケティング
- 製品企画/法要件(楽楽明細)
- ブランド企画
- 製品企画/プロダクトマーケ
- CSマーケティング
- マーケティング担当
- ブランド企画・ブランディング
- マーケティングリーダー
- 営業推進リーダー(楽楽精算)
- Other
こんにちは。楽楽精算開発チームの岡本です。
会社で購入したGoogleHomeで自由に遊べる権利を頂いたので、色々と遊ばせてもらいました。
先日その内容を社内でプレゼンする機会があったのですが、せっかくなのでGoogleHome自身にプレゼンしてもらいました。
今回は、その際に実施した設定を説明しようと思います。
※設定方法についてはwest-cさんが既に書かれているので、設定した内容だけ書いていきます。
今回やりたいこと
- スマートフォンでプレゼン開始を指示する。
- ディスプレイにスライドが表示される。
- GoogleHomeがスライドの内容を喋り始める。
- スライドの内容を喋り終えると、次のスライドに切り替わる。
- スライドが終了するまで2~4を繰り返す。
準備するもの
Wan側
- Action on Google
- Googleアシスタント内で呼出し可能な
チャットアプリ
*1を構築できるサービスです。 - 構築した
チャットアプリ
から更に別のWebサービスを呼び出すこともできるので、この仕組を用いればGoogleアシスタントから直接Webサービスを呼び出せます。 - 今回はDialogflowを呼び出すように構築しています。
- Googleアシスタント内で呼出し可能な
- Dialogflow
- Firebase
- いわゆるBaasです。
- 今回はホスティング機能とDB機能を使用します。
Lan側
- RaspberryPi
- 超小型のコンピューターです。
- 今回は以下の機能を実装しています。
- ディスプレイへのスライド切替え通知
- GoogleHomeへのメッセージ通知
- GoogleHome
- いわゆるスマートスピーカー。今回は喋らせるだけなのでスマートな機能は使いません。
ざっくりとした処理の流れ
- スマートフォンのGoogleアシスタントからAction on Googleで構築した
チャットアプリ
を呼び出す。 チャットアプリ
で入力した音声データをDialogflowに連携する。- Dialogflowの解析結果テキストをFirebaseのDBに保存する。
- 保存したテキストをRaspberryPiに通知する。
(通知されたテキストがプレゼン開始キーワードの場合は、プレゼンを開始する。) - スライドの表示/切り替えをディスプレイに通知する。
- 喋らせるメッセージをGoogleHomeに通知する。
Action on Googleの設定
Action on Googleで新規プロジェクトを作成しAction
とApp information
を設定します。
Action
ADD ACTIONS
からDialogflowを選択します。
App information
重要なのはAssistant app name
の項目だけです。Assistant app name
で設定した名前でGoogleアシスタントでチャットアプリ
を呼び出すことになります。
今回は「発表アプリ」にしたので、スマホに「OK Google 発表アプリにつないで」と話しかけるとチャットアプリ
が起動します。
それ以外の項目については適当に設定してしまって問題ないです。
以上でAction on Googleの設定は完了です。
Dialogflowの設定
Action on GoogleのAction
設定から、Dialogflow画面に遷移できるので、新規プロジェクトを作成しIntents
とFulfillment
を設定します。
Intentsの設定
チャットアプリ
で入力した音声データに対して、どのように振舞うのかを設定します。今回は以下の2つを設定します。
- Default Welcome Intent
チャットアプリ
が起動した時の振舞いを設定します。
今回は、アプリ起動時にチャットアプリ
が「発表アプリを起動しました。」と応答するようにText response
を設定しました。
- プレゼン開始
チャットアプリ
にプレゼン開始を指示した時の振舞いを設定します。今回は以下のような振舞いを想定しています。
- 「プレゼン開始」の音声入力で
saveData
というアクションが実行されるように設定します。saveData
の内容についてはFulfillment
で設定します。
アクション実行後、チャットアプリ
が「プレゼンを開始しました。」と応答するように設定します。
Fulfillmentの設定
Inline Editor
をENABLED
に変更し、index.js
とpackage.json
を以下のように設定します。
/** index.js **/
'use strict';
const firebase = require("firebase");
const functions = require("firebase-functions");
const DialogflowApp = require("actions-on-google").DialogflowApp;
// Firebaseへの接続情報
var config = {
apiKey: "XXXXXXXXXXXXXXXXXXXXXX",
authDomain: "XXXXXXXXXXXXXXXXXXXXXX",
databaseURL: "XXXXXXXXXXXXXXXXXXXXXX",
projectId: "XXXXXXXXXXXXXXXXXXXXXX",
storageBucket: "XXXXXXXXXXXXXXXXXXXXXX",
messagingSenderId: "XXXXXXXXXXXXXXXXXXXXXX"
};
firebase.initializeApp(config);
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
var app = new DialogflowApp({request, response});
let actionMap = new Map();
// saveDataアクションを登録
actionMap.set("saveData", function(app) {
// Firebaseにキーワードを保存する
firebase.database().ref("/googlehome").set({word:"プレゼンを開始します"});
});
app.handleRequest(actionMap);
});
Firebaseへの接続情報
はFirebaseの画面でウェブアプリに Firebase を追加
をクリックして表示されるコードを使用します。
/** package.json **/
{
"name": "dialogflowFirebaseFulfillment",
"description": "This is the default fulfillment for a Dialogflow agents using Cloud Functions for Firebase",
"version": "0.0.1",
"private": true,
"license": "Apache Version 2.0",
"author": "Google Inc.",
"engines": {
"node": "~6.0"
},
"scripts": {
"start": "firebase serve --only functions:dialogflowFirebaseFulfillment",
"deploy": "firebase deploy --only functions:dialogflowFirebaseFulfillment"
},
"dependencies": {
"actions-on-google": "^1.5.x",
"firebase": "^4.8.0",
"firebase-admin": "^4.2.1",
"firebase-functions": "^0.5.7",
"apiai": "^4.0.3"
}
}
設定後、DEPLOY
をクリックしFirebaseへスクリプトをデプロイします。
以上でDialogflowの設定は完了です。
Firebaseの設定
FirebaseのDatabase
にデータ保存場所とアクセスルールを設定します。
データ保存場所の設定
Database
> データ
から保存場所を作成します。今回は/googlehome/word
に作成します。
作成した保存場所には、PUTでデータを保存出来ます。
保存したデータはGETで取得できます。
アクセススールの設定
Database
> ルール
からDBへのアクセスルールを設定します。
今回は設定簡易化のため/googlehome
配下のデータには認証無しでアクセスできるように設定しています。
以上でFirebaseの設定は完了です。
RaspberryPiの設定
以下の内容をスクリプト化し、RaspberryPiのNode.js上で実行します。
- GoogleHomeへのメッセージ通知
- ディスプレイへのスライド表示通知
- FirebaseのDB更新通知の受信
※RaspberryPiに初期インストールされているNode.jsはバージョンが古いので、最新の安定バージョンに更新する必要があります。
GoogleHomeへのメッセージ通知
GoogleHome任意のメッセージをプッシュするNode.js用ライブラリが公開されているので、ありがたく使わせていただきます。
→google-home-notifier
- ライブラリのインストール
- 動作確認
- ※test.jsの文字コードはUTF8で作成する。
ディスプレイへのスライド表示通知
スライドの表示にはfbi
というコマンドを使います。
- コマンドのインストール
・動作確認
※コンソール出力の場合は、{出力場所}に/dev/fb0
を、HDMI出力の場合は/dev/fb1
を設定します。
FirebaseのDB更新通知の受信
Firebaseのドキュメントを元に設定します。
- ライブラリのインストール
index.js作成
実行ファイルとしてindex.jsを作成します。
ファイルが作成できたら、実行します。
※fbi
コマンドの実行時にroot権限が必要なのでsudo
付きで実行します。
以上でRaspberryPiの設定は完了です。
実際にやってみる
設定完了後、スマホに対して「発表アプリにつないで」「プレゼン開始」と指示すると、index.jsに書かれた内容でGoogleHomeがプレゼンをしてくれます。
長いので冒頭部分だけですが、実際にこんな感じでGoogleHomeにプレゼンしてもらいました。