2017-01-14 9 views
0

私のボットのウェブソケットを使ってサーバー上でエコーサービスと通信しようとしています。私はWebSocketSharpアセンブリを使用してWebソケット接続を作成しています。私はボットの中にどんなタイプのユーザをエコーバックしたいのですが、 "ws.OnMessage"イベントを発生させることはありません。私は、コンソールアプリケーション上の接続をテストし、すべてが正常に動作します。私がここで間違っていることを提案してください。続きMSボットフレームワークでウェブソケットとイベントを使用

には、以下の

public async Task<HttpResponseMessage> Post([FromBody]Activity activity) 
    { 
     if (activity.Type == ActivityTypes.Message) 
     { 
      await Conversation.SendAsync(activity,() => new HumanCollaboratorDialog()); 
     } 
     else 
     { 
      HandleSystemMessage(activity); 
     } 
     var response = Request.CreateResponse(HttpStatusCode.OK); 
     return response; 
    } 

私MessageControllerである私のHumanCollaboratorDialogクラス

[Serializable] 
public class HumanCollaboratorDialog : IDialog<object> 
{ 
    public async Task StartAsync(IDialogContext context) 
    { 
     context.Wait(this.MessageReceivedAsync); 
    } 

    private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result) 
    { 
     var message = await result; 

     using (var ws = new WebSocket("ws://Some IP addrress:8080/human-collaborator/echo")) 
     { 

      ws.OnMessage += async (sender, e) => 
      { 
       try 
       { 
        await context.PostAsync(e.Data); 
       } 
       catch (Exception ex) 
       { 
        await context.PostAsync($"Exception: {ex.Message}"); 
       } 
      }; 

      ws.ConnectAsync(); 
      var msg = message.Text; 
      ws.Send(msg); 

     } 

     context.Wait(this.MessageReceivedAsync); 
    } 
} 
+0

は、あなたがこのサンプルを見てきました。 com/Microsoft/BotBuilder-Samples/tree/master/CSharp/core-DirectLineWebSockets –

答えて

0

は "MessageReceivedAsyncは" のWebSocketを作成するための正しい場所ではないです。ボットフレームワークのWebソケットは、ダイレクトライン接続のシナリオでメッセージを受信するために使用されます。 StartConversationAsyncへの呼び出しから取得StreamUrlは、Webソケットを作成するために使用されます。

var token = await new DirectLineClient(dlSecret).Tokens.GenerateTokenForNewConversationAsync(); 

// Use token to create conversation 
var directLineClient = new DirectLineClient(tokenResponse.Token); 
var conversation = await directLineClient.Conversations.StartConversationAsync(); 

using (var webSocketClient = new WebSocket(conversation.StreamUrl)) 
{ 
    webSocketClient.OnMessage += WebSocketClient_OnMessage; 
    webSocketClient.Connect(); 

など

はこちらをご覧ください:します。https:// githubのhttps://github.com/Microsoft/BotBuilder-Samples/blob/master/CSharp/core-DirectLineWebSockets/DirectLineClient/Program.cs

関連する問題