最近搞了一个可以自动聊天的工具,给别人扯蛋推广告的时候再也不尴尬了
,AI比我能扯。记录一些踩过的坑
前期准备
facebook开发者帐号
进入https://developers.facebook.com/apps/,创建应用,名字邮箱随便填
Use cases中选其他
建好之后需要在App settings -> Basic中,设置一个privacy policy URL,随便填一个就行,然后把App Mode改成Live
设置Messenger Webhook
在Set up app里选Messenger
设置一下webhook
上面填n8n workflow的地址,下面那个密码随便填,后续要验证一下
n8n的webhook节点要打开Allow Mutiple HTTP Methods,因为验证用的GET,发消息用的POST

然后打开n8n的Listen for test event,facebook这点一下Verify and save
没配置的话第一次肯定验证不通过,需要在n8n验证一下传过来的密码,然后response to webhook,把FB传过来的hub.challenge这个值用text展示出来,再次验证就可以通过了

通过之后刷新FB,刚刚webhook那里就有个绿色对勾
点后面箭头展开,打开messages和message_read权限
然后在第二步中链接自己的Page
完成之后会给个access_token,这个只显示一次,存起来备用
现在就可以给连上的主页发送一条消息试试。
主要内容是body这一段
其中,sender的id是发送者id,recipient的id是绑定的page id,message里的text是发送的内容
消息防抖
大多数人发消息都会一次只说一个短句,有时候为了表达清楚一件事会连续发多条消息。所以我们需要设置消息防抖(Message debouncing)收到用户连续多条消息并统一回复。具体设置如下:
解释一下其中内容:
1. 收到消息之后push到redis中
2. 针对这个用户设置一个防抖锁,过期时间根据需求,我这里设置了10秒,可以短一点
3. 等待11秒,反正超过刚刚的过期时间就行
4. 等待完成后检查一下防抖锁还在不在。如果还在就继续发“正在输入”的状态。这里推荐使用redis是因为存入redis的数据可以设置时间限制,超过时间就自动删了,要是用别的数据库也行,就是防抖这里逻辑要改改
5. 如果防抖锁不在了,就把用户的信息全取出来,合并一下,再把这段记录删了
AI回复
回复的逻辑就不赘述了,根据自己的业务需求写提示词就行,然后回复内容,也可以回复状态/表情 或者图片文件按钮什么的,具体看最后的FB文档,其中recipient_id就是上面那个sender的id,access_token就是一开始连接facebook page时记下来的token。
FB相关的API文档在这里:https://developers.facebook.com/docs/messenger-platform/send-messages
避坑指南
-
由于之前n8n设置了response to webhook,应该改回来,或者把response to webhook提前,否则FB会等前一条完成了再发送webhook,造成消息防抖失效
-
AI回复的提示词要让他把换行符号转义了,或者自己手动转义,否则JSON格式不正确会导致消息回复不成功
综合讨论
有问有答
供需合作







