2016-07-24 11 views
1

を使用してSkypeのユーザーにボットからのメッセージを送信する更新

私は1とSkypeのボットを開発しています:ボットフレームワークとの1の会話。 私は、外部サービスから呼び出してボットにメッセージを送信するWebHookメソッドを持っています。その場合、ボットはそのメッセージをSkypeユーザーに送信します。Botframeworkバージョン3

次のコードは、APIと一緒にメッセージコントローラでv1のある/メッセージは、私のボットは、それぞれのSkypeユーザーにメッセージを送信するように、私は、他のサービスからウェブフックの上に呼び出す方法

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(); 
    } 

を投稿してください。

誰でも私が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); 
     } 

を動作していない。しかし、それは動作していない、最終的には私が達成したいことは、私は私のボットは、ユーザーに、我々はスカイプで人にメッセージを送信する方法をいつでもメッセージを送って欲しいれます。

答えて

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あなたがいないあなたのボットに、SkypeのコネクタサービスにConnectorClientを作成する必要が

!ですので、Uri http://skype.botframework.comを試してみてください。

しかし、Skypeからメッセージを受け取らずに(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.serviceUrlhttp://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

あなたのために働いた場合、答えをupvoteしてください。 –

関連する問題