如何区分“消息”更新和“回调查询”更新? (电报机器人 API)

Posted

技术标签:

【中文标题】如何区分“消息”更新和“回调查询”更新? (电报机器人 API)【英文标题】:How can I differentiate between a 'Message' update and a 'Callback Query' update? (Telegram Bot API) 【发布时间】:2017-01-08 22:00:43 【问题描述】:

对不起,如果我的问题太混乱了,我是新来的,所以,欢迎任何建议。

如何区分“消息”更新和“回调查询”更新? 我已经设法制作了一个内联键盘,但是当我使用它时,机器人只是挂起,他没有回复任何内容。我做了一些研究,发现了this question,它帮助我理解了问题,但没有太多。

我的机器人现在使用这样的东西:

// read incoming info and grab the chatID
$content = file_get_contents("php://input");
$update = json_decode($content, true);
$chatID = $update["message"]["chat"]["id"];

switch($update["message"]["text"])
    /* insert magic here */

因此,此代码可以处理消息,但不能处理 CallbackQueries。如果我想要处理它们,我可以使用这样的东西(基于另一个问题的答案):

$callback_query = $update["callback_query"]
/* same as above */

但是如何判断是消息还是回调查询呢?

【问题讨论】:

【参考方案1】:
if (($update['message']) != null) 

 else if ($update['callback_query'] != Null) 

根据电报文档:

在任何给定的参数中最多可以存在一个可选参数 更新。

所以你只需要检查其中哪一个不是 Null。

【讨论】:

【参考方案2】:

您可以简单地检查 CallbackQuery 是否为空。 请参阅 Telegram 文档:

CallbackQuery

此对象表示来自回调的传入回调查询 内联键盘中的按钮。如果发起查询的按钮 附加到机器人发送的消息中,字段消息将是 展示。如果按钮附加到通过机器人发送的消息(在 内联模式),字段 inline_message_id 将出现。正是一个 的字段 data 或 game_short_name 将出现。

【讨论】:

以上是关于如何区分“消息”更新和“回调查询”更新? (电报机器人 API)的主要内容,如果未能解决你的问题,请参考以下文章

如何强制电报更新链接预览?

C ++电报Bot POST请求更新,没有结果

如何区分转换中的插入和更新

如何使用电报机器人 api 在群聊中接收消息

电报机器人可以读取频道消息吗

如何在电报中使用降价?我想发送带有超链接的消息