【问题标题】:Using Custom API bot can't post action card in Microsoft Teams channel using Bot framework使用自定义 API 机器人无法在使用 Bot 框架的 Microsoft Teams 频道中发布操作卡
【发布时间】:2017-12-19 02:50:00
【问题描述】:

当我调用我的 API 时,我必须从机器人发送可操作卡片,然后该 API 将通过微软团队频道中的机器人推送操作卡,我将在其中传递频道 ID 和服务 URL

目前,我可以使用自定义 API 成功地将简单消息发送到 Microsoft 团队频道,即发送简单消息。 但是在发送操作卡时它会给出异常,例如,

{“活动导致多个 Skype 活动”}

    public async Task<HttpResponseMessage> PostClause(ClauseRequest clauseRequest)
    {
       try
         {

            var channelId = "19:cf4306bb3aff49969b87420.......1@thread.skype";
            var serviceURL = "https://smba.trafficmanager.net/apac-client-ss.msg/";
            var connector = new ConnectorClient(new Uri(serviceURL));
            var channelData = new Dictionary<string, string>();
            channelData["teamsChannelId"] = channelId;
            IMessageActivity newMessage = Activity.CreateMessageActivity();
            newMessage.Type = ActivityTypes.Message;
            newMessage.Text = "Hello channel.";

            newMessage.Locale = "en-Us";
            var attachment = GetHeroCard();
            newMessage.Attachments = new List<Attachment>();
            newMessage.Attachments.Add(attachment);

            newMessage.SuggestedActions = new SuggestedActions()
            {
                Actions = new List<CardAction>()
                    {
                        new CardAction(){ Title = "Approve", Type=ActionTypes.ImBack, Value="Approve" },
                        new CardAction(){ Title = "Decline", Type=ActionTypes.ImBack, Value="Decline" }
                       // new CardAction(){ Title = "View in Google", Type=ActionTypes.OpenUrl, Value="https://www.google.co.in" }
                    }
            };

            ConversationParameters conversationParams = new ConversationParameters(
                isGroup: true,
                bot: null,
                members: null,
                topicName: "Test Conversation",
                activity: (Activity)newMessage,
                channelData: channelData);
            MicrosoftAppCredentials.TrustServiceUrl(serviceURL, DateTime.MaxValue);
            await connector.Conversations.CreateConversationAsync(conversationParams);
          }
          catch (Exception ex)
          {
           throw ex;
          }
    }


    private static Attachment GetHeroCard()
    {

        List<CardAction> cardButtons = new List<CardAction>();

        CardAction plButton = new CardAction()
        {
            Value = $"https://www.google.co.in",
            Type = "openUrl",
            Title = "View in Google"
        };

        cardButtons.Add(plButton);

        var heroCard = new HeroCard
        {
            Title = "BotFramework Hero Card",
            Subtitle = "Your bots — wherever your users are talking",
            Text = "Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services.",
            Images = new List<CardImage> { new CardImage("https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg") },
            Buttons = cardButtons
        };

        return heroCard.ToAttachment();
    }

【问题讨论】:

    标签: c# bots botframework microsoft-teams


    【解决方案1】:

    我认为这也可以:

    new CardAction(){ Title = "Approve", Type="ImBack", Value="Approve" },  
    new CardAction(){ Title = "Decline", Type="ImBack", Value="Decline" }
    

    根据this example中的这个sn-p

    CardAction plButton = new CardAction()
    {
    Value = $"https://en.wikipedia.org/wiki/{cardContent.Key}",
    Type = "openUrl",
    Title = "WikiPedia Page"
    };
    

    【讨论】:

    • var good = new CardAction("invoke", "Good", null, "{\"invokeValue\": \"Good\"}");使用此方法,我可以传递自定义有效负载,并且可以在调用操作后使用该有效负载
    • 很高兴你明白了
    【解决方案2】:

    如文档中所述:

    Teams 不支持 SuggestedActions

    所以我更新了我的代码它现在可以工作了:)

        public async Task<HttpResponseMessage> PostClause(ClauseRequest clauseRequest)
        {
            try
            {
                var channelId = "19:cf4306bb3aff4996.......@thread.skype";
                var serviceURL = "https://smba.trafficmanager.net/apac-client-ss.msg/";
                var connector = new ConnectorClient(new Uri(serviceURL));
                var channelData = new Dictionary<string, string>();
                channelData["teamsChannelId"] = channelId;
                IMessageActivity newMessage = Activity.CreateMessageActivity();
                newMessage.Type = ActivityTypes.Message;
    
    
                var good = new CardAction("invoke", "Good", null, "{\"invokeValue\": \"Good\"}");
                var bad = new CardAction("invoke", "Bad", null, "{\"invokeValue\": \"Bad\"}");
                var card = new HeroCard("How are you today?", null, null, null, new List<CardAction> { good, bad }).ToAttachment();
    
    
                newMessage.Attachments.Add(card);
    
                ConversationParameters conversationParams = new ConversationParameters(
                    isGroup: true,
                    bot: null,
                    members: null,
                    topicName: "Test Conversation",
                    activity: (Activity)newMessage,
                    channelData: channelData);
                MicrosoftAppCredentials.TrustServiceUrl(serviceURL, DateTime.MaxValue);
                await connector.Conversations.CreateConversationAsync(conversationParams);
                var response = Request.CreateResponse(HttpStatusCode.OK);
                return response;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2017-02-16
      • 2017-09-26
      • 2017-05-20
      • 2020-07-26
      • 1970-01-01
      • 2021-11-09
      • 2018-05-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多