【问题标题】:Rails: Shorturl to track clicks for Facebook Messenger chatbot is saving way too many clicksRails:跟踪 Facebook Messenger 聊天机器人点击次数的 Shorturl 节省了太多点击次数
【发布时间】: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


【解决方案1】:

问题是Facebook爬虫,我添加了以下条件以避免Facebook访问url时节省点击:

if request.user_agent == "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)"
      puts "Facebook crawl"
    else
      # save to db
    end

【讨论】:

    猜你喜欢
    • 2017-07-15
    • 2013-06-29
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多