2016-07-24 81 views
1

更新

我正在開發一個與bot Framework進行1:1對話的Skype bot。 因爲我有一個WebHook方法,它將從外部服務調用並將消息發送到我的機器人,然後我的機器人會將該消息發送給Skype用戶。使用Botframework版本3從機器人發送消息到Skype用戶使用Botframework版本3

以下代碼是用於在消息控制器V1與API沿/消息發佈方法

public async Task<Message> Post([FromBody]Message message){} 

[Route("~/api/messages/hook")] 
    [HttpPost] 
    public async Task<IHttpActionResult> WebHook([FromBody]WebHookMessage message) 
    { 
     if (message.Type == "EmotionUpdate") 
     { 
      const string fromBotAddress = "<Skype Bot ID here>"; 
      const string toBotAddress = "<Destination Skype name here>"; 
      var text = resolveEmoji(message.Data); 

      using (var client = new ConnectorClient()) 
      { 
       var outMessage = new Message 
       { 
        To = new ChannelAccount("skype", address: toBotAddress , isBot: false), 
        From = new ChannelAccount("skype", address: $"8:{fromBotAddress}", isBot: true), 
        Text = text, 
        Language = "en", 

       }; 

       await client.Messages.SendMessageAsync(outMessage); 
      } 
     } 
     return Ok(); 
    } 

我會調用上述網絡掛接從其他服務,讓自己的機器人將消息發送到相應的Skype用戶。

任何人都可以請幫我我怎樣才能在V3殭屍框架中實現相同? 我嘗試以下,但不工作

const string fromBotAddress = "Microsoft App ID of my bot"; 
     const string toBotAddress = "skype username"; 
     WebHookMessage processedData = JsonConvert.DeserializeObject<WebHookMessage>(message); 
     var text = resolveEmoji(processedData.Data); 

     using (var client = new ConnectorClient(new Uri("https://botname.azurewebsites.net/") 
      , "Bot Microsoft App Id", "Bot Microsoft App secret",null)) 
     { 
      var outMessage = new Activity 
      { 
       ReplyToId = toBotAddress, 
       From = new ChannelAccount("skype", $"8:{fromBotAddress}"), 
       Text = text 

      }; 

      await client.Conversations.SendToConversationAsync(outMessage); 
     } 

但它不能正常工作,最後我想達到什麼是我想要我的機器人將消息發送到用戶的任何時候我們將如何在Skype的發送消息給一個人。

回答

0

我不知道我明白你想要做什麼。如果你想回答的消息(activity),嘗試這樣的事情:

ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl)); 
var reply = activity.createReply(text, "en"); 
await connector.Conversations.ReplyToActivityAsync(reply); 

Activity.createReply切換從進入活動FromRecipient領域。您也可以嘗試手動設置這些字段。

UPDATE

你需要創建一個ConnectorClient Skype的連接器服務,而不是你的機器人!所以嘗試與Uri http://skype.botframework.com它可能工作。

但是,我不認爲你可以在沒有收到來自它的消息(即你的機器人需要被添加到用戶的聯繫人)的情況下在Skype上給用戶發送消息。一旦有來自用戶的傳入消息,就可以使用它創建回覆,就像上面所描述的那樣。

WebHookMessage processedData = JsonConvert.DeserializeObject<WebHookMessage>(message); 
var text = resolveEmoji(processedData.Data); 

var client = new ConnectorClient(new Uri(activity.serviceUrl)); 
var outMessage = activity.createReply(text); 
await client.Conversations.SendToConversationAsync(outMessage); 

activity是先前從給定用戶收到的消息。在這種情況下,activity.serviceUrl應該是http://skype.botframework.com,但通常不應該依賴於此。

您可以嘗試手動創建活動(outMessage)爲此,我建議檢查來自Skype用戶的消息的FromRecipient字段並相應地設置這些字段。但是,如前所述,您的機器人需要添加到用戶的聯繫人中,因此此時它將收到來自用戶的消息。

+0

感謝您的回覆。我已更新我的問題,請檢查一次。 – Kishore1021

+0

更新了我的答案,希望它有幫助。 – Thegaram

2

下面的代碼工作,但也有一些事情是不是很明顯,我想通了(在Skype通道測試)

當用戶與用戶分配一個ID只能是機器人交互使用從一個特定的機器人..例如:我有多個機器人每個使用Skype的頻道。當我從我的Skype用戶發送消息到機器人A時,該ID與機器人B不同。在之前的殭屍框架版本中,我可以發送消息給我的真實Skype用戶ID,但現在不再了。在某種程度上,它簡化了整個過程,因爲您只需要收件人的ID,而框架負責處理其餘部分,因此您不必指定發件人或機器人ID(我猜想所有在幕後鏈接的內容)

[Route("OutboundMessages/Skype")] 
    [HttpPost] 
    public async Task<HttpResponseMessage> SendSkypeMessage(SkypePayload payload) 
    {     

     using (var client = new ConnectorClient(new Uri("https://skype.botframework.com"))) 
     { 
      var conversation = await client.Conversations.CreateDirectConversationAsync(new ChannelAccount(), new ChannelAccount(payload.ToSkypeId)); 
      IMessageActivity message = Activity.CreateMessageActivity(); 
      message.From = new ChannelAccount(); 
      message.Recipient = new ChannelAccount(payload.ToSkypeId); 
      message.Conversation = new ConversationAccount { Id= conversation.Id }; 
      message.Text = payload.MessageBody;    
      await client.Conversations.SendToConversationAsync((Activity)message); 
     } 

     return Request.CreateResponse(HttpStatusCode.OK); 
    } 
+0

感謝您的回覆,您的答案似乎是我正在尋找的。我會在這個週末嘗試一下。 – Kishore1021

+0

如果它對你有效,請提出答案。 –