2017年6月29日

簡易Bing Speech STT WebSocket Sample

Bing Speech API除了REST API介面之外,也提供了WebSocket介面;不過只有AndroidiOS以及Windows平台才有提供相對應WebSocketAPI。其他平台如果可以使用WebSocket,則可以依照Protocol文件(https://docs.microsoft.com/zh-tw/azure/cognitive-services/speech/api-reference-rest/websocketprotocol) 實作以WebSocketBing Speech API溝通。

Bing Speech To Text API提供了三種辨識的方式:InteractiveConversationDictaction;每種方式有各自的Endpoint;連線時需要依據辨識方式連接到不同的端點。

Mode

Path

Interactive

/speech/recognize/interactive/cognitiveservices/v1

Conversation

/speech/recognize/conversation/cognitiveservices/v1

Dictation

/speech/recognize/dictation/cognitiveservices/v1

 

建立連線時,需要以Query String的方式帶入驗證資訊在網址中,例如:

Var url = 'wss://speech.platform.bing.com/speech/recognition/interactive/cognitiveservices/v1?' +

'format=' + defaultOptions.format +

'&language=' + defaultOptions.language +

'&Ocp-Apim-Subscription-Key=' + subscriptionKey +

'&X-ConnectionId=' + guid;

 

其中,formatsimple或是detailedlanguage為輸入語系;Ocp-Apim-Subscribtion-KeyBing Speech APISubscription KeyX-ConnectionIdGuid。此ConnectionId在整個連線中是一致的。

連線成功之後,接下來需要送出speech.config訊息,通知Bing Speech API設備端的能力。

接著就可以發送audio訊息,將要辨識的語音送到Bing Speech API辨識;辨識過程中,WebSocket Client端會收到Server端回應的turn.startspeech.startDetectedspeech.hypothesisspeech.endDetectedspeech.phraseturn.end

其中,speech.phrase為辨識的結果。而當Client收到turn.end時,表示辨識完成,client端需要回應telemetry訊息回報各種數據。

這裡是一個簡單的WebSocket API Wrapperhttps://github.com/michael-chi/BingStt-Websocket

 

簡易Bing Speech STT WebSocket API Wrapper

Bing Speech API除了REST API介面之外,也提供了WebSocket介面;不過只有AndroidiOS以及Windows平台才有提供相對應WebSocketAPI。其他平台如果可以使用WebSocket,則可以依照Protocol文件(https://docs.microsoft.com/zh-tw/azure/cognitive-services/speech/api-reference-rest/websocketprotocol) 實作以WebSocketBing Speech API溝通。

Bing Speech To Text API提供了三種辨識的方式:InteractiveConversationDictaction;每種方式有各自的Endpoint;連線時需要依據辨識方式連接到不同的端點。

Mode

Path

Interactive

/speech/recognize/interactive/cognitiveservices/v1

Conversation

/speech/recognize/conversation/cognitiveservices/v1

Dictation

/speech/recognize/dictation/cognitiveservices/v1

 

建立連線時,需要以Query String的方式帶入驗證資訊在網址中,例如:

Var url = 'wss://speech.platform.bing.com/speech/recognition/interactive/cognitiveservices/v1?' +

'format=' + defaultOptions.format +

'&language=' + defaultOptions.language +

'&Ocp-Apim-Subscription-Key=' + subscriptionKey +

'&X-ConnectionId=' + guid;

 

其中,formatsimple或是detailedlanguage為輸入語系;Ocp-Apim-Subscribtion-KeyBing Speech APISubscription KeyX-ConnectionIdGuid。此ConnectionId在整個連線中是一致的。

連線成功之後,接下來需要送出speech.config訊息,通知Bing Speech API設備端的能力。

接著就可以發送audio訊息,將要辨識的語音送到Bing Speech API辨識;辨識過程中,WebSocket Client端會收到Server端回應的turn.startspeech.startDetectedspeech.hypothesisspeech.endDetectedspeech.phraseturn.end

其中,speech.phrase為辨識的結果。而當Client收到turn.end時,表示辨識完成,client端需要回應telemetry訊息回報各種數據。

這裡是一個簡單的WebSocket API Wrapperhttps://github.com/michael-chi/BingStt-Websocket

 

2017年6月17日

Cortana與企業端驗證

新的Cortana ChannelBot Framework建立的對話機器人利用Windows 10, iOSAndroid上的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找到先前登入好的機器人然後設定新的平台即可。

  1. 登入https://apps.dev.microsoft.com/#/appList
  2. 找到先前登錄的Bot

  1. 新增一個平台

  1. 選擇Web

  1. 設定Redirect URLhttps://www.bing.com/agents/auth

  1. 儲存
  2. 接著回到https://dev.botframework.com
  3. 啟用Cortana Channel
  4. Cortana設定頁面,啟用身分管理

  1. 設定值基本上和官方網站上的說明相同,除了Cliend IClient Secret要使用先前建立好的Id/Secret;也就是在Web.Config裡的MicrosoftAppIdMicrosoftAppPassword

另外,AuthorizeToken URL務必要依照下方說明填寫

  1. Scope欄位填入User.Read offline_access openid

  1. 接著,指定我們需要存取的使用者資料

  1. 存檔後,就可以在Cortana測試了
  2. 開啟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);

}

  1. Activity物件的Entities中,可以取得使用者的相關資料,例如NameEmail

 

{

  "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"

    }

  ],

  //…省略

}

 

About Me