2017-04-13 40 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將正常工作。 (這是我的第一個機器人,也許,這解釋了它的異常行爲。)