Telegram bot API - Inline bot在尝试回答内联查询时收到错误400

时间:2016-01-05 18:29:53

标签: python python-requests telegram-bot

我在Python中使用new inline mode编译机器人时遇到问题。

机器人获取查询,在尝试回答时,会收到错误400

以下是机器人此时发送的数据示例:

{
    'inline_query_id': '287878416582808857',
    'results': [
        {
            'type': 'article', 
            'title': 'Convertion', 
            'parse_mode': 'Markdown', 
            'id': '287878416582808857/0', 
            'message_text': 'blah blah'
        }
    ]
}

我使用requests库来发出请求,这是在代码中执行此操作的行:

requests.post(url = "https://api.telegram.org/bot%s%s" % (telegram_bot_token, "/answerInlineQuery"), data = myData)

myData持有样本中描述的数据。

你能帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

我怀疑是因为您没有JSON序列化results参数。

import json

results = [{'type': 'article', 
            'title': 'Convertion', 
            'parse_mode': 'Markdown', 
            'id': '287878416582808857/0', 
            'message_text': 'blah blah'}]

my_data = {
    'inline_query_id': '287878416582808857',
    'results': json.dumps(results),
}

requests.post(url="https://api.telegram.org/bot%s%s" % (telegram_bot_token, "/answerInlineQuery"), 
              params=my_data)

请注意,我使用params来提供数据。

答案 1 :(得分:0)

我做了一些POC后得到了正确的答复。我使用的是java com.github.pengrad

代码下方。

GetUpdatesResponse updatesResponse = bot.execute(new GetUpdates());
List updates = updatesResponse.updates();
for(Update update:updates){
    InlineQuery inlineQuery = update.inlineQuery();
    System.out.println(update);
    System.out.println(inlineQuery);
    System.out.println("----------------");
    if(inlineQuery!=null) {
        InlineQueryResult r1 = new InlineQueryResultPhoto("AgADBQADrqcxG5q8tQ0EKSz5JaZjzDWgvzIABL0Neit4ar9MsXYBAAEC", "https://api.telegram.org/file/bot230014106:AAGtWr8xUCqUy8HjSgSFrY3aCs4IZs00Omg/photo/file_1.jpg", "https://api.telegram.org/file/bot230014106:AAGtWr8xUCqUy8HjSgSFrY3aCs4IZs00Omg/photo/file_1.jpg");
        BaseResponse baseResponse = bot.execute(new AnswerInlineQuery(inlineQuery.id(), r1)
            .cacheTime(6000)
            .isPersonal(true)
            .nextOffset("offset")
            .switchPmParameter("pmParam")
            .switchPmText("pmText"));
        System.out.println(baseResponse.isOk());
        System.out.println(baseResponse.toString());
        System.out.println(baseResponse.description());
    }
}

控制台输出下方:

Update{update_id=465103212, message=null, edited_message=null, inline_query=InlineQuery{id='995145139265927135', from=User{id=231700283, first_name='Manabendra', last_name='Maji', username='null'}, location=null, query='hi', offset=''}, chosen_inline_result=null, callback_query=null}

InlineQuery{id='995145139265927135', from=User{id=231700283, first_name='Manabendra', last_name='Maji', username='null'}, location=null, query='hi', offset=''}

true
BaseResponse{ok=true, error_code=0, description='null'}
null

我的移动电报应用也得到了适当的回应。