90

I need to get via Facebook connect user's info and send a private message to all of his friends. Is it possible?

Somnath Muluk
  • 55,015
  • 38
  • 216
  • 226
yspro
  • 1,658
  • 1
  • 17
  • 21
  • 1
    I realize this doesn't solve the OP's question, but those looking for a way to reply to private messages might find this useful: http://stackoverflow.com/questions/9598369/facebook-api-support-for-user-page-private-messages – Trevor Oct 02 '13 at 20:39

9 Answers9

74

Sending private message through api is now possible.

Fire this event for sending message(initialization of facebook object should be done before).

to:user id of facebook

function facebook_send_message(to) {
    FB.ui({
        app_id:'xxxxxxxx',
        method: 'send',
        name: "sdfds jj jjjsdj j j ",
        link: 'https://apps.facebook.com/xxxxxxxaxsa',
        to:to,
        description:'sdf sdf sfddsfdd s d  fsf s '

    });
}

Properties

  • app_id
    Your application's identifier. Required, but automatically specified by most SDKs.

  • redirect_uri
    The URL to redirect to after the user clicks the Send or Cancel buttons on the dialog. Required, but automatically specified by most SDKs.

  • display
    The display mode in which to render the dialog. This is automatically specified by most SDKs.

  • to
    A user ID or username to which to send the message. Once the dialog comes up, the user can specify additional users, Facebook groups, and email addresses to which to send the message. Sending content to a Facebook group will post it to the group's wall.

  • link
    (required) The link to send in the message.

  • picture
    By default a picture will be taken from the link specified. The URL of a picture to include in the message. The picture will be shown next to the link.

  • name By default a title will be taken from the link specified. The name of the link, i.e. the text to display that the user will click on.

  • description
    By default a description will be taken from the link specified. Descriptive text to show below the link.

See more here

@VishwaKumar:

For sending message with custom text, you have to add 'message' parameter to FB.ui, but I think this feature is deprecated. You can't pre-fill the message anymore. Though try once.

FB.ui({
  method: 'send',
  to: '1234',
  message: 'A request especially for one person.',
  data: 'tracking information for the user'
});

See this link: http://fbdevwiki.com/wiki/FB.ui

sakibmoon
  • 2,026
  • 3
  • 22
  • 32
Somnath Muluk
  • 55,015
  • 38
  • 216
  • 226
  • 3
    This solution has been there a while. It does not completely solve the problem as you have to use Facebook's popup and can only populate a single person (at this point, track bug [here](http://developers.facebook.com/bugs/314701778595814)). A full solution allows you to use the standard API to send a message however you want, though it seems that Facebook may have taken this away for good. – Scott May 04 '12 at 13:18
  • 2
    @Somnath, thanks for posting the solution! Do you know if there is a way to bypass the write message window and just send the message directly? – CyberJunkie May 12 '12 at 00:58
  • 2
    @CyberJunkie: I think facebook doesn't provide such bypassing functionality. User have to click send msg button. Other wise your inbox will be full of advertisements. – Somnath Muluk May 14 '12 at 04:57
  • @Somnath: I tried your solution and it works, But is there a way to populate the Message in the popup with custom messages? – VishwaKumar Aug 22 '12 at 09:53
  • @VishwaKumar: Do you mean message box should be filled with custom message when it is opened? – Somnath Muluk Aug 22 '12 at 12:26
  • I managed to get it to send to more than one person! You can make the value for 'to' a JSON array. I put an example up here: http://fbdevwiki.com/wiki/FB.ui#method:_.27send.27 – Tim Tisdall Sep 16 '12 at 18:13
  • Does anyone know if this works consistently for every facebook user ? I have a website where people can log in with their fb accounts. UserA is not a friend of userB. userA sends a message to userB. sometimes it works, sometimes the link gets stripped. sometimes it doesn't work... doesn't seem consistent :/ – Wayfarer Jan 25 '13 at 15:40
  • @SomnathMuluk have an objective-c answer for this? – Kyle Clegg Apr 04 '13 at 23:45
  • @Kyle: sorry, I don't know objective-C. You can ask one linked question to this or raise bounty for same question. You might get good answers. – Somnath Muluk Apr 05 '13 at 11:48
  • @SomnathMuluk do you know if i need special permission for app for this? does user need to install it? – confiq Apr 29 '13 at 08:55
  • @confiq: I think there is no any requirement for any permissions... Just you need to have FB.init initialised for Javascript. – Somnath Muluk May 03 '13 at 09:31
  • hello somnath, as my requirement is to send the message by custom, I've created some custom functionality to get the list of friends & message,later I called u r function, but I was failed to send the message to the selected users..can u help me – kumar May 09 '13 at 14:26
  • @Nagendra: what did happened? Any error? For sending message with custom text, you have to add 'message' parameter to FB.ui, but I think this feature is Deprecated. :( You can't pre-fill the message anymore. – Somnath Muluk May 10 '13 at 11:08
  • @SomnathMuluk: I've added, but not displaying the message in the users message inbox, u can see here http://stackoverflow.com/questions/16465119/send-message-to-selected-friends-in-facebook – kumar May 10 '13 at 12:29
  • @SomnathMuluk: It looks like you can't even set a "Name" or "Description" text anymore either. It gets pulled from the website automatically :( – skaz Jul 30 '13 at 14:46
9

You can use Facebook Chat API to send private messages, here is an example in Ruby using xmpp4r_facebook gem:

sender_chat_id = "-#{sender_uid}@chat.facebook.com"
receiver_chat_id = "-#{receiver_uid}@chat.facebook.com"
message_body = "message body"
message_subject = "message subject"

jabber_message = Jabber::Message.new(receiver_chat_id, message_body)
jabber_message.subject = message_subject

client = Jabber::Client.new(Jabber::JID.new(sender_chat_id))
client.connect
client.auth_sasl(Jabber::SASL::XFacebookPlatform.new(client,
   ENV.fetch('FACEBOOK_APP_ID'), facebook_auth.token,
   ENV.fetch('FACEBOOK_APP_SECRET')), nil)
client.send(jabber_message)
client.close
sakibmoon
  • 2,026
  • 3
  • 22
  • 32
Dalibor Nasevic
  • 331
  • 3
  • 6
9

No, this isn't possible. In order for you to send messages of any kind to a Facebook user, you need that user's permission to do so.

If someone logs into your site with Facebook Connect, they are explicitly agreeing to share their Facebook data with your site, and you will then be able to send that person a message through the normal channels. You would also be able to fetch their friend list. However, you can not send messages to the friends.

zombat
  • 92,731
  • 24
  • 156
  • 164
9

This is not possible now, but there is a work around. You can engage with the user in the public realm and ask them to send you private messages, but you can't send private messages back, only public ones. Of course, this all depends on if the user gives you the correct permissions.

If you have given permission to access a person's friends, you can then theoretically post on that users wall with references to each one of the friends, asking them to publicly interact with you and then potentially privately message you.

Get Friends

#if authenticated
https://graph.facebook.com/me/friends
http://developers.facebook.com/docs/reference/api/user/

Post in the Public Domain

http://developers.facebook.com/docs/reference/api/status/

Get Messages sent to that user (if given permission)

http://developers.facebook.com/docs/reference/api/message/
JiminyCricket
  • 7,050
  • 7
  • 42
  • 59
7

One workaround, though not a great one, is to use the new @facebook.com email address. There are a few downsides to this:

1) Not everyone (as of this posting) has the new messages application enabled in their account.

2) Not everyone will have setup their @facebook.com email in their messages app.

3) Not everyone will choose their username (if they even have a facebook username) as their email address.

Scott
  • 16,711
  • 14
  • 75
  • 120
6

You cannot. Facebook API has read_mailbox but no write_mailbox extended permission. I'm guessing this is done to prevent spammy apps from flooding friend's inboxes.

Anurag
  • 176
  • 1
  • 5
2

For mobile application i did a solution by injecting javascript in the dialog view. There is a hidden web view in my ios app. That load the fb message send dialog api .. then i inject some javascript to set the "to" and "message" field and submit the form.. So that end user need not to do anything. Message sent to facebook inbox silently...

apueee
  • 116
  • 2
  • 11
1

This thread says you can't do send private messages to a group of friends on facebook but I found this https://developers.facebook.com/docs/sharing/reference/send-dialog

Josh Pittman
  • 7,024
  • 7
  • 38
  • 66
0

There isn't any graph api for this, you need to use facebook xmpp chat api to send the message, good news is: I have made a php class which is too easy to use,call a function and message will be sent, its open source, check it out: facebook message api php the description says its a closed source but the it was made open source later, see the first comment, you can clone from github. It's a open source now.