チャットボット返答をDialogflowのIntentを使わない準備段階メモ
今までDialogFlowのIntentに登録していたのをやめて、webhookのfirebase経由での返答に変更しました。
目的は、Webhook経由で最終的には「A3RT」へつなぐためです。
チャットで来る会話がイカロス系であれば、自分で用意したデータにアクセスして返答します。
そうでなければ「A3RT」が雑談を返すようにします。
やれることはわかっているし、やるべきこともわかっていて脳内では実現できているけれどそれを、実際Firebaseでどう書いたら実現できるのかを調べながらなので。
ムキー!となりますね。
あ~・・ 先が長い。
やったことメモ
--------------------------------
node.js いい機会なので、プロジェクトを作り直し。
前回でnode.js のインストールは終わっていたので。
ローカルのfunctionsフォルダ内に移動。
$logtin firebase
(googleアカウントにてログイン)
https://console.firebase.google.com/
にてプロジェクト新規追加
$firebase use --add
プロジェクト選択できるので選択
そこで以前作ったfuncitonのデプロイ
$firebase deploy
にてデプロイ。
しようとしたらエラーが出ました・・ !!
Enableがどうのこうの。
https://console.firebase.google.com/
の、Firebase Database を有効化します。
これで改めて
$firebase deploy
deploy complete!
なったら、https://console.firebase.google.com/
のFunctionで関数が出来ている事を確認。
そこの、HTTPリクエストURL
https://us-central1-XXXXXXXX.cloudfunctions.net/dialogflowFirebaseFulfillment
(XXXXXの部分はプロジェクト名)
をDialogFlowのFulfillmentに入力、SAVE。
あとは、全ての応答をWebhookで対応したいので、
Dialofflow Intent を全て消し、「Default Fallback Intent」のFulfillmentをEnableにします。
これれ、Webhook連携終了。
あとは、返答用データを用意して、実際返答するプログラムを書きます。
長い・・ てか、Firebase のデータベースをどう使うかを調べる所から。
ちょと今日はここまでにしときます。
・・・
Firebaseの有料プランでないと外部通信できないかもしれない疑惑
どのURLにrequest してもError: getaddrinfo EAI_AGAINになるにゃ。
積んだかも・・・wwwww
代替案を考えねばなー
Webhook自作?
アウアウアー
アイディアメモ・やり残しメモ
・いかちゃんが普段つぶやく内容で、時報が少し物足りないなーと思っているので、お昼のゴハン時とかそういうので何かしらつぶやく
イカロス食材リストメモ! - icachanbot’s blog
・フェロー情報をDBに入れたい(ステータスも含め)
何かいいアイディアないかなー
いかちゃんのアプデ情報収集とそのデータ扱いと短縮URLとか
結局、テキストファイルに情報を色々入れるのは追加いがってが悪いので、DBにデータを保存収集してアプデの有無をチェックする事にしました。
1時間ごとに情報収集するようにしました。
仕様を色々書き換えました。
いかちゃんのお仕事内容 - icachanbot’s blog
そういえば、Googleの短縮URLサービスがなくなったんですね、知らなかったです。代わりにGoogleのFirebaseが提供しているDynamicLinkとやらを使ってみました。
便利になったもんですねぇ。
このFirebaseはDialogflowの裏側でWEBHookそとして動いてるやつですね。
テストコードしか書いてないんですけどw
最近触ってないので忘れがちですがそっちも色々改良していきたいんですが、思いつくとすぐ別の事をやりはじめちゃうので、いけないですね。
アイディアメモ的な記事を残したら忘れないで良いかもしれません。
いかちゃんのお仕事内容
数日離れただけですっかり忘れてしまうので、メモします。
//30分ごと
/************************************
公式がツイートしたら無条件でリツイートするよ
*************************************/
公式様を労ってあげたい。と、いかちゃんが申しております。
/************************************
新着情報があればtwitterするよ
*************************************/
// イカロス公式サイトから、本日新着イベント(※)があれば取得
※公式のイベント情報 アクセスし、その日更新された情報があれば取得しています。
// 5:00
/*===============================================================
イカロスの時報をtwitterするよ(朝5時)
曜日別に色々ツイートするよ。
===============================================================*/
//「アケロン魔石争奪戦」
'本日は第2日曜日!アケロン魔石争奪戦、時間は21:00 ~ 23:00だよ! #イカロス '
//「エクサラン魔石争奪戦」ついでに図書館
'土曜日だよ~!エクサラン魔石争奪戦、時間21:00 ~ 23:00だよ! ついでに、図書館ボス強い日だよ~! #イカロス ';
//月曜
'月曜だよ~挑戦の塔の報酬受け取お忘れなく~ #イカロス '
etc
このように、特定条件の曜日他、通常の曜日も色々あります。
// 8:00
・いかちゃんのオリジナルつぶやき
DBに溜め込んである独断と偏見に満ちたつぶやきを吐き出します。
// 12:00
・その日のトレンド有名人を絡めたツイートをするよ。
twitterトレンドを解析するサイトを解析して人名取得してツイートします。
// 22:00
・その日のトレンドタグをイカロスと絡めたツイートをするよ。
twitterのトレンドタグを取得(TwistOAuth)し、ツイートします。
その他、雑談とか
・いかちゃんに返信するとランダムで何かしら返すようにしています。
・各時間ごとに、#イカロス を検索してふぁぼするようにしてます。
・フォロー返し、適時するよう設定しています。
icachanbot再始動。
ようやく垢回復しました。
9日ぶりのいかちゃんです。
既に勝手に動いてますねー。
公式様お疲れ様です https://t.co/RtbkPSEtT9
— いかちゃん (@icachanbot) 2019年5月29日
というか・・・どういう条件で動い打てるんだっけ?って、、、もうすっかり脳みそが吹っ飛んでます。
いかちゃんのバックで動くデータをDB化したいですよねー。
今ただのテキストから読んでるだけなんで・・・
またそのうち。
垢凍結6日目まだ回復しませぬ
↓事件から6日経過・・・
icachan.hateblo.jp
ググると当日垢再開できた人も居れば6日目で~とかいう記事も見つけたけど、私は6日を過ぎました。
いつ次のステップに進む準備が整うのかな??^^
気を取り直して・・DialogflowでWebhook。初めてのFirebase。
twitter垢ブロックされたのはそれは垢回復対応を待つ(仕方なく身分証の画像を送信しました・・・)として。
とりあえず、バックグラウンドの開発をすることに。
んで、今回、DialogflowでWebhookを使うのには一番なにが良さそうかなーと思い、色々調べていて、やっぱりDialogflowはGoogle製なのでそれと一番親和性の高い物を使うのが宜しいのでしょうという結論に至り、じゃ、いったいそれはなんぞや?て、なところで、
一応、参考にしたサイトはこちら。
で、この方は、
「GoogleCloudConsoleからCloud functionsを選択し、関数を作成を押下します。」
ってあったので、おーなんか簡単そうだぞーって思い
よくわからないけど・・・言語?APIか。Firebaseっていうんですねー?なにそれー。まぁいいっかーー。
Firebaseのオンラインコンソール、GoogleCloudConsoleなるものを使えるようにしよーということでググググとググったが・・・
GoogleCloudConsole 完全無料じゃないんかーい!! (←期間限定無料)
えー。どうするの。
こりゃローカルに何かしらの環境を作らなきゃいけない系????? ひえー。
やったことないが、せっかくなのでやってみよう・・。
てなことで・・・・
Firebaseって凄いなぁ。Firebaseを使うには、Node.jsのコマンドプロンプトから、Firebaseにログイン、そっからデプロイ。という手順らしい。
Firebase CLI リファレンス | Firebase
まぁ、環境構築とうか、構築とは言わないのかなー。こちらで用意する環境は、Node.js、これひとつで済んだ、というイメージであります。
(実際のコードは、とりあえずテキストエディタでちまちま書いてみる流れ)
コマンドプロンプトとかあんま使わないできた人生。使う必要があれば使うという程度で、便利ソフトウェアでポチポチぬくぬくと生きてきたので、コマンドを叩くというのはなかなか慣れぬですー。。
ただ、コマンドタターン!からの~ログ流れる~!・・Complete!ってのは、見た感じはカッコいいよね!!(そこ
んで、肝心のソースコード。お手本どこ?
この人のも多少書いてはあるけど、これコピペするだけじゃ動かないので、とりあえず、Googleの用意した動くサンプルのソースコードをコピってそれを自分用に書き換えるのがきっと手っ取り早いんだろうと思ったので、そうする事にしました。
実際には、Dialogflow > Fulfillment > Webhook の、Inline Editor をポチっとENABLEDにすると出て来るサンプルコード(index.js)をコピペしました。
で、色々つまづいたんですが、Error:module error 的なやつが出たー。
moduleが足りないのかーい。Firebaseは使う予定のモジュール全部を入れてくれている話ではなかったのか・・・?
解決してくれたリンクを貼り付けておきます。
これ( npm-install-missing)はつまり、途中で気付いたんですがindex.jsと一緒のディレクトリにあるpackage.jsonに記載があるが、モジュールインストールされていないものを察知してインストールしてくれるというものらしい。
index.jsにいくらコード書いてもだめで、Errorで出た問題のモジュールが、まずpackage.jsonちゃんと書いてあるか確認。
書いてなかったら書いて、
(私の場合この3つが足りなかったようだ)
npm-install-missing
タターン!OK~~~。
これでとりえずデプロイできるようになった。
Deploy complete! ヤッタネ!!
んで、デバッグ作業。
デバッグは、どうすれば?? とりあえずログ見ようかーてなことで・・
console.logを・・ この画面にアクセス。
https://console.firebase.google.com/
なんかエラーでてるところあるーなーと見て見て・・
いくと、、、この参考にした人のサンプルコードが違ったんですね。
私が取得したデータ構造と違うぞー。
request.body.result.parameters.boardgame
こちら、正しくはこっちでした。
request.body.queryResult.parameters.boardgame
なんだろ?何かしらバージョンが違ってたのかね?
この方と全く同じ環境であればresultの方だったのかなー。私の環境じゃqueryResultでしたなー。
・・・とか、なんとかなんとかやっているうちに動きました。
ただ、「すごいね!」には、冷たい・・いかちゃん。
用意した質問と用意した回答でしかデモできないところが辛い・・
雑談をする事を想定した回答も私が用意しなきゃならないので。面倒だー。やるのか?やるか??うーーん。。
その点、A3RT(リクルート製)だと、テキトーにそれっぽい返事を返してくれてて、雑談はできそうな模様・・・
そっかー、A3RTだったらもっと雑談できるのに。(今更)
リクルートが一歩リードしている気がする・・。
DialogflowごしにA3RTを呼び出そうか? うーーん。
ほんと、赤ちゃんに言葉を覚えさせる、言葉を用意してあげる。という感じ。なかなか地道な作業だな。
今は、ただのテキストエディタにテキスト殴り書きしただけって感じなので、これを発展させるには、バックで返答用DBを用意、Firebaseで返せるようにして、発言に必要なバイパスをDialogflowで用意してあげれば一気に赤ちゃんBOTから凄い知識豊富BOTになれるんだろうなー。これば巷でやってるQ&AのカスタマーチャットBOT開発なるんだなーなんて。
思ったのでした・・・
それにしても、この1~2日で、ざっと勢いとノリでやったので、パソコン再起動してまっさらな状態で同じ事やろうとしたらもう忘れてるかもしれぬ・・・
ということでブログにメモメモでした・・・・やっとウィンドウの×ボタン押せるよね・・・w
A3RTでPHPからURL叩いて(POST)返答をキャッチしてWeb画面上に出すみたいなチャットサンプルも作ってみたので、それを色々いじってみるかはまた考えたいなーと思いますー。
では。今日のブログはここまで。