[心得] 使用Claudia.js建立查詢台銀匯率API/BOT
之前分享了如何製作簡單的Facebook BOT,詳情請a我的文章或是看好讀blog
http://kaoruiscoding.blogspot.tw/2016/12/claudiajsfacebook.html
但是應該不會有人希望自己的BOT只會找理由吧。
而且Lambda的最大應用其實是Web API,
而Claudia其實也是可以幫忙建立API的,一樣是很輕鬆愉快喔~
這篇文章會介紹如何用Claudia寫一隻自動抓取台銀最新的現金賣出匯率,
並轉成JSON格式的API,再建立一個機器人並讓機器人自動回覆匯率。
一樣有無廣告無音樂blog好讀版,依然要請各位年薪千萬大大手下留情
http://kaoruiscoding.blogspot.tw/2016/12/claudiajsapi-botskype.html
建立API
初始化npm專案
1.建立一個資料夾並命名為currencyrate
2.打開Mac Terminal/Windows command line tool
並移動到這個資料夾(cd currencyrate)
3.初始化npm專案:輸入npm init
安裝套件
如果之前選擇不將Claudia安裝到Global,要在這個步驟打入
npm install claudia -D
來安裝Claudia到這個專案。
另外還必須要安裝幾個npm套件:
claudia-api-builder:Claudia自動部署API的套件
minimal-request-promise:很簡單就可以取得網頁上資料的套件
csv-parse:因為台銀提供csv檔格式的API,這個套件可以解析csv檔
在Terminal或是Cmd輸入
npm install claudia-api-builder minimal-request-promise csv-parse -S
即可安裝這兩個套件。
API的Code
打開你的sublime或是其他的記事本工具,輸入以下的code:
'use strict'
const parse = require('csv-parse/lib/sync');
const rp = require('minimal-request-promise')
const ApiBuilder = require("claudia-api-builder");
var api = new ApiBuilder();
var rootUri = 'http://rate.bot.com.tw/';
var currencyMethod = 'xrt/flcsv/0/day';
var sellcashcol=12;
var currencyCode=0;
api.get("/currency/{code}", function (message) {
var code = message.pathParams.code;
var errorMessage,sellcash;
var returnData={errorMessage:errorMessage,sellcash:sellcash};
return rp.get(rootUri+currencyMethod)
.then(response => {
var body='#'+response.body;
var records = parse(body, {comment: '#'});
var arrayFound = records.filter(function(item) {
return item[currencyCode].toLowerCase()==code.toLowerCase();
});
if (arrayFound.length>0)
{
returnData.sellcash=arrayFound[0][12];
}else{
returnData.errorMessage='Cannot find any currency from code '+code
}
return returnData;
})
});
module.exports = api;
然後儲存成index.js。
這段Code會到台銀網站提供的API取得匯率,
透過csv-parser解析之後取得目標匯率並回傳。
透過Claudia部署
透過Claudia部署,一樣只要一個指令
claudia create --name currency --region us-west-2 --api-module index
部署完可以透過URL
https://[api-gateway-id].execute-api.us-west-2.amazonaws.com
/latest/currency/USD
測試是否有成功,也可以進入AWS Console,
選擇"API Gateway"服務後找到currency API,
在resource中按下"Test“按鈕測試。
建立BOT
參考上篇文章建立機器人,
然後在機器人的folder中安裝minimal-request-promise套件,
並將BOT的Code修改如下:
'use strict'
const botBuilder = require('claudia-bot-builder');
const excuse = require('huh');
const rp = require('minimal-request-promise')
module.exports = botBuilder(
function(message) {
if (message.text.lastIndexOf('Currency/', 0) === 0)
{
var msgArr=message.text.split('/');
return rp.get(
'[APIURL]'+msgArr[1])
.then(response => {
var rate = JSON.parse(response.body);
if(rate.sellcash!=null || typeof(rate.sellcash)!='undefined'){
return('Currency '+msgArr[1]+'
exchange rate today is '+rate.sellcash)
}
else
{
return('Error occured, reason is'+rate.errorMessage);
}
})
}
else
{
return 'Thanks for sending '+ message.text +
'.Your message is very important to us, but '+excuse.get();
}
});
*注意[APIURL]這邊是剛剛建立好的API的URL,要記得改不要全部照抄,
不然BOT找不到API不會理人的~
存檔之後,透過Claudia create或Claudia update將BOT部署到AWS。
Skype BOT設定
在這裡介紹怎麼設定Skype的BOT。Skype BOT已經整合到Microsoft的BOT Framework,
目前還在Preview階段,根據Microsoft BOT Framework的Q&A將會在2017年推出正式版,
這裏的設定教學都是針對Preview版本。
1.首先,用你的microsoft/Azure帳號登入Microsoft BOT Framework,
並按下"Register a BOT"
2.在Bot profile區段,給你的BOT一個名字,
並且在bot handle給予這個BOT一個識別值(identity)。
bot handle區段一旦設定了,就不能再改了。
3.在Configuration區段中設定:
*Messaging endpoint:Claudia deploy回應結果中,
deploy->skype區段中的內容,通常是
https://[api-gateway-id].execute-api.
us-west-2.amazonaws.com/latest/skype
*按下"Create Microsoft App ID and password"按鈕
*給予這個應用程式一個名稱(可以和bot的名字不同),
然後按一下"產生應用程式密碼"
*系統產生一組密碼,一定要複製起來,待會透過Claudia設定的時候要用。
密碼只有這個時候可以看得到,沒有複製到就只好再產生一次了。
4.Microsoft BOT framework的設定告一段落,
回到我們的command/terminal console,打入
Claudia update --configure-skype-bot
5.Claudia會要求你輸入Skype App ID和Skype Private key,
其中Skype App ID就是應用程式識別碼,
Skype Private key則是按下“產生應用程式密碼以繼續”按鈕時,
系統自動產生的那組密碼,也就是剛剛特別要你存起來的那組密碼
6.至此,Skype BOT已經全部設定完成。回到Microsoft BOT Framework,
找到"Test connection to your bot"區段,按下Test按鈕,
如果看到下方出現OK "ok",就表示兩方的configuration沒有問題。
Test in skype
在Microsoft BOT Framework中,
我們可以看到系統已經很貼心地將我們的Skype Channels建立好了。
有注意到除了Skype Channel,還有一個Web Chat嗎?
如果我們是自己寫API沒有透過claudia-bot-builder,
這個BOT可以同時支援Skype和Web Chat。
但很可惜的是claudia-bot-builder並沒有支援Web Chat,
所以雖然BOT Framework有幫我們建立Web Chat的Channel,
也已經啟用,在頁面最底下的Chat區段測試,BOT是不會理我們的....
請在Skype Channel旁邊有一個"Add to skype"按鈕,
按下去之後會開啟另一個視窗:
按下"Add to Contacts"之後會將Skype開起來,
並把BOT加入Skype聯絡人中。這時候就可以和BOT對話了。
BOT收到Currency/[幣別代碼]的指令的時候,
會自動呼叫我們寫好的查詢台銀匯率API並回應。
如果收到其他的訊息則是一樣隨便找個理由搪塞你。
About Microsoft BOT Framework
設定好BOT Framework之後其實我蠻好奇的,
因為可以看到Channels能夠設定的並不只有Skype和Web Chat而已,
還有很多種Channel可以設定,包括Facebook Messenger/slack。
這邊可以看到Microsoft一貫的包山包海風格,
其實Microsoft BOT Framework就是一個BOT Connector,
可以通吃各家的BOT。
.NET的Developer也可以透過Visual Studio的BOT Framework template寫好BOT後,
發佈到雲端或網站上,設定好應用程式的ID和密碼來串接,
只要有在BOT Framework設定,一隻API可以通吃所有的BOT。
當然Claudia也是可以通吃,只不過因為要跟skype串,
而在跟skype串接的時候,看到Microsoft BOT又這麼大堆頭,
可是我只是想跟你家skype連線而已,
有種「Microsoft真是一以貫之的熱(ㄐㄧ)心(ㄆㄛˊ)啊~」的感覺。
想透過Visual Studio的BOT Template及Microsoft BOT Framework來開發BOT的話,
可以參考董大偉老師的文章:
關於bot framework (3) - 建立一個最基本的bot (v3新版)。
http://studyhost.blogspot.tw/2016/08/bot-framework-3-bot-v3.html
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.161.78.242
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1482324031.A.227.html
※ 編輯: ichico (218.161.78.242), 12/21/2016 20:41:28
推
12/21 21:37, , 1F
12/21 21:37, 1F
推
12/21 21:56, , 2F
12/21 21:56, 2F
推
12/21 22:11, , 3F
12/21 22:11, 3F
推
12/21 22:47, , 4F
12/21 22:47, 4F
推
12/22 01:20, , 5F
12/22 01:20, 5F
推
12/22 09:04, , 6F
12/22 09:04, 6F
推
12/22 09:30, , 7F
12/22 09:30, 7F
推
12/22 11:41, , 8F
12/22 11:41, 8F
推
12/24 08:37, , 9F
12/24 08:37, 9F