新的Cortana Channel讓Bot Framework建立的對話機器人利用Windows 10, iOS及Android上的Cortana與使用者透過語音對話。
Cortana Channel也提供了內建的OAuth 2.0驗證機制,讓機器人服務通過驗證的使用者,在企業情境下非常有用。
啟用Cortana OAuth支援的方式在官方網站上已經有詳細的說明:https://docs.microsoft.com/en-us/cortana/tutorials/bot-skills/bot-skill-auth;一個比較需要注意的地方是,如果是透過Bot Builder建立的機器人,在一開始撰寫時應該已經註冊過Microsoft App了;此時,不需要再如文件上的說明建立一個新的App,只需要到https://apps.dev.microsoft.com找到先前登入好的機器人然後設定新的平台即可。
- 登入https://apps.dev.microsoft.com/#/appList
- 找到先前登錄的Bot
- 新增一個平台
- 選擇Web
- 設定Redirect URL為https://www.bing.com/agents/auth
- 儲存
- 接著回到https://dev.botframework.com
- 啟用Cortana Channel
- 在Cortana設定頁面,啟用身分管理
- 設定值基本上和官方網站上的說明相同,除了Cliend I與Client Secret要使用先前建立好的Id/Secret;也就是在Web.Config裡的MicrosoftAppId與MicrosoftAppPassword
另外,Authorize與Token URL務必要依照下方說明填寫
- Scope欄位填入User.Read offline_access openid
- 接著,指定我們需要存取的使用者資料
- 存檔後,就可以在Cortana測試了
- 開啟Cortana,連接我們的機器人後,會跳出登入視窗;在程式中可以透過下面的代碼取得OAuth 2.0 Token
var tokenEntity = activity.AsMessageActivity().Entities.Where(e => e.Type.Equals("AuthorizationToken")).SingleOrDefault();
var token = tokenEntity.Properties
.Value<string>("token");
if (token != null){
var jwt = new JwtSecurityToken(token);
var log = string.Join(" | ", jwt.Payload.Claims.ToArray()
.Select(c => c.Type + ":" + c.Value).ToArray());
Trace.TraceInformation(log);
}
- 在Activity物件的Entities中,可以取得使用者的相關資料,例如Name與Email
{
"type": "message",
//…省略…
"entities": [
{
"type": "Intent",
"name": "None",
"entities": []
},
{
"type": "AuthorizationToken",
"token": "<token>",
"status": 0
},
{
"type": "UserInfo",
"Name": {
"GivenName": "名",
"FamilyName": "姓"
},
"Email": "xxx@msn.com"
},
{
"type": "DeviceInfo",
"supportsDisplay": "true"
}
],
//…省略…
}
沒有留言:
張貼留言