私はthe Facebook-Messenger gemを使用してチャットボットを作成して、青からメッセージを自分のサブスクライバに送信できます。Rails:Facebookメッセンジャーのチャットを追跡するショートカットchatbotがあまりにも多くのクリックを保存しています
the generic modelというURLボタンをクリックするたびに私のレールデータベースに保存したいと思います。そのために、データを保存した後に最終的な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
加入者のブラウザをリンクプレビューを読み込もうとしていますか? –
しかし、Facebookの一般的なモデルを使用しているので、プレビューを生成する通常のリンクではなく、そうではありません。 – AlphaNico
もしそうなら、200人の受信者がいるので200人のクリックを保存し、その半分だけでなく200人のクリックを保存する必要がありますか? – AlphaNico