cohit's picture
Upload folder using huggingface_hub
0827183 verified
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.
from typing import List
from botbuilder.core import ChannelServiceHandler
from botbuilder.schema import (
Activity,
ChannelAccount,
ConversationParameters,
ConversationResourceResponse,
ConversationsResult,
PagedMembersResult,
ResourceResponse
)
from botframework.connector.aio import ConnectorClient
from botframework.connector.auth import (
AuthenticationConfiguration,
ChannelProvider,
ClaimsIdentity,
CredentialProvider,
MicrosoftAppCredentials
)
from routing_id_factory import RoutingIdFactory
class RoutingHandler(ChannelServiceHandler):
def __init__(
self,
conversation_id_factory: RoutingIdFactory,
credential_provider: CredentialProvider,
auth_configuration: AuthenticationConfiguration,
channel_provider: ChannelProvider = None
):
super().__init__(credential_provider, auth_configuration, channel_provider)
self._factory = conversation_id_factory
self._credentials = MicrosoftAppCredentials(None, None)
async def on_reply_to_activity(
self,
claims_identity: ClaimsIdentity,
conversation_id: str,
activity_id: str,
activity: Activity,
) -> ResourceResponse:
back_conversation_id, back_service_url = self._factory.get_conversation_info(conversation_id)
connector_client = self._get_connector_client(back_service_url)
activity.conversation.id = back_conversation_id
activity.service_url = back_service_url
return await connector_client.conversations.send_to_conversation(back_conversation_id, activity)
async def on_send_to_conversation(
self, claims_identity: ClaimsIdentity, conversation_id: str, activity: Activity,
) -> ResourceResponse:
back_conversation_id, back_service_url = self._factory.get_conversation_info(conversation_id)
connector_client = self._get_connector_client(back_service_url)
activity.conversation.id = back_conversation_id
activity.service_url = back_service_url
return await connector_client.conversations.send_to_conversation(back_conversation_id, activity)
async def on_update_activity(
self,
claims_identity: ClaimsIdentity,
conversation_id: str,
activity_id: str,
activity: Activity,
) -> ResourceResponse:
back_conversation_id, back_service_url = self._factory.get_conversation_info(conversation_id)
connector_client = self._get_connector_client(back_service_url)
activity.conversation.id = back_conversation_id
activity.service_url = back_service_url
return await connector_client.conversations.update_activity(back_conversation_id, activity.id, activity)
async def on_delete_activity(
self, claims_identity: ClaimsIdentity, conversation_id: str, activity_id: str,
):
back_conversation_id, back_service_url = self._factory.get_conversation_info(conversation_id)
connector_client = self._get_connector_client(back_service_url)
return await connector_client.conversations.delete_activity(back_conversation_id, activity_id)
async def on_create_conversation(
self, claims_identity: ClaimsIdentity, parameters: ConversationParameters,
) -> ConversationResourceResponse:
# This call will be used in Teams scenarios.
# Scenario #1 - creating a thread with an activity in a Channel in a Team
# In order to know the serviceUrl in the case of Teams we would need to look it up based upon the
# TeamsChannelData.
# The inbound activity will contain the TeamsChannelData and so will the ConversationParameters.
# Scenario #2 - starting a one on one conversation with a particular user
# - needs further analysis -
back_service_url = "http://tempuri"
connector_client = self._get_connector_client(back_service_url)
return await connector_client.conversations.create_conversation(parameters)
async def on_delete_conversation_member(
self, claims_identity: ClaimsIdentity, conversation_id: str, member_id: str,
):
return await super().on_delete_conversation_member(claims_identity, conversation_id, member_id)
async def on_get_activity_members(
self, claims_identity: ClaimsIdentity, conversation_id: str, activity_id: str,
) -> List[ChannelAccount]:
return await super().on_get_activity_members(claims_identity, conversation_id, activity_id)
async def on_get_conversation_members(
self, claims_identity: ClaimsIdentity, conversation_id: str,
) -> List[ChannelAccount]:
return await super().on_get_conversation_members(claims_identity, conversation_id)
async def on_get_conversations(
self, claims_identity: ClaimsIdentity, continuation_token: str = "",
) -> ConversationsResult:
return await super().on_get_conversations(claims_identity, continuation_token)
async def on_get_conversation_paged_members(
self,
claims_identity: ClaimsIdentity,
conversation_id: str,
page_size: int = None,
continuation_token: str = "",
) -> PagedMembersResult:
return await super().on_get_conversation_paged_members(claims_identity, conversation_id, continuation_token)
def _get_connector_client(self, service_url: str):
return ConnectorClient(self._credentials, service_url)