2016-04-15 7 views
0

Neu bei Rails.Facebook Messenger - Knoten zu Ruby on Rails - Beispiel

On Erste für Facebook Messenger gestartet ein einfaches Skript in Knoten besteht, die verwendet werden können Nachricht von Ihrem App Messenger zu senden. Kann jemand helfen, wie wir es in Ruby on Rails implementieren können?

Ich möchte eine Methode in meinem Controller erstellen, um die Nachricht zu senden. Unten ist der Code von Facebook, ich bin nicht sicher, wie man das gleiche in Rails implementiert.

var token = "<page_access_token>"; 

function sendTextMessage(sender, text) { 
    messageData = { 
    text:text 
    } 
    request({ 
    url: 'https://graph.facebook.com/v2.6/me/messages', 
    qs: {access_token:token}, 
    method: 'POST', 
    json: { 
     recipient: {id:sender}, 
     message: messageData, 
    } 
    }, function(error, response, body) { 
    if (error) { 
     console.log('Error sending message: ', error); 
    } else if (response.body.error) { 
     console.log('Error: ', response.body.error); 
    } 
    }); 
} 

Ersetzen Sie den Kommentar oben mit

sendTextMessage(sender, "Text received, echo: "+ text.substring(0, 200)); 

Hier ist mein Controller die Nachricht zu empfangen.

def apply_message 
     @message = params["entry"][0]["messaging"][0]["message"]["text"] 
     @sender_id = params["entry"][0]["messaging"][0]["sender"]["id"] 
     if User.where(:fb_id => @sender_id.to_s).present? #if sender exists 
     # Send him a message saying "Hello World" Just like below 
     else 
       uri = URI.parse("https://graph.facebook.com/v2.6/me/messages?access_token=tocken_goes_here") 
       http = Net::HTTP.new(uri.host, uri.port) 
       json_data={ 
        "recipient":{ 
         "id":"@sender_id" 
        }, 
        "message":{ 
         "text":"Do you have an account with us?" 
        } 
       } 
       http.use_ssl = true 
       http.verify_mode = OpenSSL::SSL::VERIFY_NONE 
       req = Net::HTTP::Post.new(uri.request_uri) 
       req.set_form_data(json_data) 
       response = http.request(req) 

     end 

    end 

Antwort

2

ein FB Modell erstellen:

class FacebookBot 

    def send_message(data) 
    url = URI.parse("https://graph.facebook.com/v2.6/me/messages?access_token=Token_here") 

    http = Net::HTTP.new(url.host, 443) 
    http.use_ssl = true 
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE #only for development. 
    begin 
     request = Net::HTTP::Post.new(url.request_uri) 
     request["Content-Type"] = "application/json" 
     request.body = data.to_json 
     response = http.request(request) 
     body = JSON(response.body) 
     return { ret: body["error"].nil?, body: body } 
    rescue => e 
     raise e 
    end 
    end 

    def send_text_message(sender, text) 
    data = { 
     recipient: { id: sender }, 
     message: { text: text } 
    } 
    send_message(data) 
    end 

    def send_generic_message(sender, mes) 
    data = { 
     recipient: { id: sender }, 
     message: mes 
    } 
    send_message(data) 
    end 
end 

und jetzt kann ich eine Nachricht mit dieser nur senden:

res = FacebookBot.new.send_text_message(sender, "Hi thanks for messaging") 

Genießen. :)