0

J'utilise the Facebook-Messenger gem afin de créer un chatbot me permettant d'envoyer des messages à l'improviste à mes abonnés.Rails: Shorturl pour suivre les clics pour Facebook Messenger chatbot enregistre beaucoup trop de clics

Je veux enregistrer dans ma base de données de rails chaque clic sur le bouton d'URL de the generic model. Pour cela, je crée une URL spéciale qui redirige vers un contrôleur shorturl qui redirige vers l'URL finale après avoir sauvegardé les données.

La demande d'envoi dans un travailleur:

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 

Le contrôleur 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 

La route associée au contrôleur de SHORTURL:

get 's/:id' => "shorturl#show" 

Malheureusement, quand j'envoyer la message dans la production à environ 200 abonnés, il enregistre environ 100 clics immédiatement. Je ne sais pas pourquoi, puisque Facebook ne "teste" pas l'URL en envoyant une requête http. Les logs sont très bien, j'ai beaucoup de demandes get pour le shorturl mais pas d'erreurs avant ça.

Une idée de la raison pour laquelle ils effectuent tous ces requêtes get getur mon shorturl même si les abonnés n'ont pas encore cliqué sur le lien?

Voici un exemple d'un SHORTURL j'ai créé: https://www.botletter.com/s/qsKcsm7NCRp4qkRGUqfPx7Sp?u=1451521288246029

+0

navigateurs de l'abonné essayons de charger l'aperçu du lien, je suppose? –

+0

Mais ce ne devrait pas être le cas car j'utilise le modèle générique de Facebook, pas un lien normal générant un aperçu, non? – AlphaNico

+0

Et si c'était le cas, ça devrait sauver 200 clics et pas seulement la moitié puisqu'il y a 200 destinataires? – AlphaNico

Répondre

0

Le problème a été le robot Facebook, j'ai ajouté la condition suivante pour éviter les clics sauver quand Facebook est en visite l'url:

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