ハンズオン はじめてのNode-RED:その2)BluemixにNode-REDをインストールする&LINE botに挑戦〜準備編〜

こんばんは、猫が毛布でうまる時期が始まりました。CHAKOです。

だって寒いんだもん、華子。

ようやく、「はじめてのNode-RED」のハンズオンが、
5章 「Node-RED」を、より使いこなす
までたどり着きました。

LINE MessageAPIに繋いでみよう、ということで、LINE@のアカウント登録、LINE@MANAGERやLINE developersの画面を扱える状態に整えるまでは、本を見たり以下のURLを参考にしました。

▽参考にした情報
▼LINE Business Centerとapi.aiを使ってチャットボットを作る
https://qiita.com/salmonosushi/items/20310131b0423c408ea1z
▼PepperとLINE(Message API)を接続するまで
https://qiita.com/black_pepper/items/edf5a8d3d7d4ba6ace35

LINEのアカウントなどなどの準備が整ったので、Bluemix上でNode-REDを使用可能な状態に準備します。

▽参考にした情報
▼10 分間で感動的な Bluemix アプリを構築する!
https://www.ibm.com/developerworks/jp/cloud/library/cl-build-a-bluemix-app-in-10-minutes-trs/index.html

ブラウザ上でNode-REDのURLに接続したら、さっそくhttp受信できるように、テキストに従って
入力 http ノード
出力 debug ノード
ノードを組み合わせました。

   

こんな感じ。

ここまで準備して、入力ノード:Callbackを使って作ったURLをLINE Developments 画面側の「メッセージ送受信設定」欄の「Webhook URL」のところに入力します。
入力完了後、入力欄の横に[接続確認]ボタンがあるので、ボタンを押下して、Webhook通信ができるかどうか確認をします。

んが、[接続確認]を押下しても、画面には「Webhook との通信でエラーが発生しました。」と出るだけでした。。。

しかも、Bluemix上のNode-REDのデバッグ・ウィンドウでは、objectのuserIdに、なんだか不吉そうな
Udeadbeefdeadbeefdeadbeefdeadbeef
の文字列が表示されてるし〜(=_=)!

先の参考URLを読み進めていくと、もしかして、アクセストークンが空なのがいけない??ということに気がついたので、アクセストークン欄で[再発行]を実行してみました。

しかし、なお、Bluemix上のNode-REDのデバッグ・ウィンドウでは、objectのuserIdには、なんだか不吉そうな
Udeadbeefdeadbeefdeadbeefdeadbeef
の文字列が表示されて続けているし〜(=_=)!

deadbeefが気になってしょうがなかったので、グーグル先生に質問したら、一番上にヒットした記事が

「死んだ牛肉しか届かないのです。」

と!!

CHAKOも同じだよ!!いいね10回押したい!と筆者に共感しまくっていました。

▽参考にした情報
▼死んだ牛肉だけが届く日々からの脱却 (LINE BOT)
https://qiita.com/jiz/items/0cd1b39bf54184f20d10

要は正常にWebhook通信の受信はできていて、デフォルトでuserIDのところに、なんとお洒落な「Udeadbeefdeadbeefdeadbeefdeadbeef」が込められていた、これは正常な動きで、だからこそ、CHAKOは、「Udeadbeefdeadbeefdeadbeefdeadbeef」と出会えたのね、と認識しました。

そして、[接続確認]時にエラーが出てしまう件を冷静に状況を振り返ると、CHAKOが設定しているノードは、入力ノードでhttpsを受け取って、受け取った内容をデバッグ・ウィドウで表示させているだけ、出力ノードで明示的にhttpsの応答を返せない状況であること、これに漸く気づきました。

慣れている人にとっては当たり前のことが、なかなか気づけず、お恥ずかしい。。。

そのため、現在のフローにおいては、出力ノードを追加して確認する方針とします。

入力 http ノード
出力 http response ノード

の関係で出力ノードを追加します。追加後はデプロイをお忘れなく。

この状態で、再度、そうすると、「成功しました」(Success)という正常終了のメッセージが表示されて、通信が成功したことを確認できました。
やったネ!

デバッグ・ウィンドウ側は、これまでと同じフローなので、以前と同じように、Webhook通信を受信したところまでを確認することができました。

つまり・・・

Udeadbeefdeadbeefdeadbeefdeadbeef

と常にお目見えできるわけですね。

通信確認ができたので、試しにスマホ側のLINEアプリから、メッセージを送信してみます。

 

 

あら、すぐに既読になるんですね。既読スルーにならないのか。

この時、Node-RED側でどのように値を受け取っているのか、デバッグ・ウィンドウで確認してみます。すると、きちんとメッセージを受け取っていることがわかります。

メッセージが格納された様子

 

今日イチのwordは、

Udeadbeefdeadbeefdeadbeefdeadbeef

で決まり!

 

LINEとNode-RED間での通信確認をしたところまでで、本日は閉店ガラガラ。
また続きは明日以降に〜

CHAKO

ハンズオン はじめてのNode-RED:その1)UbuntuにNode-REDをインストールする

 

近頃、少しずつ住まいエリアで開催されるIT系勉強会に出席し始めました、CHAKOです。

9月にBluemix勉強会に初めて参加してきました。
その中では、「はじめてのNode-RED」(Amazon)という本が紹介されていたので、
・Raspberry piとの相性が良いらしい
・新しいツールらしい
・何よりもGUIの見た目が綺麗らしい
と言う、なんとも「らしい」尽くしの状態だったため、実体験するにはちょうど良いレベルのテキストだと直感でビビッときたので、直近は、この本を題材にして、ハンズオンをしながらITスキルアップを図ります。

インストールして作業を行なう時には、前のディレクトリ構成を意識して作業します。

▽日本語版Node.jsダウンロードサイト
https://nodejs.org/ja/

■ダウンロードするファイル
https://nodejs.org/dist/v6.11.4/node-v6.11.4-linux-x64.tar.xz

ダウンロードサイトより、推奨版ファイルを取得する。

ダウンロード完了したら、解凍&実行する。

▽Node.js インストール (Linux)
https://qiita.com/suzuki-sapporo/items/1748dcaacfe244010980

▽Linux で tar.xz 形式のファイルを解凍する
https://qiita.com/ymaru/items/87fbc4e68f5995d3964c

→「tar.xz」ファイルに関して、tarコマンドでファイルを解凍するときは、特別なオプションなしで実行できるとわかりました。

ファイルを/tmpディレクトリ内に解凍します。

tar xvf node-v6.11.4-linux-x64.tar.xz -C /tmp

権限を変更してから、/usr/local/modulesにディレクトリごと移動します。

sudo chown -R root:root /tmp/node-v6.11.4-linux-x64
sudo mv /tmp/node-v6.11.4-linux-x64 /usr/local/modules/

端末から実行しやすくするためにシンボリックリンクやPATHを作成しておきます。

cd /usr/local
sudo ln -s /usr/local/modules/node-v6.11.4-linux-x64/ node

~/.bash_profileファイルを新規作成して、以下の通り記述しました。

#(1)PATHを通すための環境変数の設定。
export NODE_HOME=/usr/local/node
#(2)プログラムで使用する(importとかrequireなど)するためのPATHの設定。
export NODE_PATH=$NODE_HOME/lib/node_modules
#(3)ターミナルでコマンド実行するためPATHの設定。
#実際には、「local/node-v6.11.4-linux-x64/bin」の下の「node」も
#「npm」の両者に対してのPATHを通すことになる。
export PATH=$NODE_HOME/bin:$PATH

▽sudo「コマンドが見つかりません」PATHが初期化されているときの対処法

→対処法1だけでは上手くいかず、どうにもsudoで操作ができない。
secure_pathの内容で上書きされているようだったので、secure_pathの箇所も排除しました。

■変更前

Defaults env_reset
Defaults env_resetDefaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

■変更後
1.環境変数をリセットする部分
2.パスを指定する部分
をそれぞれコメントアウト(#)する。

#Defaults env_reset
Defaults mail_badpass
#Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

これでnpmを使える状態が整ったのでNode-REDのインストールを行う。

sudo npm install -g --unsafe-perm node-red

グローバルな領域にインストールすることを選んでいるので、インストール先は以下の通りnodeの下のbinに導入される形になる。
参考までに、シンボリックリンク側と実体側の両方のディレクトリ内容をメモしておく。

無事に起動確認できたので、ブラウザを起動して、所定のURLよりNode-REDの画面を表示します。

表示できたー

ようやくスタートラインに立てた〜

 

CHAKO