Преобразование JSON-кода универсального шаблона Facebook в C # в среде ботов - PullRequest
0 голосов
/ 13 марта 2019

Мне трудно преобразовать этот шаблон Facebook в C #. Я не уверен, правильно ли я его преобразовал. Ниже приведен код, который я пробовал, но не рендеринг в мессенджере. Спасибо.

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

1 Ответ

0 голосов
/ 14 марта 2019

Атрибуты elements и buttons должны быть списками. Посмотрите на пример шаблона ниже.

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" }, что делает шаблон гораздо менее сложным.

Кроме того, обязательно Белый список всех ваших URL-адресов и убедитесь, что все URL-адреса изображений работают должным образом - некоторые из них не работают должным образом. Шаблон не будет отображаться, если URL-адреса не включены в белый список и ссылки на изображения не работают.

Надеюсь, это поможет!

...