带有ChannelData空引用的BOT Framework 4新活动(&Facebook Messenger) [英] Bot Framework 4 new Activity with ChannelData null reference & Facebook Messenger

查看:18
本文介绍了带有ChannelData空引用的BOT Framework 4新活动(&Facebook Messenger)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我无法在Facebook Messenger中显示该问题的任何按钮或图像。这太让人沮丧了。似乎什么都不管用,说明书,样品等等。看起来太过时了。这是我的代码。在其他渠道,我正在使用SuggestedActions来实现这一点。我基本上是在问一个是或否的问题。

var attachment = new
                                {
                                    type = "template",
                                    payload = new
                                    {
                                        template_type = "button",
                                        text = "Please make a selection.",
                                        buttons = new object[]
                                        {                                                
                                            new
                                            {
                                                type = "postback",                                            
                                                title = "Yes",
                                                payload = "Yes",
                                            },
                                            new
                                            {
                                                type = "postback",
                                                title = "No",
                                                payload = "No",
                                            }
                                        },
                                    },
                                };


                                var reply = (turnContext.Activity as Activity).CreateReply();                                
                                reply.Type = ActivityTypes.Message;
                                reply.Text = "Does this work for you?";
                                reply.ChannelData = JObject.FromObject(new 
                                {
                                    notification_type = "REGULAR",
                                    attachment
                                });


await turnContext.SendActivityAsync(reply);

当我尝试使用ChannelData发送时,收到Null引用异常。这发生在OnMessageActivityAsync内部。这是.Net Core 3.1应用程序。

更新%1

我刚刚将所有包从v4.11.1更新到v4.14.1。我仍收到Null引用异常。

更新2

这样用Message属性包装代码后,我不再获得Null引用异常。

https://developers.facebook.com/docs/messenger-platform/reference/templates/button

var message = new
                                {
                                    attachment = new
                                    {
                                        type = "template",
                                        payload = new
                                        {
                                            template_type = "button",
                                            text = "Please make a selection.",
                                            buttons = new object[]
                                        {
                                            //new
                                            //{
                                            //    type = "web_url",
                                            //    url = "https://mybot.azurewebsites.net/",
                                            //    title = "Sign Up!"
                                            //},
                                            new
                                            {
                                                type = "postback",
                                                title = "Yes",
                                                payload = "Yes",
                                            },
                                            new
                                            {
                                                type = "postback",
                                                title = "No",
                                                payload = "No",
                                            }
                                        },
                                        },
                                    } 
                                };

任何帮助都不胜感激!谢谢!

推荐答案

以下是工作解决方案。有关说明,请参阅更新3。

var recipient = new
                                {
                                    id = turnContext.Activity.From.Id
                                };

var message = new
                                {
                                    attachment = new
                                    {
                                        type = "template",
                                        payload = new
                                        {
                                            template_type = "button",
                                            text = "Please make a selection.",
                                            buttons = new object[]
                                        {
                                            //new
                                            //{
                                            //    type = "web_url",
                                            //    url = "https://mybot.azurewebsites.net/",
                                            //    title = "Sign Up!"
                                            //},
                                            new
                                            {
                                                type = "postback",
                                                title = "Yes",
                                                payload = "Yes",
                                            },
                                            new
                                            {
                                                type = "postback",
                                                title = "No",
                                                payload = "No",
                                            }
                                        },
                                        },
                                    } 
                                };

var reply = (turnContext.Activity as Activity).CreateReply();
                                reply.Type = ActivityTypes.Message;
                                reply.Text = "Does this work for you?
                                reply.ChannelData = JObject.FromObject(new 
                                {
                                    recipient,
                                    message
                                });

await turnContext.SendActivityAsync(reply, cancellationToken);

希望这能帮助其他人!

这篇关于带有ChannelData空引用的BOT Framework 4新活动(&Facebook Messenger)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆