-
Notifications
You must be signed in to change notification settings - Fork 48
Description
I am building a conversational chatbot for microsoft teams using the new Agents SDK in python, I built a different bot using the 0.2.0 release of the framework in the past where I would handle user consent and SSO in my messaging endpoint like so:
@AGENT_APP.activity("message")
async def on_message(context: TurnContext, _: TurnState) -> None:
user_id: str = context.activity.from_property.aad_object_id
token = None
typing_indicator = TypingIndicator(interval=800)
await typing_indicator.start(context)
if token_cache.does_valid_token_exist(user_id):
token: Optional[str] = token_cache.get_token(user_id)
if not token:
token_response: Optional[TokenResponse] = await AGENT_APP.auth.get_token(
context, "GRAPH"
)
if token_response and token_response.token:
token: str = token_response.token
token_cache.add_user_token(user_id, token)
else:
async with AGENT_APP.auth.open_flow(context, "GRAPH") as flow:
flow_response: FlowResponse = await flow.begin_or_continue_flow(
context.activity
)
if flow_response.sign_in_resource:
await context.send_activity(
create_oauth_signin_activity(flow_response)
)
return
if user_id not in message_cache.cache:
hist: List[Dict[str, str]] = await get_n_message_history(context, token, 10)
message_cache.add_history(user_id, hist)
message_cache.add_new_message(user_id, context.activity.text)
async with httpx.AsyncClient() as client:
agent_response: Response = await client.post(
f"{API_BASE_URL}/v1/agent/messages",
json={
"user": context.activity.from_property.name,
"history": message_cache.get_user_history(user_id),
},
timeout=30.0,
)
response: Dict = agent_response.json()
bot_message: Optional[str] = response.get("message")
if bot_message not in tools:
message_cache.add_new_message(user_id, bot_message, True)
await context.send_activity(f"{bot_message}")
typing_indicator.stop()
else:
await context.send_activity(tools.get(bot_message)())
typing_indicator.stop()however since then, the open_flow() and access to FlowResponse or really any way to control the oauth flow has been removed according to this Pull Request . Since the framework is almost completely undocumented I would like to know what the new way of doing this is.
My main goal here is:
- On user message, check if there is a valid token in my cache, if not send an oauth sso card and cache the new token
I would like to know the idiomatic way to handle this issue, because all the stuff I was relying on has either been made private or removed entirely. I tried using the get_token() and exchange_token() functions in the Authorization class however it appears they will always fail because get_token() just calls exchange_token() which only attempts to get a new token if there is already a token that has been cached internally by the framework, since I do not have this token at startup these functions are functionally useless.
Thank you.