如何使用Accessstoken通过Graph API向Facebook好友发送消息

41

有人能帮我使用Graph API向Facebook好友发送消息吗?

我尝试过:

$response = $facebook->call_api("/me/feed", "post", "to=john","message=You have a Test message");

它没有起作用。我手头有用户的访问令牌,但是我对发送过程感到困惑。


你有 John 的访问令牌吗?应用程序需要足够的权限才能在 John 的动态中发布任何内容。 - Ashish Rajan
1
我们能够通过JavaScript发送答案。请检查我的答案。 - Somnath Muluk
9个回答

51

你无法通过 Facebook 应用程序发送消息。虽然过去是可以的,但(可预见的?)大量滥用导致了这种能力的撤销。

假设 Alice 是您的用户,并且已经授予您必要的扩展权限,那么您有以下选项:

  • 代表 Alice 在她的墙上发布帖子
  • 向 Alice 发送电子邮件
  • 代表 Alice 创建活动
    • 邀请 Bob(非您的用户)参加该活动
  • 代表 Alice 向 Bob 发送请求/邀请
  • 应用程序向 Alice 发送请求

1
请注意,您无法从Alice向Bob发送电子邮件(Alice向Bob发送消息似乎是OP的目标)。 - Michael Mior
嗯... 一个人可以玩 to 字段 ;) 但是不行,所以它没有被列出来。 - Julio Santos
这是一个链接,说明你无法获取朋友的电子邮件地址:https://developers.facebook.com/docs/reference/login/email-permissions/ - John Erck
代表 Alice 向 Bob 发出请求/邀请,后端应该如何操作? - lephleg

29

您可以在弹出窗口中打开 发送对话框

 $parameters = array(
    'app_id' => $facebook->getAppId(),
    'to' => $facebookUserId,
    'link' => 'http://google.nl/',
    'redirect_uri' => 'http://my.app.url/callback'
 );
 $url = 'http://www.facebook.com/dialog/send?'.http_build_query($parameters);
 echo '<script type="text/javascript">window.open('.json_encode($url).', ...
详细选项请参见: https://developers.facebook.com/docs/reference/dialogs/send/

非常感谢,Bob。我正需要这个。这甚至可以帮助预填写消息字段,因此使用此对话框发送应用程序邀请链接非常容易。 - qasimzee
5
有没有办法绕过发送对话框弹窗,直接通过URL发送消息? - CyberJunkie
在“to”字段中,应用程序是否可以指定多个用户ID? - Rajat Gupta

5
$attachment =  array(

    'access_token' => $access_token,
    'message'      => $msg,
    'name'         => $name,
    'link'         => $link,
    'description'  => $desc,
);

facebook->api('/'.$uesr_id.'/feed', 'POST', $attachment);

3
这将在$user_id的墙上发布消息。 - Somnath Muluk
1
@SomnathMuluk 这个不再起作用了,因为它已经过时了! - lomse
@Lomse:是的...它在2013年2月就已经被废弃了。 - Somnath Muluk

4

技术上说,您可以使用隐私设置进行动态或交叉动态发布,只有动态所有者可以看到该动态,但这并不是向某个人发送消息。


2
You can use
HTTP POST with
PATH
https://graph.facebook.com/friend_facebook_id/feed
PARAMETER
MESSAGE = your message
ACCESS_TOKEN = your oauth2 access token

请提供文档链接。 - tusharmath

2

您可以发送电子邮件到他们的Facebook邮箱。Facebook邮箱由个人资料昵称+'@facebook.com'组成。该电子邮件将发送到他们的Facebook收件箱中。请注意,Facebook邮箱不接受欺骗性电子邮件。您需要白标域或使用SendGrid。


我知道这个问题有一段时间之前就被回答了。但是我该如何获得一个白标域名呢?你知道 Facebook 用哪些标准来确定欺骗行为吗? - Sajuna Fernando
这对我没用 :( 不幸的是,考虑到它有多容易 - user1349663
自去年2月起,Facebook已停止使用此功能,它将转发至您的真实电子邮件地址。http://www.forbes.com/sites/kashmirhill/2014/02/25/that-email-address-facebook-made-up-for-you-will-now-forward-to-your-real-email/ - sulaiman sudirman

2
您需要集成XMPP聊天以回复消息和编写新消息。

0
我看到这篇文章并注意到它不正确。使用Javascript API,您可以像下面这样发布到朋友的动态: 在这个例子中,“friendID”是朋友的Facebook用户ID。 此API调用需要“publish_stream”权限。
FB.api('/'+friendID+'/feed', 'post', 
            {
                method: 'feed',
                message: messageText,
                name: 'write a title here',
                caption: 'Put a caption here.',
                description: 'Put your description here.',
                link: 'https://dev59.com/B3A85IYBdhLWcg3wF_m0',
                picture: 'link to the preview thumbnail',                   
            },
             function(response) {
              if (!response || response.error) {
                //alert('Error occured');
              } else {
                //alert('Post ID: ' + response.id);
              }
        });

所以这就是使用JavaScript SDK完成的 - PHP方法应该是类似的。


0

不要使用下面的代码

    [facebook dialog:@"feed"
     andParams:params 
     andDelegate:self]; 

请使用以下解决方案。
[facebook requestWithGraphPath:@"me/feed"
   andParams:params
   andHttpMethod:@"POST"
   andDelegate:self];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接