wavix-python-sdk 1.0.0__py3-none-any.whl
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.
- wavix/__init__.py +801 -0
- wavix/_default_clients.py +32 -0
- wavix/api_keys/__init__.py +4 -0
- wavix/api_keys/client.py +764 -0
- wavix/api_keys/raw_client.py +1191 -0
- wavix/billing/__init__.py +41 -0
- wavix/billing/client.py +82 -0
- wavix/billing/invoices/__init__.py +34 -0
- wavix/billing/invoices/client.py +203 -0
- wavix/billing/invoices/raw_client.py +302 -0
- wavix/billing/invoices/types/__init__.py +34 -0
- wavix/billing/invoices/types/list_invoices_response.py +31 -0
- wavix/billing/raw_client.py +13 -0
- wavix/billing/transactions/__init__.py +34 -0
- wavix/billing/transactions/client.py +209 -0
- wavix/billing/transactions/raw_client.py +253 -0
- wavix/billing/transactions/types/__init__.py +34 -0
- wavix/billing/transactions/types/list_transactions_response.py +31 -0
- wavix/buy/__init__.py +61 -0
- wavix/buy/cities/__init__.py +34 -0
- wavix/buy/cities/client.py +134 -0
- wavix/buy/cities/raw_client.py +201 -0
- wavix/buy/cities/types/__init__.py +34 -0
- wavix/buy/cities/types/list_cities_response.py +23 -0
- wavix/buy/client.py +139 -0
- wavix/buy/countries/__init__.py +34 -0
- wavix/buy/countries/client.py +116 -0
- wavix/buy/countries/raw_client.py +144 -0
- wavix/buy/countries/types/__init__.py +34 -0
- wavix/buy/countries/types/list_countries_response.py +23 -0
- wavix/buy/numbers/__init__.py +34 -0
- wavix/buy/numbers/client.py +168 -0
- wavix/buy/numbers/raw_client.py +227 -0
- wavix/buy/numbers/types/__init__.py +34 -0
- wavix/buy/numbers/types/list_numbers_response.py +26 -0
- wavix/buy/raw_client.py +13 -0
- wavix/buy/region_cities/__init__.py +34 -0
- wavix/buy/region_cities/client.py +142 -0
- wavix/buy/region_cities/raw_client.py +207 -0
- wavix/buy/region_cities/types/__init__.py +34 -0
- wavix/buy/region_cities/types/list_region_cities_response.py +23 -0
- wavix/buy/regions/__init__.py +34 -0
- wavix/buy/regions/client.py +132 -0
- wavix/buy/regions/raw_client.py +222 -0
- wavix/buy/regions/types/__init__.py +34 -0
- wavix/buy/regions/types/list_regions_response.py +23 -0
- wavix/call_control/__init__.py +40 -0
- wavix/call_control/audio/__init__.py +4 -0
- wavix/call_control/audio/client.py +195 -0
- wavix/call_control/audio/raw_client.py +333 -0
- wavix/call_control/client.py +796 -0
- wavix/call_control/raw_client.py +1224 -0
- wavix/call_control/streams/__init__.py +4 -0
- wavix/call_control/streams/client.py +250 -0
- wavix/call_control/streams/raw_client.py +325 -0
- wavix/call_control/types/__init__.py +38 -0
- wavix/call_control/types/call_dtmf_collect_request_prompt.py +33 -0
- wavix/call_control/types/call_dtmf_collect_request_prompt_say.py +31 -0
- wavix/call_recording/__init__.py +4 -0
- wavix/call_recording/client.py +430 -0
- wavix/call_recording/raw_client.py +726 -0
- wavix/call_webhooks/__init__.py +37 -0
- wavix/call_webhooks/client.py +281 -0
- wavix/call_webhooks/raw_client.py +529 -0
- wavix/call_webhooks/types/__init__.py +38 -0
- wavix/call_webhooks/types/call_webhooks_create_request_event_type.py +5 -0
- wavix/call_webhooks/types/delete_call_webhooks_request_event_type.py +5 -0
- wavix/cart/__init__.py +38 -0
- wavix/cart/client.py +327 -0
- wavix/cart/raw_client.py +629 -0
- wavix/cart/types/__init__.py +40 -0
- wavix/cart/types/checkout_cart_response.py +22 -0
- wavix/cart/types/get_cart_response.py +29 -0
- wavix/cart/types/remove_cart_response.py +22 -0
- wavix/cdrs/__init__.py +39 -0
- wavix/cdrs/client.py +968 -0
- wavix/cdrs/raw_client.py +1176 -0
- wavix/cdrs/transcription/__init__.py +4 -0
- wavix/cdrs/transcription/client.py +112 -0
- wavix/cdrs/transcription/raw_client.py +156 -0
- wavix/cdrs/types/__init__.py +38 -0
- wavix/cdrs/types/cdr_search_request_disposition.py +5 -0
- wavix/cdrs/types/cdr_search_request_type.py +5 -0
- wavix/client.py +578 -0
- wavix/core/__init__.py +127 -0
- wavix/core/api_error.py +23 -0
- wavix/core/client_wrapper.py +119 -0
- wavix/core/datetime_utils.py +70 -0
- wavix/core/file.py +67 -0
- wavix/core/force_multipart.py +18 -0
- wavix/core/http_client.py +839 -0
- wavix/core/http_response.py +59 -0
- wavix/core/http_sse/__init__.py +42 -0
- wavix/core/http_sse/_api.py +170 -0
- wavix/core/http_sse/_decoders.py +61 -0
- wavix/core/http_sse/_exceptions.py +7 -0
- wavix/core/http_sse/_models.py +17 -0
- wavix/core/jsonable_encoder.py +120 -0
- wavix/core/logging.py +107 -0
- wavix/core/parse_error.py +36 -0
- wavix/core/pydantic_utilities.py +508 -0
- wavix/core/query_encoder.py +58 -0
- wavix/core/remove_none_from_dict.py +11 -0
- wavix/core/request_options.py +35 -0
- wavix/core/serialization.py +347 -0
- wavix/environment.py +7 -0
- wavix/errors/__init__.py +56 -0
- wavix/errors/bad_request_error.py +10 -0
- wavix/errors/forbidden_error.py +10 -0
- wavix/errors/not_found_error.py +10 -0
- wavix/errors/service_unavailable_error.py +11 -0
- wavix/errors/too_many_requests_error.py +11 -0
- wavix/errors/unauthorized_error.py +11 -0
- wavix/errors/unprocessable_entity_error.py +10 -0
- wavix/link_shortener/__init__.py +34 -0
- wavix/link_shortener/client.py +194 -0
- wavix/link_shortener/metrics/__init__.py +4 -0
- wavix/link_shortener/metrics/client.py +198 -0
- wavix/link_shortener/metrics/raw_client.py +218 -0
- wavix/link_shortener/raw_client.py +265 -0
- wavix/number_validator/__init__.py +35 -0
- wavix/number_validator/client.py +271 -0
- wavix/number_validator/raw_client.py +383 -0
- wavix/number_validator/results/__init__.py +4 -0
- wavix/number_validator/results/client.py +114 -0
- wavix/number_validator/results/raw_client.py +156 -0
- wavix/number_validator/types/__init__.py +34 -0
- wavix/number_validator/types/get_number_validator_response.py +112 -0
- wavix/numbers/__init__.py +39 -0
- wavix/numbers/client.py +689 -0
- wavix/numbers/papers/__init__.py +4 -0
- wavix/numbers/papers/client.py +155 -0
- wavix/numbers/papers/raw_client.py +208 -0
- wavix/numbers/raw_client.py +1000 -0
- wavix/numbers/types/__init__.py +38 -0
- wavix/numbers/types/bulk_update_numbers_response.py +23 -0
- wavix/numbers/types/delete_numbers_response.py +22 -0
- wavix/profile/__init__.py +41 -0
- wavix/profile/client.py +308 -0
- wavix/profile/config/__init__.py +34 -0
- wavix/profile/config/client.py +100 -0
- wavix/profile/config/raw_client.py +124 -0
- wavix/profile/config/types/__init__.py +34 -0
- wavix/profile/config/types/get_config_response.py +25 -0
- wavix/profile/raw_client.py +360 -0
- wavix/profile/types/__init__.py +38 -0
- wavix/profile/types/profile_update_request_company_info.py +48 -0
- wavix/profile/types/profile_update_request_company_info_industry.py +22 -0
- wavix/py.typed +0 -0
- wavix/sip_trunks/__init__.py +4 -0
- wavix/sip_trunks/client.py +927 -0
- wavix/sip_trunks/raw_client.py +1324 -0
- wavix/sms_and_mms/__init__.py +66 -0
- wavix/sms_and_mms/client.py +101 -0
- wavix/sms_and_mms/messages/__init__.py +49 -0
- wavix/sms_and_mms/messages/client.py +625 -0
- wavix/sms_and_mms/messages/raw_client.py +793 -0
- wavix/sms_and_mms/messages/types/__init__.py +47 -0
- wavix/sms_and_mms/messages/types/get_messages_response.py +97 -0
- wavix/sms_and_mms/messages/types/list_all_messages_request_message_type.py +5 -0
- wavix/sms_and_mms/messages/types/list_messages_request_message_type.py +5 -0
- wavix/sms_and_mms/messages/types/list_messages_response.py +26 -0
- wavix/sms_and_mms/opt_outs/__init__.py +34 -0
- wavix/sms_and_mms/opt_outs/client.py +277 -0
- wavix/sms_and_mms/opt_outs/raw_client.py +438 -0
- wavix/sms_and_mms/opt_outs/types/__init__.py +34 -0
- wavix/sms_and_mms/opt_outs/types/create_opt_outs_response.py +22 -0
- wavix/sms_and_mms/raw_client.py +13 -0
- wavix/sms_and_mms/sender_ids/__init__.py +38 -0
- wavix/sms_and_mms/sender_ids/client.py +391 -0
- wavix/sms_and_mms/sender_ids/raw_client.py +617 -0
- wavix/sms_and_mms/sender_ids/types/__init__.py +40 -0
- wavix/sms_and_mms/sender_ids/types/delete_sender_ids_response.py +22 -0
- wavix/sms_and_mms/sender_ids/types/sender_id_create_request_monthly_volume.py +7 -0
- wavix/sms_and_mms/sender_ids/types/sender_id_create_request_usecase.py +5 -0
- wavix/speech_analytics/__init__.py +52 -0
- wavix/speech_analytics/client.py +372 -0
- wavix/speech_analytics/file/__init__.py +4 -0
- wavix/speech_analytics/file/client.py +114 -0
- wavix/speech_analytics/file/raw_client.py +148 -0
- wavix/speech_analytics/raw_client.py +527 -0
- wavix/speech_analytics/types/__init__.py +47 -0
- wavix/speech_analytics/types/create_speech_analytics_response.py +32 -0
- wavix/speech_analytics/types/get_speech_analytics_response.py +77 -0
- wavix/speech_analytics/types/get_speech_analytics_response_language.py +5 -0
- wavix/speech_analytics/types/get_speech_analytics_response_status.py +5 -0
- wavix/sub_accounts/__init__.py +52 -0
- wavix/sub_accounts/client.py +442 -0
- wavix/sub_accounts/raw_client.py +775 -0
- wavix/sub_accounts/transactions/__init__.py +4 -0
- wavix/sub_accounts/transactions/client.py +198 -0
- wavix/sub_accounts/transactions/raw_client.py +265 -0
- wavix/sub_accounts/types/__init__.py +47 -0
- wavix/sub_accounts/types/list_sub_accounts_request_status.py +5 -0
- wavix/sub_accounts/types/sub_accounts_create_request_default_destinations.py +31 -0
- wavix/sub_accounts/types/sub_accounts_update_request_default_destinations.py +31 -0
- wavix/sub_accounts/types/sub_accounts_update_request_status.py +5 -0
- wavix/ten_dlc/__init__.py +167 -0
- wavix/ten_dlc/brand_appeals/__init__.py +34 -0
- wavix/ten_dlc/brand_appeals/client.py +244 -0
- wavix/ten_dlc/brand_appeals/raw_client.py +390 -0
- wavix/ten_dlc/brand_appeals/types/__init__.py +34 -0
- wavix/ten_dlc/brand_appeals/types/create_brand_appeals_response.py +22 -0
- wavix/ten_dlc/brand_evidence/__init__.py +37 -0
- wavix/ten_dlc/brand_evidence/client.py +365 -0
- wavix/ten_dlc/brand_evidence/raw_client.py +599 -0
- wavix/ten_dlc/brand_evidence/types/__init__.py +38 -0
- wavix/ten_dlc/brand_evidence/types/delete_brand_evidence_response.py +22 -0
- wavix/ten_dlc/brand_evidence/types/upload_brand_evidence_response.py +38 -0
- wavix/ten_dlc/brand_vetting_appeals/__init__.py +34 -0
- wavix/ten_dlc/brand_vetting_appeals/client.py +258 -0
- wavix/ten_dlc/brand_vetting_appeals/raw_client.py +381 -0
- wavix/ten_dlc/brand_vetting_appeals/types/__init__.py +36 -0
- wavix/ten_dlc/brand_vetting_appeals/types/create_brand_vetting_appeals_response.py +22 -0
- wavix/ten_dlc/brand_vettings/__init__.py +4 -0
- wavix/ten_dlc/brand_vettings/client.py +325 -0
- wavix/ten_dlc/brand_vettings/raw_client.py +518 -0
- wavix/ten_dlc/brands/__init__.py +85 -0
- wavix/ten_dlc/brands/client.py +870 -0
- wavix/ten_dlc/brands/raw_client.py +1263 -0
- wavix/ten_dlc/brands/types/__init__.py +83 -0
- wavix/ten_dlc/brands/types/create_brands_response.py +143 -0
- wavix/ten_dlc/brands/types/create_brands_response_entity_type.py +7 -0
- wavix/ten_dlc/brands/types/create_brands_response_status.py +7 -0
- wavix/ten_dlc/brands/types/delete_brands_response.py +22 -0
- wavix/ten_dlc/brands/types/get_brands_response.py +143 -0
- wavix/ten_dlc/brands/types/get_brands_response_entity_type.py +7 -0
- wavix/ten_dlc/brands/types/get_brands_response_status.py +7 -0
- wavix/ten_dlc/brands/types/list_brands_response.py +33 -0
- wavix/ten_dlc/brands/types/list_brands_response_pagination.py +41 -0
- wavix/ten_dlc/brands/types/qualify_usecase_brands_request_use_case.py +35 -0
- wavix/ten_dlc/brands/types/qualify_usecase_brands_response.py +33 -0
- wavix/ten_dlc/brands/types/ten_dlc_brand_update_request_entity_type.py +7 -0
- wavix/ten_dlc/brands/types/ten_dlc_brand_update_request_vertical.py +18 -0
- wavix/ten_dlc/brands/types/update_brands_response.py +143 -0
- wavix/ten_dlc/brands/types/update_brands_response_entity_type.py +7 -0
- wavix/ten_dlc/brands/types/update_brands_response_status.py +7 -0
- wavix/ten_dlc/campaign_numbers/__init__.py +38 -0
- wavix/ten_dlc/campaign_numbers/client.py +304 -0
- wavix/ten_dlc/campaign_numbers/raw_client.py +448 -0
- wavix/ten_dlc/campaign_numbers/types/__init__.py +40 -0
- wavix/ten_dlc/campaign_numbers/types/link_campaign_numbers_response.py +22 -0
- wavix/ten_dlc/campaign_numbers/types/list_campaign_numbers_response.py +33 -0
- wavix/ten_dlc/campaign_numbers/types/unlink_campaign_numbers_response.py +22 -0
- wavix/ten_dlc/campaigns/__init__.py +64 -0
- wavix/ten_dlc/campaigns/client.py +1493 -0
- wavix/ten_dlc/campaigns/raw_client.py +1840 -0
- wavix/ten_dlc/campaigns/types/__init__.py +62 -0
- wavix/ten_dlc/campaigns/types/create_campaigns_response.py +211 -0
- wavix/ten_dlc/campaigns/types/delete_campaigns_response.py +22 -0
- wavix/ten_dlc/campaigns/types/get_campaigns_response.py +211 -0
- wavix/ten_dlc/campaigns/types/list_by_brand_campaigns_response.py +33 -0
- wavix/ten_dlc/campaigns/types/list_by_brand_campaigns_response_pagination.py +41 -0
- wavix/ten_dlc/campaigns/types/list_campaigns_response.py +33 -0
- wavix/ten_dlc/campaigns/types/list_campaigns_response_pagination.py +41 -0
- wavix/ten_dlc/campaigns/types/ten_dlc_campaign_update_request_usecase.py +15 -0
- wavix/ten_dlc/campaigns/types/update_campaigns_response.py +211 -0
- wavix/ten_dlc/client.py +196 -0
- wavix/ten_dlc/raw_client.py +13 -0
- wavix/ten_dlc/subscriptions/__init__.py +37 -0
- wavix/ten_dlc/subscriptions/client.py +271 -0
- wavix/ten_dlc/subscriptions/raw_client.py +398 -0
- wavix/ten_dlc/subscriptions/types/__init__.py +38 -0
- wavix/ten_dlc/subscriptions/types/create_subscriptions_response.py +31 -0
- wavix/ten_dlc/subscriptions/types/delete_subscriptions_response.py +22 -0
- wavix/two_fa/__init__.py +56 -0
- wavix/two_fa/client.py +101 -0
- wavix/two_fa/events/__init__.py +4 -0
- wavix/two_fa/events/client.py +114 -0
- wavix/two_fa/events/raw_client.py +156 -0
- wavix/two_fa/raw_client.py +13 -0
- wavix/two_fa/sessions/__init__.py +4 -0
- wavix/two_fa/sessions/client.py +142 -0
- wavix/two_fa/sessions/raw_client.py +200 -0
- wavix/two_fa/verification/__init__.py +49 -0
- wavix/two_fa/verification/client.py +395 -0
- wavix/two_fa/verification/raw_client.py +664 -0
- wavix/two_fa/verification/types/__init__.py +47 -0
- wavix/two_fa/verification/types/check_verification_response.py +22 -0
- wavix/two_fa/verification/types/create_verification_response.py +51 -0
- wavix/two_fa/verification/types/resend_verification_response.py +38 -0
- wavix/two_fa/verification/types/two_factor_verification_resend_request_channel.py +5 -0
- wavix/types/__init__.py +637 -0
- wavix/types/account_error_response.py +31 -0
- wavix/types/account_limits.py +32 -0
- wavix/types/allowed_i_ps.py +7 -0
- wavix/types/allowed_i_ps_item.py +27 -0
- wavix/types/api_key.py +138 -0
- wavix/types/api_key_calls_scope_permission.py +30 -0
- wavix/types/api_key_calls_scope_permission_allow.py +5 -0
- wavix/types/api_key_scope_permission.py +30 -0
- wavix/types/api_key_scope_permission_allow.py +5 -0
- wavix/types/available_number.py +97 -0
- wavix/types/available_number_list_response.py +26 -0
- wavix/types/bad_request_error_body.py +27 -0
- wavix/types/billing_transaction_list_response.py +31 -0
- wavix/types/brand_status_updated_webhook.py +28 -0
- wavix/types/brand_status_updated_webhook_status.py +7 -0
- wavix/types/call.py +92 -0
- wavix/types/call_control_validation_error_response.py +34 -0
- wavix/types/call_create_response.py +92 -0
- wavix/types/call_create_response_event_type.py +18 -0
- wavix/types/call_direction.py +5 -0
- wavix/types/call_disposition.py +5 -0
- wavix/types/call_event_type.py +18 -0
- wavix/types/call_list_response.py +28 -0
- wavix/types/call_recording_list_response.py +28 -0
- wavix/types/call_response.py +24 -0
- wavix/types/call_status_webhook.py +70 -0
- wavix/types/call_status_webhook_direction.py +5 -0
- wavix/types/call_stream_channel.py +5 -0
- wavix/types/call_stream_response.py +27 -0
- wavix/types/call_stream_type.py +5 -0
- wavix/types/call_webhook.py +37 -0
- wavix/types/call_webhook_event_type.py +5 -0
- wavix/types/call_webhook_list_response.py +10 -0
- wavix/types/call_webhook_list_response_item.py +28 -0
- wavix/types/call_webhook_list_response_item_event_type.py +5 -0
- wavix/types/campaign_status_updated_webhook.py +41 -0
- wavix/types/campaign_status_updated_webhook_status.py +7 -0
- wavix/types/cart_response.py +29 -0
- wavix/types/cdr.py +97 -0
- wavix/types/cdr_list_response.py +26 -0
- wavix/types/cdr_response.py +104 -0
- wavix/types/cdr_transcription_completed_webhook.py +28 -0
- wavix/types/cdr_transcription_completed_webhook_status.py +5 -0
- wavix/types/cdr_transcription_response.py +74 -0
- wavix/types/cdr_transcription_search_response.py +26 -0
- wavix/types/cdr_with_transcription.py +97 -0
- wavix/types/city.py +32 -0
- wavix/types/city_list_response.py +23 -0
- wavix/types/country.py +32 -0
- wavix/types/country_has_no_regions_error_response.py +27 -0
- wavix/types/country_list_response.py +23 -0
- wavix/types/document_type.py +32 -0
- wavix/types/document_type_id.py +7 -0
- wavix/types/file_transcript_response.py +30 -0
- wavix/types/file_transcript_turn.py +46 -0
- wavix/types/file_transcription_completed_webhook.py +32 -0
- wavix/types/file_transcription_response.py +77 -0
- wavix/types/file_transcription_response_language.py +5 -0
- wavix/types/file_transcription_response_status.py +5 -0
- wavix/types/financial_transaction.py +57 -0
- wavix/types/forbidden_error_response.py +27 -0
- wavix/types/inbound_call_destination.py +53 -0
- wavix/types/inbound_call_transport.py +6 -0
- wavix/types/inbound_message.py +46 -0
- wavix/types/invalid_recording.py +31 -0
- wavix/types/invoice.py +42 -0
- wavix/types/invoice_list_response.py +31 -0
- wavix/types/list_brand_evidence_response.py +23 -0
- wavix/types/list_sessions_response_item.py +58 -0
- wavix/types/message.py +103 -0
- wavix/types/message_body.py +29 -0
- wavix/types/message_create_request.py +46 -0
- wavix/types/message_delivery_status.py +8 -0
- wavix/types/message_list_response.py +26 -0
- wavix/types/message_response.py +97 -0
- wavix/types/messages_delivery_report.py +81 -0
- wavix/types/not_found_error_body.py +27 -0
- wavix/types/not_found_error_response.py +27 -0
- wavix/types/number.py +160 -0
- wavix/types/number_destination.py +38 -0
- wavix/types/number_document.py +58 -0
- wavix/types/number_list_response.py +32 -0
- wavix/types/number_status_updated_webhook.py +38 -0
- wavix/types/number_status_updated_webhook_status.py +5 -0
- wavix/types/number_validator_create_bulk_response.py +10 -0
- wavix/types/number_validator_create_bulk_response_request_id.py +26 -0
- wavix/types/on_call_event_payload.py +34 -0
- wavix/types/on_call_event_payload_type.py +5 -0
- wavix/types/opt_out.py +27 -0
- wavix/types/opt_out_item.py +38 -0
- wavix/types/opt_outs_list_response.py +26 -0
- wavix/types/pagination.py +37 -0
- wavix/types/phone_lookup_details.py +32 -0
- wavix/types/phone_number_validation_type.py +5 -0
- wavix/types/phone_validation_batch_response.py +38 -0
- wavix/types/phone_validation_batch_result_response.py +41 -0
- wavix/types/phone_validation_response.py +112 -0
- wavix/types/phone_validation_result_response.py +115 -0
- wavix/types/profile_config_response.py +25 -0
- wavix/types/profile_response.py +79 -0
- wavix/types/profile_response_company_info.py +53 -0
- wavix/types/profile_response_company_info_country.py +31 -0
- wavix/types/profile_response_company_info_industry.py +22 -0
- wavix/types/profile_response_default_destinations_item.py +27 -0
- wavix/types/record_not_found_error_response.py +27 -0
- wavix/types/recording.py +57 -0
- wavix/types/recording_deleted_error_response.py +38 -0
- wavix/types/region.py +31 -0
- wavix/types/region_list_response.py +23 -0
- wavix/types/send_messages_response.py +100 -0
- wavix/types/sender_id.py +48 -0
- wavix/types/sender_id_details.py +44 -0
- wavix/types/sender_id_list_response.py +23 -0
- wavix/types/sender_id_response.py +48 -0
- wavix/types/sender_id_response_type.py +5 -0
- wavix/types/sender_id_type.py +5 -0
- wavix/types/short_link_metrics_item.py +69 -0
- wavix/types/short_link_metrics_response.py +26 -0
- wavix/types/short_link_response.py +22 -0
- wavix/types/sip_trunk_create_request.py +132 -0
- wavix/types/sip_trunk_create_request_allowed_ips_item.py +22 -0
- wavix/types/sip_trunk_create_request_host_request.py +26 -0
- wavix/types/sip_trunk_list_response.py +26 -0
- wavix/types/sip_trunk_response.py +145 -0
- wavix/types/sip_trunk_summary.py +114 -0
- wavix/types/sip_trunk_summary_host_request.py +31 -0
- wavix/types/sub_accounts_list_response.py +26 -0
- wavix/types/sub_accounts_transactions_list_response.py +30 -0
- wavix/types/sub_accounts_transactions_list_response_transactions_item.py +48 -0
- wavix/types/sub_organization_response.py +59 -0
- wavix/types/sub_organization_response_default_destinations.py +31 -0
- wavix/types/sub_organization_response_status.py +5 -0
- wavix/types/submit_file_transcription_response.py +32 -0
- wavix/types/success_response.py +22 -0
- wavix/types/tcr_error_message.py +27 -0
- wavix/types/tcr_feedback.py +23 -0
- wavix/types/tcr_feedback_category.py +47 -0
- wavix/types/ten_dlc_brand.py +143 -0
- wavix/types/ten_dlc_brand_appeal.py +54 -0
- wavix/types/ten_dlc_brand_appeal_create_request.py +36 -0
- wavix/types/ten_dlc_brand_appeal_outcome.py +38 -0
- wavix/types/ten_dlc_brand_appeal_outcome_feedback.py +27 -0
- wavix/types/ten_dlc_brand_appeal_outcome_vetting_status.py +7 -0
- wavix/types/ten_dlc_brand_create_request.py +8 -0
- wavix/types/ten_dlc_brand_create_request_entity_type.py +7 -0
- wavix/types/ten_dlc_brand_create_request_stock_exchange.py +26 -0
- wavix/types/ten_dlc_brand_create_request_stock_exchange_entity_type.py +7 -0
- wavix/types/ten_dlc_brand_create_request_vertical.py +18 -0
- wavix/types/ten_dlc_brand_create_request_zero.py +24 -0
- wavix/types/ten_dlc_brand_create_request_zero_entity_type.py +5 -0
- wavix/types/ten_dlc_brand_entity_type.py +7 -0
- wavix/types/ten_dlc_brand_evidence.py +38 -0
- wavix/types/ten_dlc_brand_identity_verification_status.py +7 -0
- wavix/types/ten_dlc_brand_list_response.py +33 -0
- wavix/types/ten_dlc_brand_list_response_pagination.py +41 -0
- wavix/types/ten_dlc_brand_qualification_result.py +33 -0
- wavix/types/ten_dlc_brand_status.py +7 -0
- wavix/types/ten_dlc_brand_vetting.py +71 -0
- wavix/types/ten_dlc_brand_vetting_appeal.py +78 -0
- wavix/types/ten_dlc_brand_vetting_appeal_appeal_outcome.py +37 -0
- wavix/types/ten_dlc_brand_vetting_appeal_appeal_outcome_feedback.py +26 -0
- wavix/types/ten_dlc_brand_vetting_appeal_outcome.py +33 -0
- wavix/types/ten_dlc_brand_vetting_appeal_outcome_feedback.py +26 -0
- wavix/types/ten_dlc_brand_vetting_appeal_outcome_reason.py +22 -0
- wavix/types/ten_dlc_campaign.py +211 -0
- wavix/types/ten_dlc_campaign_list_response.py +33 -0
- wavix/types/ten_dlc_campaign_list_response_pagination.py +41 -0
- wavix/types/ten_dlc_campaign_nudge_request.py +32 -0
- wavix/types/ten_dlc_campaign_number.py +27 -0
- wavix/types/ten_dlc_campaign_number_list_response.py +33 -0
- wavix/types/ten_dlc_event_subscription.py +31 -0
- wavix/types/ten_dlcmno_metadata.py +101 -0
- wavix/types/transaction_status.py +5 -0
- wavix/types/transaction_type.py +50 -0
- wavix/types/transcript_turn.py +46 -0
- wavix/types/transcription_filter.py +35 -0
- wavix/types/transcription_filter_agent.py +36 -0
- wavix/types/transcription_filter_any.py +36 -0
- wavix/types/transcription_filter_client.py +36 -0
- wavix/types/transcription_language.py +5 -0
- wavix/types/transcription_reference.py +29 -0
- wavix/types/transcription_status.py +5 -0
- wavix/types/tts_language.py +5 -0
- wavix/types/tts_voice_id.py +25 -0
- wavix/types/two_factor_verification_check_response.py +22 -0
- wavix/types/two_factor_verification_event.py +47 -0
- wavix/types/two_factor_verification_resend_response.py +38 -0
- wavix/types/two_factor_verification_response.py +51 -0
- wavix/types/unauthorized_error_response.py +32 -0
- wavix/types/unprocessable_entity_error_body.py +27 -0
- wavix/types/validation_error_response.py +27 -0
- wavix/types/voice_campaign_create_request.py +20 -0
- wavix/types/voice_campaign_response.py +41 -0
- wavix/types/voice_campaigns_create_response.py +20 -0
- wavix/types/voice_campaigns_create_response_voice_campaign.py +43 -0
- wavix/types/voice_campaigns_get_response.py +20 -0
- wavix/types/voice_campaigns_get_response_voice_campaign.py +43 -0
- wavix/types/web_rtc_token.py +43 -0
- wavix/types/web_rtc_token_response.py +44 -0
- wavix/types/web_rtc_tokens_list_response.py +30 -0
- wavix/version.py +3 -0
- wavix/voice_campaigns/__init__.py +4 -0
- wavix/voice_campaigns/client.py +197 -0
- wavix/voice_campaigns/raw_client.py +332 -0
- wavix/webrtc/__init__.py +34 -0
- wavix/webrtc/client.py +63 -0
- wavix/webrtc/raw_client.py +13 -0
- wavix/webrtc/tokens/__init__.py +4 -0
- wavix/webrtc/tokens/client.py +432 -0
- wavix/webrtc/tokens/raw_client.py +869 -0
- wavix_python_sdk-1.0.0.dist-info/LICENSE +21 -0
- wavix_python_sdk-1.0.0.dist-info/METADATA +339 -0
- wavix_python_sdk-1.0.0.dist-info/RECORD +497 -0
- wavix_python_sdk-1.0.0.dist-info/WHEEL +4 -0
|
@@ -0,0 +1,793 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
from json.decoder import JSONDecodeError
|
|
5
|
+
|
|
6
|
+
from ...core.api_error import ApiError
|
|
7
|
+
from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
|
|
8
|
+
from ...core.http_response import AsyncHttpResponse, HttpResponse
|
|
9
|
+
from ...core.jsonable_encoder import encode_path_param
|
|
10
|
+
from ...core.parse_error import ParsingError
|
|
11
|
+
from ...core.pydantic_utilities import parse_obj_as
|
|
12
|
+
from ...core.request_options import RequestOptions
|
|
13
|
+
from ...core.serialization import convert_and_respect_annotation_metadata
|
|
14
|
+
from ...errors.bad_request_error import BadRequestError
|
|
15
|
+
from ...errors.forbidden_error import ForbiddenError
|
|
16
|
+
from ...errors.not_found_error import NotFoundError
|
|
17
|
+
from ...types.message_body import MessageBody
|
|
18
|
+
from ...types.message_delivery_status import MessageDeliveryStatus
|
|
19
|
+
from ...types.send_messages_response import SendMessagesResponse
|
|
20
|
+
from .types.get_messages_response import GetMessagesResponse
|
|
21
|
+
from .types.list_all_messages_request_message_type import ListAllMessagesRequestMessageType
|
|
22
|
+
from .types.list_messages_request_message_type import ListMessagesRequestMessageType
|
|
23
|
+
from .types.list_messages_response import ListMessagesResponse
|
|
24
|
+
from pydantic import ValidationError
|
|
25
|
+
|
|
26
|
+
# this is used as the default value for optional parameters
|
|
27
|
+
OMIT = typing.cast(typing.Any, ...)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class RawMessagesClient:
|
|
31
|
+
def __init__(self, *, client_wrapper: SyncClientWrapper):
|
|
32
|
+
self._client_wrapper = client_wrapper
|
|
33
|
+
|
|
34
|
+
def list(
|
|
35
|
+
self,
|
|
36
|
+
*,
|
|
37
|
+
type: str,
|
|
38
|
+
sent_after: typing.Optional[str] = None,
|
|
39
|
+
sent_before: typing.Optional[str] = None,
|
|
40
|
+
from_: typing.Optional[str] = None,
|
|
41
|
+
to: typing.Optional[str] = None,
|
|
42
|
+
status: typing.Optional[MessageDeliveryStatus] = None,
|
|
43
|
+
tag: typing.Optional[str] = None,
|
|
44
|
+
message_type: typing.Optional[ListMessagesRequestMessageType] = None,
|
|
45
|
+
page: typing.Optional[int] = None,
|
|
46
|
+
per_page: typing.Optional[int] = None,
|
|
47
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
48
|
+
) -> HttpResponse[ListMessagesResponse]:
|
|
49
|
+
"""
|
|
50
|
+
Returns a paginated list of SMS and MMS messages for the authenticated account, filtered by direction, date, and other criteria.
|
|
51
|
+
|
|
52
|
+
Parameters
|
|
53
|
+
----------
|
|
54
|
+
type : str
|
|
55
|
+
Filters messages by direction. One of `inbound` (messages received by the account) or `outbound` (messages sent by the account).
|
|
56
|
+
|
|
57
|
+
sent_after : typing.Optional[str]
|
|
58
|
+
Returns messages sent on or after this date, in `YYYY-MM-DD` format.
|
|
59
|
+
|
|
60
|
+
sent_before : typing.Optional[str]
|
|
61
|
+
Returns messages sent on or before this date, in `YYYY-MM-DD` format.
|
|
62
|
+
|
|
63
|
+
from_ : typing.Optional[str]
|
|
64
|
+
Filters by message sender. For `outbound` messages, the Sender ID used to send the message; for `inbound` messages, the originating phone number.
|
|
65
|
+
|
|
66
|
+
to : typing.Optional[str]
|
|
67
|
+
Filters by message recipient. For `outbound` messages, the destination phone number; for `inbound` messages, an SMS-enabled number on the Wavix platform.
|
|
68
|
+
|
|
69
|
+
status : typing.Optional[MessageDeliveryStatus]
|
|
70
|
+
Filters messages by delivery status. Accepts a `MessageDeliveryStatus` value.
|
|
71
|
+
|
|
72
|
+
tag : typing.Optional[str]
|
|
73
|
+
Filters messages by `tag`. Supported for outbound messages only.
|
|
74
|
+
|
|
75
|
+
message_type : typing.Optional[ListMessagesRequestMessageType]
|
|
76
|
+
Filters messages by type. One of `sms` (text message) or `mms` (multimedia message).
|
|
77
|
+
|
|
78
|
+
page : typing.Optional[int]
|
|
79
|
+
Page number to retrieve. Default `1`.
|
|
80
|
+
|
|
81
|
+
per_page : typing.Optional[int]
|
|
82
|
+
Number of records to return per page. Default `25`.
|
|
83
|
+
|
|
84
|
+
request_options : typing.Optional[RequestOptions]
|
|
85
|
+
Request-specific configuration.
|
|
86
|
+
|
|
87
|
+
Returns
|
|
88
|
+
-------
|
|
89
|
+
HttpResponse[ListMessagesResponse]
|
|
90
|
+
Returns a paginated list of messages.
|
|
91
|
+
"""
|
|
92
|
+
_response = self._client_wrapper.httpx_client.request(
|
|
93
|
+
"v3/messages",
|
|
94
|
+
method="GET",
|
|
95
|
+
params={
|
|
96
|
+
"sent_after": sent_after,
|
|
97
|
+
"sent_before": sent_before,
|
|
98
|
+
"type": type,
|
|
99
|
+
"from": from_,
|
|
100
|
+
"to": to,
|
|
101
|
+
"status": status,
|
|
102
|
+
"tag": tag,
|
|
103
|
+
"message_type": message_type,
|
|
104
|
+
"page": page,
|
|
105
|
+
"per_page": per_page,
|
|
106
|
+
},
|
|
107
|
+
request_options=request_options,
|
|
108
|
+
)
|
|
109
|
+
try:
|
|
110
|
+
if 200 <= _response.status_code < 300:
|
|
111
|
+
_data = typing.cast(
|
|
112
|
+
ListMessagesResponse,
|
|
113
|
+
parse_obj_as(
|
|
114
|
+
type_=ListMessagesResponse, # type: ignore
|
|
115
|
+
object_=_response.json(),
|
|
116
|
+
),
|
|
117
|
+
)
|
|
118
|
+
return HttpResponse(response=_response, data=_data)
|
|
119
|
+
if _response.status_code == 400:
|
|
120
|
+
raise BadRequestError(
|
|
121
|
+
headers=dict(_response.headers),
|
|
122
|
+
body=typing.cast(
|
|
123
|
+
typing.Any,
|
|
124
|
+
parse_obj_as(
|
|
125
|
+
type_=typing.Any, # type: ignore
|
|
126
|
+
object_=_response.json(),
|
|
127
|
+
),
|
|
128
|
+
),
|
|
129
|
+
)
|
|
130
|
+
if _response.status_code == 403:
|
|
131
|
+
raise ForbiddenError(
|
|
132
|
+
headers=dict(_response.headers),
|
|
133
|
+
body=typing.cast(
|
|
134
|
+
typing.Any,
|
|
135
|
+
parse_obj_as(
|
|
136
|
+
type_=typing.Any, # type: ignore
|
|
137
|
+
object_=_response.json(),
|
|
138
|
+
),
|
|
139
|
+
),
|
|
140
|
+
)
|
|
141
|
+
_response_json = _response.json()
|
|
142
|
+
except JSONDecodeError:
|
|
143
|
+
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
|
|
144
|
+
except ValidationError as e:
|
|
145
|
+
raise ParsingError(
|
|
146
|
+
status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
|
|
147
|
+
)
|
|
148
|
+
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
|
|
149
|
+
|
|
150
|
+
def send(
|
|
151
|
+
self,
|
|
152
|
+
*,
|
|
153
|
+
from_: str,
|
|
154
|
+
to: str,
|
|
155
|
+
message_body: MessageBody,
|
|
156
|
+
callback_url: typing.Optional[str] = OMIT,
|
|
157
|
+
validity: typing.Optional[int] = OMIT,
|
|
158
|
+
tag: typing.Optional[str] = OMIT,
|
|
159
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
160
|
+
) -> HttpResponse[SendMessagesResponse]:
|
|
161
|
+
"""
|
|
162
|
+
Sends an SMS or MMS message. MMS is supported for U.S. numbers only. Track delivery using the returned `message_id` and the message status callback.
|
|
163
|
+
**Rate limit**: 20 messages per phone number in 24 hours.
|
|
164
|
+
|
|
165
|
+
Parameters
|
|
166
|
+
----------
|
|
167
|
+
from_ : str
|
|
168
|
+
Sender ID. Numeric or alphanumeric.
|
|
169
|
+
|
|
170
|
+
to : str
|
|
171
|
+
Recipient phone number.
|
|
172
|
+
|
|
173
|
+
message_body : MessageBody
|
|
174
|
+
|
|
175
|
+
callback_url : typing.Optional[str]
|
|
176
|
+
Callback URL for delivery reports.
|
|
177
|
+
|
|
178
|
+
validity : typing.Optional[int]
|
|
179
|
+
Message validity period in seconds. Delivery attempts stop after this period expires.
|
|
180
|
+
|
|
181
|
+
tag : typing.Optional[str]
|
|
182
|
+
Tag to group messages, such as for a specific campaign.
|
|
183
|
+
|
|
184
|
+
request_options : typing.Optional[RequestOptions]
|
|
185
|
+
Request-specific configuration.
|
|
186
|
+
|
|
187
|
+
Returns
|
|
188
|
+
-------
|
|
189
|
+
HttpResponse[SendMessagesResponse]
|
|
190
|
+
Returns the submitted message with its `message_id` and initial status.
|
|
191
|
+
"""
|
|
192
|
+
_response = self._client_wrapper.httpx_client.request(
|
|
193
|
+
"v3/messages",
|
|
194
|
+
method="POST",
|
|
195
|
+
json={
|
|
196
|
+
"from": from_,
|
|
197
|
+
"to": to,
|
|
198
|
+
"message_body": convert_and_respect_annotation_metadata(
|
|
199
|
+
object_=message_body, annotation=MessageBody, direction="write"
|
|
200
|
+
),
|
|
201
|
+
"callback_url": callback_url,
|
|
202
|
+
"validity": validity,
|
|
203
|
+
"tag": tag,
|
|
204
|
+
},
|
|
205
|
+
headers={
|
|
206
|
+
"content-type": "application/json",
|
|
207
|
+
},
|
|
208
|
+
request_options=request_options,
|
|
209
|
+
omit=OMIT,
|
|
210
|
+
)
|
|
211
|
+
try:
|
|
212
|
+
if 200 <= _response.status_code < 300:
|
|
213
|
+
_data = typing.cast(
|
|
214
|
+
SendMessagesResponse,
|
|
215
|
+
parse_obj_as(
|
|
216
|
+
type_=SendMessagesResponse, # type: ignore
|
|
217
|
+
object_=_response.json(),
|
|
218
|
+
),
|
|
219
|
+
)
|
|
220
|
+
return HttpResponse(response=_response, data=_data)
|
|
221
|
+
if _response.status_code == 400:
|
|
222
|
+
raise BadRequestError(
|
|
223
|
+
headers=dict(_response.headers),
|
|
224
|
+
body=typing.cast(
|
|
225
|
+
typing.Any,
|
|
226
|
+
parse_obj_as(
|
|
227
|
+
type_=typing.Any, # type: ignore
|
|
228
|
+
object_=_response.json(),
|
|
229
|
+
),
|
|
230
|
+
),
|
|
231
|
+
)
|
|
232
|
+
if _response.status_code == 403:
|
|
233
|
+
raise ForbiddenError(
|
|
234
|
+
headers=dict(_response.headers),
|
|
235
|
+
body=typing.cast(
|
|
236
|
+
typing.Any,
|
|
237
|
+
parse_obj_as(
|
|
238
|
+
type_=typing.Any, # type: ignore
|
|
239
|
+
object_=_response.json(),
|
|
240
|
+
),
|
|
241
|
+
),
|
|
242
|
+
)
|
|
243
|
+
_response_json = _response.json()
|
|
244
|
+
except JSONDecodeError:
|
|
245
|
+
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
|
|
246
|
+
except ValidationError as e:
|
|
247
|
+
raise ParsingError(
|
|
248
|
+
status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
|
|
249
|
+
)
|
|
250
|
+
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
|
|
251
|
+
|
|
252
|
+
def get(
|
|
253
|
+
self, id: str, *, request_options: typing.Optional[RequestOptions] = None
|
|
254
|
+
) -> HttpResponse[GetMessagesResponse]:
|
|
255
|
+
"""
|
|
256
|
+
Returns the SMS or MMS message identified by `id`, including its delivery status and content.
|
|
257
|
+
|
|
258
|
+
Parameters
|
|
259
|
+
----------
|
|
260
|
+
id : str
|
|
261
|
+
The unique ID of the message.
|
|
262
|
+
|
|
263
|
+
request_options : typing.Optional[RequestOptions]
|
|
264
|
+
Request-specific configuration.
|
|
265
|
+
|
|
266
|
+
Returns
|
|
267
|
+
-------
|
|
268
|
+
HttpResponse[GetMessagesResponse]
|
|
269
|
+
Returns the message.
|
|
270
|
+
"""
|
|
271
|
+
_response = self._client_wrapper.httpx_client.request(
|
|
272
|
+
f"v3/messages/{encode_path_param(id)}",
|
|
273
|
+
method="GET",
|
|
274
|
+
request_options=request_options,
|
|
275
|
+
)
|
|
276
|
+
try:
|
|
277
|
+
if 200 <= _response.status_code < 300:
|
|
278
|
+
_data = typing.cast(
|
|
279
|
+
GetMessagesResponse,
|
|
280
|
+
parse_obj_as(
|
|
281
|
+
type_=GetMessagesResponse, # type: ignore
|
|
282
|
+
object_=_response.json(),
|
|
283
|
+
),
|
|
284
|
+
)
|
|
285
|
+
return HttpResponse(response=_response, data=_data)
|
|
286
|
+
if _response.status_code == 403:
|
|
287
|
+
raise ForbiddenError(
|
|
288
|
+
headers=dict(_response.headers),
|
|
289
|
+
body=typing.cast(
|
|
290
|
+
typing.Any,
|
|
291
|
+
parse_obj_as(
|
|
292
|
+
type_=typing.Any, # type: ignore
|
|
293
|
+
object_=_response.json(),
|
|
294
|
+
),
|
|
295
|
+
),
|
|
296
|
+
)
|
|
297
|
+
if _response.status_code == 404:
|
|
298
|
+
raise NotFoundError(
|
|
299
|
+
headers=dict(_response.headers),
|
|
300
|
+
body=typing.cast(
|
|
301
|
+
typing.Any,
|
|
302
|
+
parse_obj_as(
|
|
303
|
+
type_=typing.Any, # type: ignore
|
|
304
|
+
object_=_response.json(),
|
|
305
|
+
),
|
|
306
|
+
),
|
|
307
|
+
)
|
|
308
|
+
_response_json = _response.json()
|
|
309
|
+
except JSONDecodeError:
|
|
310
|
+
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
|
|
311
|
+
except ValidationError as e:
|
|
312
|
+
raise ParsingError(
|
|
313
|
+
status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
|
|
314
|
+
)
|
|
315
|
+
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
|
|
316
|
+
|
|
317
|
+
def list_all(
|
|
318
|
+
self,
|
|
319
|
+
*,
|
|
320
|
+
type: str,
|
|
321
|
+
sent_after: typing.Optional[str] = None,
|
|
322
|
+
sent_before: typing.Optional[str] = None,
|
|
323
|
+
from_: typing.Optional[str] = None,
|
|
324
|
+
to: typing.Optional[str] = None,
|
|
325
|
+
status: typing.Optional[MessageDeliveryStatus] = None,
|
|
326
|
+
tag: typing.Optional[str] = None,
|
|
327
|
+
message_type: typing.Optional[ListAllMessagesRequestMessageType] = None,
|
|
328
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
329
|
+
) -> HttpResponse[str]:
|
|
330
|
+
"""
|
|
331
|
+
Streams matching SMS and MMS messages as newline-delimited JSON (NDJSON), one message per line, for bulk export.
|
|
332
|
+
|
|
333
|
+
Parameters
|
|
334
|
+
----------
|
|
335
|
+
type : str
|
|
336
|
+
Filters messages by direction. One of `inbound` (messages received by the account) or `outbound` (messages sent by the account).
|
|
337
|
+
|
|
338
|
+
sent_after : typing.Optional[str]
|
|
339
|
+
Returns messages sent on or after this timestamp, in `YYYY-MM-DDTHH:MM:SS` format.
|
|
340
|
+
|
|
341
|
+
sent_before : typing.Optional[str]
|
|
342
|
+
Returns messages sent on or before this timestamp, in `YYYY-MM-DDTHH:MM:SS` format.
|
|
343
|
+
|
|
344
|
+
from_ : typing.Optional[str]
|
|
345
|
+
Filters by message sender. For `outbound` messages, the Sender ID used to send the message; for `inbound` messages, the originating phone number.
|
|
346
|
+
|
|
347
|
+
to : typing.Optional[str]
|
|
348
|
+
Filters by message recipient. For `outbound` messages, the destination phone number; for `inbound` messages, the SMS-enabled number that received the message.
|
|
349
|
+
|
|
350
|
+
status : typing.Optional[MessageDeliveryStatus]
|
|
351
|
+
Filters messages by delivery status. Accepts a `MessageDeliveryStatus` value.
|
|
352
|
+
|
|
353
|
+
tag : typing.Optional[str]
|
|
354
|
+
Filters messages by `tag`. Supported for outbound messages only.
|
|
355
|
+
|
|
356
|
+
message_type : typing.Optional[ListAllMessagesRequestMessageType]
|
|
357
|
+
Filters messages by type. One of `sms` (text message) or `mms` (multimedia message).
|
|
358
|
+
|
|
359
|
+
request_options : typing.Optional[RequestOptions]
|
|
360
|
+
Request-specific configuration.
|
|
361
|
+
|
|
362
|
+
Returns
|
|
363
|
+
-------
|
|
364
|
+
HttpResponse[str]
|
|
365
|
+
Returns an NDJSON stream of messages, one per line.
|
|
366
|
+
"""
|
|
367
|
+
_response = self._client_wrapper.httpx_client.request(
|
|
368
|
+
"v3/messages/all",
|
|
369
|
+
method="GET",
|
|
370
|
+
params={
|
|
371
|
+
"sent_after": sent_after,
|
|
372
|
+
"sent_before": sent_before,
|
|
373
|
+
"type": type,
|
|
374
|
+
"from": from_,
|
|
375
|
+
"to": to,
|
|
376
|
+
"status": status,
|
|
377
|
+
"tag": tag,
|
|
378
|
+
"message_type": message_type,
|
|
379
|
+
},
|
|
380
|
+
request_options=request_options,
|
|
381
|
+
)
|
|
382
|
+
try:
|
|
383
|
+
if 200 <= _response.status_code < 300:
|
|
384
|
+
_data = typing.cast(
|
|
385
|
+
str,
|
|
386
|
+
parse_obj_as(
|
|
387
|
+
type_=str, # type: ignore
|
|
388
|
+
object_=_response.json(),
|
|
389
|
+
),
|
|
390
|
+
)
|
|
391
|
+
return HttpResponse(response=_response, data=_data)
|
|
392
|
+
if _response.status_code == 403:
|
|
393
|
+
raise ForbiddenError(
|
|
394
|
+
headers=dict(_response.headers),
|
|
395
|
+
body=typing.cast(
|
|
396
|
+
typing.Any,
|
|
397
|
+
parse_obj_as(
|
|
398
|
+
type_=typing.Any, # type: ignore
|
|
399
|
+
object_=_response.json(),
|
|
400
|
+
),
|
|
401
|
+
),
|
|
402
|
+
)
|
|
403
|
+
_response_json = _response.json()
|
|
404
|
+
except JSONDecodeError:
|
|
405
|
+
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
|
|
406
|
+
except ValidationError as e:
|
|
407
|
+
raise ParsingError(
|
|
408
|
+
status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
|
|
409
|
+
)
|
|
410
|
+
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
|
|
411
|
+
|
|
412
|
+
|
|
413
|
+
class AsyncRawMessagesClient:
|
|
414
|
+
def __init__(self, *, client_wrapper: AsyncClientWrapper):
|
|
415
|
+
self._client_wrapper = client_wrapper
|
|
416
|
+
|
|
417
|
+
async def list(
|
|
418
|
+
self,
|
|
419
|
+
*,
|
|
420
|
+
type: str,
|
|
421
|
+
sent_after: typing.Optional[str] = None,
|
|
422
|
+
sent_before: typing.Optional[str] = None,
|
|
423
|
+
from_: typing.Optional[str] = None,
|
|
424
|
+
to: typing.Optional[str] = None,
|
|
425
|
+
status: typing.Optional[MessageDeliveryStatus] = None,
|
|
426
|
+
tag: typing.Optional[str] = None,
|
|
427
|
+
message_type: typing.Optional[ListMessagesRequestMessageType] = None,
|
|
428
|
+
page: typing.Optional[int] = None,
|
|
429
|
+
per_page: typing.Optional[int] = None,
|
|
430
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
431
|
+
) -> AsyncHttpResponse[ListMessagesResponse]:
|
|
432
|
+
"""
|
|
433
|
+
Returns a paginated list of SMS and MMS messages for the authenticated account, filtered by direction, date, and other criteria.
|
|
434
|
+
|
|
435
|
+
Parameters
|
|
436
|
+
----------
|
|
437
|
+
type : str
|
|
438
|
+
Filters messages by direction. One of `inbound` (messages received by the account) or `outbound` (messages sent by the account).
|
|
439
|
+
|
|
440
|
+
sent_after : typing.Optional[str]
|
|
441
|
+
Returns messages sent on or after this date, in `YYYY-MM-DD` format.
|
|
442
|
+
|
|
443
|
+
sent_before : typing.Optional[str]
|
|
444
|
+
Returns messages sent on or before this date, in `YYYY-MM-DD` format.
|
|
445
|
+
|
|
446
|
+
from_ : typing.Optional[str]
|
|
447
|
+
Filters by message sender. For `outbound` messages, the Sender ID used to send the message; for `inbound` messages, the originating phone number.
|
|
448
|
+
|
|
449
|
+
to : typing.Optional[str]
|
|
450
|
+
Filters by message recipient. For `outbound` messages, the destination phone number; for `inbound` messages, an SMS-enabled number on the Wavix platform.
|
|
451
|
+
|
|
452
|
+
status : typing.Optional[MessageDeliveryStatus]
|
|
453
|
+
Filters messages by delivery status. Accepts a `MessageDeliveryStatus` value.
|
|
454
|
+
|
|
455
|
+
tag : typing.Optional[str]
|
|
456
|
+
Filters messages by `tag`. Supported for outbound messages only.
|
|
457
|
+
|
|
458
|
+
message_type : typing.Optional[ListMessagesRequestMessageType]
|
|
459
|
+
Filters messages by type. One of `sms` (text message) or `mms` (multimedia message).
|
|
460
|
+
|
|
461
|
+
page : typing.Optional[int]
|
|
462
|
+
Page number to retrieve. Default `1`.
|
|
463
|
+
|
|
464
|
+
per_page : typing.Optional[int]
|
|
465
|
+
Number of records to return per page. Default `25`.
|
|
466
|
+
|
|
467
|
+
request_options : typing.Optional[RequestOptions]
|
|
468
|
+
Request-specific configuration.
|
|
469
|
+
|
|
470
|
+
Returns
|
|
471
|
+
-------
|
|
472
|
+
AsyncHttpResponse[ListMessagesResponse]
|
|
473
|
+
Returns a paginated list of messages.
|
|
474
|
+
"""
|
|
475
|
+
_response = await self._client_wrapper.httpx_client.request(
|
|
476
|
+
"v3/messages",
|
|
477
|
+
method="GET",
|
|
478
|
+
params={
|
|
479
|
+
"sent_after": sent_after,
|
|
480
|
+
"sent_before": sent_before,
|
|
481
|
+
"type": type,
|
|
482
|
+
"from": from_,
|
|
483
|
+
"to": to,
|
|
484
|
+
"status": status,
|
|
485
|
+
"tag": tag,
|
|
486
|
+
"message_type": message_type,
|
|
487
|
+
"page": page,
|
|
488
|
+
"per_page": per_page,
|
|
489
|
+
},
|
|
490
|
+
request_options=request_options,
|
|
491
|
+
)
|
|
492
|
+
try:
|
|
493
|
+
if 200 <= _response.status_code < 300:
|
|
494
|
+
_data = typing.cast(
|
|
495
|
+
ListMessagesResponse,
|
|
496
|
+
parse_obj_as(
|
|
497
|
+
type_=ListMessagesResponse, # type: ignore
|
|
498
|
+
object_=_response.json(),
|
|
499
|
+
),
|
|
500
|
+
)
|
|
501
|
+
return AsyncHttpResponse(response=_response, data=_data)
|
|
502
|
+
if _response.status_code == 400:
|
|
503
|
+
raise BadRequestError(
|
|
504
|
+
headers=dict(_response.headers),
|
|
505
|
+
body=typing.cast(
|
|
506
|
+
typing.Any,
|
|
507
|
+
parse_obj_as(
|
|
508
|
+
type_=typing.Any, # type: ignore
|
|
509
|
+
object_=_response.json(),
|
|
510
|
+
),
|
|
511
|
+
),
|
|
512
|
+
)
|
|
513
|
+
if _response.status_code == 403:
|
|
514
|
+
raise ForbiddenError(
|
|
515
|
+
headers=dict(_response.headers),
|
|
516
|
+
body=typing.cast(
|
|
517
|
+
typing.Any,
|
|
518
|
+
parse_obj_as(
|
|
519
|
+
type_=typing.Any, # type: ignore
|
|
520
|
+
object_=_response.json(),
|
|
521
|
+
),
|
|
522
|
+
),
|
|
523
|
+
)
|
|
524
|
+
_response_json = _response.json()
|
|
525
|
+
except JSONDecodeError:
|
|
526
|
+
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
|
|
527
|
+
except ValidationError as e:
|
|
528
|
+
raise ParsingError(
|
|
529
|
+
status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
|
|
530
|
+
)
|
|
531
|
+
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
|
|
532
|
+
|
|
533
|
+
async def send(
|
|
534
|
+
self,
|
|
535
|
+
*,
|
|
536
|
+
from_: str,
|
|
537
|
+
to: str,
|
|
538
|
+
message_body: MessageBody,
|
|
539
|
+
callback_url: typing.Optional[str] = OMIT,
|
|
540
|
+
validity: typing.Optional[int] = OMIT,
|
|
541
|
+
tag: typing.Optional[str] = OMIT,
|
|
542
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
543
|
+
) -> AsyncHttpResponse[SendMessagesResponse]:
|
|
544
|
+
"""
|
|
545
|
+
Sends an SMS or MMS message. MMS is supported for U.S. numbers only. Track delivery using the returned `message_id` and the message status callback.
|
|
546
|
+
**Rate limit**: 20 messages per phone number in 24 hours.
|
|
547
|
+
|
|
548
|
+
Parameters
|
|
549
|
+
----------
|
|
550
|
+
from_ : str
|
|
551
|
+
Sender ID. Numeric or alphanumeric.
|
|
552
|
+
|
|
553
|
+
to : str
|
|
554
|
+
Recipient phone number.
|
|
555
|
+
|
|
556
|
+
message_body : MessageBody
|
|
557
|
+
|
|
558
|
+
callback_url : typing.Optional[str]
|
|
559
|
+
Callback URL for delivery reports.
|
|
560
|
+
|
|
561
|
+
validity : typing.Optional[int]
|
|
562
|
+
Message validity period in seconds. Delivery attempts stop after this period expires.
|
|
563
|
+
|
|
564
|
+
tag : typing.Optional[str]
|
|
565
|
+
Tag to group messages, such as for a specific campaign.
|
|
566
|
+
|
|
567
|
+
request_options : typing.Optional[RequestOptions]
|
|
568
|
+
Request-specific configuration.
|
|
569
|
+
|
|
570
|
+
Returns
|
|
571
|
+
-------
|
|
572
|
+
AsyncHttpResponse[SendMessagesResponse]
|
|
573
|
+
Returns the submitted message with its `message_id` and initial status.
|
|
574
|
+
"""
|
|
575
|
+
_response = await self._client_wrapper.httpx_client.request(
|
|
576
|
+
"v3/messages",
|
|
577
|
+
method="POST",
|
|
578
|
+
json={
|
|
579
|
+
"from": from_,
|
|
580
|
+
"to": to,
|
|
581
|
+
"message_body": convert_and_respect_annotation_metadata(
|
|
582
|
+
object_=message_body, annotation=MessageBody, direction="write"
|
|
583
|
+
),
|
|
584
|
+
"callback_url": callback_url,
|
|
585
|
+
"validity": validity,
|
|
586
|
+
"tag": tag,
|
|
587
|
+
},
|
|
588
|
+
headers={
|
|
589
|
+
"content-type": "application/json",
|
|
590
|
+
},
|
|
591
|
+
request_options=request_options,
|
|
592
|
+
omit=OMIT,
|
|
593
|
+
)
|
|
594
|
+
try:
|
|
595
|
+
if 200 <= _response.status_code < 300:
|
|
596
|
+
_data = typing.cast(
|
|
597
|
+
SendMessagesResponse,
|
|
598
|
+
parse_obj_as(
|
|
599
|
+
type_=SendMessagesResponse, # type: ignore
|
|
600
|
+
object_=_response.json(),
|
|
601
|
+
),
|
|
602
|
+
)
|
|
603
|
+
return AsyncHttpResponse(response=_response, data=_data)
|
|
604
|
+
if _response.status_code == 400:
|
|
605
|
+
raise BadRequestError(
|
|
606
|
+
headers=dict(_response.headers),
|
|
607
|
+
body=typing.cast(
|
|
608
|
+
typing.Any,
|
|
609
|
+
parse_obj_as(
|
|
610
|
+
type_=typing.Any, # type: ignore
|
|
611
|
+
object_=_response.json(),
|
|
612
|
+
),
|
|
613
|
+
),
|
|
614
|
+
)
|
|
615
|
+
if _response.status_code == 403:
|
|
616
|
+
raise ForbiddenError(
|
|
617
|
+
headers=dict(_response.headers),
|
|
618
|
+
body=typing.cast(
|
|
619
|
+
typing.Any,
|
|
620
|
+
parse_obj_as(
|
|
621
|
+
type_=typing.Any, # type: ignore
|
|
622
|
+
object_=_response.json(),
|
|
623
|
+
),
|
|
624
|
+
),
|
|
625
|
+
)
|
|
626
|
+
_response_json = _response.json()
|
|
627
|
+
except JSONDecodeError:
|
|
628
|
+
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
|
|
629
|
+
except ValidationError as e:
|
|
630
|
+
raise ParsingError(
|
|
631
|
+
status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
|
|
632
|
+
)
|
|
633
|
+
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
|
|
634
|
+
|
|
635
|
+
async def get(
|
|
636
|
+
self, id: str, *, request_options: typing.Optional[RequestOptions] = None
|
|
637
|
+
) -> AsyncHttpResponse[GetMessagesResponse]:
|
|
638
|
+
"""
|
|
639
|
+
Returns the SMS or MMS message identified by `id`, including its delivery status and content.
|
|
640
|
+
|
|
641
|
+
Parameters
|
|
642
|
+
----------
|
|
643
|
+
id : str
|
|
644
|
+
The unique ID of the message.
|
|
645
|
+
|
|
646
|
+
request_options : typing.Optional[RequestOptions]
|
|
647
|
+
Request-specific configuration.
|
|
648
|
+
|
|
649
|
+
Returns
|
|
650
|
+
-------
|
|
651
|
+
AsyncHttpResponse[GetMessagesResponse]
|
|
652
|
+
Returns the message.
|
|
653
|
+
"""
|
|
654
|
+
_response = await self._client_wrapper.httpx_client.request(
|
|
655
|
+
f"v3/messages/{encode_path_param(id)}",
|
|
656
|
+
method="GET",
|
|
657
|
+
request_options=request_options,
|
|
658
|
+
)
|
|
659
|
+
try:
|
|
660
|
+
if 200 <= _response.status_code < 300:
|
|
661
|
+
_data = typing.cast(
|
|
662
|
+
GetMessagesResponse,
|
|
663
|
+
parse_obj_as(
|
|
664
|
+
type_=GetMessagesResponse, # type: ignore
|
|
665
|
+
object_=_response.json(),
|
|
666
|
+
),
|
|
667
|
+
)
|
|
668
|
+
return AsyncHttpResponse(response=_response, data=_data)
|
|
669
|
+
if _response.status_code == 403:
|
|
670
|
+
raise ForbiddenError(
|
|
671
|
+
headers=dict(_response.headers),
|
|
672
|
+
body=typing.cast(
|
|
673
|
+
typing.Any,
|
|
674
|
+
parse_obj_as(
|
|
675
|
+
type_=typing.Any, # type: ignore
|
|
676
|
+
object_=_response.json(),
|
|
677
|
+
),
|
|
678
|
+
),
|
|
679
|
+
)
|
|
680
|
+
if _response.status_code == 404:
|
|
681
|
+
raise NotFoundError(
|
|
682
|
+
headers=dict(_response.headers),
|
|
683
|
+
body=typing.cast(
|
|
684
|
+
typing.Any,
|
|
685
|
+
parse_obj_as(
|
|
686
|
+
type_=typing.Any, # type: ignore
|
|
687
|
+
object_=_response.json(),
|
|
688
|
+
),
|
|
689
|
+
),
|
|
690
|
+
)
|
|
691
|
+
_response_json = _response.json()
|
|
692
|
+
except JSONDecodeError:
|
|
693
|
+
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
|
|
694
|
+
except ValidationError as e:
|
|
695
|
+
raise ParsingError(
|
|
696
|
+
status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
|
|
697
|
+
)
|
|
698
|
+
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
|
|
699
|
+
|
|
700
|
+
async def list_all(
|
|
701
|
+
self,
|
|
702
|
+
*,
|
|
703
|
+
type: str,
|
|
704
|
+
sent_after: typing.Optional[str] = None,
|
|
705
|
+
sent_before: typing.Optional[str] = None,
|
|
706
|
+
from_: typing.Optional[str] = None,
|
|
707
|
+
to: typing.Optional[str] = None,
|
|
708
|
+
status: typing.Optional[MessageDeliveryStatus] = None,
|
|
709
|
+
tag: typing.Optional[str] = None,
|
|
710
|
+
message_type: typing.Optional[ListAllMessagesRequestMessageType] = None,
|
|
711
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
712
|
+
) -> AsyncHttpResponse[str]:
|
|
713
|
+
"""
|
|
714
|
+
Streams matching SMS and MMS messages as newline-delimited JSON (NDJSON), one message per line, for bulk export.
|
|
715
|
+
|
|
716
|
+
Parameters
|
|
717
|
+
----------
|
|
718
|
+
type : str
|
|
719
|
+
Filters messages by direction. One of `inbound` (messages received by the account) or `outbound` (messages sent by the account).
|
|
720
|
+
|
|
721
|
+
sent_after : typing.Optional[str]
|
|
722
|
+
Returns messages sent on or after this timestamp, in `YYYY-MM-DDTHH:MM:SS` format.
|
|
723
|
+
|
|
724
|
+
sent_before : typing.Optional[str]
|
|
725
|
+
Returns messages sent on or before this timestamp, in `YYYY-MM-DDTHH:MM:SS` format.
|
|
726
|
+
|
|
727
|
+
from_ : typing.Optional[str]
|
|
728
|
+
Filters by message sender. For `outbound` messages, the Sender ID used to send the message; for `inbound` messages, the originating phone number.
|
|
729
|
+
|
|
730
|
+
to : typing.Optional[str]
|
|
731
|
+
Filters by message recipient. For `outbound` messages, the destination phone number; for `inbound` messages, the SMS-enabled number that received the message.
|
|
732
|
+
|
|
733
|
+
status : typing.Optional[MessageDeliveryStatus]
|
|
734
|
+
Filters messages by delivery status. Accepts a `MessageDeliveryStatus` value.
|
|
735
|
+
|
|
736
|
+
tag : typing.Optional[str]
|
|
737
|
+
Filters messages by `tag`. Supported for outbound messages only.
|
|
738
|
+
|
|
739
|
+
message_type : typing.Optional[ListAllMessagesRequestMessageType]
|
|
740
|
+
Filters messages by type. One of `sms` (text message) or `mms` (multimedia message).
|
|
741
|
+
|
|
742
|
+
request_options : typing.Optional[RequestOptions]
|
|
743
|
+
Request-specific configuration.
|
|
744
|
+
|
|
745
|
+
Returns
|
|
746
|
+
-------
|
|
747
|
+
AsyncHttpResponse[str]
|
|
748
|
+
Returns an NDJSON stream of messages, one per line.
|
|
749
|
+
"""
|
|
750
|
+
_response = await self._client_wrapper.httpx_client.request(
|
|
751
|
+
"v3/messages/all",
|
|
752
|
+
method="GET",
|
|
753
|
+
params={
|
|
754
|
+
"sent_after": sent_after,
|
|
755
|
+
"sent_before": sent_before,
|
|
756
|
+
"type": type,
|
|
757
|
+
"from": from_,
|
|
758
|
+
"to": to,
|
|
759
|
+
"status": status,
|
|
760
|
+
"tag": tag,
|
|
761
|
+
"message_type": message_type,
|
|
762
|
+
},
|
|
763
|
+
request_options=request_options,
|
|
764
|
+
)
|
|
765
|
+
try:
|
|
766
|
+
if 200 <= _response.status_code < 300:
|
|
767
|
+
_data = typing.cast(
|
|
768
|
+
str,
|
|
769
|
+
parse_obj_as(
|
|
770
|
+
type_=str, # type: ignore
|
|
771
|
+
object_=_response.json(),
|
|
772
|
+
),
|
|
773
|
+
)
|
|
774
|
+
return AsyncHttpResponse(response=_response, data=_data)
|
|
775
|
+
if _response.status_code == 403:
|
|
776
|
+
raise ForbiddenError(
|
|
777
|
+
headers=dict(_response.headers),
|
|
778
|
+
body=typing.cast(
|
|
779
|
+
typing.Any,
|
|
780
|
+
parse_obj_as(
|
|
781
|
+
type_=typing.Any, # type: ignore
|
|
782
|
+
object_=_response.json(),
|
|
783
|
+
),
|
|
784
|
+
),
|
|
785
|
+
)
|
|
786
|
+
_response_json = _response.json()
|
|
787
|
+
except JSONDecodeError:
|
|
788
|
+
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
|
|
789
|
+
except ValidationError as e:
|
|
790
|
+
raise ParsingError(
|
|
791
|
+
status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
|
|
792
|
+
)
|
|
793
|
+
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
|