linq-python 0.55.0__tar.gz → 0.56.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- linq_python-0.56.1/.release-please-manifest.json +3 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/CHANGELOG.md +14 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/PKG-INFO +1 -1
- {linq_python-0.55.0 → linq_python-0.56.1}/api.md +2 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/pyproject.toml +1 -1
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/_version.py +1 -1
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/resources/chats/chats.py +72 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/resources/chats/messages.py +72 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/resources/messages/messages.py +6 -4
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/__init__.py +2 -0
- linq_python-0.56.1/src/linq/types/inline_sticker_param.py +40 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/schemas_text_part_response.py +10 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/shared/__init__.py +1 -0
- linq_python-0.56.1/src/linq/types/shared/inline_sticker_response.py +37 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/shared/text_part_response.py +10 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/text_part_param.py +28 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/webhook_subscription.py +0 -7
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/webhook_subscription_create_response.py +0 -7
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/api_resources/chats/test_messages.py +24 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/api_resources/test_chats.py +24 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/api_resources/test_messages.py +24 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/api_resources/test_webhooks.py +2 -2
- {linq_python-0.55.0 → linq_python-0.56.1}/uv.lock +1 -1
- linq_python-0.55.0/.release-please-manifest.json +0 -3
- {linq_python-0.55.0 → linq_python-0.56.1}/.gitignore +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/CONTRIBUTING.md +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/LICENSE +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/README.md +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/SECURITY.md +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/bin/check-release-environment +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/bin/publish-pypi +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/examples/.keep +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/release-please-config.json +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/requirements-dev.lock +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/__init__.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/_base_client.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/_client.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/_compat.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/_constants.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/_exceptions.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/_files.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/_models.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/_qs.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/_resource.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/_streaming.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/_types.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/_utils/__init__.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/_utils/_compat.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/_utils/_datetime_parse.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/_utils/_json.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/_utils/_logs.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/_utils/_path.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/_utils/_proxy.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/_utils/_reflection.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/_utils/_resources_proxy.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/_utils/_streams.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/_utils/_sync.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/_utils/_transform.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/_utils/_typing.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/_utils/_utils.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/lib/.keep +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/pagination.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/py.typed +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/resources/__init__.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/resources/attachments.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/resources/available_number.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/resources/blocked_handles.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/resources/capability.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/resources/chats/__init__.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/resources/chats/background.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/resources/chats/location.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/resources/chats/participants.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/resources/chats/polls.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/resources/chats/typing.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/resources/contact_card.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/resources/experiences.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/resources/messages/__init__.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/resources/messages/poll.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/resources/payment_handles.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/resources/payment_providers.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/resources/payment_requests.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/resources/payments.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/resources/phone_numbers.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/resources/phonenumbers.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/resources/webhook_events.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/resources/webhook_subscriptions.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/resources/webhooks.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/attachment_create_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/attachment_create_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/attachment_retrieve_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/available_number_retrieve_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/available_number_retrieve_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/blocked_handle_block_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/blocked_handle_block_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/blocked_handle_entry.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/blocked_handle_list_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/blocked_handle_unblock_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/capability_check_RCS_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/capability_check_i_message_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chat.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chat_background_update_failed_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chat_background_updated_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chat_create_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chat_create_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chat_created_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chat_group_icon_update_failed_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chat_group_icon_updated_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chat_group_name_update_failed_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chat_group_name_updated_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chat_leave_chat_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chat_list_chats_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chat_send_voicememo_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chat_send_voicememo_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chat_typing_indicator_started_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chat_typing_indicator_stopped_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chat_update_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chat_update_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chats/__init__.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chats/background_set_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chats/get_chat_location_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chats/location_request_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chats/location_stop_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chats/message_list_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chats/message_send_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chats/message_send_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chats/participant_add_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chats/participant_add_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chats/participant_remove_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chats/participant_remove_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chats/poll.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chats/poll_create_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chats/poll_envelope.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chats/sent_message.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/chats/stop_chat_location_sharing_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/connection_created_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/connection_revoked_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/contact_card_create_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/contact_card_received_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/contact_card_retrieve_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/contact_card_retrieve_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/contact_card_update_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/experience_list_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/experience_retrieve_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/handle_check_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/link_part_param.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/location_sharing_started_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/location_sharing_stopped_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/media_part_param.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/message.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/message_add_reaction_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/message_add_reaction_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/message_content_param.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/message_create_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/message_create_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/message_delivered_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/message_edited_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/message_effect.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/message_effect_param.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/message_event_v2.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/message_failed_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/message_list_messages_thread_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/message_read_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/message_received_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/message_sent_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/message_update_app_card_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/message_update_app_card_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/message_update_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/message_update_sticker_placement_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/message_update_sticker_placement_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/messages/__init__.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/messages/poll_add_options_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/messages/poll_vote_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/participant_added_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/participant_removed_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/payment.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/payment_authorized_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/payment_canceled_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/payment_create_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/payment_credentials_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/payment_declined_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/payment_expired_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/payment_handle_connection.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/payment_handle_verify_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/payment_provider.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/payment_provider_connect_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/payment_provider_connect_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/payment_request.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/payment_request_create_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/payment_request_list_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/payment_request_list_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/payment_succeeded_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/phone_number_assigned_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/phone_number_list_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/phone_number_released_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/phone_number_status_updated_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/phone_number_update_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/phone_number_update_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/phonenumber_list_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/poll_delivered_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/poll_failed_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/poll_reaction_added_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/poll_read_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/poll_received_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/poll_sent_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/poll_updated_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/poll_vote_added_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/poll_vote_removed_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/reaction_added_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/reaction_event_base.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/reaction_removed_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/reply_to.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/reply_to_param.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/reputation_action_item.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/reputation_audit.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/reputation_audit_started.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/reputation_driver.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/reputation_driver_key.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/reputation_evidence.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/reputation_opt_out_chat.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/reputation_report.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/reputation_unhealthy_chat.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/schemas_media_part_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/schemas_message_effect.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/set_contact_card.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/shared/chat_handle.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/shared/link_part_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/shared/media_part_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/shared/reaction.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/shared/reaction_type.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/shared/service_type.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/shared/text_decoration.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/shared_params/__init__.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/shared_params/reaction_type.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/shared_params/service_type.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/shared_params/text_decoration.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/supported_content_type.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/unwrap_webhook_event.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/webhook_event_list_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/webhook_event_type.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/webhook_subscription_create_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/webhook_subscription_list_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/webhook_subscription_update_params.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/__init__.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/api_resources/__init__.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/api_resources/chats/__init__.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/api_resources/chats/test_background.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/api_resources/chats/test_location.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/api_resources/chats/test_participants.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/api_resources/chats/test_polls.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/api_resources/chats/test_typing.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/api_resources/messages/__init__.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/api_resources/messages/test_poll.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/api_resources/test_attachments.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/api_resources/test_available_number.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/api_resources/test_blocked_handles.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/api_resources/test_capability.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/api_resources/test_contact_card.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/api_resources/test_experiences.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/api_resources/test_payment_handles.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/api_resources/test_payment_providers.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/api_resources/test_payment_requests.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/api_resources/test_payments.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/api_resources/test_phone_numbers.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/api_resources/test_phonenumbers.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/api_resources/test_webhook_events.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/api_resources/test_webhook_subscriptions.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/conftest.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/sample_file.txt +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/test_client.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/test_extract_files.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/test_files.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/test_models.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/test_qs.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/test_required_args.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/test_response.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/test_streaming.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/test_transform.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/test_utils/test_datetime_parse.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/test_utils/test_json.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/test_utils/test_path.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/test_utils/test_proxy.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/test_utils/test_typing.py +0 -0
- {linq_python-0.55.0 → linq_python-0.56.1}/tests/utils.py +0 -0
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.56.1](https://github.com/linq-team/linq-python/compare/v0.56.0...v0.56.1) (2026-09-16)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* remove environment_id field from subscription objects ([13fd1dd](https://github.com/linq-team/linq-python/commit/13fd1ddbdbe6f11f9acdfee77f64eda1ba456445))
|
|
9
|
+
|
|
10
|
+
## [0.56.0](https://github.com/linq-team/linq-python/compare/v0.55.0...v0.56.0) (2026-09-15)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
* add inline stickers support for imessage text messages ([abe79e1](https://github.com/linq-team/linq-python/commit/abe79e1abd474d6deec9627f3a32f13c00e19fcb))
|
|
16
|
+
|
|
3
17
|
## [0.55.0](https://github.com/linq-team/linq-python/compare/v0.54.0...v0.55.0) (2026-09-14)
|
|
4
18
|
|
|
5
19
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: linq-python
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.56.1
|
|
4
4
|
Summary: The official Python library for the linq-api-v3 API
|
|
5
5
|
Project-URL: Homepage, https://github.com/linq-team/linq-python
|
|
6
6
|
Project-URL: Repository, https://github.com/linq-team/linq-python
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
```python
|
|
4
4
|
from linq.types import (
|
|
5
5
|
ChatHandle,
|
|
6
|
+
InlineStickerResponse,
|
|
6
7
|
LinkPartResponse,
|
|
7
8
|
MediaPartResponse,
|
|
8
9
|
Reaction,
|
|
@@ -20,6 +21,7 @@ Types:
|
|
|
20
21
|
```python
|
|
21
22
|
from linq.types import (
|
|
22
23
|
Chat,
|
|
24
|
+
InlineSticker,
|
|
23
25
|
LinkPart,
|
|
24
26
|
MediaPart,
|
|
25
27
|
MessageContent,
|
|
@@ -418,6 +418,42 @@ class ChatsResource(SyncAPIResource):
|
|
|
418
418
|
participants, iMessage recipients see the decorations and SMS/RCS recipients
|
|
419
419
|
receive the same message as plain text.
|
|
420
420
|
|
|
421
|
+
## Inline Stickers (iMessage only)
|
|
422
|
+
|
|
423
|
+
Use the `inline_stickers` array on a text part to place stickers inside the
|
|
424
|
+
text. Each sticker replaces the characters in its `range: [start, end)` and
|
|
425
|
+
takes its image from exactly one of `url` or `attachment_id` — an image uploaded
|
|
426
|
+
with `POST /v3/attachments`.
|
|
427
|
+
|
|
428
|
+
```json
|
|
429
|
+
{
|
|
430
|
+
"type": "text",
|
|
431
|
+
"value": "Happy birthday 🎂! 🎉🎉",
|
|
432
|
+
"inline_stickers": [
|
|
433
|
+
{
|
|
434
|
+
"range": [15, 17],
|
|
435
|
+
"attachment_id": "550e8400-e29b-41d4-a716-446655440000"
|
|
436
|
+
},
|
|
437
|
+
{
|
|
438
|
+
"range": [19, 21],
|
|
439
|
+
"attachment_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
|
|
440
|
+
},
|
|
441
|
+
{
|
|
442
|
+
"range": [21, 23],
|
|
443
|
+
"attachment_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
|
|
444
|
+
}
|
|
445
|
+
]
|
|
446
|
+
}
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
**Note:** A sticker takes the place of the characters it covers, so they are
|
|
450
|
+
hidden on iMessage: `"Sip cup"` with a sticker on `cup` reads "Sip [sticker]".
|
|
451
|
+
Those characters are what SMS and RCS recipients receive (the stickers are
|
|
452
|
+
dropped and `value` is sent as written) and what VoiceOver reads. To keep a word
|
|
453
|
+
visible, give the sticker its own placeholder: `"Sip cup 🥤"` with the range on
|
|
454
|
+
`🥤`. Up to 100 stickers and 10 different images per part; copies of one image
|
|
455
|
+
count as one.
|
|
456
|
+
|
|
421
457
|
## First-Message Link Restriction
|
|
422
458
|
|
|
423
459
|
To protect sender deliverability, the **first outbound message** of a new chat
|
|
@@ -1189,6 +1225,42 @@ class AsyncChatsResource(AsyncAPIResource):
|
|
|
1189
1225
|
participants, iMessage recipients see the decorations and SMS/RCS recipients
|
|
1190
1226
|
receive the same message as plain text.
|
|
1191
1227
|
|
|
1228
|
+
## Inline Stickers (iMessage only)
|
|
1229
|
+
|
|
1230
|
+
Use the `inline_stickers` array on a text part to place stickers inside the
|
|
1231
|
+
text. Each sticker replaces the characters in its `range: [start, end)` and
|
|
1232
|
+
takes its image from exactly one of `url` or `attachment_id` — an image uploaded
|
|
1233
|
+
with `POST /v3/attachments`.
|
|
1234
|
+
|
|
1235
|
+
```json
|
|
1236
|
+
{
|
|
1237
|
+
"type": "text",
|
|
1238
|
+
"value": "Happy birthday 🎂! 🎉🎉",
|
|
1239
|
+
"inline_stickers": [
|
|
1240
|
+
{
|
|
1241
|
+
"range": [15, 17],
|
|
1242
|
+
"attachment_id": "550e8400-e29b-41d4-a716-446655440000"
|
|
1243
|
+
},
|
|
1244
|
+
{
|
|
1245
|
+
"range": [19, 21],
|
|
1246
|
+
"attachment_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
|
|
1247
|
+
},
|
|
1248
|
+
{
|
|
1249
|
+
"range": [21, 23],
|
|
1250
|
+
"attachment_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
|
|
1251
|
+
}
|
|
1252
|
+
]
|
|
1253
|
+
}
|
|
1254
|
+
```
|
|
1255
|
+
|
|
1256
|
+
**Note:** A sticker takes the place of the characters it covers, so they are
|
|
1257
|
+
hidden on iMessage: `"Sip cup"` with a sticker on `cup` reads "Sip [sticker]".
|
|
1258
|
+
Those characters are what SMS and RCS recipients receive (the stickers are
|
|
1259
|
+
dropped and `value` is sent as written) and what VoiceOver reads. To keep a word
|
|
1260
|
+
visible, give the sticker its own placeholder: `"Sip cup 🥤"` with the range on
|
|
1261
|
+
`🥤`. Up to 100 stickers and 10 different images per part; copies of one image
|
|
1262
|
+
count as one.
|
|
1263
|
+
|
|
1192
1264
|
## First-Message Link Restriction
|
|
1193
1265
|
|
|
1194
1266
|
To protect sender deliverability, the **first outbound message** of a new chat
|
|
@@ -227,6 +227,42 @@ class MessagesResource(SyncAPIResource):
|
|
|
227
227
|
participants, iMessage recipients see the decorations and SMS/RCS recipients
|
|
228
228
|
receive the same message as plain text.
|
|
229
229
|
|
|
230
|
+
## Inline Stickers (iMessage only)
|
|
231
|
+
|
|
232
|
+
Use the `inline_stickers` array on a text part to place stickers inside the
|
|
233
|
+
text. Each sticker replaces the characters in its `range: [start, end)` and
|
|
234
|
+
takes its image from exactly one of `url` or `attachment_id` — an image uploaded
|
|
235
|
+
with `POST /v3/attachments`.
|
|
236
|
+
|
|
237
|
+
```json
|
|
238
|
+
{
|
|
239
|
+
"type": "text",
|
|
240
|
+
"value": "Happy birthday 🎂! 🎉🎉",
|
|
241
|
+
"inline_stickers": [
|
|
242
|
+
{
|
|
243
|
+
"range": [15, 17],
|
|
244
|
+
"attachment_id": "550e8400-e29b-41d4-a716-446655440000"
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
"range": [19, 21],
|
|
248
|
+
"attachment_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
"range": [21, 23],
|
|
252
|
+
"attachment_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
|
|
253
|
+
}
|
|
254
|
+
]
|
|
255
|
+
}
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
**Note:** A sticker takes the place of the characters it covers, so they are
|
|
259
|
+
hidden on iMessage: `"Sip cup"` with a sticker on `cup` reads "Sip [sticker]".
|
|
260
|
+
Those characters are what SMS and RCS recipients receive (the stickers are
|
|
261
|
+
dropped and `value` is sent as written) and what VoiceOver reads. To keep a word
|
|
262
|
+
visible, give the sticker its own placeholder: `"Sip cup 🥤"` with the range on
|
|
263
|
+
`🥤`. Up to 100 stickers and 10 different images per part; copies of one image
|
|
264
|
+
count as one.
|
|
265
|
+
|
|
230
266
|
Args:
|
|
231
267
|
message: Message content container. Groups all message-related fields together,
|
|
232
268
|
separating the "what" (message content) from the "where" (routing fields like
|
|
@@ -472,6 +508,42 @@ class AsyncMessagesResource(AsyncAPIResource):
|
|
|
472
508
|
participants, iMessage recipients see the decorations and SMS/RCS recipients
|
|
473
509
|
receive the same message as plain text.
|
|
474
510
|
|
|
511
|
+
## Inline Stickers (iMessage only)
|
|
512
|
+
|
|
513
|
+
Use the `inline_stickers` array on a text part to place stickers inside the
|
|
514
|
+
text. Each sticker replaces the characters in its `range: [start, end)` and
|
|
515
|
+
takes its image from exactly one of `url` or `attachment_id` — an image uploaded
|
|
516
|
+
with `POST /v3/attachments`.
|
|
517
|
+
|
|
518
|
+
```json
|
|
519
|
+
{
|
|
520
|
+
"type": "text",
|
|
521
|
+
"value": "Happy birthday 🎂! 🎉🎉",
|
|
522
|
+
"inline_stickers": [
|
|
523
|
+
{
|
|
524
|
+
"range": [15, 17],
|
|
525
|
+
"attachment_id": "550e8400-e29b-41d4-a716-446655440000"
|
|
526
|
+
},
|
|
527
|
+
{
|
|
528
|
+
"range": [19, 21],
|
|
529
|
+
"attachment_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
|
|
530
|
+
},
|
|
531
|
+
{
|
|
532
|
+
"range": [21, 23],
|
|
533
|
+
"attachment_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
|
|
534
|
+
}
|
|
535
|
+
]
|
|
536
|
+
}
|
|
537
|
+
```
|
|
538
|
+
|
|
539
|
+
**Note:** A sticker takes the place of the characters it covers, so they are
|
|
540
|
+
hidden on iMessage: `"Sip cup"` with a sticker on `cup` reads "Sip [sticker]".
|
|
541
|
+
Those characters are what SMS and RCS recipients receive (the stickers are
|
|
542
|
+
dropped and `value` is sent as written) and what VoiceOver reads. To keep a word
|
|
543
|
+
visible, give the sticker its own placeholder: `"Sip cup 🥤"` with the range on
|
|
544
|
+
`🥤`. Up to 100 stickers and 10 different images per part; copies of one image
|
|
545
|
+
count as one.
|
|
546
|
+
|
|
475
547
|
Args:
|
|
476
548
|
message: Message content container. Groups all message-related fields together,
|
|
477
549
|
separating the "what" (message content) from the "where" (routing fields like
|
|
@@ -276,10 +276,11 @@ class MessagesResource(SyncAPIResource):
|
|
|
276
276
|
- Voice memos are **not** supported here. To send an iMessage voice-memo bubble,
|
|
277
277
|
use `POST /v3/chats/{chatId}/voicememo` with a known chat id.
|
|
278
278
|
|
|
279
|
-
## Service preference, effects, decorations
|
|
279
|
+
## Service preference, effects, decorations, inline stickers
|
|
280
280
|
|
|
281
281
|
Set `message.preferred_service` (`iMessage` | `RCS` | `SMS`), `message.effect`,
|
|
282
|
-
and per-part `text_decorations` exactly as on the other
|
|
282
|
+
and per-part `text_decorations` and `inline_stickers` exactly as on the other
|
|
283
|
+
send endpoints.
|
|
283
284
|
|
|
284
285
|
Always responds `202 Accepted` — chat creation is incidental to the send.
|
|
285
286
|
|
|
@@ -1063,10 +1064,11 @@ class AsyncMessagesResource(AsyncAPIResource):
|
|
|
1063
1064
|
- Voice memos are **not** supported here. To send an iMessage voice-memo bubble,
|
|
1064
1065
|
use `POST /v3/chats/{chatId}/voicememo` with a known chat id.
|
|
1065
1066
|
|
|
1066
|
-
## Service preference, effects, decorations
|
|
1067
|
+
## Service preference, effects, decorations, inline stickers
|
|
1067
1068
|
|
|
1068
1069
|
Set `message.preferred_service` (`iMessage` | `RCS` | `SMS`), `message.effect`,
|
|
1069
|
-
and per-part `text_decorations` exactly as on the other
|
|
1070
|
+
and per-part `text_decorations` and `inline_stickers` exactly as on the other
|
|
1071
|
+
send endpoints.
|
|
1070
1072
|
|
|
1071
1073
|
Always responds `202 Accepted` — chat creation is incidental to the send.
|
|
1072
1074
|
|
|
@@ -12,6 +12,7 @@ from .shared import (
|
|
|
12
12
|
LinkPartResponse as LinkPartResponse,
|
|
13
13
|
TextPartResponse as TextPartResponse,
|
|
14
14
|
MediaPartResponse as MediaPartResponse,
|
|
15
|
+
InlineStickerResponse as InlineStickerResponse,
|
|
15
16
|
)
|
|
16
17
|
from .message import Message as Message
|
|
17
18
|
from .payment import Payment as Payment
|
|
@@ -36,6 +37,7 @@ from .reputation_evidence import ReputationEvidence as ReputationEvidence
|
|
|
36
37
|
from .blocked_handle_entry import BlockedHandleEntry as BlockedHandleEntry
|
|
37
38
|
from .chat_create_response import ChatCreateResponse as ChatCreateResponse
|
|
38
39
|
from .chat_update_response import ChatUpdateResponse as ChatUpdateResponse
|
|
40
|
+
from .inline_sticker_param import InlineStickerParam as InlineStickerParam
|
|
39
41
|
from .message_effect_param import MessageEffectParam as MessageEffectParam
|
|
40
42
|
from .unwrap_webhook_event import UnwrapWebhookEvent as UnwrapWebhookEvent
|
|
41
43
|
from .webhook_subscription import WebhookSubscription as WebhookSubscription
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Iterable
|
|
6
|
+
from typing_extensions import Required, TypedDict
|
|
7
|
+
|
|
8
|
+
__all__ = ["InlineStickerParam"]
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class InlineStickerParam(TypedDict, total=False):
|
|
12
|
+
"""
|
|
13
|
+
A sticker image placed inside the text of a part, replacing the characters in `range`.
|
|
14
|
+
Provide exactly one of `url` or `attachment_id`.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
range: Required[Iterable[int]]
|
|
18
|
+
"""
|
|
19
|
+
Character range `[start, end)` in the `value` string that the sticker replaces.
|
|
20
|
+
`start` is inclusive, `end` is exclusive. Those characters are hidden on
|
|
21
|
+
iMessage and sent as written on SMS and RCS. _Characters are measured as UTF-16
|
|
22
|
+
code units. Most characters count as 1; some emoji count as 2._
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
attachment_id: str
|
|
26
|
+
"""Reference to a sticker image pre-uploaded via `POST /v3/attachments`.
|
|
27
|
+
|
|
28
|
+
Exactly one of `url` or `attachment_id` is required.
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
url: str
|
|
32
|
+
"""
|
|
33
|
+
Linq attachment URL of the sticker image — the `download_url` returned by
|
|
34
|
+
`POST /v3/attachments`.
|
|
35
|
+
|
|
36
|
+
The image must already be stored with us. To use an image from elsewhere, upload
|
|
37
|
+
it with `POST /v3/attachments` first and pass `attachment_id`.
|
|
38
|
+
|
|
39
|
+
Exactly one of `url` or `attachment_id` is required.
|
|
40
|
+
"""
|
|
@@ -5,6 +5,7 @@ from typing_extensions import Literal
|
|
|
5
5
|
|
|
6
6
|
from .._models import BaseModel
|
|
7
7
|
from .shared.text_decoration import TextDecoration
|
|
8
|
+
from .shared.inline_sticker_response import InlineStickerResponse
|
|
8
9
|
|
|
9
10
|
__all__ = ["SchemasTextPartResponse", "Mention"]
|
|
10
11
|
|
|
@@ -42,6 +43,15 @@ class SchemasTextPartResponse(BaseModel):
|
|
|
42
43
|
value: str
|
|
43
44
|
"""The text content"""
|
|
44
45
|
|
|
46
|
+
inline_stickers: Optional[List[InlineStickerResponse]] = None
|
|
47
|
+
"""Stickers placed inside the text, in the order they appear in `value`.
|
|
48
|
+
|
|
49
|
+
`null` when the part has none.
|
|
50
|
+
|
|
51
|
+
Set on messages sent with `inline_stickers`. An inline sticker received over
|
|
52
|
+
iMessage currently arrives as a separate media part.
|
|
53
|
+
"""
|
|
54
|
+
|
|
45
55
|
mention: Optional[str] = None
|
|
46
56
|
"""DEPRECATED: Use `mentions` instead.
|
|
47
57
|
|
|
@@ -8,3 +8,4 @@ from .text_decoration import TextDecoration as TextDecoration
|
|
|
8
8
|
from .link_part_response import LinkPartResponse as LinkPartResponse
|
|
9
9
|
from .text_part_response import TextPartResponse as TextPartResponse
|
|
10
10
|
from .media_part_response import MediaPartResponse as MediaPartResponse
|
|
11
|
+
from .inline_sticker_response import InlineStickerResponse as InlineStickerResponse
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
+
|
|
3
|
+
from typing import List, Optional
|
|
4
|
+
|
|
5
|
+
from ..._models import BaseModel
|
|
6
|
+
|
|
7
|
+
__all__ = ["InlineStickerResponse"]
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class InlineStickerResponse(BaseModel):
|
|
11
|
+
"""
|
|
12
|
+
One sticker image placed inside the text of a part: `id`, `url` and the image details.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
range: List[int]
|
|
16
|
+
"""Character range `[start, end)` in `value` that the sticker replaces.
|
|
17
|
+
|
|
18
|
+
Those characters are hidden on iMessage and sent as written on SMS and RCS.
|
|
19
|
+
_Characters are measured as UTF-16 code units. Most characters count as 1; some
|
|
20
|
+
emoji count as 2._
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
id: Optional[str] = None
|
|
24
|
+
"""Attachment ID of the sticker image."""
|
|
25
|
+
|
|
26
|
+
file_name: Optional[str] = None
|
|
27
|
+
"""Filename of the sticker"""
|
|
28
|
+
|
|
29
|
+
mime_type: Optional[str] = None
|
|
30
|
+
"""MIME type of the sticker image"""
|
|
31
|
+
|
|
32
|
+
url: Optional[str] = None
|
|
33
|
+
"""URL for downloading the sticker image.
|
|
34
|
+
|
|
35
|
+
Permanent for a normal upload; a time-limited signed URL when the image is an
|
|
36
|
+
ephemeral attachment.
|
|
37
|
+
"""
|
|
@@ -6,6 +6,7 @@ from typing_extensions import Literal
|
|
|
6
6
|
from .reaction import Reaction
|
|
7
7
|
from ..._models import BaseModel
|
|
8
8
|
from .text_decoration import TextDecoration
|
|
9
|
+
from .inline_sticker_response import InlineStickerResponse
|
|
9
10
|
|
|
10
11
|
__all__ = ["TextPartResponse", "Mention"]
|
|
11
12
|
|
|
@@ -46,6 +47,15 @@ class TextPartResponse(BaseModel):
|
|
|
46
47
|
value: str
|
|
47
48
|
"""The text content"""
|
|
48
49
|
|
|
50
|
+
inline_stickers: Optional[List[InlineStickerResponse]] = None
|
|
51
|
+
"""Stickers placed inside the text, in the order they appear in `value`.
|
|
52
|
+
|
|
53
|
+
`null` when the part has none.
|
|
54
|
+
|
|
55
|
+
Set on messages sent with `inline_stickers`. An inline sticker received over
|
|
56
|
+
iMessage currently arrives as a separate media part.
|
|
57
|
+
"""
|
|
58
|
+
|
|
49
59
|
mention: Optional[str] = None
|
|
50
60
|
"""DEPRECATED: Use `mentions` instead.
|
|
51
61
|
|
|
@@ -5,6 +5,7 @@ from __future__ import annotations
|
|
|
5
5
|
from typing import Iterable
|
|
6
6
|
from typing_extensions import Literal, Required, TypedDict
|
|
7
7
|
|
|
8
|
+
from .inline_sticker_param import InlineStickerParam
|
|
8
9
|
from .shared_params.text_decoration import TextDecoration
|
|
9
10
|
|
|
10
11
|
__all__ = ["TextPartParam"]
|
|
@@ -22,6 +23,33 @@ class TextPartParam(TypedDict, total=False):
|
|
|
22
23
|
formatting and animations (iMessage only).
|
|
23
24
|
"""
|
|
24
25
|
|
|
26
|
+
inline_stickers: Iterable[InlineStickerParam]
|
|
27
|
+
"""
|
|
28
|
+
Optional stickers placed inside the text, in the line with the words (iMessage
|
|
29
|
+
only).
|
|
30
|
+
|
|
31
|
+
Each sticker replaces the characters in its `range` `[start, end)` of `value`,
|
|
32
|
+
and takes its image from exactly one of `url` or `attachment_id` — an image
|
|
33
|
+
uploaded with `POST /v3/attachments`. The characters a sticker covers are hidden
|
|
34
|
+
on iMessage and are what SMS and RCS recipients receive and VoiceOver reads, so
|
|
35
|
+
cover something that stands in for the sticker (`"🎂"`, `"[cake]"`). To keep a
|
|
36
|
+
word visible, give the sticker its own placeholder: `"Sip cup 🥤"` with the
|
|
37
|
+
range on `🥤`.
|
|
38
|
+
|
|
39
|
+
Up to 100 stickers and 10 different images per part. Copies of one image count
|
|
40
|
+
as one: twenty copies of one sticker use one of the 10. An animated image
|
|
41
|
+
arrives as a still.
|
|
42
|
+
|
|
43
|
+
Stickers cannot overlap each other or a `text_decorations` range, cannot split a
|
|
44
|
+
character, and cannot be combined with `mention`.
|
|
45
|
+
|
|
46
|
+
_Characters are measured as UTF-16 code units. Most characters count as 1; some
|
|
47
|
+
emoji count as 2._
|
|
48
|
+
|
|
49
|
+
**Note:** on SMS and RCS the stickers are dropped and `value` is sent as plain
|
|
50
|
+
text.
|
|
51
|
+
"""
|
|
52
|
+
|
|
25
53
|
mention: str
|
|
26
54
|
"""Mention a chat participant.
|
|
27
55
|
|
|
@@ -28,13 +28,6 @@ class WebhookSubscription(BaseModel):
|
|
|
28
28
|
updated_at: datetime
|
|
29
29
|
"""When the subscription was last updated"""
|
|
30
30
|
|
|
31
|
-
environment_id: Optional[str] = None
|
|
32
|
-
"""Environment this subscription belongs to.
|
|
33
|
-
|
|
34
|
-
Null means production. Only events from lines in the same environment are
|
|
35
|
-
delivered.
|
|
36
|
-
"""
|
|
37
|
-
|
|
38
31
|
phone_numbers: Optional[List[str]] = None
|
|
39
32
|
"""Phone numbers this subscription filters for.
|
|
40
33
|
|
{linq_python-0.55.0 → linq_python-0.56.1}/src/linq/types/webhook_subscription_create_response.py
RENAMED
|
@@ -39,13 +39,6 @@ class WebhookSubscriptionCreateResponse(BaseModel):
|
|
|
39
39
|
updated_at: datetime
|
|
40
40
|
"""When the subscription was last updated"""
|
|
41
41
|
|
|
42
|
-
environment_id: Optional[str] = None
|
|
43
|
-
"""Environment this subscription belongs to.
|
|
44
|
-
|
|
45
|
-
Null means production. Only events from lines in the same environment are
|
|
46
|
-
delivered.
|
|
47
|
-
"""
|
|
48
|
-
|
|
49
42
|
phone_numbers: Optional[List[str]] = None
|
|
50
43
|
"""Phone numbers this subscription filters for.
|
|
51
44
|
|
|
@@ -100,6 +100,18 @@ class TestMessages:
|
|
|
100
100
|
{
|
|
101
101
|
"type": "text",
|
|
102
102
|
"value": "Hello, world!",
|
|
103
|
+
"inline_stickers": [
|
|
104
|
+
{
|
|
105
|
+
"range": [15, 17],
|
|
106
|
+
"attachment_id": "550e8400-e29b-41d4-a716-446655440000",
|
|
107
|
+
"url": "https://cdn.linqapp.com/attachments/partners/acme/550e8400-e29b-41d4-a716-446655440000/sticker.png",
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"range": [19, 21],
|
|
111
|
+
"attachment_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
|
|
112
|
+
"url": "https://cdn.linqapp.com/attachments/partners/acme/550e8400-e29b-41d4-a716-446655440000/sticker.png",
|
|
113
|
+
},
|
|
114
|
+
],
|
|
103
115
|
"mention": "+14155551234",
|
|
104
116
|
"mention_range": [4, 9],
|
|
105
117
|
"text_decorations": [
|
|
@@ -250,6 +262,18 @@ class TestAsyncMessages:
|
|
|
250
262
|
{
|
|
251
263
|
"type": "text",
|
|
252
264
|
"value": "Hello, world!",
|
|
265
|
+
"inline_stickers": [
|
|
266
|
+
{
|
|
267
|
+
"range": [15, 17],
|
|
268
|
+
"attachment_id": "550e8400-e29b-41d4-a716-446655440000",
|
|
269
|
+
"url": "https://cdn.linqapp.com/attachments/partners/acme/550e8400-e29b-41d4-a716-446655440000/sticker.png",
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
"range": [19, 21],
|
|
273
|
+
"attachment_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
|
|
274
|
+
"url": "https://cdn.linqapp.com/attachments/partners/acme/550e8400-e29b-41d4-a716-446655440000/sticker.png",
|
|
275
|
+
},
|
|
276
|
+
],
|
|
253
277
|
"mention": "+14155551234",
|
|
254
278
|
"mention_range": [4, 9],
|
|
255
279
|
"text_decorations": [
|
|
@@ -54,6 +54,18 @@ class TestChats:
|
|
|
54
54
|
{
|
|
55
55
|
"type": "text",
|
|
56
56
|
"value": "Hello! How can I help you today?",
|
|
57
|
+
"inline_stickers": [
|
|
58
|
+
{
|
|
59
|
+
"range": [15, 17],
|
|
60
|
+
"attachment_id": "550e8400-e29b-41d4-a716-446655440000",
|
|
61
|
+
"url": "https://cdn.linqapp.com/attachments/partners/acme/550e8400-e29b-41d4-a716-446655440000/sticker.png",
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"range": [19, 21],
|
|
65
|
+
"attachment_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
|
|
66
|
+
"url": "https://cdn.linqapp.com/attachments/partners/acme/550e8400-e29b-41d4-a716-446655440000/sticker.png",
|
|
67
|
+
},
|
|
68
|
+
],
|
|
57
69
|
"mention": "+14155551234",
|
|
58
70
|
"mention_range": [4, 9],
|
|
59
71
|
"text_decorations": [
|
|
@@ -459,6 +471,18 @@ class TestAsyncChats:
|
|
|
459
471
|
{
|
|
460
472
|
"type": "text",
|
|
461
473
|
"value": "Hello! How can I help you today?",
|
|
474
|
+
"inline_stickers": [
|
|
475
|
+
{
|
|
476
|
+
"range": [15, 17],
|
|
477
|
+
"attachment_id": "550e8400-e29b-41d4-a716-446655440000",
|
|
478
|
+
"url": "https://cdn.linqapp.com/attachments/partners/acme/550e8400-e29b-41d4-a716-446655440000/sticker.png",
|
|
479
|
+
},
|
|
480
|
+
{
|
|
481
|
+
"range": [19, 21],
|
|
482
|
+
"attachment_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
|
|
483
|
+
"url": "https://cdn.linqapp.com/attachments/partners/acme/550e8400-e29b-41d4-a716-446655440000/sticker.png",
|
|
484
|
+
},
|
|
485
|
+
],
|
|
462
486
|
"mention": "+14155551234",
|
|
463
487
|
"mention_range": [4, 9],
|
|
464
488
|
"text_decorations": [
|
|
@@ -52,6 +52,18 @@ class TestMessages:
|
|
|
52
52
|
{
|
|
53
53
|
"type": "text",
|
|
54
54
|
"value": "Hi! Thanks for reaching out — how can we help?",
|
|
55
|
+
"inline_stickers": [
|
|
56
|
+
{
|
|
57
|
+
"range": [15, 17],
|
|
58
|
+
"attachment_id": "550e8400-e29b-41d4-a716-446655440000",
|
|
59
|
+
"url": "https://cdn.linqapp.com/attachments/partners/acme/550e8400-e29b-41d4-a716-446655440000/sticker.png",
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"range": [19, 21],
|
|
63
|
+
"attachment_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
|
|
64
|
+
"url": "https://cdn.linqapp.com/attachments/partners/acme/550e8400-e29b-41d4-a716-446655440000/sticker.png",
|
|
65
|
+
},
|
|
66
|
+
],
|
|
55
67
|
"mention": "+14155551234",
|
|
56
68
|
"mention_range": [4, 9],
|
|
57
69
|
"text_decorations": [
|
|
@@ -557,6 +569,18 @@ class TestAsyncMessages:
|
|
|
557
569
|
{
|
|
558
570
|
"type": "text",
|
|
559
571
|
"value": "Hi! Thanks for reaching out — how can we help?",
|
|
572
|
+
"inline_stickers": [
|
|
573
|
+
{
|
|
574
|
+
"range": [15, 17],
|
|
575
|
+
"attachment_id": "550e8400-e29b-41d4-a716-446655440000",
|
|
576
|
+
"url": "https://cdn.linqapp.com/attachments/partners/acme/550e8400-e29b-41d4-a716-446655440000/sticker.png",
|
|
577
|
+
},
|
|
578
|
+
{
|
|
579
|
+
"range": [19, 21],
|
|
580
|
+
"attachment_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
|
|
581
|
+
"url": "https://cdn.linqapp.com/attachments/partners/acme/550e8400-e29b-41d4-a716-446655440000/sticker.png",
|
|
582
|
+
},
|
|
583
|
+
],
|
|
560
584
|
"mention": "+14155551234",
|
|
561
585
|
"mention_range": [4, 9],
|
|
562
586
|
"text_decorations": [
|
|
@@ -31,7 +31,7 @@ class TestWebhooks:
|
|
|
31
31
|
|
|
32
32
|
client = client.with_options(webhook_secret=client_opt)
|
|
33
33
|
|
|
34
|
-
data = """{"api_version":"v3","created_at":"2025-11-23T17:30:00Z","data":{"id":"550e8400-e29b-41d4-a716-446655440001","chat":{"id":"550e8400-e29b-41d4-a716-446655440000","health_status":{"doc_url":"https://docs.linqapp.com/channel/imessage/guides/chats/chat-health#at-risk","status":"AT_RISK","updated_at":"2026-05-01T18:28:25Z"},"is_group":true,"owner_handle":{"id":"550e8400-e29b-41d4-a716-446655440000","handle":"+15551234567","joined_at":"2025-05-21T15:30:00.000-05:00","service":"iMessage","is_me":false,"left_at":"2019-12-27T18:11:19.117Z","status":"active"}},"direction":"outbound","parts":[{"type":"text","value":"Hello!","mention":"+14155551234","mention_range":[4,9],"mentions":[{"handle":"+14155550123","is_me":true,"range":[4,9]}],"text_decorations":[{"range":[0,5],"animation":"shake","style":"bold"}]}],"sender_handle":{"id":"550e8400-e29b-41d4-a716-446655440000","handle":"+15551234567","joined_at":"2025-05-21T15:30:00.000-05:00","service":"iMessage","is_me":false,"left_at":"2019-12-27T18:11:19.117Z","status":"active"},"service":"iMessage","delivered_at":"2026-01-30T20:49:20.352Z","effect":{"name":"gentle","type":"bubble"},"idempotency_key":"unique-key","preferred_service":"iMessage","read_at":null,"reconciled_at":"2026-01-30T22:05:00.000Z","reply_to":{"message_id":"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e","part_index":0},"sent_at":"2026-01-30T20:49:19.704Z","zero_retention":false},"event_id":"550e8400-e29b-41d4-a716-446655440000","event_type":"message.sent","partner_id":"partner_abc123","trace_id":"abc123def456","webhook_version":"2025-01-01"}"""
|
|
34
|
+
data = """{"api_version":"v3","created_at":"2025-11-23T17:30:00Z","data":{"id":"550e8400-e29b-41d4-a716-446655440001","chat":{"id":"550e8400-e29b-41d4-a716-446655440000","health_status":{"doc_url":"https://docs.linqapp.com/channel/imessage/guides/chats/chat-health#at-risk","status":"AT_RISK","updated_at":"2026-05-01T18:28:25Z"},"is_group":true,"owner_handle":{"id":"550e8400-e29b-41d4-a716-446655440000","handle":"+15551234567","joined_at":"2025-05-21T15:30:00.000-05:00","service":"iMessage","is_me":false,"left_at":"2019-12-27T18:11:19.117Z","status":"active"}},"direction":"outbound","parts":[{"type":"text","value":"Hello!","inline_stickers":[{"range":[15,17],"id":"550e8400-e29b-41d4-a716-446655440000","file_name":"sticker.png","mime_type":"image/png","url":"https://cdn.linqapp.com/attachments/partners/acme/550e8400-e29b-41d4-a716-446655440000/sticker.png"}],"mention":"+14155551234","mention_range":[4,9],"mentions":[{"handle":"+14155550123","is_me":true,"range":[4,9]}],"text_decorations":[{"range":[0,5],"animation":"shake","style":"bold"}]}],"sender_handle":{"id":"550e8400-e29b-41d4-a716-446655440000","handle":"+15551234567","joined_at":"2025-05-21T15:30:00.000-05:00","service":"iMessage","is_me":false,"left_at":"2019-12-27T18:11:19.117Z","status":"active"},"service":"iMessage","delivered_at":"2026-01-30T20:49:20.352Z","effect":{"name":"gentle","type":"bubble"},"idempotency_key":"unique-key","preferred_service":"iMessage","read_at":null,"reconciled_at":"2026-01-30T22:05:00.000Z","reply_to":{"message_id":"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e","part_index":0},"sent_at":"2026-01-30T20:49:19.704Z","zero_retention":false},"event_id":"550e8400-e29b-41d4-a716-446655440000","event_type":"message.sent","partner_id":"partner_abc123","trace_id":"abc123def456","webhook_version":"2025-01-01"}"""
|
|
35
35
|
msg_id = "1"
|
|
36
36
|
timestamp = datetime.now(tz=timezone.utc)
|
|
37
37
|
sig = hook.sign(msg_id=msg_id, timestamp=timestamp, data=data)
|
|
@@ -78,7 +78,7 @@ class TestAsyncWebhooks:
|
|
|
78
78
|
|
|
79
79
|
async_client = async_client.with_options(webhook_secret=client_opt)
|
|
80
80
|
|
|
81
|
-
data = """{"api_version":"v3","created_at":"2025-11-23T17:30:00Z","data":{"id":"550e8400-e29b-41d4-a716-446655440001","chat":{"id":"550e8400-e29b-41d4-a716-446655440000","health_status":{"doc_url":"https://docs.linqapp.com/channel/imessage/guides/chats/chat-health#at-risk","status":"AT_RISK","updated_at":"2026-05-01T18:28:25Z"},"is_group":true,"owner_handle":{"id":"550e8400-e29b-41d4-a716-446655440000","handle":"+15551234567","joined_at":"2025-05-21T15:30:00.000-05:00","service":"iMessage","is_me":false,"left_at":"2019-12-27T18:11:19.117Z","status":"active"}},"direction":"outbound","parts":[{"type":"text","value":"Hello!","mention":"+14155551234","mention_range":[4,9],"mentions":[{"handle":"+14155550123","is_me":true,"range":[4,9]}],"text_decorations":[{"range":[0,5],"animation":"shake","style":"bold"}]}],"sender_handle":{"id":"550e8400-e29b-41d4-a716-446655440000","handle":"+15551234567","joined_at":"2025-05-21T15:30:00.000-05:00","service":"iMessage","is_me":false,"left_at":"2019-12-27T18:11:19.117Z","status":"active"},"service":"iMessage","delivered_at":"2026-01-30T20:49:20.352Z","effect":{"name":"gentle","type":"bubble"},"idempotency_key":"unique-key","preferred_service":"iMessage","read_at":null,"reconciled_at":"2026-01-30T22:05:00.000Z","reply_to":{"message_id":"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e","part_index":0},"sent_at":"2026-01-30T20:49:19.704Z","zero_retention":false},"event_id":"550e8400-e29b-41d4-a716-446655440000","event_type":"message.sent","partner_id":"partner_abc123","trace_id":"abc123def456","webhook_version":"2025-01-01"}"""
|
|
81
|
+
data = """{"api_version":"v3","created_at":"2025-11-23T17:30:00Z","data":{"id":"550e8400-e29b-41d4-a716-446655440001","chat":{"id":"550e8400-e29b-41d4-a716-446655440000","health_status":{"doc_url":"https://docs.linqapp.com/channel/imessage/guides/chats/chat-health#at-risk","status":"AT_RISK","updated_at":"2026-05-01T18:28:25Z"},"is_group":true,"owner_handle":{"id":"550e8400-e29b-41d4-a716-446655440000","handle":"+15551234567","joined_at":"2025-05-21T15:30:00.000-05:00","service":"iMessage","is_me":false,"left_at":"2019-12-27T18:11:19.117Z","status":"active"}},"direction":"outbound","parts":[{"type":"text","value":"Hello!","inline_stickers":[{"range":[15,17],"id":"550e8400-e29b-41d4-a716-446655440000","file_name":"sticker.png","mime_type":"image/png","url":"https://cdn.linqapp.com/attachments/partners/acme/550e8400-e29b-41d4-a716-446655440000/sticker.png"}],"mention":"+14155551234","mention_range":[4,9],"mentions":[{"handle":"+14155550123","is_me":true,"range":[4,9]}],"text_decorations":[{"range":[0,5],"animation":"shake","style":"bold"}]}],"sender_handle":{"id":"550e8400-e29b-41d4-a716-446655440000","handle":"+15551234567","joined_at":"2025-05-21T15:30:00.000-05:00","service":"iMessage","is_me":false,"left_at":"2019-12-27T18:11:19.117Z","status":"active"},"service":"iMessage","delivered_at":"2026-01-30T20:49:20.352Z","effect":{"name":"gentle","type":"bubble"},"idempotency_key":"unique-key","preferred_service":"iMessage","read_at":null,"reconciled_at":"2026-01-30T22:05:00.000Z","reply_to":{"message_id":"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e","part_index":0},"sent_at":"2026-01-30T20:49:19.704Z","zero_retention":false},"event_id":"550e8400-e29b-41d4-a716-446655440000","event_type":"message.sent","partner_id":"partner_abc123","trace_id":"abc123def456","webhook_version":"2025-01-01"}"""
|
|
82
82
|
msg_id = "1"
|
|
83
83
|
timestamp = datetime.now(tz=timezone.utc)
|
|
84
84
|
sig = hook.sign(msg_id=msg_id, timestamp=timestamp, data=data)
|