【问题标题】:Returning Telegram Users Messages From Bot And Answering To Them从 Bot 返回 Telegram 用户消息并回复他们
【发布时间】:2018-06-01 16:03:33
【问题描述】:

我的问题有点复杂,所以我宁愿在问主要问题之前先做一些解释。

我正在制作一个内容管理系统来管理我的 Telegram Bot 并通过它获取最新更新。

到目前为止,我所做的基本上是使用 Telegram Bot API 获取更新,并将它们显示在一个小聊天框中,如下所示:

例如,正如您在这张图片中看到的,一个名为 Pouya 的用户向我正在使用的 Bot 发送了一条消息。

现在为了回复和发送消息,我编码了这个:

if (session_status() == PHP_SESSION_NONE) {
    session_start();
    $_SESSION['messages'] = array();  
}
$request_params = array();
if (isset($_POST['send'])){
        $pm = $_POST['message'];
        array_push($_SESSION['messages'], $pm); 
        $request_params = [
                'chat_id' => $id,
                'text' => $_SESSION['messages']
        ];
        $request_url = 'https://api.telegram.org/bot' . $botToken . '/sendMessage?' . http_build_query($request_params);
        file_get_contents($request_url);
        print_r($request_params);
}

<div class="box-footer">
    <form action="" method="post">
        <div class="input-group">
        <input type="text" name="message" placeholder="Write your direct message" class="form-control">
        <span class="input-group-btn">
            <input name="send" type="submit" class="btn btn-danger btn-flat"/>
        </span>
        </div>
    </form>
</div>

如您所见,我已将$pm 保存到名为$_SESSION['messages'] 的会话中。所以通过这种方式,我可以在聊天框中再次调用它,并且不需要使用数据库等:

$num3 = count($request_params["text"]);
for($z=0;$z<$num3;$z++){
    echo '<div class="direct-chat-text">';
    echo $request_params["text"][$z];   
    echo '</div>';
}

所以一切看起来都很干净整洁,但是这段代码有两个问题:

1-回复消息没有发送到电报帐户

(但是如果我改变这个:

$request_params = [ 'chat_id' => $id, 'text' => $_SESSION['messages'] ];

到这里:

$request_params = [ 'chat_id' => $id, 'text' => $pm ];

它会正确发送消息)。

2- 第二个问题是提交表单后消息甚至没有显示在聊天框中。

我猜导致这些问题的主要原因是$_SESSION['messages'] 根本不包含任何值并且它是空的!

那么您对此有何想法...请分享您对此的建议。谢谢:)

更新 1

file_get_contents($request_url); 包含此作为示例:

https://api.telegram.org/bot423495534:asdsadsadsad/sendmessage?chat_id=108132368&text=hi

【问题讨论】:

  • file_get_contents($request_url) 中有什么内容?也许试试看一下?
  • @ThomasEdwards 请参阅问题末尾的 UPDATE 1。谢谢
  • 好的,那么那个 URL 的内容是什么?即$response = file_get_contents($request_url) - 打印出$response
  • @ThomasEdwards Nothing.. 这是 print_r($request_params): Array ( [chat_id] =&gt; 108132368 [text] =&gt; )
  • 其实问题是$_SESSION['messages']没有发送任何数据。

标签: php arrays session telegram-bot php-telegram-bot


【解决方案1】:

$_SESSION['messages'] 是一个数组,不会转换为字符串,可能会出错。

尝试使用implode implode(" ", $_SESSION['messages']) 在每条消息之间添加一个空格,或者您喜欢的任何内容。

$request_params = [
    'chat_id' => $id,
    'text' => implode(" ", $_SESSION['messages'])
];

【讨论】:

  • 如果你把print_r(implode(" ", $_SESSION['messages']))放在这些行周围,它会给你什么?
猜你喜欢
  • 2017-08-07
  • 2017-11-28
  • 2018-10-05
  • 2020-10-04
  • 2017-07-04
  • 2021-12-18
  • 2020-06-27
  • 2021-04-06
  • 1970-01-01
相关资源
最近更新 更多