3

@botfather でボットを作成しましたが、問題ありません。ここで、ホストからテレグラムにコマンドを設定したいと思います。ルート ディレクトリに Bot.phpを作成しました。

ボット.php

$string = json_decode(file_get_contents('php://input'));

    function objectToArray( $object )
    {
        if( !is_object( $object ) && !is_array( $object ) )
        {
            return $object;
        }
        if( is_object( $object ) )
        {
            $object = get_object_vars( $object );
        }
        return array_map( 'objectToArray', $object );
    }

    $result = objectToArray($string);
    $user_id = $result['message']['from']['id'];
    $text = $result['message']['text'];
    if($text == 'Hi')
    $text_reply = 'Hi';
if($text == 'Your name')
    $text_reply = 'jJoe';

    $token = '';
    $text_reply = 'Got you Buddy.';

    $url = 'https://api.telegram.org/bot'.tokenNumber.'/sendMessage?chat_id='.$user_id;
    $url .= '&text=' .$text_reply;


    $res = file_get_contents($url);  

今私がこれを閲覧すると:https://api.telegram.org/bot112186325:tokenNumber/setWebhook?url=https://partamsms.ir/bot.php

私はこれを得る:{"ok":true,"result":true,"description":"Webhook was set"}

しかし、テレグラム アカウントでこれらのコマンドを実行することはできません。

サーバーからコマンドを実行するにはどうすればよいですか?

どうもありがとう

4

1 に答える 1

6

あなたのコメントによると、ユーザーが入力したメッセージに基づいて異なる応答をするものが必要です。したがって、サンプルコードを使用して、次のように変更できます。

// NOTE: you can pass 'true' as the second argument to decode as array
$result= json_decode(file_get_contents('php://input'), true);
error_log(print_r($result, 1), 3, '/path/to/logfile.log');

$user_id = $result['message']['from']['id'];
$text = $result['message']['text'];

// TODO: use something like strpos() or strcmp() for more flexibility
switch (true)
{
    case $text == '/hi':
        $text_reply = 'Hello';
        break;

    case $text == '/yourname':
        // TODO: use the getMe API call to get the bot information
        $text_reply = 'jJoe';
        break;

    default:
        $text_reply = 'not sure what you want?';
        break;
}

$token = '';
$url = 'https://api.telegram.org/bot'.tokenNumber.'/sendMessage?chat_id='.$user_id;
$url .= '&text=' .$text_reply;
$res = file_get_contents($url);  

つまり、これはすでに持っていたもののかなりのわずかなリファクタリングです... 問題がBot.phpスクリプトがトリガーされないことである場合、ページが公開されていないことが原因である可能性があります。Telegram に指定する Webhook は、公開されている URL である必要があります。https://partamsms.ir/bot.phpにアクセスしようとしましたが、アクセスできません。

別の方法は、代わりにメソッドを使用しgetUpdates、スクリプトを cron して 5 秒ごとに実行することです。

于 2015-07-23T10:47:25.210 に答える