在Bot框架中将Facebook的通用模板的JSON代码转换为C#

问题描述 投票:0回答:1

我很难将这个facebook的通用模板转换为C#。我不确定我是否正确转换它。下面是我尝试的代码,但没有在Messenger上呈现。谢谢。

    curl -X POST -H "Content-Type: application/json" -d '{
  "recipient":{
    "id":"<PSID>"
  },
  "message":{
    "attachment":{
      "type":"template",
      "payload":{
        "template_type":"generic",
        "elements":[
           {
            "title":"Welcome!",
            "image_url":"https://petersfancybrownhats.com/company_image.png",
            "subtitle":"We have the right hat for everyone.",
            "default_action": {
              "type": "web_url",
              "url": "https://petersfancybrownhats.com/view?item=103",
              "webview_height_ratio": "tall",
            },
            "buttons":[
              {
                "type":"web_url",
                "url":"https://petersfancybrownhats.com",
                "title":"View Website"
              },{
                "type":"postback",
                "title":"Start Chatting",
                "payload":"DEVELOPER_DEFINED_PAYLOAD"
              }              
            ]      
          }
        ]
      }
    }
  }
}' "https://graph.facebook.com/v2.6/me/messages?access_token=<PAGE_ACCESS_TOKEN>"

这是我在c#中尝试但它不起作用。我不确定我是否以正确的方式转换它。任何帮助将不胜感激,谢谢。

   Activity previewReply = stepContext.Context.Activity.CreateReply();

            previewReply.ChannelData = JObject.FromObject(
            new
            {
                attachment = new
                {
                    type = "template",
                    payload = new
                    {
                        template_type = "generic",
                        elements = new
                        {
                            title = "title",
                            subtitle = "subtitle",
                            image_url = "https://thechangreport.com/img/lightning.png",
                            buttons = new object[]
                            {
                                new
                                {
                                    type = "element_share,",
                                    share_contents = new
                                    {
                                        attachment = new
                                        {
                                            type = "template",
                                            payload = new
                                            {
                                                template_type = "generic",
                                                elements = new
                                                {
                                                        title = "x",
                                                        subtitle = "xx",
                                                        image_url = "https://thechangreport.com/img/lightning.png",
                                                        default_action = new
                                                        {
                                                             type = "web_url",
                                                             url = "http://m.me/petershats?ref=invited_by_24601",
                                                        },
                                                        buttons = new
                                                        {
                                                              type = "web_url",
                                                              url = "http://m.me/petershats?ref=invited_by_24601",
                                                              title = "Take Quiz",
                                                        },
                                                },
                                            },
                                         },
                                     },
                                },
                            },
                        },
                    },
                },
            });

            await stepContext.Context.SendActivityAsync(previewReply);
c# json botframework messenger
1个回答
0
投票

elementsbuttons属性需要是列表。看一下下面的示例模板。

var attachment = new
{
    type = "template",
    payload = new
    {
        template_type = "generic",
        elements = new []
        {
            new {
                title = "title",
                image_url = "https://thechangreport.com/img/lightning.png",
                subtitle = "subtitle",
                buttons = new object[]
                {
                    new {
                        type = "element_share",
                        share_contents = new {
                            attachment = new {
                                type = "template",
                                payload = new
                                {
                                    template_type = "generic",
                                    elements = new []
                                    {
                                        new {
                                            title = "title 2",
                                            image_url = "https://thechangreport.com/img/lightning.png",
                                            subtitle = "subtitle 2",
                                            buttons = new object[]
                                            {
                                                new {
                                                    type = "web_url",
                                                    url = "http://m.me/petershats?ref=invited_by_24601",
                                                    title = "Take Quiz"
                                                },
                                            },
                                        },
                                    },
                                },
                            }
                        },
                    },
                },
            },
        },
    },
};

reply.ChannelData = JObject.FromObject(new { attachment });

请注意,如果主模板与您尝试共享的模板不同,则只需在模板中添加share_contents元素。否则,您的按钮可能只是new { type = "element_share" },这使得模板远没那么复杂。

此外,请确保Whitelist您的所有网址,并确保所有图片网址都正常工作 - 其中几个网站无法正常工作。如果URL未列入白名单且图像链接已断开,则不会呈现模板。

希望这可以帮助!

© www.soinside.com 2019 - 2024. All rights reserved.