diff --git a/examples/webhooks/sms_api/controller.py b/examples/webhooks/sms_api/controller.py index b5bd50f5..f3418e26 100644 --- a/examples/webhooks/sms_api/controller.py +++ b/examples/webhooks/sms_api/controller.py @@ -14,7 +14,7 @@ def sms_event(self): headers = dict(request.headers) raw_body = request.raw_body if request.raw_body else b"" - webhooks_service = self.sinch_client.sms.webhooks(self.webhooks_secret) + webhooks_service = self.sinch_client.sms.sinch_events(self.webhooks_secret) # Signature headers may be absent unless your account manager enables them # (see README: Configuration -> Controller Settings -> SMS controller); diff --git a/examples/webhooks/sms_api/server_business_logic.py b/examples/webhooks/sms_api/server_business_logic.py index aa47e470..d13e6fc2 100644 --- a/examples/webhooks/sms_api/server_business_logic.py +++ b/examples/webhooks/sms_api/server_business_logic.py @@ -1,11 +1,11 @@ -from sinch.domains.sms.webhooks.v1.events.sms_webhooks_event import IncomingSMSWebhookEvent +from sinch.domains.sms.sinch_events.v1.events.sms_sinch_event import IncomingSMSWebhookEvent def handle_sms_event(sms_event: IncomingSMSWebhookEvent, logger): """ This method handles an SMS event. Args: - sms_event (SmsWebhooksEvent): The SMS event data. + sms_event (IncomingSMSWebhookEvent): The SMS event data. logger (logging.Logger, optional): Logger instance for logging. Defaults to None. """ logger.info(f'Handling SMS event:\n{sms_event.model_dump_json(indent=2)}') diff --git a/sinch/domains/sms/api/v1/batches_apis.py b/sinch/domains/sms/api/v1/batches_apis.py index 843ad482..e4a34576 100644 --- a/sinch/domains/sms/api/v1/batches_apis.py +++ b/sinch/domains/sms/api/v1/batches_apis.py @@ -143,7 +143,7 @@ def dry_run_sms( delivery_report: Optional[DeliveryReportType] = None, send_at: Optional[datetime] = None, expire_at: Optional[datetime] = None, - callback_url: Optional[str] = None, + event_destination_target: Optional[str] = None, client_reference: Optional[str] = None, feedback_enabled: Optional[bool] = None, flash_message: Optional[bool] = None, @@ -175,8 +175,8 @@ def dry_run_sms( :type send_at: Optional[datetime] :param expire_at: The time to expire the message at. (optional) :type expire_at: Optional[datetime] - :param callback_url: The callback URL to receive the delivery report. (optional) - :type callback_url: Optional[str] + :param event_destination_target: The callback URL to receive the delivery report. (optional) + :type event_destination_target: Optional[str] :param client_reference: The client reference to identify the message. (optional) :type client_reference: Optional[str] :param feedback_enabled: Whether to enable feedback. (optional) @@ -209,7 +209,7 @@ def dry_run_sms( delivery_report=delivery_report, send_at=send_at, expire_at=expire_at, - callback_url=callback_url, + event_destination_target=event_destination_target, client_reference=client_reference, feedback_enabled=feedback_enabled, flash_message=flash_message, @@ -232,7 +232,7 @@ def dry_run_binary( delivery_report: Optional[DeliveryReportType] = None, send_at: Optional[datetime] = None, expire_at: Optional[datetime] = None, - callback_url: Optional[str] = None, + event_destination_target: Optional[str] = None, client_reference: Optional[str] = None, feedback_enabled: Optional[bool] = None, from_ton: Optional[int] = None, @@ -261,8 +261,8 @@ def dry_run_binary( :type send_at: Optional[datetime] :param expire_at: The time to expire the message at. (optional) :type expire_at: Optional[datetime] - :param callback_url: The callback URL to receive the delivery report. (optional) - :type callback_url: Optional[str] + :param event_destination_target: The callback URL to receive the delivery report. (optional) + :type event_destination_target: Optional[str] :param client_reference: The client reference to identify the message. (optional) :type client_reference: Optional[str] :param feedback_enabled: Whether to enable feedback. (optional) @@ -289,7 +289,7 @@ def dry_run_binary( delivery_report=delivery_report, send_at=send_at, expire_at=expire_at, - callback_url=callback_url, + event_destination_target=event_destination_target, client_reference=client_reference, feedback_enabled=feedback_enabled, from_ton=from_ton, @@ -309,7 +309,7 @@ def dry_run_mms( delivery_report: Optional[DeliveryReportType] = None, send_at: Optional[datetime] = None, expire_at: Optional[datetime] = None, - callback_url: Optional[str] = None, + event_destination_target: Optional[str] = None, client_reference: Optional[str] = None, feedback_enabled: Optional[bool] = None, strict_validation: Optional[bool] = None, @@ -337,8 +337,8 @@ def dry_run_mms( :type send_at: Optional[datetime] :param expire_at: The time to expire the message at. (optional) :type expire_at: Optional[datetime] - :param callback_url: The callback URL to receive the delivery report. (optional) - :type callback_url: Optional[str] + :param event_destination_target: The callback URL to receive the delivery report. (optional) + :type event_destination_target: Optional[str] :param client_reference: The client reference to identify the message. (optional) :type client_reference: Optional[str] :param feedback_enabled: Whether to enable feedback. (optional) @@ -363,7 +363,7 @@ def dry_run_mms( delivery_report=delivery_report, send_at=send_at, expire_at=expire_at, - callback_url=callback_url, + event_destination_target=event_destination_target, client_reference=client_reference, feedback_enabled=feedback_enabled, strict_validation=strict_validation, @@ -487,7 +487,7 @@ def replace_sms( delivery_report: Optional[DeliveryReportType] = None, send_at: Optional[datetime] = None, expire_at: Optional[datetime] = None, - callback_url: Optional[str] = None, + event_destination_target: Optional[str] = None, client_reference: Optional[str] = None, feedback_enabled: Optional[bool] = None, flash_message: Optional[bool] = None, @@ -516,8 +516,8 @@ def replace_sms( :type send_at: Optional[datetime] :param expire_at: The time to expire the message at. (optional) :type expire_at: Optional[datetime] - :param callback_url: The callback URL to receive the delivery report. (optional) - :type callback_url: Optional[str] + :param event_destination_target: The callback URL to receive the delivery report. (optional) + :type event_destination_target: Optional[str] :param client_reference: The client reference to identify the message. (optional) :type client_reference: Optional[str] :param feedback_enabled: Whether to enable feedback. (optional) @@ -550,7 +550,7 @@ def replace_sms( delivery_report=delivery_report, send_at=send_at, expire_at=expire_at, - callback_url=callback_url, + event_destination_target=event_destination_target, client_reference=client_reference, feedback_enabled=feedback_enabled, flash_message=flash_message, @@ -573,7 +573,7 @@ def replace_binary( delivery_report: Optional[DeliveryReportType] = None, send_at: Optional[datetime] = None, expire_at: Optional[datetime] = None, - callback_url: Optional[str] = None, + event_destination_target: Optional[str] = None, client_reference: Optional[str] = None, feedback_enabled: Optional[bool] = None, from_ton: Optional[int] = None, @@ -600,8 +600,8 @@ def replace_binary( :type send_at: Optional[datetime] :param expire_at: The time to expire the message at. (optional) :type expire_at: Optional[datetime] - :param callback_url: The callback URL to receive the delivery report. (optional) - :type callback_url: Optional[str] + :param event_destination_target: The callback URL to receive the delivery report. (optional) + :type event_destination_target: Optional[str] :param client_reference: The client reference to identify the message. (optional) :type client_reference: Optional[str] :param feedback_enabled: Whether to enable feedback. (optional) @@ -627,7 +627,7 @@ def replace_binary( delivery_report=delivery_report, send_at=send_at, expire_at=expire_at, - callback_url=callback_url, + event_destination_target=event_destination_target, client_reference=client_reference, feedback_enabled=feedback_enabled, from_ton=from_ton, @@ -645,7 +645,7 @@ def replace_mms( delivery_report: Optional[DeliveryReportType] = None, send_at: Optional[datetime] = None, expire_at: Optional[datetime] = None, - callback_url: Optional[str] = None, + event_destination_target: Optional[str] = None, client_reference: Optional[str] = None, feedback_enabled: Optional[bool] = None, strict_validation: Optional[bool] = None, @@ -670,8 +670,8 @@ def replace_mms( :type send_at: Optional[datetime] :param expire_at: The time to expire the message at. (optional) :type expire_at: Optional[datetime] - :param callback_url: The callback URL to receive the delivery report. (optional) - :type callback_url: Optional[str] + :param event_destination_target: The callback URL to receive the delivery report. (optional) + :type event_destination_target: Optional[str] :param client_reference: The client reference to identify the message. (optional) :type client_reference: Optional[str] :param feedback_enabled: Whether to enable feedback. (optional) @@ -696,7 +696,7 @@ def replace_mms( delivery_report=delivery_report, send_at=send_at, expire_at=expire_at, - callback_url=callback_url, + event_destination_target=event_destination_target, client_reference=client_reference, feedback_enabled=feedback_enabled, strict_validation=strict_validation, @@ -751,7 +751,7 @@ def send_sms( delivery_report: Optional[DeliveryReportType] = None, send_at: Optional[datetime] = None, expire_at: Optional[datetime] = None, - callback_url: Optional[str] = None, + event_destination_target: Optional[str] = None, client_reference: Optional[str] = None, feedback_enabled: Optional[bool] = None, flash_message: Optional[bool] = None, @@ -784,8 +784,8 @@ def send_sms( :type send_at: Optional[datetime] :param expire_at: The time to expire the message at. (optional) :type expire_at: Optional[datetime] - :param callback_url: The callback URL to receive the delivery report. (optional) - :type callback_url: Optional[str] + :param event_destination_target: The callback URL to receive the delivery report. (optional) + :type event_destination_target: Optional[str] :param client_reference: The client reference to identify the message. (optional) :type client_reference: Optional[str] :param feedback_enabled: Whether to enable feedback. (optional) @@ -817,7 +817,7 @@ def send_sms( delivery_report=delivery_report, send_at=send_at, expire_at=expire_at, - callback_url=callback_url, + event_destination_target=event_destination_target, client_reference=client_reference, feedback_enabled=feedback_enabled, flash_message=flash_message, @@ -839,7 +839,7 @@ def send_binary( delivery_report: Optional[DeliveryReportType] = None, send_at: Optional[datetime] = None, expire_at: Optional[datetime] = None, - callback_url: Optional[str] = None, + event_destination_target: Optional[str] = None, client_reference: Optional[str] = None, feedback_enabled: Optional[bool] = None, from_ton: Optional[int] = None, @@ -870,8 +870,8 @@ def send_binary( :type send_at: Optional[datetime] :param expire_at: The time to expire the message at. (optional) :type expire_at: Optional[datetime] - :param callback_url: The callback URL to receive the delivery report. (optional) - :type callback_url: Optional[str] + :param event_destination_target: The callback URL to receive the delivery report. (optional) + :type event_destination_target: Optional[str] :param client_reference: The client reference to identify the message. (optional) :type client_reference: Optional[str] :param feedback_enabled: Whether to enable feedback. (optional) @@ -896,7 +896,7 @@ def send_binary( delivery_report=delivery_report, send_at=send_at, expire_at=expire_at, - callback_url=callback_url, + event_destination_target=event_destination_target, client_reference=client_reference, feedback_enabled=feedback_enabled, from_ton=from_ton, @@ -913,7 +913,7 @@ def send_mms( delivery_report: Optional[DeliveryReportType] = None, send_at: Optional[datetime] = None, expire_at: Optional[datetime] = None, - callback_url: Optional[str] = None, + event_destination_target: Optional[str] = None, client_reference: Optional[str] = None, feedback_enabled: Optional[bool] = None, strict_validation: Optional[bool] = None, @@ -942,8 +942,8 @@ def send_mms( :type send_at: Optional[datetime] :param expire_at: The time to expire the message at. (optional) :type expire_at: Optional[datetime] - :param callback_url: The callback URL to receive the delivery report. (optional) - :type callback_url: Optional[str] + :param event_destination_target: The callback URL to receive the delivery report. (optional) + :type event_destination_target: Optional[str] :param client_reference: The client reference to identify the message. (optional) :type client_reference: Optional[str] :param feedback_enabled: Whether to enable feedback. (optional) @@ -967,7 +967,7 @@ def send_mms( delivery_report=delivery_report, send_at=send_at, expire_at=expire_at, - callback_url=callback_url, + event_destination_target=event_destination_target, client_reference=client_reference, feedback_enabled=feedback_enabled, strict_validation=strict_validation, @@ -1057,7 +1057,7 @@ def update_sms( delivery_report: Optional[DeliveryReportType] = None, send_at: Optional[datetime] = None, expire_at: Optional[datetime] = None, - callback_url: Optional[str] = None, + event_destination_target: Optional[str] = None, client_reference: Optional[str] = None, feedback_enabled: Optional[bool] = None, parameters: Optional[Dict[str, Dict[str, str]]] = None, @@ -1087,8 +1087,8 @@ def update_sms( :type send_at: Optional[datetime] :param expire_at: The time to expire the message at. (optional) :type expire_at: Optional[datetime] - :param callback_url: The callback URL to receive the delivery report. (optional) - :type callback_url: Optional[str] + :param event_destination_target: The callback URL to receive the delivery report. (optional) + :type event_destination_target: Optional[str] :param client_reference: The client reference to identify the message. (optional) :type client_reference: Optional[str] :param feedback_enabled: Whether to enable feedback. (optional) @@ -1122,7 +1122,7 @@ def update_sms( delivery_report=delivery_report, send_at=send_at, expire_at=expire_at, - callback_url=callback_url, + event_destination_target=event_destination_target, client_reference=client_reference, feedback_enabled=feedback_enabled, parameters=parameters, @@ -1146,7 +1146,7 @@ def update_binary( delivery_report: Optional[DeliveryReportType] = None, send_at: Optional[datetime] = None, expire_at: Optional[datetime] = None, - callback_url: Optional[str] = None, + event_destination_target: Optional[str] = None, client_reference: Optional[str] = None, feedback_enabled: Optional[bool] = None, from_ton: Optional[int] = None, @@ -1174,8 +1174,8 @@ def update_binary( :type send_at: Optional[datetime] :param expire_at: The time to expire the message at. (optional) :type expire_at: Optional[datetime] - :param callback_url: The callback URL to receive the delivery report. (optional) - :type callback_url: Optional[str] + :param event_destination_target: The callback URL to receive the delivery report. (optional) + :type event_destination_target: Optional[str] :param client_reference: The client reference to identify the message. (optional) :type client_reference: Optional[str] :param feedback_enabled: Whether to enable feedback. (optional) @@ -1202,7 +1202,7 @@ def update_binary( delivery_report=delivery_report, send_at=send_at, expire_at=expire_at, - callback_url=callback_url, + event_destination_target=event_destination_target, client_reference=client_reference, feedback_enabled=feedback_enabled, from_ton=from_ton, @@ -1221,7 +1221,7 @@ def update_mms( delivery_report: Optional[DeliveryReportType] = None, send_at: Optional[datetime] = None, expire_at: Optional[datetime] = None, - callback_url: Optional[str] = None, + event_destination_target: Optional[str] = None, client_reference: Optional[str] = None, feedback_enabled: Optional[bool] = None, parameters: Optional[Dict[str, Dict[str, str]]] = None, @@ -1247,8 +1247,8 @@ def update_mms( :type send_at: Optional[datetime] :param expire_at: The time to expire the message at. (optional) :type expire_at: Optional[datetime] - :param callback_url: The callback URL to receive the delivery report. (optional) - :type callback_url: Optional[str] + :param event_destination_target: The callback URL to receive the delivery report. (optional) + :type event_destination_target: Optional[str] :param client_reference: The client reference to identify the message. (optional) :type client_reference: Optional[str] :param feedback_enabled: Whether to enable feedback. (optional) @@ -1274,7 +1274,7 @@ def update_mms( delivery_report=delivery_report, send_at=send_at, expire_at=expire_at, - callback_url=callback_url, + event_destination_target=event_destination_target, client_reference=client_reference, feedback_enabled=feedback_enabled, parameters=parameters, diff --git a/sinch/domains/sms/models/v1/internal/update_binary_request.py b/sinch/domains/sms/models/v1/internal/update_binary_request.py index a73f090f..f23c5182 100644 --- a/sinch/domains/sms/models/v1/internal/update_binary_request.py +++ b/sinch/domains/sms/models/v1/internal/update_binary_request.py @@ -34,8 +34,9 @@ class UpdateBinaryRequest(BaseModelConfigurationRequest): default=None, description="If set, the system will stop trying to deliver the message at this point. Constraints: Must be after `send_at` Default: 3 days after `send_at` ", ) - callback_url: Optional[StrictStr] = Field( + event_destination_target: Optional[StrictStr] = Field( default=None, + alias="callback_url", description="Override the default callback URL for this batch. Constraints: Must be valid URL. ", ) client_reference: Optional[StrictStr] = Field( diff --git a/sinch/domains/sms/models/v1/internal/update_media_request.py b/sinch/domains/sms/models/v1/internal/update_media_request.py index 1aa5f6dc..ed347d3d 100644 --- a/sinch/domains/sms/models/v1/internal/update_media_request.py +++ b/sinch/domains/sms/models/v1/internal/update_media_request.py @@ -32,8 +32,9 @@ class UpdateMediaRequest(BaseModelConfigurationRequest): default=None, description="If set, the system will stop trying to deliver the message at this point. Constraints: Must be after `send_at` Default: 3 days after `send_at` ", ) - callback_url: Optional[StrictStr] = Field( + event_destination_target: Optional[StrictStr] = Field( default=None, + alias="callback_url", description="Override the default callback URL for this batch. Constraints: Must be valid URL. ", ) client_reference: Optional[StrictStr] = Field( diff --git a/sinch/domains/sms/models/v1/internal/update_text_request.py b/sinch/domains/sms/models/v1/internal/update_text_request.py index 81e4e2ea..d43ee83f 100644 --- a/sinch/domains/sms/models/v1/internal/update_text_request.py +++ b/sinch/domains/sms/models/v1/internal/update_text_request.py @@ -39,8 +39,9 @@ class UpdateTextRequest(BaseModelConfigurationRequest): default=None, description="If set, the system will stop trying to deliver the message at this point. Constraints: Must be after `send_at` Default: 3 days after `send_at` ", ) - callback_url: Optional[StrictStr] = Field( + event_destination_target: Optional[StrictStr] = Field( default=None, + alias="callback_url", description="Override the default callback URL for this batch. Constraints: Must be valid URL. ", ) client_reference: Optional[StrictStr] = Field( diff --git a/sinch/domains/sms/models/v1/shared/binary_request.py b/sinch/domains/sms/models/v1/shared/binary_request.py index 027d98e9..35fc4146 100644 --- a/sinch/domains/sms/models/v1/shared/binary_request.py +++ b/sinch/domains/sms/models/v1/shared/binary_request.py @@ -40,8 +40,9 @@ class BinaryRequest(BaseModelConfigurationRequest): default=None, description="If set, the system will stop trying to deliver the message at this point. Must be after `send_at`. Default and max is 3 days after `send_at`. Formatted as [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601). For example: `YYYY-MM-DDThh:mm:ss.SSSZ`.", ) - callback_url: Optional[StrictStr] = Field( + event_destination_target: Optional[StrictStr] = Field( default=None, + alias="callback_url", description="Override the *default* callback URL for this batch. Must be a valid URL. Learn how to set a default callback URL [here](https://community.sinch.com/t5/SMS/How-do-I-assign-a-callback-URL-to-an-SMS-service-plan/ta-p/8414).", ) client_reference: Optional[StrictStr] = Field( diff --git a/sinch/domains/sms/models/v1/shared/binary_response.py b/sinch/domains/sms/models/v1/shared/binary_response.py index 171b2fd2..96309913 100644 --- a/sinch/domains/sms/models/v1/shared/binary_response.py +++ b/sinch/domains/sms/models/v1/shared/binary_response.py @@ -61,8 +61,10 @@ class BinaryResponse(BaseModelConfigurationResponse): default=None, description="If set, the date and time the message will expire. Formatted as [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601). For example: `YYYY-MM-DDThh:mm:ss.SSSZ`.", ) - callback_url: Optional[StrictStr] = Field( - default=None, description="The callback URL provided in the request." + event_destination_target: Optional[StrictStr] = Field( + default=None, + alias="callback_url", + description="The callback URL provided in the request.", ) client_reference: Optional[StrictStr] = Field( default=None, diff --git a/sinch/domains/sms/models/v1/shared/media_request.py b/sinch/domains/sms/models/v1/shared/media_request.py index 54ef9203..57d5311a 100644 --- a/sinch/domains/sms/models/v1/shared/media_request.py +++ b/sinch/domains/sms/models/v1/shared/media_request.py @@ -35,8 +35,9 @@ class MediaRequest(BaseModelConfigurationRequest): default=None, description="If set, the system will stop trying to deliver the message at this point. Must be after `send_at`. Default and max is 3 days after `send_at`. Formatted as [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601): `YYYY-MM-DDThh:mm:ss.SSSZ`. ", ) - callback_url: Optional[StrictStr] = Field( + event_destination_target: Optional[StrictStr] = Field( default=None, + alias="callback_url", description="Override the default callback URL for this batch. Must be valid URL.", ) client_reference: Optional[StrictStr] = Field( diff --git a/sinch/domains/sms/models/v1/shared/media_response.py b/sinch/domains/sms/models/v1/shared/media_response.py index 7da3a82f..5971208a 100644 --- a/sinch/domains/sms/models/v1/shared/media_response.py +++ b/sinch/domains/sms/models/v1/shared/media_response.py @@ -50,8 +50,9 @@ class MediaResponse(BaseModelConfigurationResponse): default=None, description="If set the system will stop trying to deliver the message at this point. Must be after `send_at`. Default and max is 3 days after send_at. YYYY-MM-DDThh:mm:ss.SSSZ format", ) - callback_url: Optional[StrictStr] = Field( + event_destination_target: Optional[StrictStr] = Field( default=None, + alias="callback_url", description="Override the default callback URL for this batch. Must be valid URL.", ) client_reference: Optional[StrictStr] = Field( diff --git a/sinch/domains/sms/models/v1/shared/text_request.py b/sinch/domains/sms/models/v1/shared/text_request.py index 2416633b..e5ecce0f 100644 --- a/sinch/domains/sms/models/v1/shared/text_request.py +++ b/sinch/domains/sms/models/v1/shared/text_request.py @@ -42,8 +42,9 @@ class TextRequest(BaseModelConfigurationRequest): default=None, description="If set, the system will stop trying to deliver the message at this point. Must be after `send_at`. Default and max is 3 days after `send_at`. Formatted as [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601): `YYYY-MM-DDThh:mm:ss.SSSZ`.", ) - callback_url: Optional[StrictStr] = Field( + event_destination_target: Optional[StrictStr] = Field( default=None, + alias="callback_url", description="Override the *default* callback URL for this batch. Must be a valid URL. Learn how to set a default callback URL [here](https://community.sinch.com/t5/SMS/How-do-I-assign-a-callback-URL-to-an-SMS-service-plan/ta-p/8414).", ) client_reference: Optional[StrictStr] = Field( diff --git a/sinch/domains/sms/models/v1/shared/text_response.py b/sinch/domains/sms/models/v1/shared/text_response.py index 650906e5..f5fc5975 100644 --- a/sinch/domains/sms/models/v1/shared/text_response.py +++ b/sinch/domains/sms/models/v1/shared/text_response.py @@ -51,8 +51,9 @@ class TextResponse(BaseModelConfigurationResponse): default=None, description="If set, the system will stop trying to deliver the message at this point. Must be after `send_at`. Default and max is 3 days after `send_at`. Formatted as [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601): `YYYY-MM-DDThh:mm:ss.SSSZ`.", ) - callback_url: Optional[StrictStr] = Field( + event_destination_target: Optional[StrictStr] = Field( default=None, + alias="callback_url", description="Override the default callback URL for this batch. Must be valid URL.", ) client_reference: Optional[StrictStr] = Field( diff --git a/sinch/domains/sms/sinch_events/v1/__init__.py b/sinch/domains/sms/sinch_events/v1/__init__.py new file mode 100644 index 00000000..522d374f --- /dev/null +++ b/sinch/domains/sms/sinch_events/v1/__init__.py @@ -0,0 +1,5 @@ +from sinch.domains.sms.sinch_events.v1.sms_sinch_event import ( + SmsSinchEvent, +) + +__all__ = ["SmsSinchEvent"] diff --git a/sinch/domains/sms/webhooks/v1/events/__init__.py b/sinch/domains/sms/sinch_events/v1/events/__init__.py similarity index 80% rename from sinch/domains/sms/webhooks/v1/events/__init__.py rename to sinch/domains/sms/sinch_events/v1/events/__init__.py index bb5a10da..66598629 100644 --- a/sinch/domains/sms/webhooks/v1/events/__init__.py +++ b/sinch/domains/sms/sinch_events/v1/events/__init__.py @@ -1,4 +1,4 @@ -from sinch.domains.sms.webhooks.v1.events.sms_webhooks_event import ( +from sinch.domains.sms.sinch_events.v1.events.sms_sinch_event import ( IncomingSMSWebhookEvent, MOTextWebhookEvent, MOBinaryWebhookEvent, diff --git a/sinch/domains/sms/webhooks/v1/events/sms_webhooks_event.py b/sinch/domains/sms/sinch_events/v1/events/sms_sinch_event.py similarity index 98% rename from sinch/domains/sms/webhooks/v1/events/sms_webhooks_event.py rename to sinch/domains/sms/sinch_events/v1/events/sms_sinch_event.py index f8abe3cb..330738a1 100644 --- a/sinch/domains/sms/webhooks/v1/events/sms_webhooks_event.py +++ b/sinch/domains/sms/sinch_events/v1/events/sms_sinch_event.py @@ -1,7 +1,7 @@ from datetime import datetime from typing import Optional, Union, Literal, Annotated from pydantic import Field, StrictStr, StrictInt, conlist -from sinch.domains.sms.webhooks.v1.internal import WebhookEvent +from sinch.domains.sms.sinch_events.v1.internal import WebhookEvent class MediaItem(WebhookEvent): diff --git a/sinch/domains/sms/sinch_events/v1/internal/__init__.py b/sinch/domains/sms/sinch_events/v1/internal/__init__.py new file mode 100644 index 00000000..b1bd904d --- /dev/null +++ b/sinch/domains/sms/sinch_events/v1/internal/__init__.py @@ -0,0 +1,5 @@ +from sinch.domains.sms.sinch_events.v1.internal.webhook_event import ( + WebhookEvent, +) + +__all__ = ["WebhookEvent"] diff --git a/sinch/domains/sms/webhooks/v1/internal/webhook_event.py b/sinch/domains/sms/sinch_events/v1/internal/webhook_event.py similarity index 100% rename from sinch/domains/sms/webhooks/v1/internal/webhook_event.py rename to sinch/domains/sms/sinch_events/v1/internal/webhook_event.py diff --git a/sinch/domains/sms/webhooks/v1/sms_webhooks.py b/sinch/domains/sms/sinch_events/v1/sms_sinch_event.py similarity index 98% rename from sinch/domains/sms/webhooks/v1/sms_webhooks.py rename to sinch/domains/sms/sinch_events/v1/sms_sinch_event.py index c64dde6e..8a4d5dbf 100644 --- a/sinch/domains/sms/webhooks/v1/sms_webhooks.py +++ b/sinch/domains/sms/sinch_events/v1/sms_sinch_event.py @@ -9,7 +9,7 @@ parse_json, normalize_iso_timestamp, ) -from sinch.domains.sms.webhooks.v1.events import ( +from sinch.domains.sms.sinch_events.v1.events import ( IncomingSMSWebhookEvent, MOTextWebhookEvent, MOBinaryWebhookEvent, @@ -30,7 +30,7 @@ ] -class SmsWebhooks: +class SmsSinchEvent: def __init__(self, app_secret: Optional[str] = None): self.app_secret = app_secret diff --git a/sinch/domains/sms/sms.py b/sinch/domains/sms/sms.py index 3c5c3ff3..2a15ac7e 100644 --- a/sinch/domains/sms/sms.py +++ b/sinch/domains/sms/sms.py @@ -2,7 +2,7 @@ Batches, DeliveryReports, ) -from sinch.domains.sms.webhooks.v1.sms_webhooks import SmsWebhooks +from sinch.domains.sms.sinch_events.v1.sms_sinch_event import SmsSinchEvent class SMS: @@ -17,13 +17,13 @@ def __init__(self, sinch): self.batches = Batches(self._sinch) self.delivery_reports = DeliveryReports(self._sinch) - def webhooks(self, callback_secret: str) -> SmsWebhooks: + def sinch_events(self, callback_secret: str) -> SmsSinchEvent: """ - Create an SMS webhooks handler with the specified callback secret. + Create an SMS Sinch Events handler with the specified callback secret. :param callback_secret: Secret used for webhook validation. :type callback_secret: str - :returns: A configured webhooks handler - :rtype: SmsWebhooks + :returns: A configured Sinch Events handler + :rtype: SmsSinchEvent """ - return SmsWebhooks(callback_secret) + return SmsSinchEvent(callback_secret) diff --git a/sinch/domains/sms/webhooks/v1/internal/__init__.py b/sinch/domains/sms/webhooks/v1/internal/__init__.py deleted file mode 100644 index 329bdf65..00000000 --- a/sinch/domains/sms/webhooks/v1/internal/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -from sinch.domains.sms.webhooks.v1.internal.webhook_event import ( - WebhookEvent, -) - -__all__ = ["WebhookEvent"] diff --git a/tests/e2e/sms/features/steps/webhooks.steps.py b/tests/e2e/sms/features/steps/webhooks.steps.py index 096ae9cd..d153720f 100644 --- a/tests/e2e/sms/features/steps/webhooks.steps.py +++ b/tests/e2e/sms/features/steps/webhooks.steps.py @@ -1,8 +1,8 @@ import requests from datetime import datetime, timezone from behave import given, when, then -from sinch.domains.sms.webhooks.v1.sms_webhooks import SmsWebhooks -from sinch.domains.sms.webhooks.v1.events import ( +from sinch.domains.sms.sinch_events.v1.sms_sinch_event import SmsSinchEvent +from sinch.domains.sms.sinch_events.v1.events import ( MOTextWebhookEvent, ) from sinch.domains.sms.models.v1.response import ( @@ -16,7 +16,7 @@ @given('the SMS Webhooks handler is available') def step_webhook_handler_is_available(context): - context.sms_webhook = SmsWebhooks(SINCH_SMS_CALLBACK_SECRET) + context.sms_webhook = SmsSinchEvent(SINCH_SMS_CALLBACK_SECRET) @when('I send a request to trigger an "incoming SMS" event') diff --git a/tests/unit/domains/sms/v1/endpoints/batches/test_send_batches_endpoint.py b/tests/unit/domains/sms/v1/endpoints/batches/test_send_batches_endpoint.py index f20303b1..41aee1f7 100644 --- a/tests/unit/domains/sms/v1/endpoints/batches/test_send_batches_endpoint.py +++ b/tests/unit/domains/sms/v1/endpoints/batches/test_send_batches_endpoint.py @@ -92,6 +92,21 @@ def test_request_body_expects_text_request_data(text_request_data): assert body["body"] == "Your verification code is 123456" +def test_request_body_uses_callback_url_alias_for_event_destination_target(): + """Ensure event_destination_target is serialized as backend callback_url.""" + request = TextRequest( + to=["+46701234567"], + from_="+46701111111", + body="Hello", + event_destination_target="https://example.com/callback", + ) + endpoint = SendSMSEndpoint("test_project_id", request) + body = json.loads(endpoint.request_body()) + + assert body["callback_url"] == "https://example.com/callback" + assert "event_destination_target" not in body + + def test_request_body_expects_binary_request_data(binary_request_data): """Test that binary request body contains correct fields.""" endpoint = SendSMSEndpoint("test_project_id", binary_request_data) diff --git a/tests/unit/domains/sms/v1/models/internal/test_dry_run_request_model.py b/tests/unit/domains/sms/v1/models/internal/test_dry_run_request_model.py index c308af5a..a3560f01 100644 --- a/tests/unit/domains/sms/v1/models/internal/test_dry_run_request_model.py +++ b/tests/unit/domains/sms/v1/models/internal/test_dry_run_request_model.py @@ -119,7 +119,7 @@ def test_dry_run_text_request_expects_valid_inputs_and_all_fields( delivery_report="summary", send_at=send_at, expire_at=expire_at, - callback_url="https://capybara.com/callback", + event_destination_target="https://capybara.com/callback", client_reference="test-ref", feedback_enabled=True, flash_message=False, @@ -134,7 +134,7 @@ def test_dry_run_text_request_expects_valid_inputs_and_all_fields( assert request.delivery_report == "summary" assert request.send_at == send_at assert request.expire_at == expire_at - assert request.callback_url == "https://capybara.com/callback" + assert request.event_destination_target == "https://capybara.com/callback" assert request.client_reference == "test-ref" assert request.feedback_enabled is True assert request.flash_message is False @@ -191,7 +191,7 @@ def test_dry_run_binary_request_expects_valid_inputs_and_all_fields( delivery_report="full", send_at=send_at, expire_at=expire_at, - callback_url="https://capybara.com/callback", + event_destination_target="https://capybara.com/callback", client_reference="binary-ref", feedback_enabled=False, from_ton=0, @@ -203,7 +203,7 @@ def test_dry_run_binary_request_expects_valid_inputs_and_all_fields( assert request.delivery_report == "full" assert request.send_at == send_at assert request.expire_at == expire_at - assert request.callback_url == "https://capybara.com/callback" + assert request.event_destination_target == "https://capybara.com/callback" assert request.client_reference == "binary-ref" assert request.feedback_enabled is False assert request.from_ton == 0 @@ -256,7 +256,7 @@ def test_dry_run_media_request_expects_valid_inputs_and_all_fields( delivery_report="summary", send_at=send_at, expire_at=expire_at, - callback_url="https://capybara.com/callback", + event_destination_target="https://capybara.com/callback", client_reference="media-ref", feedback_enabled=True, ) @@ -266,7 +266,7 @@ def test_dry_run_media_request_expects_valid_inputs_and_all_fields( assert request.delivery_report == "summary" assert request.send_at == send_at assert request.expire_at == expire_at - assert request.callback_url == "https://capybara.com/callback" + assert request.event_destination_target == "https://capybara.com/callback" assert request.client_reference == "media-ref" assert request.feedback_enabled is True diff --git a/tests/unit/domains/sms/v1/models/internal/test_replace_binary_request_model.py b/tests/unit/domains/sms/v1/models/internal/test_replace_binary_request_model.py index 7e632deb..10eded9c 100644 --- a/tests/unit/domains/sms/v1/models/internal/test_replace_binary_request_model.py +++ b/tests/unit/domains/sms/v1/models/internal/test_replace_binary_request_model.py @@ -39,7 +39,7 @@ def test_replace_binary_request_expects_valid_inputs_and_all_fields( delivery_report="summary", send_at=send_at, expire_at=expire_at, - callback_url="https://capybara.com/callback", + event_destination_target="https://capybara.com/callback", client_reference="test-ref", feedback_enabled=True, from_ton=1, @@ -49,7 +49,7 @@ def test_replace_binary_request_expects_valid_inputs_and_all_fields( assert request.delivery_report == "summary" assert request.send_at == send_at assert request.expire_at == expire_at - assert request.callback_url == "https://capybara.com/callback" + assert request.event_destination_target == "https://capybara.com/callback" assert request.client_reference == "test-ref" assert request.feedback_enabled is True assert request.from_ton == 1 diff --git a/tests/unit/domains/sms/v1/models/internal/test_replace_media_request_model.py b/tests/unit/domains/sms/v1/models/internal/test_replace_media_request_model.py index 49b3b9a5..6b8b30e7 100644 --- a/tests/unit/domains/sms/v1/models/internal/test_replace_media_request_model.py +++ b/tests/unit/domains/sms/v1/models/internal/test_replace_media_request_model.py @@ -49,7 +49,7 @@ def test_replace_media_request_expects_valid_inputs_and_all_fields( delivery_report="full", send_at=send_at, expire_at=expire_at, - callback_url="https://capybara.com/webhook", + event_destination_target="https://capybara.com/webhook", client_reference="capybara-media-batch-123", feedback_enabled=True, strict_validation=True, @@ -62,7 +62,7 @@ def test_replace_media_request_expects_valid_inputs_and_all_fields( assert request.delivery_report == "full" assert request.send_at == send_at assert request.expire_at == expire_at - assert request.callback_url == "https://capybara.com/webhook" + assert request.event_destination_target == "https://capybara.com/webhook" assert request.client_reference == "capybara-media-batch-123" assert request.feedback_enabled is True assert request.strict_validation is True diff --git a/tests/unit/domains/sms/v1/models/internal/test_update_binary_request_with_batch_id_model.py b/tests/unit/domains/sms/v1/models/internal/test_update_binary_request_with_batch_id_model.py index 5587ee7b..90d95c38 100644 --- a/tests/unit/domains/sms/v1/models/internal/test_update_binary_request_with_batch_id_model.py +++ b/tests/unit/domains/sms/v1/models/internal/test_update_binary_request_with_batch_id_model.py @@ -37,7 +37,7 @@ def test_update_binary_request_expects_valid_inputs_and_all_fields( delivery_report="full", send_at=send_at, expire_at=expire_at, - callback_url="https://capybara.com/binary-callback", + event_destination_target="https://capybara.com/binary-callback", client_reference="binary-update-456", feedback_enabled=True, from_ton=3, @@ -52,7 +52,7 @@ def test_update_binary_request_expects_valid_inputs_and_all_fields( assert request.delivery_report == "full" assert request.send_at == send_at assert request.expire_at == expire_at - assert request.callback_url == "https://capybara.com/binary-callback" + assert request.event_destination_target == "https://capybara.com/binary-callback" assert request.client_reference == "binary-update-456" assert request.feedback_enabled is True assert request.from_ton == 3 diff --git a/tests/unit/domains/sms/v1/models/internal/test_update_media_request_with_batch_id_model.py b/tests/unit/domains/sms/v1/models/internal/test_update_media_request_with_batch_id_model.py index fe6b3700..06dda0de 100644 --- a/tests/unit/domains/sms/v1/models/internal/test_update_media_request_with_batch_id_model.py +++ b/tests/unit/domains/sms/v1/models/internal/test_update_media_request_with_batch_id_model.py @@ -46,7 +46,7 @@ def test_update_media_request_expects_valid_inputs_and_all_fields( delivery_report="none", send_at=send_at, expire_at=expire_at, - callback_url="https://capybara.com/media-callback", + event_destination_target="https://capybara.com/media-callback", client_reference="media-update-789", feedback_enabled=True, strict_validation=True, @@ -62,7 +62,7 @@ def test_update_media_request_expects_valid_inputs_and_all_fields( assert request.delivery_report == "none" assert request.send_at == send_at assert request.expire_at == expire_at - assert request.callback_url == "https://capybara.com/media-callback" + assert request.event_destination_target == "https://capybara.com/media-callback" assert request.client_reference == "media-update-789" assert request.feedback_enabled is True assert request.strict_validation is True diff --git a/tests/unit/domains/sms/v1/models/internal/test_update_text_request_with_batch_id_model.py b/tests/unit/domains/sms/v1/models/internal/test_update_text_request_with_batch_id_model.py index 8737571c..23df2edb 100644 --- a/tests/unit/domains/sms/v1/models/internal/test_update_text_request_with_batch_id_model.py +++ b/tests/unit/domains/sms/v1/models/internal/test_update_text_request_with_batch_id_model.py @@ -35,7 +35,7 @@ def test_update_text_request_expects_valid_inputs_and_all_fields( delivery_report="summary", send_at=send_at, expire_at=expire_at, - callback_url="https://capybara.com/webhook", + event_destination_target="https://capybara.com/webhook", client_reference="update-ref-123", feedback_enabled=True, flash_message=True, @@ -54,7 +54,7 @@ def test_update_text_request_expects_valid_inputs_and_all_fields( assert request.delivery_report == "summary" assert request.send_at == send_at assert request.expire_at == expire_at - assert request.callback_url == "https://capybara.com/webhook" + assert request.event_destination_target == "https://capybara.com/webhook" assert request.client_reference == "update-ref-123" assert request.feedback_enabled is True assert request.flash_message is True diff --git a/tests/unit/domains/sms/v1/test_batches.py b/tests/unit/domains/sms/v1/test_batches.py index 23064769..a95c3d64 100644 --- a/tests/unit/domains/sms/v1/test_batches.py +++ b/tests/unit/domains/sms/v1/test_batches.py @@ -193,7 +193,7 @@ def test_batches_send_sms_expects_correct_request( delivery_report="full", send_at=datetime(2024, 6, 6, 9, 25, 0, tzinfo=timezone.utc), expire_at=datetime(2024, 6, 10, 9, 25, 0, tzinfo=timezone.utc), - callback_url="https://example.com/callback", + event_destination_target="https://example.com/callback", client_reference="test-ref", feedback_enabled=True, flash_message=False, @@ -262,7 +262,7 @@ def test_batches_send_binary_expects_correct_request( delivery_report="summary", send_at=datetime(2024, 6, 6, 9, 25, 0, tzinfo=timezone.utc), expire_at=datetime(2024, 6, 10, 9, 25, 0, tzinfo=timezone.utc), - callback_url="https://example.com/callback", + event_destination_target="https://example.com/callback", client_reference="test-ref", feedback_enabled=True, from_ton=1, @@ -330,7 +330,7 @@ def test_batches_send_mms_expects_correct_request( delivery_report="full", send_at=datetime(2024, 6, 6, 9, 25, 0, tzinfo=timezone.utc), expire_at=datetime(2024, 6, 10, 9, 25, 0, tzinfo=timezone.utc), - callback_url="https://example.com/callback", + event_destination_target="https://example.com/callback", client_reference="test-ref", feedback_enabled=True, strict_validation=True,