def post(self, request, token): try: raw = request.body.decode('utf8') logging.debug('Telegram raw data %s' % raw) update = json.loads(raw) if 'message' in update: data = message = update['message'] elif 'callback_query' in update: data = update['callback_query'] message = data['message'] else: logging.error('Can not recognize update {}', update) raise TypeError('Not supported') current_user = get_telegram_from_seed(message) sender = Sender('telegram', current_user.user_id) bot = Bot(current_user, sender) except (TypeError, ValueError) as e: logging.exception("Can not decode message") return HttpResponse('Error') if token != settings.TELEGRAM_BOT_TOKEN: sender = Sender('telegram', current_user.user_id) sender.sendMessage('Our bot migrated to @{}'.format( settings.TELEGRAM_BOT_NAME), token=token) return HttpResponse('ok') try: flavor = telepot.flavor(data) if flavor == 'chat': text = message.get('text', '') or message.get( 'contact', {}).get('phone_number') if not text: return HttpResponse('ok') bot.on_chat_message(text) elif flavor == 'callback_query': msg_id = (data['from']['id'], data['message']['message_id']) query_id, from_id, query_data = telepot.glance( data, flavor='callback_query') sender.msg_id = msg_id sender.query_id = query_id data = json.loads(query_data) if query_data else None if not data: return HttpResponse('ok') bot.on_callback(data) except Exception: logging.exception('Error on handling bot message') try: sender.sendMessage('❌❌❌❌❌ Internal error', reply_markup=bot.get_menu()) except Exception: logging.exception('Error on handling bot message error') return HttpResponse('ok')