ユーザーの名前で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