Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Facebook 你知道如何从与会者和机器人之间的对话中获取此id吗?_Facebook_Facebook Graph Api_Botframework_Facebook Messenger Bot - Fatal编程技术网

Facebook 你知道如何从与会者和机器人之间的对话中获取此id吗?

Facebook 你知道如何从与会者和机器人之间的对话中获取此id吗?,facebook,facebook-graph-api,botframework,facebook-messenger-bot,Facebook,Facebook Graph Api,Botframework,Facebook Messenger Bot,上下文: BotFramework(C#SDK)+Messenger频道,bot处理两种类型的用户:与会者(Messenger用户)和组织者(Facebook页面的管理员) 用例: 当与会者请求人工支持(使用我的机器人菜单中的选项)时,组织者将收到一条消息 在该消息中,我想添加一个按钮,该按钮在组织者单击后将执行以下操作: 停止bot对该用户的自动回复 将组织者重定向到Facebook的页面收件箱,并选择对话(在与会者和机器人之间) 我所做的: 我成功地完成了停止自动回复的部分 我被困在如何将

上下文:

BotFramework(C#SDK)+Messenger频道,bot处理两种类型的用户:与会者(Messenger用户)和组织者(Facebook页面的管理员)

用例:

当与会者请求人工支持(使用我的机器人菜单中的选项)时,组织者将收到一条消息

在该消息中,我想添加一个按钮,该按钮在组织者单击后将执行以下操作:

  • 停止bot对该用户的自动回复
  • 将组织者重定向到Facebook的页面收件箱,并选择对话(在与会者和机器人之间)
  • 我所做的:

    • 我成功地完成了停止自动回复的部分

    • 我被困在如何将组织者重定向到FB页面收件箱中的正确对话

    技术上:

    当我在Facebook页面中查看时,我应该为我的操作生成的链接如下:
    https://www.facebook.com/mypage-mypageId/inbox/?selected_item_id=someId


    我的问题是,我无法从我的机器人的对话中找到所选项目id的此值。

    由于facebook Graph API,您将能够获得指向facebook页面收件箱的链接(使用正确的线程)

    必须调用
    /me/conversations
    ,才能获取页面的对话(因此您必须向API调用提供页面的访问令牌)

    然后在这些结果中,你必须与与会者的对话相匹配。要做到这一点,您可以在bot(Activity.id,而不是Activity.Conversation.id!)中使用活动的属性
    id
    ,因为这个值在您的bot和facebook图形结果之间很常见(只需添加“m_”)即可匹配:您可以在图形API结果的一条
    message.id
    中找到它(注意:不是Conversation.id)

    然后,您可以获得您在我的测试中找到的此对话的图形API结果的
    链接值:
    “链接”:“\/myBotName\/manager\/messages\/?threadid=10154736814928655&folder=inbox”

    下面是一个对话框示例,该对话框将搜索特定邮件id的链接:

    [Serializable]
    public class FacebookGetLinkTestDialog : IDialog<string>
    {
        public async Task StartAsync(IDialogContext context)
        {
            context.Wait(MessageReceivedAsync);
        }
    
        public async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument)
        {
            var jsonString = "";
            var link = "";
    
            using (var client = new HttpClient())
            {
                using (var response = await client.GetAsync($"https://graph.facebook.com/v2.9/me/conversations?access_token=yourAccessTokenHere").ConfigureAwait(false))
                {
                    jsonString = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
                    var conversationList = Newtonsoft.Json.JsonConvert.DeserializeObject<ConversationsRootObject>(jsonString);
                    link = conversationList.data.Single(c => c.messages.data.Any(d => d.id.Equals("m_" + "yourActivityIdHere"))).link;
                }
            }
            await context.PostAsync($"{link}");
        }
    }
    
    public class ConversationsRootObject
    {
        public List<Conversation> data { get; set; }
        public Paging paging { get; set; }
    }
    
    public class Conversation
    {
        public string id { get; set; }
        public string snippet { get; set; }
        public string updated_time { get; set; }
        public int message_count { get; set; }
        public int unread_count { get; set; }
        public Participants participants { get; set; }
        public FormerParticipants former_participants { get; set; }
        public Senders senders { get; set; }
        public Messages messages { get; set; }
        public bool can_reply { get; set; }
        public bool is_subscribed { get; set; }
        public string link { get; set; }
    }
    
    public class Participant
    {
        public string name { get; set; }
        public string email { get; set; }
        public string id { get; set; }
    }
    
    public class Participants
    {
        public List<Participant> data { get; set; }
    }
    
    public class FormerParticipants
    {
        public List<object> data { get; set; }
    }
    
    public class Senders
    {
        public List<Participant> data { get; set; }
    }
    
    public class Messages
    {
        public List<FbMessage> data { get; set; }
        public Paging paging { get; set; }
    }
    
    public class FbMessage
    {
        public string id { get; set; }
        public string created_time { get; set; }
    }
    
    public class Cursors
    {
        public string before { get; set; }
        public string after { get; set; }
    }
    
    public class Paging
    {
        public Cursors cursors { get; set; }
        public string next { get; set; }
    }
    
    [可序列化]
    公共类FacebookGetLinkTestDialog:IDialog
    {
    公共异步任务StartAsync(IDialogContext上下文)
    {
    Wait(MessageReceivedAsync);
    }
    公共异步任务消息ReceivedAsync(IDialogContext上下文,IAwaitable参数)
    {
    var jsonString=“”;
    var link=“”;
    使用(var client=new HttpClient())
    {
    使用(var response=await client.GetAsync($)https://graph.facebook.com/v2.9/me/conversations?access_token=yourAccessTokenHere“”。配置等待(错误))
    {
    jsonString=await response.Content.ReadAsStringAsync().ConfigureAwait(false);
    var conversationList=Newtonsoft.Json.JsonConvert.DeserializeObject(jsonString);
    link=conversationList.data.Single(c=>c.messages.data.Any(d=>d.id.Equals(“m_”+“yourActivityIdHere”))).link;
    }
    }
    wait context.PostAsync($“{link}”);
    }
    }
    公共类会话对象
    {
    公共列表数据{get;set;}
    公共分页{get;set;}
    }
    公开课对话
    {
    公共字符串id{get;set;}
    公共字符串片段{get;set;}
    公共字符串已更新_time{get;set;}
    公共int消息计数{get;set;}
    公共int未读计数{get;set;}
    公共参与者参与者{get;set;}
    公共前参与者前参与者{get;set;}
    公共发件人发件人{get;set;}
    公共消息{get;set;}
    公共bool可以回复{get;set;}
    公共bool是{get;set;}
    公共字符串链接{get;set;}
    }
    公开课参与者
    {
    公共字符串名称{get;set;}
    公共字符串电子邮件{get;set;}
    公共字符串id{get;set;}
    }
    公开课参与者
    {
    公共列表数据{get;set;}
    }
    公开课参与者
    {
    公共列表数据{get;set;}
    }
    公共类发送者
    {
    公共列表数据{get;set;}
    }
    公共类消息
    {
    公共列表数据{get;set;}
    公共分页{get;set;}
    }
    公共类消息
    {
    公共字符串id{get;set;}
    创建的公共字符串\u time{get;set;}
    }
    公共类游标
    {
    {get;set;}之前的公共字符串
    {get;set;}之后的公共字符串
    }
    公共类分页
    {
    公共游标游标{get;set;}
    公共字符串next{get;set;}
    }
    
    您在代码中向代理发送消息的位置?“所选项目id”的确切含义是什么?您会问:“如何从最初的对话中获取select_item_id”“但我没有上下文来理解所选项目的id实际上是什么。请解释。我编辑了我的问题。希望现在更清楚:)我应该在ID之间使用一些转换吗?因为他们不一样。我从graph收到的id如下所示:
    t_mid.someNumber:9b0f112e52
    activity的id(activity.id):
    mid.$cAAP8wkY2a91i10BEQ1cpfr5erOvg
    您没有在graph API的正确字段中查找。您提供的值是图形
    对话
    (顶层)的
    id
    ,这里我们尝试使用
    消息
    (底层)的
    id
    ,顺便说一句:这也适用于context.Activity.id。v3.8在哪里可以找到bot的活动(或activity.id)?我没有使用BotFramework/me/conversations,它现在已被弃用,并且使用v2.5+facebook API的应用程序无法调用它。