我想教我的机器人回应一个内联查询。问题是要发送一个内联查询的响应,你需要有一定的请求参数(至少是id和查询文本)。但如何获得这些参数?在发送answerInlineQuery到电报服务器之前,我在哪里获取它们?如何获取电报InlineQuery对象?
本文档不包含此问题。我试图从getUpdate-请求的结果中提取这些参数:
def getUpdates (self):
getup = URL + 'getUpdates'
...
#some valid code to get update-JSON
return url
def answerInlineQuery(self, inline_query_id, results):
send = url + 'answerInlineQuery?inline_query_id=' + str(inline_query_id) + '&&' + 'results=' + results
requests.get(send)
....
if (url != None) and ('inline_query' in url):
inid = url['result'][0]['inline_query']['id']
bot.set_inline_upd_id = int(inid)
fromid = url['result'][0]['inline_query']['fromid']
query = url['result'][0]['inline_query']['query']
if textMessage == '/modemscount':
r = requests.get('http://' + serverAddress + ':' + serverPort + '/api/v0/modem/')
modemsDict = r.json()
message_text = str(len(modemsDict['modems']))
inline_query_id = bot.inline_upd_id
results = json.dumps({'type':article, 'input_message_content':{'message_text':message_text}, 'id':1, 'title':count})
bot.answerInlineQuery(inline_query_id, results)
但是,此代码不起作用。没有错误消息。就在用户写入内联查询时,机器人根本没有反应。
getUpdates确实有效,因为机器人响应简单的请求。不使用Webhooks。/setinlines已安装。但是当我在随机用户的聊天中写入内联查询并检查它时(即使没有代码,只需通过url-query),'inline_query'键就不会出现在getUpdates返回的JSON对象中。 – ErvingGoffman
我刚做了一个新的机器人,它按预期工作。消息更新类似于“{”update_id“:”...“,”message“:”...“}并且内联更新类似于”{“update_id”:“..”,“inline_query”:“.. “}' – Reith
是的,这是解决问题的方法。非常感谢!创建一个类似的机器人,只替换令牌后,我得到正确的InlineQuery对象。 – ErvingGoffman