2016年10月12日 星期三

Microsoft Graph API (1) - 這啥?

Microsoft Graph API的前身叫做 Office 365 unified API。這什麼東西呢? 這是一套可以access Office 365中各種服務的資料的API,簡單一點說,就是透過這組API你可以存取O365中用戶的資訊。

你看到unified這個字眼,可能會猜測,那它出現之前,可能有一個比較不unifie的API囉?

是的,你沒猜錯。

這一段路是有一個演進的過程的,我們先來介紹一下,我嘗試說個簡易版的故事。

首先,會接觸到這個API,是一年多以前的事情了,那時Office 365開始在台灣推廣,我們需要撰寫一些程式碼來存取O365上的資訊(像是用戶身分、行事曆、檔案…等)。

那,微軟這麼大的軟體公司,應該會有提供一套什麼API來存取這些資訊,用起來應該很簡單,對吧? 如果你這麼想,那就…稍微天真了。

提供API是有的,但你會好幸運的發現,不是提供一套API,是好幾套API。為何呢? 因為本質上Office 365根本就不是『一套』軟體。

什麼意思? Office 365,其實一堆軟體服務(SaaS)的集合,請記得這一點,它不是一套軟體,它是一群軟體所形成的一個平台。例如Office 365中的檔案,其實是Onedrive特殊版,筆記本是OneNote,email、行事曆是Outlook,通訊錄要看你想要抓哪種,有AD的,有email用的…這,還只是個開始。

如果你觀察Office 365,你會發現他一直在長大,最近還推出了Planner、Power BI、Flow …等等等、等等等。聽說以後還要推出類似Slack的Skype Team,總之Office 365跟你想的可能不一樣,它並非是一套軟體,他是很多套軟體服務。

而這很多套軟體服務的網址(網站)根本不同,只是每一個網站之間用oAuth做單一登入(SSO)的身分驗證而已,讓用戶用起來『像是(但根本不是)』在同一個網站裡面,但其實你是在多個網站裡切來切去。

那,這就讓developer很頭痛了,因為你以為的『抓取Office 365的資料』,其實不是在跟一組API打交道,是跟一群API打交道,每一種API都有自己的呼叫方式,都要做一次身分驗證,每一個驗證都要先取得授權,這…也太痛苦了吧。

寫到這邊,你就該知道unified 的必要了,這也是Office 365 unified API誕生的原因,後來隨著時間,他改名叫做Microsoft Graph API, that’s it.

參考底下這張圖:

可以這麼看,Microsoft Graph API是一個入口,讓你的應用程式可以簡單的面對一組API,做一次身分驗證和授權,讓你的日子好過一點。

可以想見,隨著Office 365家族中的Apps越來越多,越長越快,這組Graph API也會持續成長和更新,你現在看到的有 v1.0和beta兩個版本,抓取到的資料有所不同,適用範圍也各異。現在,你可以透過Graph API存取到底下各式各樣的用戶資訊:

不難想像,在企業中除了ERP以外,其他影響企業營運與命脈的資訊,現在全都在Office 365當中(只要你是用戶的話),我曾經勸某一個正在開發協同運作的團隊說,如果你想靠協同運作來掙錢,得要好好想想了。O365在協同運作的領域雖然不算是無敵,但它天生擁有的資源和富爸爸,讓其他產品很難很難超越。

況且微軟似乎還不滿足現狀,發展不僅止於此,Planner和傳說中的Skype team的出現,都意味著O365現在還只是個基礎而已。

這也暗示著,掌握Graph API,對建立企業運作相關加值軟體服務的重要將不言可喻。OK,我們將在接下來幾篇文章當中,開始討論如何使用此API,以其所能達成的效益。

2016年10月4日 星期二

關於Linebot(2) - 新版Line@ Messaging API使用心得 (Line Bot v2)

注意,本篇部分內容已過時,新版Line bot申請流程,請參考這篇

不廢話,直接切入主題,如果你想看前情提要,請看這裡這裡
如果你對開發Line Bot有興趣,你得先知道原本的Line bot API改版了,最近很奇怪,微軟的bot framework也拼命改版,大家都很隨便敏捷…

新版叫做Messaging API,原則上和舊版的Line bot在概念上很像,但它和Line@整合在一起了。這改版有何影響? 首先,你如果原本有寫好的Line Bot可以暫時不要動它,因為新版v2的Messaging API和舊版並不相容。

其次,新版的bot之所以稱為Line@ Messaging API,是因為,它是透過申請一個Line@帳號開始的,和以前申請一個Line bot帳號不同,這次Line bot的功能被Line@併了。你可以從底下網址直接申請一個"具有Messaging API功能的Line@帳號":
https://business.line.me/zh-hant/services/bot

留意該頁面最下方:

這是三個不同的按鈕。

  1. 開始使用Messaging API
  2. 開始使用Developer Trial
  3. 若要透過現有Line@帳號開始使用Messaging API….

如果你選擇1,2,其實是先建立一個Line@帳號,然後頁面會引導你把該Line@帳號轉成支援Messaging API,如果你選擇3,則是把以前舊的Line@帳號改為支援Messaging API。

但請注意,當你的Line@改為支援Messaging API之後,你就不能用你的Line@ App直接回覆用戶的訊息了(而且這動作不可逆,也就是轉過去轉不回來),用戶的訊息也只會被轉傳到你的Line@ WebHook URL,讓你透過bot程式碼來回覆訊息。
(我覺得這設計…我直說了…糟透了,既然要廢掉Lint bot改用Line@,還不能用Line@ app回訊息,只能在Line@ app和Messaging API中間二選一,那又何必把原本的line bot廢了跟Line@整合在一起呢? 不理解…)

如果你原本的Line@帳號有在用,建議你申請新的Line@去玩這個Messaging API,別用舊的帳號。

接著,你要選擇上面的1還是2呢?請參考底下:

讓我來翻譯一下。

如果你只想要回覆用戶的訊息,那申請哪一個方案都行,但如果你想要主動發訊息給用戶,那只能是developer trial和進階版(月費1888)以上的方案。

developer trial不用錢,但上限50個用戶,你不能把deveeloper trial方案轉換為其他方案。

因此,如果你想要有一個主動傳送訊息的功能,用在production,那你必須付月費1888。好消息是,他說2017年三月前免費。而且付錢很容易,用Line Pay就可以。

你申請好了之後,可以從底下網址到管理後台:
https://admin-official.line.me/ 

當你選擇了某一個Line@帳號,會看到類似底下的管理畫面,下圖(1)的部分,是你正式啟用了支援Messaging API的Line@之後,會出現的選項,如果沒出現這個選項,表示你的Line@帳號尚未支援Messaging API,這時候,你可以去 https://business.line.me/accounts 這個網址把該Line@帳號轉為支援Messaging API
(再次提醒,這個轉換無法回頭,且一旦轉為支援API,則無法用Line@ App回覆用戶訊息,請謹慎為之)

另外,下圖(2)的部分就是你的Line@支援哪一種Message方式,Push就是主動傳訊息給用戶, Reply就是回覆用戶的訊息。如果你只看到Reply,表示你的Line@目前是免費版本,要嘛你升級到進階版($1888),要嘛你申請一個Developer trial帳號(有50個好友限制)

接著你可做些設定,當你允許WebHook傳訊,就表示你可以設定一個WebAPI來接收用戶傳遞給該Line@(就是bot)的訊息。該WebHook在哪設定?

點選Line Developers之後,出現底下畫面:

你可以在上圖(1)的部分設定WebHook URL,在(2)的部分可以取得call API的時候需要的Access Token,而API的document在:
https://devdocs.line.me/en/

後面有機會再介紹怎麼透過程式碼呼叫新版API。

happy coding,各位保重。

相關課程: http://www.studyhost.tw/NewCourses