2016年5月27日 星期五

關於Skype Bot (1) - 建立

在前幾天的文章中提到過,如何建立一個WebAPI來串接LineBot。

除了Line之外,Skype也是現在在商業上,相當普遍常用的IM與通訊機制,而Skype目前提供的Bot相關API,也比Line來的完整一些,在China目前Skype也大致上通暢沒有被屏蔽。

因此我們接著來看,如何建立一個SkypeBot。概念上差不多,我們依舊需要為其建立一個WebSite(WebAPI),作為接收訊息的管道。建議您先建立一個空的Azure Web SIte,待會申請SkypeBot時我們就會用到。

接著,你必須要用Microsoft Account(像是hotmail, Outlook.com…etc.)在底下網址註冊一個SkypeBot: https://developer.microsoft.com/en-us/skype/bots/manage (意即,該網址必須用Microsoft Account登入)

你會看一個註冊skype bot的畫面:

填寫資料的時候,有一些地方要注意…

  1. 其中填寫Messaging Webhook 這個URL的位置,要放你寫好的WebAPI的位置,由於沒有填寫他不會讓你申請,因此你得先把這個網站的網址準備好(也可以隨便寫一個啦),然後再申請Skypebot。填寫時留意,網址一樣要用https開頭。
  2. Microsoft Application ID這個欄位,要放你建立好的Microsoft Application,什麼是Microsoft Application? 如何建立? 你可以在登入MS Account之後,透過底下這個位置來建立一個Application:
    https://apps.dev.microsoft.com/#/appList
  3. 建立上述的應用程式之後,你會取得一個像是GUID的應用程式識別碼,接著,你必須進一步的產生應用程式密碼(點選下圖中的『產生新密碼』):
  4. 完成後,取得的資料類似:
    2de7ff45-cfed-4fff-b2d2-3fe0d0b6abc1

    cb4kccqGYKqfbVOLYMXe7As
    這就是你待會會在WebAPI網站中會用到的OAuthApplicationId和OAuthApplicationSecret

把相關資料填寫完畢之後,會得到一個SkypeBot,大致上畫面如下:

如果稍加留意,會發現其實SkypeBot的ID就是你剛才提供的MS Application ID。如果不知道其意義也不打緊,反正先把bot搞定。

接著,你可以自行撰寫SkypeBot的接收訊息和回復訊息的程式碼,當然是寫在你剛才建立好的那個WebAPI網站,相關的撰寫方式可以參考這邊:
https://developer.microsoft.com/en-us/skype/bots/docs/tutorials/simple-csharp 

老實說他沒有LineBot那麼好寫,但算是簡單了,如果你懶得照tutorial走一次,你可以從底下網址下載一個.zip檔案(這是tutorial寫好的成品):
https://devportalassets.azureedge.net/files/MessagingQuickStartWebApp.zip
將其解壓縮之後,你會看到這是一個asp.net的webapi網站,請在VS2015中開啟該網站的web.config,把底下的資料替換成剛才我們取得的資料:
<appSettings>
  <add key="Skype.Bots.Messaging.BotId" value="28:填寫你的BotID" />
  <add key="Skype.Bots.Messaging.MessagingServiceBaseUrl" value="https://apis.skype.com" />
  <add key="Skype.Bots.Messaging.OAuthEndpoint" value="https://login.microsoftonline.com/common/oauth2/v2.0/token" />
  <add key="Skype.Bots.Messaging.OAuthApplicationId" value="2de7ff45-cfed-4fff-b2d2-3fe0d0b6abc1" />
  <add key="Skype.Bots.Messaging.OAuthApplicationSecret" value="cb4kccqGYKqfbVOLYMXe7As" />
</appSettings>

請留意,上面的Skype.Bots.Messaging.BotId,是包含 "28:" 這幾個字的。這28是啥意思? 不告訴你,但文件中有寫。

Note: The 28: prefix indicates the user type, in this case it specifies that it is a Bot and not a regular user.

完成該WebSite的Web.config更新之後,我們把該WebSite部署到azure雲端WebApp,然後更新一下我們在SkypeBot中註冊的Messaging Webhook位置:

注意這個位置必須是https開頭(使用azure web app就有這個好處,內建支援https,很讚),你會留意到上面的的 /v1/echo 這個位置,這是我們剛才下載的那個.zip中的範例程式碼WebAPI的位置,也就是說,skypeBot收到的訊息,會傳遞到這個位置上。你可以先看看裡面的code,其中的程式碼,以後再跟大家解釋。

完成設定之後,你可以在你註冊的SkypeBot管理畫面上,找到底下這個URL,用戶可以透過這個URL將你的SkypeBot加入為好友:

當用戶加入該Bot時,會出現底下的畫面,提示用戶Bot會取得用戶的基本資料:

當用戶按下Add to Contacts之後,我們的Bot就跟用戶成為朋友了,這時,會出現底下第一行的訊息,當bot發現用戶跟他做朋友之後,會主動跟用戶說話:

但因為目前我們的Bot只會Echo,所以不管用戶說什麼,他就…Echo回去…

But…Bot就這樣成了。

沒有留言: