【问题标题】:Telegram bot keybord send via JSON电报机器人键盘通过 JSON 发送
【发布时间】:2016-10-22 12:13:21
【问题描述】:

我正在使用 MS Bot 框架。我想向用户发送自定义键盘,所以我尝试用这个 JSON 回复消息:

        public async Task<Message> Post([FromBody]Message message)
    {

        var connector = new ConnectorClient();

        if (message.Type == "Message")
        {             
            var replyMessage = message.CreateReplyMessage($"You sent message");

            replyMessage.ChannelData = @"

{ ""方法"": ""sendMessage"", ““参数””: { ""reply_markup"": { ""键盘"":[[[""1""],[""2""]],[[""3""]],[[""4""],[""5"" ],[""6""]]] }
} }";

            return replyMessage;



        }
        else
        {
            return HandleSystemMessage(message);
        }
    }

但是什么也没发生。例如,带有贴纸的这条消息可以正常工作:

replyMessage.ChannelData = @"
{
    ""method"": ""sendSticker"",
    ""parameters"":
    {
        ""sticker"":
        {
            ""url"": ""https://upload.wikimedia.org/wikipedia/commons/3/33/LittleCarron.gif"",
            ""mediaType"": ""image/gif""
        }
    }
}";

我认为问题出在“键盘”部分,在数组的某个地方。

【问题讨论】:

    标签: json telegram-bot botframework


    【解决方案1】:

    将另一个括号添加到您的keyboard。(另外一个数组),如下所示:

    ""keyboard"":[[[""1""],[""2""]],[[""3""]],[[""4""],[""5""],[""6""]]]
    

    知道彼此内部有三个数组,而不是两个代码。

    Documentation

    部分工作代码:

        $keyboard = [
        'keyboard' =>
            [[['text' => '1'], ['text' => '2']], [['text' => '3']], [['text' => '4'], ['text' => '5'], ['text' => '6']]],
        'one_time_keyboard' => true,
    ];
    $markup = json_encode($keyboard, true);
    $data = [
        'chat_id' => sender_user_id($update),
        'text' => 'JUST A TEXT',
        'reply_markup' => $markup];
    
    
    $ch = curl_init();
    $url = 'https://api.telegram.org/bot' . BOT_TOKEN . '/SendMessage';
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, ($data));
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $result = curl_exec($ch);
    curl_close($ch);
    

    【讨论】:

    • 不幸的是,仍然没有收到键盘。
    • 由于本文档的原因,linkchat_idtext 参数是必需的,如果您的第二个代码有效,因此您没有输入任何 text 参数并且它不能为空细绳!我还更新了我的答案,并用 php 添加了一个工作代码。
    • 您正在使用 Telegram,而不是通过 MS Bot 框架,只是使用 Telegram API。我尝试通过这个框架发送消息。当我执行“sendSticker”时它工作正常(这里也需要chat_id,但我没有设置它)。我认为,chat_id 和其他东西已经在“CreateReplyMessage”方法中设置了。
    • 我添加了无效方法的完整代码,但是代码高亮有问题。
    • 我知道,但是再看看我的嵌套括号。我打错了,现在我更正了。在每个数组中(打开右括号)必须只有一个键盘元素。并且电报机器人是非常新的并且没有完整的框架,所以在某些地方使用粗略的编码可能会更好。当然这只是我的意见,每个人都尽力而为。但是在这个问题中,如果您在每次发送消息后提供一些您从电报服务器收到的代码反馈,我们可以更快地找到问题。
    猜你喜欢
    • 2018-03-23
    • 2017-01-26
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    相关资源
    最近更新 更多