Telegram Bot对接Excel遇问题:用户名验证失败及MS Graph令牌为空
Telegram Bot 连接Excel(MS Graph API)问题排查
我正在开发一款Telegram Bot,功能是接收用户输入并将详情更新至Excel文件。已通过Azure门户及MS Graph API完成Excel文件连接,此前遇到的Access Token获取问题,通过在Azure门户创建新客户端密钥解决,且单独测试获取Access Token的代码能成功返回令牌,但仍存在以下问题:
- 无法验证用户名,提示获取Excel数据失败;
- 调用MS Graph接口时返回400错误,响应信息显示"Access token is empty";
- 不确定是否需要手动为空Excel文件添加用户名表头才能完成写入操作。
保存用户名及验证逻辑代码
def save_username(update: Update, context: CallbackContext) -> int: username = update.message.text if username.lower() == 'back': return start(update, context) # 返回起始步骤 context.user_data['username'] = username # 检查用户名是否已存在于Excel data = read_excel() if data and 'values' in data: usernames = [row[1] for row in data['values']] # 假设用户名在第二列 if username in usernames: update.message.reply_text( '用户名已存在,请尝试其他用户名。' ) return SAVE_USERNAME else: # 用户名不存在,进入下一步 reply_keyboard = [['返回']] update.message.reply_text('请输入你的邮箱:', reply_markup=ReplyKeyboardMarkup( reply_keyboard, one_time_keyboard=True)) return SAVE_EMAIL else: logger.error( "获取Excel数据失败,无法验证用户名。") update.message.reply_text( '数据获取错误,请稍后重试。') return ConversationHandler.END
Access Token获取测试代码
import msal from hi.py import TENANT_ID, CLIENT_ID, CLIENT_SECRET def get_access_token(): authority = f"https://login.microsoftonline.com/{TENANT_ID}" app = msal.ConfidentialClientApplication( CLIENT_ID, authority=authority, client_credential=CLIENT_SECRET ) result = app.acquire_token_for_client(scopes=["https://graph.microsoft.com/.default"]) if "access_token" in result: print("Access token 获取成功") return result['access_token'] else: print(f"获取Access token失败: {result.get('error')}") if "error_description" in result: print(f"错误描述: {result['error_description']}") if "correlation_id" in result: print(f"关联ID: {result['correlation_id']}") return None if __name__ == "__main__": get_access_token()
近期错误日志
调用MS Graph接口返回400错误:
__main__ - ERROR - Error fetching data: 400 Client Error: Bad Request for url: https://graph.microsoft.com/v1.0/me/drive/items/61814971F1322FC0!1070/workbook/worksheets/Sheet1/range(address='A1:F1000')
接口响应信息:
{"error":{"code":"InvalidAuthenticationToken","message":"Access token is empty.","innerError":{"date":"2024-07-16T09:32:26","request-id":"36c2f98e-6ebd-445a-9b2f-7a103b1be037","client-request-id":"36c2f98e-6ebd-445a-9b2f-7a103b1be037"}}}
单独运行Access Token获取代码时,输出显示令牌获取成功:
python ./access_token.py 2024-07-16 09:30:23,127 - msal.authority - INFO - Initializing with Entra authority: https://login.microsoftonline.com/ed586964-ec89-4ecb-95bf-df20fb9axxxx Access token acquired successfully
内容的提问来源于stack exchange,提问作者Aman Prakash Singh
相关产品推荐
相关产品推荐

