2017年12月6日 星期三

Node.js

開發botframework可以選擇c#或nodejs.
選nodejs的好處就是用javascript開發,
如果對javascript有一定熟悉度的話,
可以省去學習成本。
但Node.js
今年真的蠻困擾的,
例如 分支事件 (https://technews.tw/2017/09/07/node-js-leaders-fight-for-its-survival/)
node.js之父 公開說golang比nodejs好(https://www.mappingthejourney.com/single-post/2017/08/31/episode-8-interview-with-ryan-dahl-creator-of-nodejs/)
主要原因是 大家發現 Node.js 當網站訪問量大時,效能難以調挍等問題。
不過其實還是可以再雲上針對這些問題做一些優化,
例如: AWS 可以用cloudfront針對網頁做cache等設計,或是動態增生instance等.
But,我就是不想管更後端的事情,才會從nodejs開始啊!!!!!!
算了,不管,總之,
nodejs的生態系統完善,
幾乎要什麼有什麼!
而golang應該還有很長一段路要走。
所以,
還是先用nodejs吧!
而且在botframwork
https://github.com/Microsoft/BotBuilder
已經有提供許多相關範例,
大家可以參考使用。

Type script

開發Botframework 可以選c# 或node.js
而node.js是用JavaScript語法。
故可以使用type script ,
但主要是講botframework,
故 Type script 的部份,
讓我一章帶過吧。
TypeScript具有类型系统,且是JavaScript的超集。 它可以编译成普通的JavaScript代码。 TypeScript支持任意浏览器,任意环境,任意系统并且是开源的。
閉人在從 andorid 轉到開發 node.js應用時,
最大的困擾就是,
js無法再開發階段就可以偵錯。
例如
let a = i=>i+1;
我想要的得到的是 數字 相加的結果。
可是當我誤輸入 a("a"),也是會回傳 "a1",也是不會報錯,
這可是天與地一般的差距啊。
用 typescript
let a =(i:int)=i+1
若我輸入 a("a") 就會先報紅,
而不用等到最後輸出結果時,
才會發現這不是我要的,
這是其中一個最基本的好處。
*註 botframework 本身就是使用 type script 做開發。

前言. 選擇 botframework 的優缺點

假設你是要開發FB的chatbot,
且不具有程式背景(或懶得code),
但邏況能力還行的話,
那建議你可以直接採用 chatfuel ,
chatfuel 聽說是台灣團隊所開發,
且直接被FB給投資。
重點是,
Chatfuel有UI介面,
你只要拉一拉 連一連,就可以完成大部分的需求了,幾乎用不到任何code,但如果你想寫,也是有部分的支援。
而且,
chatfuel權限是直接被FB開啟的,
你不需要去跟FB要權限就可以做很多事,
例如 取得user profile...(申請fb權限,要審核,真的很麻煩!)
而且!!! 台灣某大銀行的FB chatbot是用企畫人員 chatfuel 拉出來,
然後該銀行就發新聞稿,自已站在潮流之上了,而且運作的還ok!。(廢話,chatfuel這麼多人在maintain 怎麼可能會差)
但是,
相對的,當然也會受限於Chatfuel的UI介面,
而使你的Chat bot 無法靈活開發,
達到一些,你所希望的功能,
另外,因為A.I.是採取chatfuel所訓練好的,
所以每個Bot 可能會交談起來都是固定的模式。
假設你有跨平臺的需求slack telegram Skype...
也是不能直接套用的。
如果你會 c# 或 node js,
那你就可以試一試 botframework,
botframework其實就是一套腳本+狀態的機制。
採用的好處就是你直接可以依照這個框架,來撰寫你的整個chatbot流程,
而不用從 message api 開始作一系列的發展。
但目前為止,最大的壞處,就是m$因為該公司有Cloud的產品,
為了帶動該Cloud的發展,
硬是綁在一起,
導致這麼好的一個框架,
得先連到美國作轉發,
所以整個就會慢。
*註:因為 Line不被 dev.botframework.com 所支持,
所以我自幹line builder 時,
就順便把轉發這個問題給幹掉了。
不過我FB messenger 的部分還是先採用 dev.botframework.com ,因為 npm 上的 FB builder都沒在做更新。
而FB又很愛改,所以先採用好了,以後再看看要不要幫忙 maintain FB builder.