【发布时间】:2017-08-01 01:03:01
【问题描述】:
我使用the Facebook-Messenger gem 来创建一个聊天机器人,让我可以突然向我的订阅者发送消息。
每次点击the generic model 的url 按钮时,我都想保存在我的rails 数据库中。为此,我创建了一个指向 shorturl 控制器的特殊 url,该控制器在保存数据后重定向到最终 url。
worker 中的发送请求:
def perform(sender, title, image_url, subtitle, cta_url, cta_text, access_token, letter_id)
Bot.deliver({
recipient: {
id: sender
},
message: {
"metadata": letter_id,
"attachment":{
"type": "template",
"payload":{
"template_type": "generic",
"elements":[
{
"title": title,
"image_url": image_url.html_safe,
"subtitle": subtitle,
"default_action": {
"type": "web_url",
"url": cta_url.html_safe
},
"buttons": [
{
"type": "web_url",
"url": cta_url.html_safe,
"title": cta_text
},
{
"type": "element_share"
}
]
}
]
}
}
}
}, access_token: access_token)
end
短网址控制器:
class ShorturlController < ApplicationController
def show
@shorturl = ShortUrl.find_by_token(params[:id])
@card = Card.find(@shorturl.card_id)
@subscriber = BotUser.find_by_sender_id(params['u'])
analytic_clic.increment!(:click_count, by = 1)
@final_url = @card.cta_button_url
redirect_to @final_url, :status => 301
end
private
def analytic_clic
@analytic_clic ||= AnalyticClic.find_or_create_by(
card_id: @card.id,
short_url_id: @shorturl.id,
bot_user_id: @subscriber.id
)
end
end
与shorturl控制器关联的路由:
get 's/:id' => "shorturl#show"
不幸的是,当我在生产中将消息发送给大约 200 个订阅者时,它立即节省了大约 100 次点击。我不知道为什么,因为 Facebook 不会通过发送 http 请求来“测试”网址。日志很好,我对 shorturl 有很多获取请求,但在此之前没有错误。
知道为什么即使订阅者还没有点击链接,它也会对我的短网址执行所有这些获取请求吗?
这是我创建的短网址示例:https://www.botletter.com/s/qsKcsm7NCRp4qkRGUqfPx7Sp?u=1451521288246029
【问题讨论】:
-
订阅者的浏览器正在尝试加载链接预览,我猜?
-
但应该不是这样,因为我使用的是 Facebook 的通用模型,而不是生成预览的普通链接,不是吗?
-
如果是这样的话,它应该节省 200 次点击,而不仅仅是一半,因为有 200 个收件人?
-
可能另一半没有打开浏览器?
-
好点!我怎么能防止这种情况?我想在收件人实际点击 url 按钮时保存点击,而不是在他的浏览器加载通用模板时保存点击...
标签: ruby-on-rails facebook-messenger facebook-messenger-bot