2017-07-14 12 views
0

私はAPIを呼び出すとボットからアクションカードを送信しなければなりません。チャンネルIDとサービスURLカスタムAPIボットを使用すると、ボットフレームワークを使用してMicrosoft Teamsチャンネルにアクションカードを投稿できません。

現在、私は正常なメッセージを送信するためのカスタムAPIを使用してMicrosoftチームチャンネルに簡単なメッセージを送信することができます。 しかし、アクションカードを送ることがこのような例外を与えながら、

は{「活動は、複数のSkypeの活動になった」}

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

答えて

2

ドキュメントで、ここで述べたように:

チームがサポートしていません。おすすめの言葉

私のコードは更新されています。

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; 
     } 
    } 
0

私はこれが同様に働いていると思います。( "グッド"、 "呼び出し"

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

このスニペットに応じthis example

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

VAR良い=新しいCardActionに、 null、 "{\" invokeValue \ ":\" Good \ "}"); このメソッドを使用すると、私はカスタムペイロードを渡すことができ、そのペイロードは呼び出しアクションの後に使用することができます –

+0

あなたはそれを把握してうれしい – JasonSowers

関連する問題