diff --git a/examples/services/messages.py b/examples/services/messages.py index 4c2db1e8..9c24bece 100644 --- a/examples/services/messages.py +++ b/examples/services/messages.py @@ -52,7 +52,8 @@ async def run(): # Message ID can be retrieved by following guide here: # https://docs.developers.symphony.com/building-bots-on-symphony/datafeed/overview-of-streams await obo_services.messages().suppress_message("URL-Safe MessageID") - + obo_message = await obo_services.messages().send_message(stream_id_1, "Hello obo") + await obo_services.messages().update_message(stream_id_1, obo_message.message_id, "Hello obo updated") logging.config.fileConfig(Path(__file__).parent.parent / "logging.conf", disable_existing_loggers=False) diff --git a/symphony/bdk/core/service/message/message_service.py b/symphony/bdk/core/service/message/message_service.py index 6c277a04..e1f9427a 100644 --- a/symphony/bdk/core/service/message/message_service.py +++ b/symphony/bdk/core/service/message/message_service.py @@ -30,10 +30,10 @@ class OboMessageService: """Class exposing OBO enabled endpoints for message management, e.g. send a message.""" def __init__(self, messages_api: MultiAttachmentsMessagesApi, message_suppression_api: MessageSuppressionApi, - auth_session: AuthSession, - retry_config: BdkRetryConfig): + pod_api: PodApi, auth_session: AuthSession, retry_config: BdkRetryConfig): self._messages_api = messages_api self._message_suppression_api = message_suppression_api + self._pod_api = pod_api self._auth_session = auth_session self._retry_config = retry_config @@ -126,6 +126,40 @@ async def suppress_message( } return await self._message_suppression_api.v1_admin_messagesuppression_id_suppress_post(**params) + @retry + async def update_message(self, stream_id: str, message_id: str, message: Union[str, Message], data=None, + version: str = "", silent=True) -> V4Message: + """Update an existing message. The existing message must be a valid social message, that has not been deleted. + See: `Update Message `_ + + :param stream_id: The ID of the stream where the message is being updated. + :param message_id: The ID of the message that is being updated. + :param message: a :py:class:`Message` instance or a string containing the MessageML content to be sent. + If it is a :py:class:`Message` instance, other parameters will be ignored. + If it is a string, ```` tags can be omitted. + :param data: an object (e.g. dict) that will be serialized into JSON using ``json.dumps``. + :param silent: a bool flag that will determine if the updated message is going to be marked as read (when true, + which is default value) or unread (when false). + :param version: Optional message version in the format "major.minor". + If empty, defaults to the latest supported version. + + :return: a V4Message object containing the details of the updated message. + """ + message_object = message if isinstance(message, Message) else Message(content=message, data=data, silent=silent, + version=version) + + params = { + "sid": stream_id, + "mid": message_id, + "session_token": await self._auth_session.session_token, + "key_manager_token": await self._auth_session.key_manager_token, + "message": message_object.content, + "data": message_object.data, + "version": message_object.version, + "silent": str(message_object.silent) + } + return await self._messages_api.v4_stream_sid_message_mid_update_post(**params) + @retry async def get_attachment_types(self) -> List[str]: """Retrieves a list of supported file extensions for attachments. @@ -172,7 +206,7 @@ async def blast_message( @retry async def _blast_message( self, - stream_ids: [str], + stream_ids: List[str], message: str, data: str = "", version: str = "", @@ -223,11 +257,10 @@ def __init__(self, messages_api: MultiAttachmentsMessagesApi, default_api: DefaultApi, auth_session: AuthSession, retry_config: BdkRetryConfig): - super().__init__(messages_api, message_suppression_api, auth_session, retry_config) + super().__init__(messages_api, message_suppression_api, pod_api, auth_session, retry_config) self._message_api = message_api self._message_suppression_api = message_suppression_api self._streams_api = streams_api - self._pod_api = pod_api self._attachment_api = attachment_api self._default_api = default_api @@ -464,40 +497,6 @@ async def search_messages_one_page(skip, limit): return offset_based_pagination(search_messages_one_page, chunk_size, max_number) - @retry - async def update_message(self, stream_id: str, message_id: str, message: Union[str, Message], data=None, - version: str = "", silent=True) -> V4Message: - """Update an existing message. The existing message must be a valid social message, that has not been deleted. - See: `Update Message `_ - - :param stream_id: The ID of the stream where the message is being updated. - :param message_id: The ID of the message that is being updated. - :param message: a :py:class:`Message` instance or a string containing the MessageML content to be sent. - If it is a :py:class:`Message` instance, other parameters will be ignored. - If it is a string, ```` tags can be omitted. - :param data: an object (e.g. dict) that will be serialized into JSON using ``json.dumps``. - :param silent: a bool flag that will determine if the updated message is going to be marked as read (when true, - which is default value) or unread (when false). - :param version: Optional message version in the format "major.minor". - If empty, defaults to the latest supported version. - - :return: a V4Message object containing the details of the updated message. - """ - message_object = message if isinstance(message, Message) else Message(content=message, data=data, silent=silent, - version=version) - - params = { - "sid": stream_id, - "mid": message_id, - "session_token": await self._auth_session.session_token, - "key_manager_token": await self._auth_session.key_manager_token, - "message": message_object.content, - "data": message_object.data, - "version": message_object.version, - "silent": str(message_object.silent) - } - return await self._messages_api.v4_stream_sid_message_mid_update_post(**params) - @staticmethod def _validate_message_search_query(query: MessageSearchQuery): # Check streamType value among accepted ones if specified diff --git a/symphony/bdk/core/service_factory.py b/symphony/bdk/core/service_factory.py index f67cdc86..8eaf9df1 100644 --- a/symphony/bdk/core/service_factory.py +++ b/symphony/bdk/core/service_factory.py @@ -255,6 +255,7 @@ def get_message_service(self) -> OboMessageService: return OboMessageService( MultiAttachmentsMessagesApi(self._agent_client), MessageSuppressionApi(self._pod_client), + self._pod_client, self._auth_session, self._config.retry )