При использовании настраиваемого API-интерфейса бот не может публиковать карточку действия в канале Microsoft Teams с помощью платформы Bot

Мне нужно отправить интерактивную карточку от бота, когда я вызываю свой API, тогда этот API будет проталкивать карточку действия через бота в канале групп Microsoft, где я передам идентификатор канала и URL-адрес службы.

В настоящее время я успешно могу отправить простое сообщение в канал команд Microsoft, используя собственный API, то есть работая для отправки простых сообщений. Но при отправке карты действия он дает исключение, например,

{"Действия привели к нескольким действиям в скайпе"}

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

            var channelId = "19:[email protected]";
            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();
    }

person Gomtesh Hatgine    schedule 14.07.2017    source источник


Ответы (2)


Как упоминалось здесь в документации:

Teams не поддерживает рекомендуемые действия

Итак, я обновляю свой код. Теперь он работает :)

    public async Task<HttpResponseMessage> PostClause(ClauseRequest clauseRequest)
    {
        try
        {
            var channelId = "19:[email protected]";
            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;
        }
    }
person Gomtesh Hatgine    schedule 14.07.2017

Думаю, это тоже сработало бы:

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

согласно этому фрагменту в этот пример

CardAction plButton = new CardAction()
{
Value = $"https://en.wikipedia.org/wiki/{cardContent.Key}",
Type = "openUrl",
Title = "WikiPedia Page"
};
person D4RKCIDE    schedule 14.07.2017
comment
var good = new CardAction (invoke, Good, null, {\ invokeValue \: \ Good \}); Используя этот метод, я могу передать настраиваемую полезную нагрузку, и эту полезную нагрузку можно использовать после вызова действия. - person Gomtesh Hatgine; 15.07.2017
comment
Рад, что ты понял - person D4RKCIDE; 16.07.2017