0

我使用the Facebook-Messenger gem爲了創建聊天機器人,允許我發送消息從藍色發送給我的訂閱者。Rails:Shorturl追蹤Facebook Messenger chatbot的點擊次數節省太多點擊

我想保存在我的rails數據庫中,每次點擊the generic model的url按鈕。爲此,我創建了一個指向shorturl控制器的特殊url,該控件在保存數據後重定向到最終的url。

在輔助發送請求:

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 

的SHORTURL控制器:

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請求來「測試」url。日誌很好,我有很多請求短命,但在此之前沒有錯誤。

任何想法爲什麼它執行所有這些獲取請求,我的短褲,即使訂閱者還沒有點擊鏈接呢?

這裏是一個SHORTURL我創建了一個例子:https://www.botletter.com/s/qsKcsm7NCRp4qkRGUqfPx7Sp?u=1451521288246029

+0

用戶的瀏覽器正試圖加載鏈接預覽,我猜? –

+0

但是它不應該是這種情況,因爲我使用Facebook的通用模型,而不是正常的鏈接生成預覽,不是? – AlphaNico

+0

如果是這樣的話,它應該可以節省200次點擊,而不是隻有一半,因爲有200個收件人? – AlphaNico

回答

0

的問題是Facebook的履帶,我增加了以下條件,避免保存點擊時,Facebook正在訪問的網址:

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