2

ユーザーの名前でJAXLを使用してダイレクトメッセージを送信しようとしています(xmpp_loginで認証されたアプリケーション)。jaxl facebookチャットの例では、メッセージエコー構造が存在しますが、それでも受信したXMPPStanzaを送信者にリダイレクトします。しかし、送信するXMPPStanzaを生成しようとしても、

$client->send($stanza);

これが私のXMPPStanza初期化コードです

$stanza = new XMPPMsg(null);
$stanza->from = $client->full_jid->to_string();
$stanza->to = 'example-facebook-id@chat.facebook.com';
$stanza->type = 'chat';
$stanza->body = 'test message';
$client->send($stanza);

要約すると、JAXLを介してクライアントの名前でサーバーからメッセージを送信するにはどうすればよいですか?

編集

JAXL v3を使用していることを忘れてしまい、完全なコードとシステム構成を追加することを検討した方が便利です。

<?php

define('FACEBOOKBOT_PHP', TRUE);


// Include XMPP Engine 'JAXL'
// Path might be alter in time.
// require_once ROOT_DIR.'/JAXL/jaxl.php';
require_once '/var/www/JAXL/jaxl.php';
require_once '/var/www/JAXL/xmpp/xmpp_msg.php';


function sendMessage($client)
{

    //  // $stanza = new XMPPMsg(null);
//  // $stanza->from    = $client->full_jid->to_string();
//  // $stanza->to      = $to;
//  // $stanza->type    = 'chat';
//  // $stanza->body    = 'test message 1';

//  // foreach ($stanza->childrens as $value)
//  // {
//  //  $value->ns = 'jabber:client';
//  // }

//  // $client->send($stanza);

    $msg = new XMPPMsg(array('to'=>'example-user-id-and-it-got-to-work-i-checked-on-below-echo-stanza@chat.facebook.com'), 'test message');
    $client->send($msg);

    _info("test messages sent");
}


$user = 'gokhanbarisaker'; // my user id (www.facebook.com/gokhanbarisaker)
// $user = $argv[1];    // User name or facebook id
$jidSuffix = '@chat.facebook.com';  // Facebook chat account suffix
$appKey = 'example-app-key';    // Taken from developer.facebook.com
// $appKey = $argv[2];  // Facebook app token
$accessToken = 'example-access-token';  // Facebook user token - tried both app token tool on developer.facebook.com and token provided after user login both posses xmpp-login permission
// $accessToken = $argv[3];

$client = new JAXL( array(  // (required) credentials
                            'jid' => $user.$jidSuffix,
                            'fb_app_key' => $appKey,
                            'fb_access_token' => $accessToken,

                            // force tls (facebook require this now)
                            'force_tls' => true,
                            // (required) force facebook oauth
                            'auth_type' => 'X-FACEBOOK-PLATFORM',

                            // (optional)
                            //'resource' => 'resource',

                            'log_level' => JAXL_INFO,
                            'priv_dir'  => '.'
                        ));

$client->add_cb('on_auth_success', function()
{
    global $client;
    _info("got on_auth_success cb, jid ".$client->full_jid->to_string());
    $client->set_status("available!", "dnd", 10);

    // Here is the part where i tried to send message. In addition, i tried to call this function wherever i can on the code.
    sendMessage($client);
});

$client->add_cb('on_auth_failure', function($reason)
{
    global $client;
    $client->send_end_stream();
    _info("got on_auth_failure cb with reason $reason");

});

$client->add_cb('on_chat_message', function($stanza)
{
    global $client;

    // echo back incoming message stanza
    $stanza->to = $stanza->from;
    $stanza->from = $client->full_jid->to_string();
    $client->send($stanza);

    _info("echo message sent");

    sendMessage($client);
});

$client->add_cb('on_disconnect', function()
{
    _info("got on_disconnect cb");
});

$client->start();

echo "done\n";

?>

システム構成:

  • Ubuntu 12.04.01 LTS
  • Apache 2.2.22
  • PHP 5.3.10

実行するターミナルコマンド。

  • > php facebookbot.php
4

2 に答える 2

1

これをデバッグするのに役立つかどうかを試して確認する必要があるいくつかのこと:

  1. ログを設定'log_level' => JAXL_DEBUG,して確認し、Jaxl が facebook に正確に何を送信するかを確認します。可能であれば、ここで何が本当に間違っているのかを確認できるように、送信スタンザで質問を更新してください。
  2. Facebook ID を使用してメッセージを送信する場合は、 message を送信する必要があることを忘れないでください'to'=>'-4@chat.facebook.com'マイナス記号に注意してください。
  3. Facebook は、ネットワーク内のスパマーを非常に巧妙に捕らえています。短時間に同様のメッセージをあまりにも多く送信しようとすると、Facebook サーバーはボットに適切なエラーを返します (チャット アカウントを一時的に無効にすることもできます)。ログをチェックして、Facebook サーバーからこのようなエラー応答が返されているかどうかを確認してください。
于 2013-01-20T15:27:18.570 に答える
1

試す:

$msg = new XMPPMsg(array('to'=>'example-facebook-id@chat.facebook.com'), 'test message');
$client->send($msg);
于 2013-01-18T06:06:19.027 に答える