1

更新しました

Bot Framework で 1 対 1 の会話を行う Skype ボットを開発しています。外部サービスから呼び出してボットにメッセージを送信する WebHook メソッドがあるという点で、ボットはそのメッセージを Skype ユーザーに送信します。

次のコードは、メッセージ コントローラーの v1 と api/messages post メソッドのコードです。

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

上記の WebHook を別のサービスから呼び出して、ボットがそれぞれの 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);
        }

しかし、それは機能していません。最終的に私が達成したいのは、スカイプの人にメッセージを送信する方法をいつでもボットにユーザーに送信させることです。

4

2 に答える 2

2

次のコードは機能しますが、私が理解したほど明白ではないことがいくつかあります (Skype チャネルでテスト済み)。

ユーザーがボットと対話すると、特定のボットからのみ使用できる ID がユーザーに割り当てられます。たとえば、Skype チャネルを使用する複数のボットがあります。スカイプ ユーザーからボット A にメッセージを送信すると、ボット B の ID とは異なります。以前のバージョンのボット フレームワークでは、実際のスカイプ ユーザー 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);
    }
于 2016-08-03T05:57:23.080 に答える