C# Facebook Messenger中的共享按钮

C# Facebook Messenger中的共享按钮,c#,botframework,facebook-messenger-bot,C#,Botframework,Facebook Messenger Bot,是否可以在botframework中创建一个CardAction(按钮),作为Facebook Messenger中的共享按钮使用?由于共享按钮是特定于Facebook的,而不是所有频道都通用的,因此BotBuilder中没有这样做的代码 但是,可以通过使用ChannelData(C)/sourceEvent(Node.js)来实现 有关频道数据信息的外观,请参见“作为参考”。此外,还演示了如何使用ChannelData功能 最后,这里是相关文档。借助Ezequiel提供的信息 我已经创建了一个

是否可以在botframework中创建一个CardAction(按钮),作为Facebook Messenger中的共享按钮使用?

由于共享按钮是特定于Facebook的,而不是所有频道都通用的,因此BotBuilder中没有这样做的代码

但是,可以通过使用
ChannelData
C
)/
sourceEvent
Node.js
)来实现

有关频道数据信息的外观,请参见“作为参考”。此外,还演示了如何使用
ChannelData
功能


最后,这里是相关文档。

借助Ezequiel提供的信息

我已经创建了一个工作的C#bot,它利用
ChannelData
属性通过Facebook Messenger发送共享按钮

随便

Models
目录包含所有类定义,这些类定义将作为Facebook Messenger共享按钮的正确JSON格式

然后,您只需使用所有组合模型类创建一个新对象,并将其指定给对话框中新回复的
ChannelData
属性,如下所示:

ShareButtonDialog.cs

namespace Azure_Bot_Generic_CSharp
{
    using System;
    using System.Diagnostics;
    using System.Threading.Tasks;
    using Microsoft.Bot.Connector;
    using Microsoft.Bot.Builder.Dialogs;
    using Models;

    [Serializable]
    public class ShareButtonDialog : IDialog<object>
    {
        public async Task StartAsync(IDialogContext context)
        {
            context.Wait(this.MessageReceivedAsync);
        }
        public async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument)
        {
            var message = await argument;

            //create a reply message
            var reply = context.MakeMessage();
            //create a channel data object to act as a facebook share button
            reply.ChannelData = new FacebookChannelData()
            {
                Attachment = new FacebookAttachment()
                {
                    Payload = new FacebookGenericTemplate()
                    {
                        Elements = new object[]
                        {
                            new FacebookGenericTemplateContent()
                            {
                                Buttons = new[]
                                {
                                    new FacebookShareButton()
                                }
                            }
                        }
                    }
                }
            };

            //send message
            await context.PostAsync(reply);

            var reply2 = context.MakeMessage();
            reply2.Text = "This is a message after the Share Button template.";
            await context.PostAsync(reply2);
            //wait for more messages to be sent here
            context.Wait(MessageReceivedAsync);
        }
    }
}
命名空间Azure\u Bot\u Generic\u CSharp
{
使用制度;
使用系统诊断;
使用System.Threading.Tasks;
使用Microsoft.Bot.Connector;
使用Microsoft.Bot.Builder.Dialogs;
使用模型;
[可序列化]
公共类ShareButtonDialog:IDialog
{
公共异步任务StartAsync(IDialogContext上下文)
{
context.Wait(this.MessageReceivedAsync);
}
公共异步任务消息ReceivedAsync(IDialogContext上下文,IAwaitable参数)
{
var message=等待参数;
//创建回复消息
var reply=context.MakeMessage();
//创建一个频道数据对象作为facebook共享按钮
reply.ChannelData=new FacebookChannelData()
{
附件=新的FacebookAttachment()
{
有效负载=新FacebookGenericTemplate()
{
元素=新对象[]
{
新建FacebookGenericTemplateContent()
{
按钮=新[]
{
新FacebookShareButton()
}
}
}
}
}
};
//发送消息
等待上下文。PostAsync(回复);
var reply2=context.MakeMessage();
reply2.Text=“这是在共享按钮模板之后的消息。”;
wait context.PostAsync(reply2);
//在此处等待发送更多消息
Wait(MessageReceivedAsync);
}
}
}
这将产生所需的输出:


请注意,如果您计划使用该项目,您需要在Web.config文件中填写您自己的机器人应用程序ID和密码。

所有这些来源我都知道,因此是一般性的。为了改进您的响应,请提供一个链接,该链接使用C#中的ChannelData实现共享按钮。我不记得有一个示例在C#中实现了Share按钮,但只要从链接中的node.js示例中获取代码并将其移植到C#就可以了。。。我目前没有bandwith为您编写代码;但我提供的信息应该是非常严格的事实上,这在实践中并不简单!当您实现这个示例时,它将非常有用,并且可能会发现它并不简单!为什么,;这不简单吗?你在讨论什么问题?在我链接的ChannelData示例中,我们使用的是AirlineCheckIn facebook本机功能。在使用频道数据时,我在设置共享按钮时遇到了一些错误,我认为此错误可能来自botframework,但不确定(可能在不久的将来报告,我会确定)。无论如何,简单的例子会很有帮助!如果我想分享一条纯文本信息而不是一张卡片,有什么想法可以添加这个吗?