2017-06-02 51 views
0

殭屍程序框架入門,並試圖「推」一條消息給用戶。我在這裏使用SendToConversationAsync從模擬器複製了一些代碼,然後粘貼到模擬器中,但是它沒有發送。我粘貼了下面的代碼。任何幫助讚賞。試圖推動使用殭屍程序框架

namespace Bot 
{ 
    [BotAuthentication] 
    public class MessagesController : ApiController 
    {  
     public async Task<HttpResponseMessage> Post([FromBody]Activity activity) 
     { 
      if (activity.Type == ActivityTypes.Message) 
      { 
       ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl)); 
       // calculate something for us to return 
       int length = (activity.Text ?? string.Empty).Length; 

       //create reply here 

       // return our reply to the user 
       Activity reply = activity.CreateReply($"You sent **{activity.Text}** which was {length} characters"); 
       await connector.Conversations.ReplyToActivityAsync(reply); 

       SendMessage("Blah!"); 
      } 
      else 
      { 
       HandleSystemMessage(activity); 
      } 
      var response = Request.CreateResponse(HttpStatusCode.OK); 
      return response; 
     }  

     private void SendMessage(string msg) 
     { 
      var userAccount = new ChannelAccount(name: "", id: "default-user"); 
      var botAccount = new ChannelAccount(name: "Bot", id: "m374hm6j2b474lei9"); 
      var connector = new ConnectorClient(new Uri("http://localhost:3979/")); 

      // conversationId for Real Bot 
      //var conversationId = connector.Conversations.CreateDirectConversationAsync(botAccount, userAccount).Result; 

    // conversationId for Bot Emulator 
    //var conversationId = _activityHistory.Conversation; 

      IMessageActivity message = Activity.CreateMessageActivity(); 
      message.From = botAccount; 
      message.Recipient = userAccount; 
      message.Conversation = new ConversationAccount(id: "0dkmb2e3lf1dn2g69"); 
      message.Text = msg; 
      message.Locale = "en-Us"; 
      connector.Conversations.SendToConversationAsync((Activity)message); 
     } 
    } 
} 

更多信息:

JSON

{ 
    "type": "message", 
    "text": "test", 
    "from": { 
    "id": "default-user", 
    "name": "User" 
    }, 
    "locale": "en-US", 
    "textFormat": "plain", 
    "timestamp": "2017-06-02T21:33:24.737Z", 
    "channelData": { 
    "clientActivityId": "1496437792941.9667812978932935.10" 
    }, 
    "id": "hfncb55l7j7ea0c26", 
    "channelId": "emulator", 
    "localTimestamp": "2017-06-02T14:33:24-07:00", 
    "recipient": { 
    "id": "m374hm6j2b474lei9", 
    "name": "Bot" 
    }, 
    "conversation": { 
    "id": "icn5ed433edc0kh99" 
    }, 
    "serviceUrl": "http://127.0.0.1:56303" 
} 

SendMessage函數:

private void SendMessage(string msg) 
{ 
    var userAccount = new ChannelAccount(name: "User", id: "default-user"); 
    var botAccount = new ChannelAccount(name: "Bot", id: "m374hm6j2b474lei9"); 
    var connector = new ConnectorClient(new Uri("http://localhost:3979/")); 

    // conversationId for Real Bot 
    //var conversationId = connector.Conversations.CreateDirectConversationAsync(botAccount, userAccount).Result; 

    // conversationId for Bot Emulator 
    //var conversationId = _activityHistory.Conversation; 

    IMessageActivity message = Activity.CreateMessageActivity(); 
    message.From = botAccount; 
    message.Recipient = userAccount; 
    message.Conversation = new ConversationAccount(id: "icn5ed433edc0kh99"); 
    message.Text = msg; 
    message.Locale = "en-Us"; 
    //message.Type = "message"; 
    //message.ChannelId = "emulator"; 
    //message.ReplyToId = "62ehe9jk6kn2eg23i"; 
    message.ServiceUrl = "http://127.0.0.1:56303"; 

    connector.Conversations.SendToConversationAsync((Activity)message); 
} 
+0

我並不是說所有這些都是需要的,但我確實將它們設置在我自己的工作版本中,而不是設置它們:'message.Type','message.ChannelId','message.ReplyToId '和'message.ServiceUrl'。 – stuartd

+0

還要注意,您可能需要明確信任該URL - 「MicrosoftAppCredentials.TrustServiceUrl(botServiceURL);' – stuartd

+1

聽起來像您正在尋找」主動消息「。文檔:https://docs.microsoft.com/en-us/bot-framework/azure/azure-bot-service-template-proactive - 代碼示例:https://github.com/MicrosoftDX/botFramework-proactiveMessages - - [發送主動消息](https://docs.microsoft.com/en-us/bot-framework/dotnet/bot-builder-dotnet-proactive-messages) – nilsw

回答

0

http://localhost:3979/不是一個有效的服務URL。這是機器人託管的網址,而不是您用來從機器人與用戶通信的網址。

請在模擬器中查看對話更新事件的POST。

[13:05:10] -> POST 200 [conversationUpdate] 

在詳細信息窗格中,您將看到靠近底部的serviceUrl。這是仿真器正在偵聽的URL,以及您將用於從機器人與用戶通信的網址。 ServiceUrl應該從先前的活動中緩存。

enter image description here

+0

這似乎沒有做到這一點。我會發布代碼。 – witchlightning

0

謝謝大家。我想我會去使用Microsoft.Bot.Builder.Dialogs。他們已經在github上得到了一些例子,並在計時器上工作,這對我很有用。 BotBuilder-Samples