2017-04-13 95 views
1

我想教我的机器人回应一个内联查询。问题是要发送一个内联查询的响应,你需要有一定的请求参数(至少是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) 

但是,此代码不起作用。没有错误消息。就在用户写入内联查询时,机器人根本没有反应。

回答

0

您可以通过与get updates相同的方式获得这些queryid。所以请确保您的getUpdates真的有效。也许你设置了webhook并且getUpdates不再返回更新?在这种情况下,删除webhook。

+0

getUpdates确实有效,因为机器人响应简单的请求。不使用Webhooks。/setinlines已安装。但是当我在随机用户的聊天中写入内联查询并检查它时(即使没有代码,只需通过url-query),'inline_query'键就不会出现在getUpdates返回的JSON对象中。 – ErvingGoffman

+0

我刚做了一个新的机器人,它按预期工作。消息更新类似于“{”update_id“:”...“,”message“:”...“}并且内联更新类似于”{“update_id”:“..”,“inline_query”:“.. “}' – Reith

+0

是的,这是解决问题的方法。非常感谢!创建一个类似的机器人,只替换令牌后,我得到正确的InlineQuery对象。 – ErvingGoffman

0

解决方案:创建一个新的类似的机器人,只替换令牌。 InlineQuery-mod将正常工作。 (这是我的第一个机器人,也许,这解释了它的异常行为。)