Telegram бот keybord отправить через JSON

Я использую MS Bot Framework. Я хочу отправить пользовательскую клавиатуру пользователю, поэтому я пытаюсь ответить на сообщение с помощью этого 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 = @"

{"" method "": "" sendMessage "", "" parameters "": {"" 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""
        }
    }
}";

Я думаю, что проблема в части «клавиатуры», где-то в массиве.

Ответы на вопрос(1)

Добавьте еще одну скобку к вашемуkeyboard. (еще один массив), как это:

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

Знайте, что есть тройной массив внутри друг друга вместо двух вашего кода.

Документация

часть рабочего кода:

    $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);
 Denisov Jr.22 июн. 2016 г., 06:11
К сожалению, до сих пор не получена клавиатура.
 Denisov Jr.24 июн. 2016 г., 06:16
Спасибо. Я отправляю клавиатуру, как вы предложили: "" клавиатура "": [[["" 1 ""], ["" 2 ""]], [["" 3 ""]], [["" 4 ""] , [ "" 5 ""], [ "" 6 ""]]]. И я добавил в свое сообщение текст ChannelData.ToString (). Итак, я вижу Json, который я отправляю Telegram: {"method": "sendMessage", "parameters": {"reply_markup": {"клавиатура": [["1", "2"], ["3"] , ["4", "5", "6"]]}}} Похоже, что это правильно, но все равно безрезультатно.
 Denisov Jr.23 июн. 2016 г., 10:42
Можете ли вы рассказать мне немного больше о том, как это сделать?
 Denisov Jr.22 июн. 2016 г., 13:12
Я добавил полный код неработающего метода, но что-то не так с подсветкой кода.
 Seyfi23 июн. 2016 г., 10:17
Вы можете отправить Telegram ответ (отзыв) на свой chat_id
 Seyfi23 июн. 2016 г., 10:54
Вы можете отправить ответ (отзыв) в виде строки на ваш идентификатор, НО я рекомендую более лучший способ для вас. Размещайте свои коды локально и используйтеngrok программа как интерфейс.ngrok предоставить интерфейс https очень очень просто (так же просто, как нажатие кнопки), затем он дает вам онлайн-страницу и показывает все ответы от Telegram
 Seyfi24 июн. 2016 г., 10:01
Telegram должен отправить что-то вроде этого{"ok":true,"result":{.... Когда это говоритfalse вместо истины это означает, что Telegram не поймет этого, и вы должны это исправить. Вот мой код, полученный в Telegram:{"ok":true,"result":{"message_id":203,"from":{"id":YYYYYYYYY,"first_name":"My Bot Name","username":"myBot"},"chat":{"id":XXXXXXXXX,"first_name":"MyFirstName","last_name":"MyLastName","type":"private"},"date":1466745019,"text":"JUST A TEXT"}}   XXX и YYY - это числа.
 Denisov Jr.23 июн. 2016 г., 09:29
К сожалению, я не вижу обратной связи по коду с сервера Teletgram, потому что мой бот размещен в облаке Microsoft Azure, поэтому я не вижу ничего, что приходит.
 Denisov Jr.22 июн. 2016 г., 12:37
Вы работаете с Telegram не через MS Bot Framework, а просто используете Telegram API. Я пытаюсь отправить сообщение через эту структуру. И когда я выполняю «sendSticker», он работает нормально (chat_id также требуется здесь, но я не устанавливаю его). Я думаю, что chat_id и другие вещи уже установлены в методе «CreateReplyMessage».
 Seyfi22 июн. 2016 г., 10:02
благодаря этой документацииссылка на сайт, chat_id а такжеtext параметры обязательны, если ваш второй код работает, поэтому вы не ввелиtext параметр и он НЕ ДОЛЖЕН быть пустой строкой! Также я обновил свой ответ и добавляю рабочий код с php.
 Seyfi22 июн. 2016 г., 13:13
Я знаю, но посмотрите снова на мои скворечники. Я их опечатал, и теперь я их исправляю. В каждом массиве (открывающая закрывающая скобка) должен быть только один элемент клавиатуры. и telegram bot очень новый и не полный фреймворк, так что, возможно, в некоторых частях лучше использовать грубое кодирование. конечно, это только мое мнение, и все делают все возможное. но в этой проблеме мы можем найти проблему раньше, если вы дадите какой-нибудь код обратной связи, который вы получаете с сервера telegram после каждой отправки сообщения.

Ваш ответ на вопрос