Skip to content

Commit 9576b92

Browse files
CAIP-94 Added Update message to OBO (#371)
* Added Update message to OBO * Fix "Get attachment types" for OBO * Added example for obo send/update message
1 parent 6c9ee8f commit 9576b92

3 files changed

Lines changed: 41 additions & 40 deletions

File tree

examples/services/messages.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ async def run():
5252
# Message ID can be retrieved by following guide here:
5353
# https://docs.developers.symphony.com/building-bots-on-symphony/datafeed/overview-of-streams
5454
await obo_services.messages().suppress_message("URL-Safe MessageID")
55-
55+
obo_message = await obo_services.messages().send_message(stream_id_1, "Hello obo")
56+
await obo_services.messages().update_message(stream_id_1, obo_message.message_id, "Hello obo updated")
5657

5758
logging.config.fileConfig(Path(__file__).parent.parent / "logging.conf", disable_existing_loggers=False)
5859

symphony/bdk/core/service/message/message_service.py

Lines changed: 38 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@ class OboMessageService:
3030
"""Class exposing OBO enabled endpoints for message management, e.g. send a message."""
3131

3232
def __init__(self, messages_api: MultiAttachmentsMessagesApi, message_suppression_api: MessageSuppressionApi,
33-
auth_session: AuthSession,
34-
retry_config: BdkRetryConfig):
33+
pod_api: PodApi, auth_session: AuthSession, retry_config: BdkRetryConfig):
3534
self._messages_api = messages_api
3635
self._message_suppression_api = message_suppression_api
36+
self._pod_api = pod_api
3737
self._auth_session = auth_session
3838
self._retry_config = retry_config
3939

@@ -126,6 +126,40 @@ async def suppress_message(
126126
}
127127
return await self._message_suppression_api.v1_admin_messagesuppression_id_suppress_post(**params)
128128

129+
@retry
130+
async def update_message(self, stream_id: str, message_id: str, message: Union[str, Message], data=None,
131+
version: str = "", silent=True) -> V4Message:
132+
"""Update an existing message. The existing message must be a valid social message, that has not been deleted.
133+
See: `Update Message <https://developers.symphony.com/restapi/reference/update-message-v4>`_
134+
135+
:param stream_id: The ID of the stream where the message is being updated.
136+
:param message_id: The ID of the message that is being updated.
137+
:param message: a :py:class:`Message` instance or a string containing the MessageML content to be sent.
138+
If it is a :py:class:`Message` instance, other parameters will be ignored.
139+
If it is a string, ``<messageML>`` tags can be omitted.
140+
:param data: an object (e.g. dict) that will be serialized into JSON using ``json.dumps``.
141+
:param silent: a bool flag that will determine if the updated message is going to be marked as read (when true,
142+
which is default value) or unread (when false).
143+
:param version: Optional message version in the format "major.minor".
144+
If empty, defaults to the latest supported version.
145+
146+
:return: a V4Message object containing the details of the updated message.
147+
"""
148+
message_object = message if isinstance(message, Message) else Message(content=message, data=data, silent=silent,
149+
version=version)
150+
151+
params = {
152+
"sid": stream_id,
153+
"mid": message_id,
154+
"session_token": await self._auth_session.session_token,
155+
"key_manager_token": await self._auth_session.key_manager_token,
156+
"message": message_object.content,
157+
"data": message_object.data,
158+
"version": message_object.version,
159+
"silent": str(message_object.silent)
160+
}
161+
return await self._messages_api.v4_stream_sid_message_mid_update_post(**params)
162+
129163
@retry
130164
async def get_attachment_types(self) -> List[str]:
131165
"""Retrieves a list of supported file extensions for attachments.
@@ -172,7 +206,7 @@ async def blast_message(
172206
@retry
173207
async def _blast_message(
174208
self,
175-
stream_ids: [str],
209+
stream_ids: List[str],
176210
message: str,
177211
data: str = "",
178212
version: str = "",
@@ -223,11 +257,10 @@ def __init__(self, messages_api: MultiAttachmentsMessagesApi,
223257
default_api: DefaultApi,
224258
auth_session: AuthSession,
225259
retry_config: BdkRetryConfig):
226-
super().__init__(messages_api, message_suppression_api, auth_session, retry_config)
260+
super().__init__(messages_api, message_suppression_api, pod_api, auth_session, retry_config)
227261
self._message_api = message_api
228262
self._message_suppression_api = message_suppression_api
229263
self._streams_api = streams_api
230-
self._pod_api = pod_api
231264
self._attachment_api = attachment_api
232265
self._default_api = default_api
233266

@@ -464,40 +497,6 @@ async def search_messages_one_page(skip, limit):
464497

465498
return offset_based_pagination(search_messages_one_page, chunk_size, max_number)
466499

467-
@retry
468-
async def update_message(self, stream_id: str, message_id: str, message: Union[str, Message], data=None,
469-
version: str = "", silent=True) -> V4Message:
470-
"""Update an existing message. The existing message must be a valid social message, that has not been deleted.
471-
See: `Update Message <https://developers.symphony.com/restapi/reference/update-message-v4>`_
472-
473-
:param stream_id: The ID of the stream where the message is being updated.
474-
:param message_id: The ID of the message that is being updated.
475-
:param message: a :py:class:`Message` instance or a string containing the MessageML content to be sent.
476-
If it is a :py:class:`Message` instance, other parameters will be ignored.
477-
If it is a string, ``<messageML>`` tags can be omitted.
478-
:param data: an object (e.g. dict) that will be serialized into JSON using ``json.dumps``.
479-
:param silent: a bool flag that will determine if the updated message is going to be marked as read (when true,
480-
which is default value) or unread (when false).
481-
:param version: Optional message version in the format "major.minor".
482-
If empty, defaults to the latest supported version.
483-
484-
:return: a V4Message object containing the details of the updated message.
485-
"""
486-
message_object = message if isinstance(message, Message) else Message(content=message, data=data, silent=silent,
487-
version=version)
488-
489-
params = {
490-
"sid": stream_id,
491-
"mid": message_id,
492-
"session_token": await self._auth_session.session_token,
493-
"key_manager_token": await self._auth_session.key_manager_token,
494-
"message": message_object.content,
495-
"data": message_object.data,
496-
"version": message_object.version,
497-
"silent": str(message_object.silent)
498-
}
499-
return await self._messages_api.v4_stream_sid_message_mid_update_post(**params)
500-
501500
@staticmethod
502501
def _validate_message_search_query(query: MessageSearchQuery):
503502
# Check streamType value among accepted ones if specified

symphony/bdk/core/service_factory.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,7 @@ def get_message_service(self) -> OboMessageService:
255255
return OboMessageService(
256256
MultiAttachmentsMessagesApi(self._agent_client),
257257
MessageSuppressionApi(self._pod_client),
258+
self._pod_client,
258259
self._auth_session,
259260
self._config.retry
260261
)

0 commit comments

Comments
 (0)