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,796 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import typing
|
|
6
|
+
|
|
7
|
+
from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
|
|
8
|
+
from ..core.request_options import RequestOptions
|
|
9
|
+
from ..types.call_create_response import CallCreateResponse
|
|
10
|
+
from ..types.call_list_response import CallListResponse
|
|
11
|
+
from ..types.call_response import CallResponse
|
|
12
|
+
from ..types.call_stream_channel import CallStreamChannel
|
|
13
|
+
from ..types.call_stream_type import CallStreamType
|
|
14
|
+
from ..types.success_response import SuccessResponse
|
|
15
|
+
from .raw_client import AsyncRawCallControlClient, RawCallControlClient
|
|
16
|
+
from .types.call_dtmf_collect_request_prompt import CallDtmfCollectRequestPrompt
|
|
17
|
+
|
|
18
|
+
if typing.TYPE_CHECKING:
|
|
19
|
+
from .audio.client import AsyncAudioClient, AudioClient
|
|
20
|
+
from .streams.client import AsyncStreamsClient, StreamsClient
|
|
21
|
+
# this is used as the default value for optional parameters
|
|
22
|
+
OMIT = typing.cast(typing.Any, ...)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class CallControlClient:
|
|
26
|
+
def __init__(self, *, client_wrapper: SyncClientWrapper):
|
|
27
|
+
self._raw_client = RawCallControlClient(client_wrapper=client_wrapper)
|
|
28
|
+
self._client_wrapper = client_wrapper
|
|
29
|
+
self._streams: typing.Optional[StreamsClient] = None
|
|
30
|
+
self._audio: typing.Optional[AudioClient] = None
|
|
31
|
+
|
|
32
|
+
@property
|
|
33
|
+
def with_raw_response(self) -> RawCallControlClient:
|
|
34
|
+
"""
|
|
35
|
+
Retrieves a raw implementation of this client that returns raw responses.
|
|
36
|
+
|
|
37
|
+
Returns
|
|
38
|
+
-------
|
|
39
|
+
RawCallControlClient
|
|
40
|
+
"""
|
|
41
|
+
return self._raw_client
|
|
42
|
+
|
|
43
|
+
def list(self, *, request_options: typing.Optional[RequestOptions] = None) -> CallListResponse:
|
|
44
|
+
"""
|
|
45
|
+
Returns the calls currently in progress for the authenticated account.
|
|
46
|
+
|
|
47
|
+
Parameters
|
|
48
|
+
----------
|
|
49
|
+
request_options : typing.Optional[RequestOptions]
|
|
50
|
+
Request-specific configuration.
|
|
51
|
+
|
|
52
|
+
Returns
|
|
53
|
+
-------
|
|
54
|
+
CallListResponse
|
|
55
|
+
Returns the list of active calls.
|
|
56
|
+
|
|
57
|
+
Examples
|
|
58
|
+
--------
|
|
59
|
+
from wavix import Wavix
|
|
60
|
+
|
|
61
|
+
client = Wavix(
|
|
62
|
+
token="YOUR_TOKEN",
|
|
63
|
+
)
|
|
64
|
+
client.call_control.list()
|
|
65
|
+
"""
|
|
66
|
+
_response = self._raw_client.list(request_options=request_options)
|
|
67
|
+
return _response.data
|
|
68
|
+
|
|
69
|
+
def create(
|
|
70
|
+
self,
|
|
71
|
+
*,
|
|
72
|
+
from_: str,
|
|
73
|
+
to: str,
|
|
74
|
+
callback_url: str,
|
|
75
|
+
recording: typing.Optional[bool] = OMIT,
|
|
76
|
+
voicemail_detection: typing.Optional[bool] = OMIT,
|
|
77
|
+
tag: typing.Optional[str] = OMIT,
|
|
78
|
+
timeout: typing.Optional[int] = OMIT,
|
|
79
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
80
|
+
) -> CallCreateResponse:
|
|
81
|
+
"""
|
|
82
|
+
Places an outbound call. Returns the call with its `uuid` for tracking and control.
|
|
83
|
+
|
|
84
|
+
Parameters
|
|
85
|
+
----------
|
|
86
|
+
from_ : str
|
|
87
|
+
Caller ID. Must be an active or verified phone number on the account.
|
|
88
|
+
|
|
89
|
+
to : str
|
|
90
|
+
Destination number in E.164 format
|
|
91
|
+
|
|
92
|
+
callback_url : str
|
|
93
|
+
The callback URL where Wavix sends the call status updates
|
|
94
|
+
|
|
95
|
+
recording : typing.Optional[bool]
|
|
96
|
+
Specifies whether to record the call
|
|
97
|
+
|
|
98
|
+
voicemail_detection : typing.Optional[bool]
|
|
99
|
+
Specifies whether the AMD is turned on for the call
|
|
100
|
+
|
|
101
|
+
tag : typing.Optional[str]
|
|
102
|
+
Call metadata
|
|
103
|
+
|
|
104
|
+
timeout : typing.Optional[int]
|
|
105
|
+
The ring timeout, in seconds, before the call is considered unanswered.
|
|
106
|
+
|
|
107
|
+
request_options : typing.Optional[RequestOptions]
|
|
108
|
+
Request-specific configuration.
|
|
109
|
+
|
|
110
|
+
Returns
|
|
111
|
+
-------
|
|
112
|
+
CallCreateResponse
|
|
113
|
+
Returns the created call.
|
|
114
|
+
|
|
115
|
+
Examples
|
|
116
|
+
--------
|
|
117
|
+
from wavix import Wavix
|
|
118
|
+
|
|
119
|
+
client = Wavix(
|
|
120
|
+
token="YOUR_TOKEN",
|
|
121
|
+
)
|
|
122
|
+
client.call_control.create(
|
|
123
|
+
from_="+1234567890",
|
|
124
|
+
to="+1987654321",
|
|
125
|
+
callback_url="https://examples.com/callback",
|
|
126
|
+
)
|
|
127
|
+
"""
|
|
128
|
+
_response = self._raw_client.create(
|
|
129
|
+
from_=from_,
|
|
130
|
+
to=to,
|
|
131
|
+
callback_url=callback_url,
|
|
132
|
+
recording=recording,
|
|
133
|
+
voicemail_detection=voicemail_detection,
|
|
134
|
+
tag=tag,
|
|
135
|
+
timeout=timeout,
|
|
136
|
+
request_options=request_options,
|
|
137
|
+
)
|
|
138
|
+
return _response.data
|
|
139
|
+
|
|
140
|
+
def get(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> CallResponse:
|
|
141
|
+
"""
|
|
142
|
+
Returns the call identified by `id`, including its current event and timestamps.
|
|
143
|
+
|
|
144
|
+
Parameters
|
|
145
|
+
----------
|
|
146
|
+
id : str
|
|
147
|
+
The `uuid` of the call.
|
|
148
|
+
|
|
149
|
+
request_options : typing.Optional[RequestOptions]
|
|
150
|
+
Request-specific configuration.
|
|
151
|
+
|
|
152
|
+
Returns
|
|
153
|
+
-------
|
|
154
|
+
CallResponse
|
|
155
|
+
Returns the call.
|
|
156
|
+
|
|
157
|
+
Examples
|
|
158
|
+
--------
|
|
159
|
+
from wavix import Wavix
|
|
160
|
+
|
|
161
|
+
client = Wavix(
|
|
162
|
+
token="YOUR_TOKEN",
|
|
163
|
+
)
|
|
164
|
+
client.call_control.get(
|
|
165
|
+
id="id",
|
|
166
|
+
)
|
|
167
|
+
"""
|
|
168
|
+
_response = self._raw_client.get(id, request_options=request_options)
|
|
169
|
+
return _response.data
|
|
170
|
+
|
|
171
|
+
def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> SuccessResponse:
|
|
172
|
+
"""
|
|
173
|
+
Ends the active call identified by `id` by hanging up.
|
|
174
|
+
|
|
175
|
+
Parameters
|
|
176
|
+
----------
|
|
177
|
+
id : str
|
|
178
|
+
The `uuid` of the call.
|
|
179
|
+
|
|
180
|
+
request_options : typing.Optional[RequestOptions]
|
|
181
|
+
Request-specific configuration.
|
|
182
|
+
|
|
183
|
+
Returns
|
|
184
|
+
-------
|
|
185
|
+
SuccessResponse
|
|
186
|
+
Returns a success confirmation. The call is ended.
|
|
187
|
+
|
|
188
|
+
Examples
|
|
189
|
+
--------
|
|
190
|
+
from wavix import Wavix
|
|
191
|
+
|
|
192
|
+
client = Wavix(
|
|
193
|
+
token="YOUR_TOKEN",
|
|
194
|
+
)
|
|
195
|
+
client.call_control.delete(
|
|
196
|
+
id="id",
|
|
197
|
+
)
|
|
198
|
+
"""
|
|
199
|
+
_response = self._raw_client.delete(id, request_options=request_options)
|
|
200
|
+
return _response.data
|
|
201
|
+
|
|
202
|
+
def update(self, id: str, *, tag: str, request_options: typing.Optional[RequestOptions] = None) -> SuccessResponse:
|
|
203
|
+
"""
|
|
204
|
+
Updates the active call identified by `id`. Only the `tag` field can be changed.
|
|
205
|
+
|
|
206
|
+
Parameters
|
|
207
|
+
----------
|
|
208
|
+
id : str
|
|
209
|
+
The `uuid` of the call.
|
|
210
|
+
|
|
211
|
+
tag : str
|
|
212
|
+
User-defined label attached to the Call for tracking or reporting.
|
|
213
|
+
|
|
214
|
+
request_options : typing.Optional[RequestOptions]
|
|
215
|
+
Request-specific configuration.
|
|
216
|
+
|
|
217
|
+
Returns
|
|
218
|
+
-------
|
|
219
|
+
SuccessResponse
|
|
220
|
+
Returns a success confirmation. The call `tag` is updated.
|
|
221
|
+
|
|
222
|
+
Examples
|
|
223
|
+
--------
|
|
224
|
+
from wavix import Wavix
|
|
225
|
+
|
|
226
|
+
client = Wavix(
|
|
227
|
+
token="YOUR_TOKEN",
|
|
228
|
+
)
|
|
229
|
+
client.call_control.update(
|
|
230
|
+
id="id",
|
|
231
|
+
tag="marketing-campaign",
|
|
232
|
+
)
|
|
233
|
+
"""
|
|
234
|
+
_response = self._raw_client.update(id, tag=tag, request_options=request_options)
|
|
235
|
+
return _response.data
|
|
236
|
+
|
|
237
|
+
def answer(
|
|
238
|
+
self,
|
|
239
|
+
id: str,
|
|
240
|
+
*,
|
|
241
|
+
call_recording: typing.Optional[bool] = OMIT,
|
|
242
|
+
call_transcription: typing.Optional[bool] = OMIT,
|
|
243
|
+
stream_url: typing.Optional[str] = OMIT,
|
|
244
|
+
stream_type: typing.Optional[CallStreamType] = OMIT,
|
|
245
|
+
stream_channel: typing.Optional[CallStreamChannel] = OMIT,
|
|
246
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
247
|
+
) -> SuccessResponse:
|
|
248
|
+
"""
|
|
249
|
+
Answers the inbound call identified by `id`. Optionally starts media streaming on answer.
|
|
250
|
+
|
|
251
|
+
Parameters
|
|
252
|
+
----------
|
|
253
|
+
id : str
|
|
254
|
+
The `uuid` of the call.
|
|
255
|
+
|
|
256
|
+
call_recording : typing.Optional[bool]
|
|
257
|
+
Indicates whether the call should be recorded.
|
|
258
|
+
|
|
259
|
+
call_transcription : typing.Optional[bool]
|
|
260
|
+
Indicates whether the call should be transcribed after it ends.
|
|
261
|
+
|
|
262
|
+
stream_url : typing.Optional[str]
|
|
263
|
+
WebSocket URL to stream the call.
|
|
264
|
+
|
|
265
|
+
stream_type : typing.Optional[CallStreamType]
|
|
266
|
+
Direction of audio streamed to `stream_url`.
|
|
267
|
+
|
|
268
|
+
stream_channel : typing.Optional[CallStreamChannel]
|
|
269
|
+
Audio channel streamed to `stream_url`.
|
|
270
|
+
|
|
271
|
+
request_options : typing.Optional[RequestOptions]
|
|
272
|
+
Request-specific configuration.
|
|
273
|
+
|
|
274
|
+
Returns
|
|
275
|
+
-------
|
|
276
|
+
SuccessResponse
|
|
277
|
+
Returns a success confirmation. The call is answered.
|
|
278
|
+
|
|
279
|
+
Examples
|
|
280
|
+
--------
|
|
281
|
+
from wavix import Wavix
|
|
282
|
+
|
|
283
|
+
client = Wavix(
|
|
284
|
+
token="YOUR_TOKEN",
|
|
285
|
+
)
|
|
286
|
+
client.call_control.answer(
|
|
287
|
+
id="id",
|
|
288
|
+
)
|
|
289
|
+
"""
|
|
290
|
+
_response = self._raw_client.answer(
|
|
291
|
+
id,
|
|
292
|
+
call_recording=call_recording,
|
|
293
|
+
call_transcription=call_transcription,
|
|
294
|
+
stream_url=stream_url,
|
|
295
|
+
stream_type=stream_type,
|
|
296
|
+
stream_channel=stream_channel,
|
|
297
|
+
request_options=request_options,
|
|
298
|
+
)
|
|
299
|
+
return _response.data
|
|
300
|
+
|
|
301
|
+
def collect(
|
|
302
|
+
self,
|
|
303
|
+
id: str,
|
|
304
|
+
*,
|
|
305
|
+
max_digits: typing.Optional[int] = OMIT,
|
|
306
|
+
timeout: typing.Optional[int] = OMIT,
|
|
307
|
+
termination_character: typing.Optional[str] = OMIT,
|
|
308
|
+
max_attempts: typing.Optional[int] = OMIT,
|
|
309
|
+
prompt: typing.Optional[CallDtmfCollectRequestPrompt] = OMIT,
|
|
310
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
311
|
+
) -> SuccessResponse:
|
|
312
|
+
"""
|
|
313
|
+
Collects DTMF keypad input from the caller on the active call identified by `id`.
|
|
314
|
+
|
|
315
|
+
Parameters
|
|
316
|
+
----------
|
|
317
|
+
id : str
|
|
318
|
+
The `uuid` of the call.
|
|
319
|
+
|
|
320
|
+
max_digits : typing.Optional[int]
|
|
321
|
+
Maximum number of digits to collect.
|
|
322
|
+
|
|
323
|
+
timeout : typing.Optional[int]
|
|
324
|
+
Timeout for digit collection in seconds.
|
|
325
|
+
|
|
326
|
+
termination_character : typing.Optional[str]
|
|
327
|
+
DTMF character that ends input collection.
|
|
328
|
+
|
|
329
|
+
max_attempts : typing.Optional[int]
|
|
330
|
+
Maximum number of attempts.
|
|
331
|
+
|
|
332
|
+
prompt : typing.Optional[CallDtmfCollectRequestPrompt]
|
|
333
|
+
Prompt to play before collecting digits.
|
|
334
|
+
Play a prerecorded audio file or use Wavix Text-To-Speech.
|
|
335
|
+
|
|
336
|
+
request_options : typing.Optional[RequestOptions]
|
|
337
|
+
Request-specific configuration.
|
|
338
|
+
|
|
339
|
+
Returns
|
|
340
|
+
-------
|
|
341
|
+
SuccessResponse
|
|
342
|
+
Returns a success confirmation. DTMF collection starts.
|
|
343
|
+
|
|
344
|
+
Examples
|
|
345
|
+
--------
|
|
346
|
+
from wavix import Wavix
|
|
347
|
+
|
|
348
|
+
client = Wavix(
|
|
349
|
+
token="YOUR_TOKEN",
|
|
350
|
+
)
|
|
351
|
+
client.call_control.collect(
|
|
352
|
+
id="id",
|
|
353
|
+
)
|
|
354
|
+
"""
|
|
355
|
+
_response = self._raw_client.collect(
|
|
356
|
+
id,
|
|
357
|
+
max_digits=max_digits,
|
|
358
|
+
timeout=timeout,
|
|
359
|
+
termination_character=termination_character,
|
|
360
|
+
max_attempts=max_attempts,
|
|
361
|
+
prompt=prompt,
|
|
362
|
+
request_options=request_options,
|
|
363
|
+
)
|
|
364
|
+
return _response.data
|
|
365
|
+
|
|
366
|
+
@property
|
|
367
|
+
def streams(self):
|
|
368
|
+
if self._streams is None:
|
|
369
|
+
from .streams.client import StreamsClient # noqa: E402
|
|
370
|
+
|
|
371
|
+
self._streams = StreamsClient(client_wrapper=self._client_wrapper)
|
|
372
|
+
return self._streams
|
|
373
|
+
|
|
374
|
+
@property
|
|
375
|
+
def audio(self):
|
|
376
|
+
if self._audio is None:
|
|
377
|
+
from .audio.client import AudioClient # noqa: E402
|
|
378
|
+
|
|
379
|
+
self._audio = AudioClient(client_wrapper=self._client_wrapper)
|
|
380
|
+
return self._audio
|
|
381
|
+
|
|
382
|
+
|
|
383
|
+
class AsyncCallControlClient:
|
|
384
|
+
def __init__(self, *, client_wrapper: AsyncClientWrapper):
|
|
385
|
+
self._raw_client = AsyncRawCallControlClient(client_wrapper=client_wrapper)
|
|
386
|
+
self._client_wrapper = client_wrapper
|
|
387
|
+
self._streams: typing.Optional[AsyncStreamsClient] = None
|
|
388
|
+
self._audio: typing.Optional[AsyncAudioClient] = None
|
|
389
|
+
|
|
390
|
+
@property
|
|
391
|
+
def with_raw_response(self) -> AsyncRawCallControlClient:
|
|
392
|
+
"""
|
|
393
|
+
Retrieves a raw implementation of this client that returns raw responses.
|
|
394
|
+
|
|
395
|
+
Returns
|
|
396
|
+
-------
|
|
397
|
+
AsyncRawCallControlClient
|
|
398
|
+
"""
|
|
399
|
+
return self._raw_client
|
|
400
|
+
|
|
401
|
+
async def list(self, *, request_options: typing.Optional[RequestOptions] = None) -> CallListResponse:
|
|
402
|
+
"""
|
|
403
|
+
Returns the calls currently in progress for the authenticated account.
|
|
404
|
+
|
|
405
|
+
Parameters
|
|
406
|
+
----------
|
|
407
|
+
request_options : typing.Optional[RequestOptions]
|
|
408
|
+
Request-specific configuration.
|
|
409
|
+
|
|
410
|
+
Returns
|
|
411
|
+
-------
|
|
412
|
+
CallListResponse
|
|
413
|
+
Returns the list of active calls.
|
|
414
|
+
|
|
415
|
+
Examples
|
|
416
|
+
--------
|
|
417
|
+
import asyncio
|
|
418
|
+
|
|
419
|
+
from wavix import AsyncWavix
|
|
420
|
+
|
|
421
|
+
client = AsyncWavix(
|
|
422
|
+
token="YOUR_TOKEN",
|
|
423
|
+
)
|
|
424
|
+
|
|
425
|
+
|
|
426
|
+
async def main() -> None:
|
|
427
|
+
await client.call_control.list()
|
|
428
|
+
|
|
429
|
+
|
|
430
|
+
asyncio.run(main())
|
|
431
|
+
"""
|
|
432
|
+
_response = await self._raw_client.list(request_options=request_options)
|
|
433
|
+
return _response.data
|
|
434
|
+
|
|
435
|
+
async def create(
|
|
436
|
+
self,
|
|
437
|
+
*,
|
|
438
|
+
from_: str,
|
|
439
|
+
to: str,
|
|
440
|
+
callback_url: str,
|
|
441
|
+
recording: typing.Optional[bool] = OMIT,
|
|
442
|
+
voicemail_detection: typing.Optional[bool] = OMIT,
|
|
443
|
+
tag: typing.Optional[str] = OMIT,
|
|
444
|
+
timeout: typing.Optional[int] = OMIT,
|
|
445
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
446
|
+
) -> CallCreateResponse:
|
|
447
|
+
"""
|
|
448
|
+
Places an outbound call. Returns the call with its `uuid` for tracking and control.
|
|
449
|
+
|
|
450
|
+
Parameters
|
|
451
|
+
----------
|
|
452
|
+
from_ : str
|
|
453
|
+
Caller ID. Must be an active or verified phone number on the account.
|
|
454
|
+
|
|
455
|
+
to : str
|
|
456
|
+
Destination number in E.164 format
|
|
457
|
+
|
|
458
|
+
callback_url : str
|
|
459
|
+
The callback URL where Wavix sends the call status updates
|
|
460
|
+
|
|
461
|
+
recording : typing.Optional[bool]
|
|
462
|
+
Specifies whether to record the call
|
|
463
|
+
|
|
464
|
+
voicemail_detection : typing.Optional[bool]
|
|
465
|
+
Specifies whether the AMD is turned on for the call
|
|
466
|
+
|
|
467
|
+
tag : typing.Optional[str]
|
|
468
|
+
Call metadata
|
|
469
|
+
|
|
470
|
+
timeout : typing.Optional[int]
|
|
471
|
+
The ring timeout, in seconds, before the call is considered unanswered.
|
|
472
|
+
|
|
473
|
+
request_options : typing.Optional[RequestOptions]
|
|
474
|
+
Request-specific configuration.
|
|
475
|
+
|
|
476
|
+
Returns
|
|
477
|
+
-------
|
|
478
|
+
CallCreateResponse
|
|
479
|
+
Returns the created call.
|
|
480
|
+
|
|
481
|
+
Examples
|
|
482
|
+
--------
|
|
483
|
+
import asyncio
|
|
484
|
+
|
|
485
|
+
from wavix import AsyncWavix
|
|
486
|
+
|
|
487
|
+
client = AsyncWavix(
|
|
488
|
+
token="YOUR_TOKEN",
|
|
489
|
+
)
|
|
490
|
+
|
|
491
|
+
|
|
492
|
+
async def main() -> None:
|
|
493
|
+
await client.call_control.create(
|
|
494
|
+
from_="+1234567890",
|
|
495
|
+
to="+1987654321",
|
|
496
|
+
callback_url="https://examples.com/callback",
|
|
497
|
+
)
|
|
498
|
+
|
|
499
|
+
|
|
500
|
+
asyncio.run(main())
|
|
501
|
+
"""
|
|
502
|
+
_response = await self._raw_client.create(
|
|
503
|
+
from_=from_,
|
|
504
|
+
to=to,
|
|
505
|
+
callback_url=callback_url,
|
|
506
|
+
recording=recording,
|
|
507
|
+
voicemail_detection=voicemail_detection,
|
|
508
|
+
tag=tag,
|
|
509
|
+
timeout=timeout,
|
|
510
|
+
request_options=request_options,
|
|
511
|
+
)
|
|
512
|
+
return _response.data
|
|
513
|
+
|
|
514
|
+
async def get(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> CallResponse:
|
|
515
|
+
"""
|
|
516
|
+
Returns the call identified by `id`, including its current event and timestamps.
|
|
517
|
+
|
|
518
|
+
Parameters
|
|
519
|
+
----------
|
|
520
|
+
id : str
|
|
521
|
+
The `uuid` of the call.
|
|
522
|
+
|
|
523
|
+
request_options : typing.Optional[RequestOptions]
|
|
524
|
+
Request-specific configuration.
|
|
525
|
+
|
|
526
|
+
Returns
|
|
527
|
+
-------
|
|
528
|
+
CallResponse
|
|
529
|
+
Returns the call.
|
|
530
|
+
|
|
531
|
+
Examples
|
|
532
|
+
--------
|
|
533
|
+
import asyncio
|
|
534
|
+
|
|
535
|
+
from wavix import AsyncWavix
|
|
536
|
+
|
|
537
|
+
client = AsyncWavix(
|
|
538
|
+
token="YOUR_TOKEN",
|
|
539
|
+
)
|
|
540
|
+
|
|
541
|
+
|
|
542
|
+
async def main() -> None:
|
|
543
|
+
await client.call_control.get(
|
|
544
|
+
id="id",
|
|
545
|
+
)
|
|
546
|
+
|
|
547
|
+
|
|
548
|
+
asyncio.run(main())
|
|
549
|
+
"""
|
|
550
|
+
_response = await self._raw_client.get(id, request_options=request_options)
|
|
551
|
+
return _response.data
|
|
552
|
+
|
|
553
|
+
async def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> SuccessResponse:
|
|
554
|
+
"""
|
|
555
|
+
Ends the active call identified by `id` by hanging up.
|
|
556
|
+
|
|
557
|
+
Parameters
|
|
558
|
+
----------
|
|
559
|
+
id : str
|
|
560
|
+
The `uuid` of the call.
|
|
561
|
+
|
|
562
|
+
request_options : typing.Optional[RequestOptions]
|
|
563
|
+
Request-specific configuration.
|
|
564
|
+
|
|
565
|
+
Returns
|
|
566
|
+
-------
|
|
567
|
+
SuccessResponse
|
|
568
|
+
Returns a success confirmation. The call is ended.
|
|
569
|
+
|
|
570
|
+
Examples
|
|
571
|
+
--------
|
|
572
|
+
import asyncio
|
|
573
|
+
|
|
574
|
+
from wavix import AsyncWavix
|
|
575
|
+
|
|
576
|
+
client = AsyncWavix(
|
|
577
|
+
token="YOUR_TOKEN",
|
|
578
|
+
)
|
|
579
|
+
|
|
580
|
+
|
|
581
|
+
async def main() -> None:
|
|
582
|
+
await client.call_control.delete(
|
|
583
|
+
id="id",
|
|
584
|
+
)
|
|
585
|
+
|
|
586
|
+
|
|
587
|
+
asyncio.run(main())
|
|
588
|
+
"""
|
|
589
|
+
_response = await self._raw_client.delete(id, request_options=request_options)
|
|
590
|
+
return _response.data
|
|
591
|
+
|
|
592
|
+
async def update(
|
|
593
|
+
self, id: str, *, tag: str, request_options: typing.Optional[RequestOptions] = None
|
|
594
|
+
) -> SuccessResponse:
|
|
595
|
+
"""
|
|
596
|
+
Updates the active call identified by `id`. Only the `tag` field can be changed.
|
|
597
|
+
|
|
598
|
+
Parameters
|
|
599
|
+
----------
|
|
600
|
+
id : str
|
|
601
|
+
The `uuid` of the call.
|
|
602
|
+
|
|
603
|
+
tag : str
|
|
604
|
+
User-defined label attached to the Call for tracking or reporting.
|
|
605
|
+
|
|
606
|
+
request_options : typing.Optional[RequestOptions]
|
|
607
|
+
Request-specific configuration.
|
|
608
|
+
|
|
609
|
+
Returns
|
|
610
|
+
-------
|
|
611
|
+
SuccessResponse
|
|
612
|
+
Returns a success confirmation. The call `tag` is updated.
|
|
613
|
+
|
|
614
|
+
Examples
|
|
615
|
+
--------
|
|
616
|
+
import asyncio
|
|
617
|
+
|
|
618
|
+
from wavix import AsyncWavix
|
|
619
|
+
|
|
620
|
+
client = AsyncWavix(
|
|
621
|
+
token="YOUR_TOKEN",
|
|
622
|
+
)
|
|
623
|
+
|
|
624
|
+
|
|
625
|
+
async def main() -> None:
|
|
626
|
+
await client.call_control.update(
|
|
627
|
+
id="id",
|
|
628
|
+
tag="marketing-campaign",
|
|
629
|
+
)
|
|
630
|
+
|
|
631
|
+
|
|
632
|
+
asyncio.run(main())
|
|
633
|
+
"""
|
|
634
|
+
_response = await self._raw_client.update(id, tag=tag, request_options=request_options)
|
|
635
|
+
return _response.data
|
|
636
|
+
|
|
637
|
+
async def answer(
|
|
638
|
+
self,
|
|
639
|
+
id: str,
|
|
640
|
+
*,
|
|
641
|
+
call_recording: typing.Optional[bool] = OMIT,
|
|
642
|
+
call_transcription: typing.Optional[bool] = OMIT,
|
|
643
|
+
stream_url: typing.Optional[str] = OMIT,
|
|
644
|
+
stream_type: typing.Optional[CallStreamType] = OMIT,
|
|
645
|
+
stream_channel: typing.Optional[CallStreamChannel] = OMIT,
|
|
646
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
647
|
+
) -> SuccessResponse:
|
|
648
|
+
"""
|
|
649
|
+
Answers the inbound call identified by `id`. Optionally starts media streaming on answer.
|
|
650
|
+
|
|
651
|
+
Parameters
|
|
652
|
+
----------
|
|
653
|
+
id : str
|
|
654
|
+
The `uuid` of the call.
|
|
655
|
+
|
|
656
|
+
call_recording : typing.Optional[bool]
|
|
657
|
+
Indicates whether the call should be recorded.
|
|
658
|
+
|
|
659
|
+
call_transcription : typing.Optional[bool]
|
|
660
|
+
Indicates whether the call should be transcribed after it ends.
|
|
661
|
+
|
|
662
|
+
stream_url : typing.Optional[str]
|
|
663
|
+
WebSocket URL to stream the call.
|
|
664
|
+
|
|
665
|
+
stream_type : typing.Optional[CallStreamType]
|
|
666
|
+
Direction of audio streamed to `stream_url`.
|
|
667
|
+
|
|
668
|
+
stream_channel : typing.Optional[CallStreamChannel]
|
|
669
|
+
Audio channel streamed to `stream_url`.
|
|
670
|
+
|
|
671
|
+
request_options : typing.Optional[RequestOptions]
|
|
672
|
+
Request-specific configuration.
|
|
673
|
+
|
|
674
|
+
Returns
|
|
675
|
+
-------
|
|
676
|
+
SuccessResponse
|
|
677
|
+
Returns a success confirmation. The call is answered.
|
|
678
|
+
|
|
679
|
+
Examples
|
|
680
|
+
--------
|
|
681
|
+
import asyncio
|
|
682
|
+
|
|
683
|
+
from wavix import AsyncWavix
|
|
684
|
+
|
|
685
|
+
client = AsyncWavix(
|
|
686
|
+
token="YOUR_TOKEN",
|
|
687
|
+
)
|
|
688
|
+
|
|
689
|
+
|
|
690
|
+
async def main() -> None:
|
|
691
|
+
await client.call_control.answer(
|
|
692
|
+
id="id",
|
|
693
|
+
)
|
|
694
|
+
|
|
695
|
+
|
|
696
|
+
asyncio.run(main())
|
|
697
|
+
"""
|
|
698
|
+
_response = await self._raw_client.answer(
|
|
699
|
+
id,
|
|
700
|
+
call_recording=call_recording,
|
|
701
|
+
call_transcription=call_transcription,
|
|
702
|
+
stream_url=stream_url,
|
|
703
|
+
stream_type=stream_type,
|
|
704
|
+
stream_channel=stream_channel,
|
|
705
|
+
request_options=request_options,
|
|
706
|
+
)
|
|
707
|
+
return _response.data
|
|
708
|
+
|
|
709
|
+
async def collect(
|
|
710
|
+
self,
|
|
711
|
+
id: str,
|
|
712
|
+
*,
|
|
713
|
+
max_digits: typing.Optional[int] = OMIT,
|
|
714
|
+
timeout: typing.Optional[int] = OMIT,
|
|
715
|
+
termination_character: typing.Optional[str] = OMIT,
|
|
716
|
+
max_attempts: typing.Optional[int] = OMIT,
|
|
717
|
+
prompt: typing.Optional[CallDtmfCollectRequestPrompt] = OMIT,
|
|
718
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
719
|
+
) -> SuccessResponse:
|
|
720
|
+
"""
|
|
721
|
+
Collects DTMF keypad input from the caller on the active call identified by `id`.
|
|
722
|
+
|
|
723
|
+
Parameters
|
|
724
|
+
----------
|
|
725
|
+
id : str
|
|
726
|
+
The `uuid` of the call.
|
|
727
|
+
|
|
728
|
+
max_digits : typing.Optional[int]
|
|
729
|
+
Maximum number of digits to collect.
|
|
730
|
+
|
|
731
|
+
timeout : typing.Optional[int]
|
|
732
|
+
Timeout for digit collection in seconds.
|
|
733
|
+
|
|
734
|
+
termination_character : typing.Optional[str]
|
|
735
|
+
DTMF character that ends input collection.
|
|
736
|
+
|
|
737
|
+
max_attempts : typing.Optional[int]
|
|
738
|
+
Maximum number of attempts.
|
|
739
|
+
|
|
740
|
+
prompt : typing.Optional[CallDtmfCollectRequestPrompt]
|
|
741
|
+
Prompt to play before collecting digits.
|
|
742
|
+
Play a prerecorded audio file or use Wavix Text-To-Speech.
|
|
743
|
+
|
|
744
|
+
request_options : typing.Optional[RequestOptions]
|
|
745
|
+
Request-specific configuration.
|
|
746
|
+
|
|
747
|
+
Returns
|
|
748
|
+
-------
|
|
749
|
+
SuccessResponse
|
|
750
|
+
Returns a success confirmation. DTMF collection starts.
|
|
751
|
+
|
|
752
|
+
Examples
|
|
753
|
+
--------
|
|
754
|
+
import asyncio
|
|
755
|
+
|
|
756
|
+
from wavix import AsyncWavix
|
|
757
|
+
|
|
758
|
+
client = AsyncWavix(
|
|
759
|
+
token="YOUR_TOKEN",
|
|
760
|
+
)
|
|
761
|
+
|
|
762
|
+
|
|
763
|
+
async def main() -> None:
|
|
764
|
+
await client.call_control.collect(
|
|
765
|
+
id="id",
|
|
766
|
+
)
|
|
767
|
+
|
|
768
|
+
|
|
769
|
+
asyncio.run(main())
|
|
770
|
+
"""
|
|
771
|
+
_response = await self._raw_client.collect(
|
|
772
|
+
id,
|
|
773
|
+
max_digits=max_digits,
|
|
774
|
+
timeout=timeout,
|
|
775
|
+
termination_character=termination_character,
|
|
776
|
+
max_attempts=max_attempts,
|
|
777
|
+
prompt=prompt,
|
|
778
|
+
request_options=request_options,
|
|
779
|
+
)
|
|
780
|
+
return _response.data
|
|
781
|
+
|
|
782
|
+
@property
|
|
783
|
+
def streams(self):
|
|
784
|
+
if self._streams is None:
|
|
785
|
+
from .streams.client import AsyncStreamsClient # noqa: E402
|
|
786
|
+
|
|
787
|
+
self._streams = AsyncStreamsClient(client_wrapper=self._client_wrapper)
|
|
788
|
+
return self._streams
|
|
789
|
+
|
|
790
|
+
@property
|
|
791
|
+
def audio(self):
|
|
792
|
+
if self._audio is None:
|
|
793
|
+
from .audio.client import AsyncAudioClient # noqa: E402
|
|
794
|
+
|
|
795
|
+
self._audio = AsyncAudioClient(client_wrapper=self._client_wrapper)
|
|
796
|
+
return self._audio
|