そういう、モデルなんです。

ビジネスモデル、3Dモデル、設計図、模型などの現状と動向を考察、関連書籍の紹介

Microsoft Bot Framework 開発環境 (Node.js、TypeScript)

プログラミングBot Framework (マイクロソフト関連書)

プログラミングBot Framework (マイクロソフト関連書)

 

を読んだのだが、Node.js ではなく C# が開発言語の前提だった。

フロントエンドのボット(チャネル)は何でもよい、という建前の汎用的なフレームワークなので、アーキテクチャは小難かったが大体理解はできた。

しかし Line、Alexa などの勝ち組は、わざわざマイクロソフトの相手をする気もなさそうであり、実質的に Cortana、Skype、Slack ぐらいしか繋がりそうもない。

開発言語 TypeScript / JavaScirpt (Node.js) の場合

たまたま読んでいた 

TypeScript実践マスター

TypeScript実践マスター

 

では、Node.js での説明があった。

ほとんど同じであり、難しくもなかったが記録しておく。

Bot Framework Emurator インストール

ボット・フレームワークエミュレータ本体は、以前に GItHub からダウンロードしてインストールしていた。

が、他に Home · microsoft/BotFramework-Emulator Wiki · GitHub の Resources にあるようなものが必要らしい。

このうち Bot Builder V4 SDK は開発言語別となっているので、Node.js の場合には npm でインストールすることになる。

まずはサンプルプログラム用のレポジトリとプロジェクトを用意

プロジェクト名は BotFrameworkSample とした。 

tombi-aburage.hatenablog.jp

GItHub でレポジトリ生成するさいに、Node.js 用の.gitignore を生成させたところ、ひとくハマってしまった。(ロス2時間)

tombi-aburage.hatenablog.jp

Bot Builder V4 SDK を追加

MSDN のブログも発見したので、

blogs.msdn.microsoft.com

TypeScript実践マスター

TypeScript実践マスター

 

と見比べながら設定を進めた。

前者のブログには

ローカル環境で開発をする方法について紹介します。

とあるので内容的にちょうどよかった。

Git はさきほど設定したので git init は飛ばして、その後の手順を忠実に実行。

entry point は app.js としてください。

がポイントらしい。

SDK を取得すると、node_modules 配下に大量にファイルが追加されたので、.gitignore ファイルを作成&記述して GIt 管理下からnode_modules 配下を外した。

サンプルプログラムを追加

先ほどのブログの途中で、別のブログのページに飛び、そこにある説明どおりにエコーボットを作成した。

Yeoman と JavaScript のジェネレーターをインストールします。

ジェネレーターを使用してエコー ボットを作成します。

Yeoman を使って、サンプルプログラムの生成すらも完全自動化している。
これには自己診断機能があるらしく、全て問題なし!と言い切ってくれた。

Yeoman Doctor
Running sanity checks on your system

√ Global configuration file is valid
√ NODE_PATH matches the npm root
√ Node.js version
√ No .bowerrc file in home directory
√ No .yo-rc.json file in home directory
√ npm version
√ yo version

Everything looks all right!

これは、安心だ(嘘じゃなければネ…)

ジェネレーターを使用してエコー ボットを作成

途中で TypeScript か JavaScript か選ばされた。

本心は TypeScript なのだが、今は手順どおりに稼働確認を優先するため、JavaScript を選択しておく。

ここまで、特に問題なし

JavaScript を選択したのに、Python 実行ファイルが見つからないとのエラー

最終的には

------------------------
Your new bot is ready!
------------------------
Open the README.md to learn how to run your bot.
Thank you for using the Microsoft Bot Framework.

と出力されているので問題ないと思うが、途中で Python 環境に関するものらしきエラーが出力されているので、一応記録はしておく。

E:\Users\tombi\Projects\BotFrameworkSample\my-chat-bot\node_modules\dtrace-provider>if not defined npm_config_node_gyp (node "C:\Program Files\nodejs\node_modules\npm\node_modules\npm-lifecycle\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild ) else (node "C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\bin\node-gyp.js" rebuild )
gyp ERR! configure error
gyp ERR! stack Error: Can't find Python executable "python", you can set the PYTHON env variable.
gyp ERR! stack at PythonFinder.failNoPython (C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\lib\configure.js:484:19)
gyp ERR! stack at PythonFinder.<anonymous> (C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\lib\configure.js:509:16)
gyp ERR! stack at C:\Program Files\nodejs\node_modules\npm\node_modules\graceful-fs\polyfills.js:284:29
gyp ERR! stack at FSReqWrap.oncomplete (fs.js:153:21)
gyp ERR! System Windows_NT 10.0.17134
gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd E:\Users\tombi\Projects\BotFrameworkSample\my-chat-bot\node_modules\dtrace-provider
gyp ERR! node -v v10.15.3
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok

たぶん、関係なし

エコーボットの生成を完了

参照先のブログ Bot Framework SDK for JavaScript を使用してボットを作成する - Bot Service | Microsoft Docs では npm start で起動と書かれており、

参照元のブログ Node.js ではじめる Bot 開発 (基本編) – monoe's blog では node app.js で起動と書かれている。

とりあえず参照元のほうの手順で実行したが、モジュールが発見できないとのこと。

node app.js

internal/modules/cjs/loader.js:584
throw err;
^

Error: Cannot find module 'E:\Users\tombi\Projects\BotFrameworkSample\app.js'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:582:15)
at Function.Module._load (internal/modules/cjs/loader.js:508:25)
at Function.Module.runMain (internal/modules/cjs/loader.js:754:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)

app.js の場所を確認してみたところ、BotFrameworkSample 直下ではなくて、サブディレクトリの my-chat-bot 配下に生成されていた。

しかも my-chat-bot 配下にも、それ専用の package.json ファイルが二重に存在するという最悪な事態に w

トラブルの匂いがプンプンする・・・

エコーボットを起動

とりあえず稼働確認だけなので、あまり手間をかけたくない。

参照先のブログでは、作成したボットのディレクトリに移動して npm start で起動と書かれていたので、その手順で、そのとおりにやってみる。

起動して、対話待ちになった。いちおう成功といえそうだ。

npm start

> myChatBot@1.0.0 start E:\Users\tombi\Projects\BotFrameworkSample\my-chat-bot
> node ./index.js
restify listening to http://[::]:3978

Get Bot Framework Emulator: https://aka.ms/botframework-emulator

To talk to your bot, open the emulator select "Open Bot"

ポート 3978 でリスンしているとのこと。参照元のブログのほうに戻る。

Bot エミュレーターでの実行(失敗)

ウィンドウ上部の「Enter your endpoint URL」をクリック 

 は最新のエミュレータには存在せず、かわりに「Open Bot」ボタンがあったので、これに読み替えて手順どおり実施した。

http://localhost:3978/api/messages

・・・しかしエミュレータは何も反応せず、繋がってはいないように思えた。

さきほどの起動メッセージにある

restify listening to http://[::]:3978

がすげえ怪しい・・・

Bot エミュレーターでの実行(失敗)

いきなり「Open Bot」ボタンではなくて、ボット設定ファイルを先に作ってから、Open Bot する方法に変えてみた。

f:id:tombi-aburage:20190518120741p:plain

New Bot Configuration

真っ白な画面が表示されており、メッセージ入力欄すらも出てこない。
Converstion - Send System Activity - ping

を送ってみたが、画面のほうもサーバ側ボットの方も、微動だにしなかった。

まったくの無反応…

これは長引きそうだ…

エミュレータ、サーバのどちらとも停止した。

両方とも再起動したら、あっさり治った。

Windows といえば再起動。サーバ、エミュレータの順に再起動した。

あっさり治った。

f:id:tombi-aburage:20190518121827p:plain

Live Chat

restify listening to http://[::]:3978 は犯人ではなかったらしい。

見かけは変だが普通らしい。