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
wavix/cdrs/client.py
ADDED
|
@@ -0,0 +1,968 @@
|
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import datetime as dt
|
|
6
|
+
import typing
|
|
7
|
+
|
|
8
|
+
from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
|
|
9
|
+
from ..core.request_options import RequestOptions
|
|
10
|
+
from ..types.call_disposition import CallDisposition
|
|
11
|
+
from ..types.cdr_list_response import CdrListResponse
|
|
12
|
+
from ..types.cdr_response import CdrResponse
|
|
13
|
+
from ..types.cdr_transcription_response import CdrTranscriptionResponse
|
|
14
|
+
from ..types.cdr_transcription_search_response import CdrTranscriptionSearchResponse
|
|
15
|
+
from ..types.success_response import SuccessResponse
|
|
16
|
+
from ..types.transcription_filter import TranscriptionFilter
|
|
17
|
+
from ..types.transcription_language import TranscriptionLanguage
|
|
18
|
+
from .raw_client import AsyncRawCdrsClient, RawCdrsClient
|
|
19
|
+
from .types.cdr_search_request_disposition import CdrSearchRequestDisposition
|
|
20
|
+
from .types.cdr_search_request_type import CdrSearchRequestType
|
|
21
|
+
|
|
22
|
+
if typing.TYPE_CHECKING:
|
|
23
|
+
from .transcription.client import AsyncTranscriptionClient, TranscriptionClient
|
|
24
|
+
# this is used as the default value for optional parameters
|
|
25
|
+
OMIT = typing.cast(typing.Any, ...)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class CdrsClient:
|
|
29
|
+
def __init__(self, *, client_wrapper: SyncClientWrapper):
|
|
30
|
+
self._raw_client = RawCdrsClient(client_wrapper=client_wrapper)
|
|
31
|
+
self._client_wrapper = client_wrapper
|
|
32
|
+
self._transcription: typing.Optional[TranscriptionClient] = None
|
|
33
|
+
|
|
34
|
+
@property
|
|
35
|
+
def with_raw_response(self) -> RawCdrsClient:
|
|
36
|
+
"""
|
|
37
|
+
Retrieves a raw implementation of this client that returns raw responses.
|
|
38
|
+
|
|
39
|
+
Returns
|
|
40
|
+
-------
|
|
41
|
+
RawCdrsClient
|
|
42
|
+
"""
|
|
43
|
+
return self._raw_client
|
|
44
|
+
|
|
45
|
+
def list(
|
|
46
|
+
self,
|
|
47
|
+
*,
|
|
48
|
+
from_: dt.date,
|
|
49
|
+
to: dt.date,
|
|
50
|
+
type: str,
|
|
51
|
+
disposition: typing.Optional[CallDisposition] = None,
|
|
52
|
+
from_search: typing.Optional[str] = None,
|
|
53
|
+
to_search: typing.Optional[str] = None,
|
|
54
|
+
sip_trunk: typing.Optional[str] = None,
|
|
55
|
+
uuid_: typing.Optional[str] = None,
|
|
56
|
+
page: typing.Optional[int] = None,
|
|
57
|
+
per_page: typing.Optional[int] = None,
|
|
58
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
59
|
+
) -> CdrListResponse:
|
|
60
|
+
"""
|
|
61
|
+
Returns a paginated list of call detail records for the authenticated account, within the requested date range.
|
|
62
|
+
|
|
63
|
+
Parameters
|
|
64
|
+
----------
|
|
65
|
+
from_ : dt.date
|
|
66
|
+
Start of the date range to query, in `YYYY-MM-DD` format. Inclusive.
|
|
67
|
+
|
|
68
|
+
to : dt.date
|
|
69
|
+
End of the date range to query, in `YYYY-MM-DD` format. Inclusive.
|
|
70
|
+
|
|
71
|
+
type : str
|
|
72
|
+
Filters CDRs by call direction. One of `placed` (outbound calls dialed by the account) or `received` (inbound calls answered by the account).
|
|
73
|
+
|
|
74
|
+
disposition : typing.Optional[CallDisposition]
|
|
75
|
+
Filters CDRs by call disposition. One of `answered` (the called party answered), `busy` (the called party was busy), `rejected` (the call was declined), `failed` (the call could not be routed), or `all` (no disposition filter).
|
|
76
|
+
|
|
77
|
+
from_search : typing.Optional[str]
|
|
78
|
+
Filters CDRs by originating phone number. Accepts a full or partial number.
|
|
79
|
+
|
|
80
|
+
to_search : typing.Optional[str]
|
|
81
|
+
Filters CDRs by destination phone number. Accepts a full or partial number.
|
|
82
|
+
|
|
83
|
+
sip_trunk : typing.Optional[str]
|
|
84
|
+
Filters outbound CDRs by SIP trunk login. Ignored for inbound calls.
|
|
85
|
+
|
|
86
|
+
uuid_ : typing.Optional[str]
|
|
87
|
+
Filters CDRs by the unique call ID.
|
|
88
|
+
|
|
89
|
+
page : typing.Optional[int]
|
|
90
|
+
Page number to retrieve. Default `1`.
|
|
91
|
+
|
|
92
|
+
per_page : typing.Optional[int]
|
|
93
|
+
Number of records to return per page. Default `25`.
|
|
94
|
+
|
|
95
|
+
request_options : typing.Optional[RequestOptions]
|
|
96
|
+
Request-specific configuration.
|
|
97
|
+
|
|
98
|
+
Returns
|
|
99
|
+
-------
|
|
100
|
+
CdrListResponse
|
|
101
|
+
Returns a paginated list of CDRs.
|
|
102
|
+
|
|
103
|
+
Examples
|
|
104
|
+
--------
|
|
105
|
+
import datetime
|
|
106
|
+
|
|
107
|
+
from wavix import Wavix
|
|
108
|
+
|
|
109
|
+
client = Wavix(
|
|
110
|
+
token="YOUR_TOKEN",
|
|
111
|
+
)
|
|
112
|
+
client.cdrs.list(
|
|
113
|
+
from_=datetime.date.fromisoformat(
|
|
114
|
+
"2023-01-01",
|
|
115
|
+
),
|
|
116
|
+
to=datetime.date.fromisoformat(
|
|
117
|
+
"2023-09-01",
|
|
118
|
+
),
|
|
119
|
+
type="received",
|
|
120
|
+
from_search="13524815863",
|
|
121
|
+
to_search="12565378257",
|
|
122
|
+
sip_trunk="12321",
|
|
123
|
+
uuid_="99df5ffd-962a-410f-bcce-d08f1f7f328c",
|
|
124
|
+
page=1,
|
|
125
|
+
per_page=25,
|
|
126
|
+
)
|
|
127
|
+
"""
|
|
128
|
+
_response = self._raw_client.list(
|
|
129
|
+
from_=from_,
|
|
130
|
+
to=to,
|
|
131
|
+
type=type,
|
|
132
|
+
disposition=disposition,
|
|
133
|
+
from_search=from_search,
|
|
134
|
+
to_search=to_search,
|
|
135
|
+
sip_trunk=sip_trunk,
|
|
136
|
+
uuid_=uuid_,
|
|
137
|
+
page=page,
|
|
138
|
+
per_page=per_page,
|
|
139
|
+
request_options=request_options,
|
|
140
|
+
)
|
|
141
|
+
return _response.data
|
|
142
|
+
|
|
143
|
+
def search(
|
|
144
|
+
self,
|
|
145
|
+
*,
|
|
146
|
+
type: CdrSearchRequestType,
|
|
147
|
+
from_: dt.date,
|
|
148
|
+
to: dt.date,
|
|
149
|
+
page: int,
|
|
150
|
+
per_page: int,
|
|
151
|
+
from_search: typing.Optional[str] = OMIT,
|
|
152
|
+
to_search: typing.Optional[str] = OMIT,
|
|
153
|
+
sip_trunk: typing.Optional[str] = OMIT,
|
|
154
|
+
min_duration: typing.Optional[int] = OMIT,
|
|
155
|
+
transcription: typing.Optional[TranscriptionFilter] = OMIT,
|
|
156
|
+
uuid_: typing.Optional[str] = OMIT,
|
|
157
|
+
disposition: typing.Optional[CdrSearchRequestDisposition] = OMIT,
|
|
158
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
159
|
+
) -> CdrTranscriptionSearchResponse:
|
|
160
|
+
"""
|
|
161
|
+
Searches call transcriptions for the given keywords or phrases and returns the matching CDRs with their transcriptions.
|
|
162
|
+
|
|
163
|
+
Parameters
|
|
164
|
+
----------
|
|
165
|
+
type : CdrSearchRequestType
|
|
166
|
+
Filters by call type. One of `placed` (outbound calls dialed by the account) or `received` (inbound calls answered by the account).
|
|
167
|
+
|
|
168
|
+
from_ : dt.date
|
|
169
|
+
Start date for call search in `YYYY-MM-DD` format.
|
|
170
|
+
|
|
171
|
+
to : dt.date
|
|
172
|
+
End date for call search in `YYYY-MM-DD` format.
|
|
173
|
+
|
|
174
|
+
page : int
|
|
175
|
+
Page number to retrieve.
|
|
176
|
+
|
|
177
|
+
per_page : int
|
|
178
|
+
Number of records per page.
|
|
179
|
+
|
|
180
|
+
from_search : typing.Optional[str]
|
|
181
|
+
Originating phone number to filter results. Accepts full or partial number.
|
|
182
|
+
|
|
183
|
+
to_search : typing.Optional[str]
|
|
184
|
+
Destination phone number to filter results. Accepts full or partial number.
|
|
185
|
+
|
|
186
|
+
sip_trunk : typing.Optional[str]
|
|
187
|
+
SIP trunk login to filter outbound calls. Ignored for inbound calls.
|
|
188
|
+
|
|
189
|
+
min_duration : typing.Optional[int]
|
|
190
|
+
Minimum call duration in seconds.
|
|
191
|
+
|
|
192
|
+
transcription : typing.Optional[TranscriptionFilter]
|
|
193
|
+
|
|
194
|
+
uuid_ : typing.Optional[str]
|
|
195
|
+
Call ID.
|
|
196
|
+
|
|
197
|
+
disposition : typing.Optional[CdrSearchRequestDisposition]
|
|
198
|
+
Call disposition to filter results. If omitted, returns only answered
|
|
199
|
+
calls. Allowed values: `answered`, `busy`, `rejected`,
|
|
200
|
+
`failed`, `all`. Use `all` to return calls
|
|
201
|
+
regardless of their disposition.
|
|
202
|
+
|
|
203
|
+
request_options : typing.Optional[RequestOptions]
|
|
204
|
+
Request-specific configuration.
|
|
205
|
+
|
|
206
|
+
Returns
|
|
207
|
+
-------
|
|
208
|
+
CdrTranscriptionSearchResponse
|
|
209
|
+
Returns a paginated list of matching CDRs with their transcriptions.
|
|
210
|
+
|
|
211
|
+
Examples
|
|
212
|
+
--------
|
|
213
|
+
import datetime
|
|
214
|
+
|
|
215
|
+
from wavix import Wavix
|
|
216
|
+
|
|
217
|
+
client = Wavix(
|
|
218
|
+
token="YOUR_TOKEN",
|
|
219
|
+
)
|
|
220
|
+
client.cdrs.search(
|
|
221
|
+
type="placed",
|
|
222
|
+
from_=datetime.date.fromisoformat(
|
|
223
|
+
"2023-08-01",
|
|
224
|
+
),
|
|
225
|
+
to=datetime.date.fromisoformat(
|
|
226
|
+
"2023-08-31",
|
|
227
|
+
),
|
|
228
|
+
page=1,
|
|
229
|
+
per_page=50,
|
|
230
|
+
)
|
|
231
|
+
"""
|
|
232
|
+
_response = self._raw_client.search(
|
|
233
|
+
type=type,
|
|
234
|
+
from_=from_,
|
|
235
|
+
to=to,
|
|
236
|
+
page=page,
|
|
237
|
+
per_page=per_page,
|
|
238
|
+
from_search=from_search,
|
|
239
|
+
to_search=to_search,
|
|
240
|
+
sip_trunk=sip_trunk,
|
|
241
|
+
min_duration=min_duration,
|
|
242
|
+
transcription=transcription,
|
|
243
|
+
uuid_=uuid_,
|
|
244
|
+
disposition=disposition,
|
|
245
|
+
request_options=request_options,
|
|
246
|
+
)
|
|
247
|
+
return _response.data
|
|
248
|
+
|
|
249
|
+
def retranscribe(
|
|
250
|
+
self,
|
|
251
|
+
call_id: str,
|
|
252
|
+
*,
|
|
253
|
+
language: typing.Optional[TranscriptionLanguage] = OMIT,
|
|
254
|
+
webhook_url: typing.Optional[str] = OMIT,
|
|
255
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
256
|
+
) -> SuccessResponse:
|
|
257
|
+
"""
|
|
258
|
+
Transcribes the recording of the call identified by `call_id`. Transcription is asynchronous; poll the transcription endpoint for the result.
|
|
259
|
+
|
|
260
|
+
Parameters
|
|
261
|
+
----------
|
|
262
|
+
call_id : str
|
|
263
|
+
The unique ID of the call.
|
|
264
|
+
|
|
265
|
+
language : typing.Optional[TranscriptionLanguage]
|
|
266
|
+
|
|
267
|
+
webhook_url : typing.Optional[str]
|
|
268
|
+
Webhook URL to receive status updates.
|
|
269
|
+
|
|
270
|
+
request_options : typing.Optional[RequestOptions]
|
|
271
|
+
Request-specific configuration.
|
|
272
|
+
|
|
273
|
+
Returns
|
|
274
|
+
-------
|
|
275
|
+
SuccessResponse
|
|
276
|
+
Returns a success confirmation. Transcription is queued.
|
|
277
|
+
|
|
278
|
+
Examples
|
|
279
|
+
--------
|
|
280
|
+
from wavix import Wavix
|
|
281
|
+
|
|
282
|
+
client = Wavix(
|
|
283
|
+
token="YOUR_TOKEN",
|
|
284
|
+
)
|
|
285
|
+
client.cdrs.retranscribe(
|
|
286
|
+
call_id="bbaa37bf-430a-46da-ade3-c248e407016",
|
|
287
|
+
)
|
|
288
|
+
"""
|
|
289
|
+
_response = self._raw_client.retranscribe(
|
|
290
|
+
call_id, language=language, webhook_url=webhook_url, request_options=request_options
|
|
291
|
+
)
|
|
292
|
+
return _response.data
|
|
293
|
+
|
|
294
|
+
def transcriptions(
|
|
295
|
+
self, call_id: str, *, request_options: typing.Optional[RequestOptions] = None
|
|
296
|
+
) -> CdrTranscriptionResponse:
|
|
297
|
+
"""
|
|
298
|
+
Returns the transcription of the recorded call identified by `call_id`. Alias of the `transcription` endpoint.
|
|
299
|
+
|
|
300
|
+
Parameters
|
|
301
|
+
----------
|
|
302
|
+
call_id : str
|
|
303
|
+
The unique ID of the call.
|
|
304
|
+
|
|
305
|
+
request_options : typing.Optional[RequestOptions]
|
|
306
|
+
Request-specific configuration.
|
|
307
|
+
|
|
308
|
+
Returns
|
|
309
|
+
-------
|
|
310
|
+
CdrTranscriptionResponse
|
|
311
|
+
Returns the call transcription.
|
|
312
|
+
|
|
313
|
+
Examples
|
|
314
|
+
--------
|
|
315
|
+
from wavix import Wavix
|
|
316
|
+
|
|
317
|
+
client = Wavix(
|
|
318
|
+
token="YOUR_TOKEN",
|
|
319
|
+
)
|
|
320
|
+
client.cdrs.transcriptions(
|
|
321
|
+
call_id="bbaa37bf-430a-46da-ade3-c248e407016",
|
|
322
|
+
)
|
|
323
|
+
"""
|
|
324
|
+
_response = self._raw_client.transcriptions(call_id, request_options=request_options)
|
|
325
|
+
return _response.data
|
|
326
|
+
|
|
327
|
+
def get(
|
|
328
|
+
self,
|
|
329
|
+
call_id: str,
|
|
330
|
+
*,
|
|
331
|
+
show_transcription: typing.Optional[bool] = None,
|
|
332
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
333
|
+
) -> CdrResponse:
|
|
334
|
+
"""
|
|
335
|
+
Returns the call detail record for the call identified by `call_id`.
|
|
336
|
+
|
|
337
|
+
Parameters
|
|
338
|
+
----------
|
|
339
|
+
call_id : str
|
|
340
|
+
The unique ID of the call.
|
|
341
|
+
|
|
342
|
+
show_transcription : typing.Optional[bool]
|
|
343
|
+
When `true`, includes the call transcription in the response.
|
|
344
|
+
|
|
345
|
+
request_options : typing.Optional[RequestOptions]
|
|
346
|
+
Request-specific configuration.
|
|
347
|
+
|
|
348
|
+
Returns
|
|
349
|
+
-------
|
|
350
|
+
CdrResponse
|
|
351
|
+
Returns the CDR.
|
|
352
|
+
|
|
353
|
+
Examples
|
|
354
|
+
--------
|
|
355
|
+
from wavix import Wavix
|
|
356
|
+
|
|
357
|
+
client = Wavix(
|
|
358
|
+
token="YOUR_TOKEN",
|
|
359
|
+
)
|
|
360
|
+
client.cdrs.get(
|
|
361
|
+
call_id="aa566501-c591-4a8b-b3b9-cc1295398b72",
|
|
362
|
+
show_transcription=True,
|
|
363
|
+
)
|
|
364
|
+
"""
|
|
365
|
+
_response = self._raw_client.get(
|
|
366
|
+
call_id, show_transcription=show_transcription, request_options=request_options
|
|
367
|
+
)
|
|
368
|
+
return _response.data
|
|
369
|
+
|
|
370
|
+
def list_all(
|
|
371
|
+
self,
|
|
372
|
+
*,
|
|
373
|
+
from_: dt.date,
|
|
374
|
+
to: dt.date,
|
|
375
|
+
type: str,
|
|
376
|
+
disposition: typing.Optional[CallDisposition] = None,
|
|
377
|
+
from_search: typing.Optional[str] = None,
|
|
378
|
+
to_search: typing.Optional[str] = None,
|
|
379
|
+
sip_trunk: typing.Optional[str] = None,
|
|
380
|
+
uuid_: typing.Optional[str] = None,
|
|
381
|
+
page: typing.Optional[int] = None,
|
|
382
|
+
per_page: typing.Optional[int] = None,
|
|
383
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
384
|
+
) -> str:
|
|
385
|
+
"""
|
|
386
|
+
Streams matching call detail records as newline-delimited JSON (NDJSON), one record per line, for bulk export.
|
|
387
|
+
|
|
388
|
+
Parameters
|
|
389
|
+
----------
|
|
390
|
+
from_ : dt.date
|
|
391
|
+
Start of the date range to query, in `YYYY-MM-DD` format. Inclusive.
|
|
392
|
+
|
|
393
|
+
to : dt.date
|
|
394
|
+
End of the date range to query, in `YYYY-MM-DD` format. Inclusive.
|
|
395
|
+
|
|
396
|
+
type : str
|
|
397
|
+
Filters CDRs by call direction. One of `placed` (outbound calls dialed by the account) or `received` (inbound calls answered by the account).
|
|
398
|
+
|
|
399
|
+
disposition : typing.Optional[CallDisposition]
|
|
400
|
+
Filters CDRs by call disposition. One of `answered` (the called party answered), `busy` (the called party was busy), `rejected` (the call was declined), `failed` (the call could not be routed), or `all` (no disposition filter).
|
|
401
|
+
|
|
402
|
+
from_search : typing.Optional[str]
|
|
403
|
+
Filters CDRs by originating phone number. Accepts a full or partial number.
|
|
404
|
+
|
|
405
|
+
to_search : typing.Optional[str]
|
|
406
|
+
Filters CDRs by destination phone number. Accepts a full or partial number.
|
|
407
|
+
|
|
408
|
+
sip_trunk : typing.Optional[str]
|
|
409
|
+
Filters outbound CDRs by SIP trunk login. Ignored for inbound calls.
|
|
410
|
+
|
|
411
|
+
uuid_ : typing.Optional[str]
|
|
412
|
+
Filters CDRs by the unique call ID.
|
|
413
|
+
|
|
414
|
+
page : typing.Optional[int]
|
|
415
|
+
Page number to retrieve. Default `1`.
|
|
416
|
+
|
|
417
|
+
per_page : typing.Optional[int]
|
|
418
|
+
Number of records to return per page. Default `25`.
|
|
419
|
+
|
|
420
|
+
request_options : typing.Optional[RequestOptions]
|
|
421
|
+
Request-specific configuration.
|
|
422
|
+
|
|
423
|
+
Returns
|
|
424
|
+
-------
|
|
425
|
+
str
|
|
426
|
+
Returns an NDJSON stream of CDRs, one record per line.
|
|
427
|
+
|
|
428
|
+
Examples
|
|
429
|
+
--------
|
|
430
|
+
import datetime
|
|
431
|
+
|
|
432
|
+
from wavix import Wavix
|
|
433
|
+
|
|
434
|
+
client = Wavix(
|
|
435
|
+
token="YOUR_TOKEN",
|
|
436
|
+
)
|
|
437
|
+
client.cdrs.list_all(
|
|
438
|
+
from_=datetime.date.fromisoformat(
|
|
439
|
+
"2023-01-01",
|
|
440
|
+
),
|
|
441
|
+
to=datetime.date.fromisoformat(
|
|
442
|
+
"2023-09-01",
|
|
443
|
+
),
|
|
444
|
+
type="received",
|
|
445
|
+
from_search="13524815863",
|
|
446
|
+
to_search="12565378257",
|
|
447
|
+
sip_trunk="12321",
|
|
448
|
+
uuid_="99df5ffd-962a-410f-bcce-d08f1f7f328c",
|
|
449
|
+
page=1,
|
|
450
|
+
per_page=25,
|
|
451
|
+
)
|
|
452
|
+
"""
|
|
453
|
+
_response = self._raw_client.list_all(
|
|
454
|
+
from_=from_,
|
|
455
|
+
to=to,
|
|
456
|
+
type=type,
|
|
457
|
+
disposition=disposition,
|
|
458
|
+
from_search=from_search,
|
|
459
|
+
to_search=to_search,
|
|
460
|
+
sip_trunk=sip_trunk,
|
|
461
|
+
uuid_=uuid_,
|
|
462
|
+
page=page,
|
|
463
|
+
per_page=per_page,
|
|
464
|
+
request_options=request_options,
|
|
465
|
+
)
|
|
466
|
+
return _response.data
|
|
467
|
+
|
|
468
|
+
@property
|
|
469
|
+
def transcription(self):
|
|
470
|
+
if self._transcription is None:
|
|
471
|
+
from .transcription.client import TranscriptionClient # noqa: E402
|
|
472
|
+
|
|
473
|
+
self._transcription = TranscriptionClient(client_wrapper=self._client_wrapper)
|
|
474
|
+
return self._transcription
|
|
475
|
+
|
|
476
|
+
|
|
477
|
+
class AsyncCdrsClient:
|
|
478
|
+
def __init__(self, *, client_wrapper: AsyncClientWrapper):
|
|
479
|
+
self._raw_client = AsyncRawCdrsClient(client_wrapper=client_wrapper)
|
|
480
|
+
self._client_wrapper = client_wrapper
|
|
481
|
+
self._transcription: typing.Optional[AsyncTranscriptionClient] = None
|
|
482
|
+
|
|
483
|
+
@property
|
|
484
|
+
def with_raw_response(self) -> AsyncRawCdrsClient:
|
|
485
|
+
"""
|
|
486
|
+
Retrieves a raw implementation of this client that returns raw responses.
|
|
487
|
+
|
|
488
|
+
Returns
|
|
489
|
+
-------
|
|
490
|
+
AsyncRawCdrsClient
|
|
491
|
+
"""
|
|
492
|
+
return self._raw_client
|
|
493
|
+
|
|
494
|
+
async def list(
|
|
495
|
+
self,
|
|
496
|
+
*,
|
|
497
|
+
from_: dt.date,
|
|
498
|
+
to: dt.date,
|
|
499
|
+
type: str,
|
|
500
|
+
disposition: typing.Optional[CallDisposition] = None,
|
|
501
|
+
from_search: typing.Optional[str] = None,
|
|
502
|
+
to_search: typing.Optional[str] = None,
|
|
503
|
+
sip_trunk: typing.Optional[str] = None,
|
|
504
|
+
uuid_: typing.Optional[str] = None,
|
|
505
|
+
page: typing.Optional[int] = None,
|
|
506
|
+
per_page: typing.Optional[int] = None,
|
|
507
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
508
|
+
) -> CdrListResponse:
|
|
509
|
+
"""
|
|
510
|
+
Returns a paginated list of call detail records for the authenticated account, within the requested date range.
|
|
511
|
+
|
|
512
|
+
Parameters
|
|
513
|
+
----------
|
|
514
|
+
from_ : dt.date
|
|
515
|
+
Start of the date range to query, in `YYYY-MM-DD` format. Inclusive.
|
|
516
|
+
|
|
517
|
+
to : dt.date
|
|
518
|
+
End of the date range to query, in `YYYY-MM-DD` format. Inclusive.
|
|
519
|
+
|
|
520
|
+
type : str
|
|
521
|
+
Filters CDRs by call direction. One of `placed` (outbound calls dialed by the account) or `received` (inbound calls answered by the account).
|
|
522
|
+
|
|
523
|
+
disposition : typing.Optional[CallDisposition]
|
|
524
|
+
Filters CDRs by call disposition. One of `answered` (the called party answered), `busy` (the called party was busy), `rejected` (the call was declined), `failed` (the call could not be routed), or `all` (no disposition filter).
|
|
525
|
+
|
|
526
|
+
from_search : typing.Optional[str]
|
|
527
|
+
Filters CDRs by originating phone number. Accepts a full or partial number.
|
|
528
|
+
|
|
529
|
+
to_search : typing.Optional[str]
|
|
530
|
+
Filters CDRs by destination phone number. Accepts a full or partial number.
|
|
531
|
+
|
|
532
|
+
sip_trunk : typing.Optional[str]
|
|
533
|
+
Filters outbound CDRs by SIP trunk login. Ignored for inbound calls.
|
|
534
|
+
|
|
535
|
+
uuid_ : typing.Optional[str]
|
|
536
|
+
Filters CDRs by the unique call ID.
|
|
537
|
+
|
|
538
|
+
page : typing.Optional[int]
|
|
539
|
+
Page number to retrieve. Default `1`.
|
|
540
|
+
|
|
541
|
+
per_page : typing.Optional[int]
|
|
542
|
+
Number of records to return per page. Default `25`.
|
|
543
|
+
|
|
544
|
+
request_options : typing.Optional[RequestOptions]
|
|
545
|
+
Request-specific configuration.
|
|
546
|
+
|
|
547
|
+
Returns
|
|
548
|
+
-------
|
|
549
|
+
CdrListResponse
|
|
550
|
+
Returns a paginated list of CDRs.
|
|
551
|
+
|
|
552
|
+
Examples
|
|
553
|
+
--------
|
|
554
|
+
import asyncio
|
|
555
|
+
import datetime
|
|
556
|
+
|
|
557
|
+
from wavix import AsyncWavix
|
|
558
|
+
|
|
559
|
+
client = AsyncWavix(
|
|
560
|
+
token="YOUR_TOKEN",
|
|
561
|
+
)
|
|
562
|
+
|
|
563
|
+
|
|
564
|
+
async def main() -> None:
|
|
565
|
+
await client.cdrs.list(
|
|
566
|
+
from_=datetime.date.fromisoformat(
|
|
567
|
+
"2023-01-01",
|
|
568
|
+
),
|
|
569
|
+
to=datetime.date.fromisoformat(
|
|
570
|
+
"2023-09-01",
|
|
571
|
+
),
|
|
572
|
+
type="received",
|
|
573
|
+
from_search="13524815863",
|
|
574
|
+
to_search="12565378257",
|
|
575
|
+
sip_trunk="12321",
|
|
576
|
+
uuid_="99df5ffd-962a-410f-bcce-d08f1f7f328c",
|
|
577
|
+
page=1,
|
|
578
|
+
per_page=25,
|
|
579
|
+
)
|
|
580
|
+
|
|
581
|
+
|
|
582
|
+
asyncio.run(main())
|
|
583
|
+
"""
|
|
584
|
+
_response = await self._raw_client.list(
|
|
585
|
+
from_=from_,
|
|
586
|
+
to=to,
|
|
587
|
+
type=type,
|
|
588
|
+
disposition=disposition,
|
|
589
|
+
from_search=from_search,
|
|
590
|
+
to_search=to_search,
|
|
591
|
+
sip_trunk=sip_trunk,
|
|
592
|
+
uuid_=uuid_,
|
|
593
|
+
page=page,
|
|
594
|
+
per_page=per_page,
|
|
595
|
+
request_options=request_options,
|
|
596
|
+
)
|
|
597
|
+
return _response.data
|
|
598
|
+
|
|
599
|
+
async def search(
|
|
600
|
+
self,
|
|
601
|
+
*,
|
|
602
|
+
type: CdrSearchRequestType,
|
|
603
|
+
from_: dt.date,
|
|
604
|
+
to: dt.date,
|
|
605
|
+
page: int,
|
|
606
|
+
per_page: int,
|
|
607
|
+
from_search: typing.Optional[str] = OMIT,
|
|
608
|
+
to_search: typing.Optional[str] = OMIT,
|
|
609
|
+
sip_trunk: typing.Optional[str] = OMIT,
|
|
610
|
+
min_duration: typing.Optional[int] = OMIT,
|
|
611
|
+
transcription: typing.Optional[TranscriptionFilter] = OMIT,
|
|
612
|
+
uuid_: typing.Optional[str] = OMIT,
|
|
613
|
+
disposition: typing.Optional[CdrSearchRequestDisposition] = OMIT,
|
|
614
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
615
|
+
) -> CdrTranscriptionSearchResponse:
|
|
616
|
+
"""
|
|
617
|
+
Searches call transcriptions for the given keywords or phrases and returns the matching CDRs with their transcriptions.
|
|
618
|
+
|
|
619
|
+
Parameters
|
|
620
|
+
----------
|
|
621
|
+
type : CdrSearchRequestType
|
|
622
|
+
Filters by call type. One of `placed` (outbound calls dialed by the account) or `received` (inbound calls answered by the account).
|
|
623
|
+
|
|
624
|
+
from_ : dt.date
|
|
625
|
+
Start date for call search in `YYYY-MM-DD` format.
|
|
626
|
+
|
|
627
|
+
to : dt.date
|
|
628
|
+
End date for call search in `YYYY-MM-DD` format.
|
|
629
|
+
|
|
630
|
+
page : int
|
|
631
|
+
Page number to retrieve.
|
|
632
|
+
|
|
633
|
+
per_page : int
|
|
634
|
+
Number of records per page.
|
|
635
|
+
|
|
636
|
+
from_search : typing.Optional[str]
|
|
637
|
+
Originating phone number to filter results. Accepts full or partial number.
|
|
638
|
+
|
|
639
|
+
to_search : typing.Optional[str]
|
|
640
|
+
Destination phone number to filter results. Accepts full or partial number.
|
|
641
|
+
|
|
642
|
+
sip_trunk : typing.Optional[str]
|
|
643
|
+
SIP trunk login to filter outbound calls. Ignored for inbound calls.
|
|
644
|
+
|
|
645
|
+
min_duration : typing.Optional[int]
|
|
646
|
+
Minimum call duration in seconds.
|
|
647
|
+
|
|
648
|
+
transcription : typing.Optional[TranscriptionFilter]
|
|
649
|
+
|
|
650
|
+
uuid_ : typing.Optional[str]
|
|
651
|
+
Call ID.
|
|
652
|
+
|
|
653
|
+
disposition : typing.Optional[CdrSearchRequestDisposition]
|
|
654
|
+
Call disposition to filter results. If omitted, returns only answered
|
|
655
|
+
calls. Allowed values: `answered`, `busy`, `rejected`,
|
|
656
|
+
`failed`, `all`. Use `all` to return calls
|
|
657
|
+
regardless of their disposition.
|
|
658
|
+
|
|
659
|
+
request_options : typing.Optional[RequestOptions]
|
|
660
|
+
Request-specific configuration.
|
|
661
|
+
|
|
662
|
+
Returns
|
|
663
|
+
-------
|
|
664
|
+
CdrTranscriptionSearchResponse
|
|
665
|
+
Returns a paginated list of matching CDRs with their transcriptions.
|
|
666
|
+
|
|
667
|
+
Examples
|
|
668
|
+
--------
|
|
669
|
+
import asyncio
|
|
670
|
+
import datetime
|
|
671
|
+
|
|
672
|
+
from wavix import AsyncWavix
|
|
673
|
+
|
|
674
|
+
client = AsyncWavix(
|
|
675
|
+
token="YOUR_TOKEN",
|
|
676
|
+
)
|
|
677
|
+
|
|
678
|
+
|
|
679
|
+
async def main() -> None:
|
|
680
|
+
await client.cdrs.search(
|
|
681
|
+
type="placed",
|
|
682
|
+
from_=datetime.date.fromisoformat(
|
|
683
|
+
"2023-08-01",
|
|
684
|
+
),
|
|
685
|
+
to=datetime.date.fromisoformat(
|
|
686
|
+
"2023-08-31",
|
|
687
|
+
),
|
|
688
|
+
page=1,
|
|
689
|
+
per_page=50,
|
|
690
|
+
)
|
|
691
|
+
|
|
692
|
+
|
|
693
|
+
asyncio.run(main())
|
|
694
|
+
"""
|
|
695
|
+
_response = await self._raw_client.search(
|
|
696
|
+
type=type,
|
|
697
|
+
from_=from_,
|
|
698
|
+
to=to,
|
|
699
|
+
page=page,
|
|
700
|
+
per_page=per_page,
|
|
701
|
+
from_search=from_search,
|
|
702
|
+
to_search=to_search,
|
|
703
|
+
sip_trunk=sip_trunk,
|
|
704
|
+
min_duration=min_duration,
|
|
705
|
+
transcription=transcription,
|
|
706
|
+
uuid_=uuid_,
|
|
707
|
+
disposition=disposition,
|
|
708
|
+
request_options=request_options,
|
|
709
|
+
)
|
|
710
|
+
return _response.data
|
|
711
|
+
|
|
712
|
+
async def retranscribe(
|
|
713
|
+
self,
|
|
714
|
+
call_id: str,
|
|
715
|
+
*,
|
|
716
|
+
language: typing.Optional[TranscriptionLanguage] = OMIT,
|
|
717
|
+
webhook_url: typing.Optional[str] = OMIT,
|
|
718
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
719
|
+
) -> SuccessResponse:
|
|
720
|
+
"""
|
|
721
|
+
Transcribes the recording of the call identified by `call_id`. Transcription is asynchronous; poll the transcription endpoint for the result.
|
|
722
|
+
|
|
723
|
+
Parameters
|
|
724
|
+
----------
|
|
725
|
+
call_id : str
|
|
726
|
+
The unique ID of the call.
|
|
727
|
+
|
|
728
|
+
language : typing.Optional[TranscriptionLanguage]
|
|
729
|
+
|
|
730
|
+
webhook_url : typing.Optional[str]
|
|
731
|
+
Webhook URL to receive status updates.
|
|
732
|
+
|
|
733
|
+
request_options : typing.Optional[RequestOptions]
|
|
734
|
+
Request-specific configuration.
|
|
735
|
+
|
|
736
|
+
Returns
|
|
737
|
+
-------
|
|
738
|
+
SuccessResponse
|
|
739
|
+
Returns a success confirmation. Transcription is queued.
|
|
740
|
+
|
|
741
|
+
Examples
|
|
742
|
+
--------
|
|
743
|
+
import asyncio
|
|
744
|
+
|
|
745
|
+
from wavix import AsyncWavix
|
|
746
|
+
|
|
747
|
+
client = AsyncWavix(
|
|
748
|
+
token="YOUR_TOKEN",
|
|
749
|
+
)
|
|
750
|
+
|
|
751
|
+
|
|
752
|
+
async def main() -> None:
|
|
753
|
+
await client.cdrs.retranscribe(
|
|
754
|
+
call_id="bbaa37bf-430a-46da-ade3-c248e407016",
|
|
755
|
+
)
|
|
756
|
+
|
|
757
|
+
|
|
758
|
+
asyncio.run(main())
|
|
759
|
+
"""
|
|
760
|
+
_response = await self._raw_client.retranscribe(
|
|
761
|
+
call_id, language=language, webhook_url=webhook_url, request_options=request_options
|
|
762
|
+
)
|
|
763
|
+
return _response.data
|
|
764
|
+
|
|
765
|
+
async def transcriptions(
|
|
766
|
+
self, call_id: str, *, request_options: typing.Optional[RequestOptions] = None
|
|
767
|
+
) -> CdrTranscriptionResponse:
|
|
768
|
+
"""
|
|
769
|
+
Returns the transcription of the recorded call identified by `call_id`. Alias of the `transcription` endpoint.
|
|
770
|
+
|
|
771
|
+
Parameters
|
|
772
|
+
----------
|
|
773
|
+
call_id : str
|
|
774
|
+
The unique ID of the call.
|
|
775
|
+
|
|
776
|
+
request_options : typing.Optional[RequestOptions]
|
|
777
|
+
Request-specific configuration.
|
|
778
|
+
|
|
779
|
+
Returns
|
|
780
|
+
-------
|
|
781
|
+
CdrTranscriptionResponse
|
|
782
|
+
Returns the call transcription.
|
|
783
|
+
|
|
784
|
+
Examples
|
|
785
|
+
--------
|
|
786
|
+
import asyncio
|
|
787
|
+
|
|
788
|
+
from wavix import AsyncWavix
|
|
789
|
+
|
|
790
|
+
client = AsyncWavix(
|
|
791
|
+
token="YOUR_TOKEN",
|
|
792
|
+
)
|
|
793
|
+
|
|
794
|
+
|
|
795
|
+
async def main() -> None:
|
|
796
|
+
await client.cdrs.transcriptions(
|
|
797
|
+
call_id="bbaa37bf-430a-46da-ade3-c248e407016",
|
|
798
|
+
)
|
|
799
|
+
|
|
800
|
+
|
|
801
|
+
asyncio.run(main())
|
|
802
|
+
"""
|
|
803
|
+
_response = await self._raw_client.transcriptions(call_id, request_options=request_options)
|
|
804
|
+
return _response.data
|
|
805
|
+
|
|
806
|
+
async def get(
|
|
807
|
+
self,
|
|
808
|
+
call_id: str,
|
|
809
|
+
*,
|
|
810
|
+
show_transcription: typing.Optional[bool] = None,
|
|
811
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
812
|
+
) -> CdrResponse:
|
|
813
|
+
"""
|
|
814
|
+
Returns the call detail record for the call identified by `call_id`.
|
|
815
|
+
|
|
816
|
+
Parameters
|
|
817
|
+
----------
|
|
818
|
+
call_id : str
|
|
819
|
+
The unique ID of the call.
|
|
820
|
+
|
|
821
|
+
show_transcription : typing.Optional[bool]
|
|
822
|
+
When `true`, includes the call transcription in the response.
|
|
823
|
+
|
|
824
|
+
request_options : typing.Optional[RequestOptions]
|
|
825
|
+
Request-specific configuration.
|
|
826
|
+
|
|
827
|
+
Returns
|
|
828
|
+
-------
|
|
829
|
+
CdrResponse
|
|
830
|
+
Returns the CDR.
|
|
831
|
+
|
|
832
|
+
Examples
|
|
833
|
+
--------
|
|
834
|
+
import asyncio
|
|
835
|
+
|
|
836
|
+
from wavix import AsyncWavix
|
|
837
|
+
|
|
838
|
+
client = AsyncWavix(
|
|
839
|
+
token="YOUR_TOKEN",
|
|
840
|
+
)
|
|
841
|
+
|
|
842
|
+
|
|
843
|
+
async def main() -> None:
|
|
844
|
+
await client.cdrs.get(
|
|
845
|
+
call_id="aa566501-c591-4a8b-b3b9-cc1295398b72",
|
|
846
|
+
show_transcription=True,
|
|
847
|
+
)
|
|
848
|
+
|
|
849
|
+
|
|
850
|
+
asyncio.run(main())
|
|
851
|
+
"""
|
|
852
|
+
_response = await self._raw_client.get(
|
|
853
|
+
call_id, show_transcription=show_transcription, request_options=request_options
|
|
854
|
+
)
|
|
855
|
+
return _response.data
|
|
856
|
+
|
|
857
|
+
async def list_all(
|
|
858
|
+
self,
|
|
859
|
+
*,
|
|
860
|
+
from_: dt.date,
|
|
861
|
+
to: dt.date,
|
|
862
|
+
type: str,
|
|
863
|
+
disposition: typing.Optional[CallDisposition] = None,
|
|
864
|
+
from_search: typing.Optional[str] = None,
|
|
865
|
+
to_search: typing.Optional[str] = None,
|
|
866
|
+
sip_trunk: typing.Optional[str] = None,
|
|
867
|
+
uuid_: typing.Optional[str] = None,
|
|
868
|
+
page: typing.Optional[int] = None,
|
|
869
|
+
per_page: typing.Optional[int] = None,
|
|
870
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
871
|
+
) -> str:
|
|
872
|
+
"""
|
|
873
|
+
Streams matching call detail records as newline-delimited JSON (NDJSON), one record per line, for bulk export.
|
|
874
|
+
|
|
875
|
+
Parameters
|
|
876
|
+
----------
|
|
877
|
+
from_ : dt.date
|
|
878
|
+
Start of the date range to query, in `YYYY-MM-DD` format. Inclusive.
|
|
879
|
+
|
|
880
|
+
to : dt.date
|
|
881
|
+
End of the date range to query, in `YYYY-MM-DD` format. Inclusive.
|
|
882
|
+
|
|
883
|
+
type : str
|
|
884
|
+
Filters CDRs by call direction. One of `placed` (outbound calls dialed by the account) or `received` (inbound calls answered by the account).
|
|
885
|
+
|
|
886
|
+
disposition : typing.Optional[CallDisposition]
|
|
887
|
+
Filters CDRs by call disposition. One of `answered` (the called party answered), `busy` (the called party was busy), `rejected` (the call was declined), `failed` (the call could not be routed), or `all` (no disposition filter).
|
|
888
|
+
|
|
889
|
+
from_search : typing.Optional[str]
|
|
890
|
+
Filters CDRs by originating phone number. Accepts a full or partial number.
|
|
891
|
+
|
|
892
|
+
to_search : typing.Optional[str]
|
|
893
|
+
Filters CDRs by destination phone number. Accepts a full or partial number.
|
|
894
|
+
|
|
895
|
+
sip_trunk : typing.Optional[str]
|
|
896
|
+
Filters outbound CDRs by SIP trunk login. Ignored for inbound calls.
|
|
897
|
+
|
|
898
|
+
uuid_ : typing.Optional[str]
|
|
899
|
+
Filters CDRs by the unique call ID.
|
|
900
|
+
|
|
901
|
+
page : typing.Optional[int]
|
|
902
|
+
Page number to retrieve. Default `1`.
|
|
903
|
+
|
|
904
|
+
per_page : typing.Optional[int]
|
|
905
|
+
Number of records to return per page. Default `25`.
|
|
906
|
+
|
|
907
|
+
request_options : typing.Optional[RequestOptions]
|
|
908
|
+
Request-specific configuration.
|
|
909
|
+
|
|
910
|
+
Returns
|
|
911
|
+
-------
|
|
912
|
+
str
|
|
913
|
+
Returns an NDJSON stream of CDRs, one record per line.
|
|
914
|
+
|
|
915
|
+
Examples
|
|
916
|
+
--------
|
|
917
|
+
import asyncio
|
|
918
|
+
import datetime
|
|
919
|
+
|
|
920
|
+
from wavix import AsyncWavix
|
|
921
|
+
|
|
922
|
+
client = AsyncWavix(
|
|
923
|
+
token="YOUR_TOKEN",
|
|
924
|
+
)
|
|
925
|
+
|
|
926
|
+
|
|
927
|
+
async def main() -> None:
|
|
928
|
+
await client.cdrs.list_all(
|
|
929
|
+
from_=datetime.date.fromisoformat(
|
|
930
|
+
"2023-01-01",
|
|
931
|
+
),
|
|
932
|
+
to=datetime.date.fromisoformat(
|
|
933
|
+
"2023-09-01",
|
|
934
|
+
),
|
|
935
|
+
type="received",
|
|
936
|
+
from_search="13524815863",
|
|
937
|
+
to_search="12565378257",
|
|
938
|
+
sip_trunk="12321",
|
|
939
|
+
uuid_="99df5ffd-962a-410f-bcce-d08f1f7f328c",
|
|
940
|
+
page=1,
|
|
941
|
+
per_page=25,
|
|
942
|
+
)
|
|
943
|
+
|
|
944
|
+
|
|
945
|
+
asyncio.run(main())
|
|
946
|
+
"""
|
|
947
|
+
_response = await self._raw_client.list_all(
|
|
948
|
+
from_=from_,
|
|
949
|
+
to=to,
|
|
950
|
+
type=type,
|
|
951
|
+
disposition=disposition,
|
|
952
|
+
from_search=from_search,
|
|
953
|
+
to_search=to_search,
|
|
954
|
+
sip_trunk=sip_trunk,
|
|
955
|
+
uuid_=uuid_,
|
|
956
|
+
page=page,
|
|
957
|
+
per_page=per_page,
|
|
958
|
+
request_options=request_options,
|
|
959
|
+
)
|
|
960
|
+
return _response.data
|
|
961
|
+
|
|
962
|
+
@property
|
|
963
|
+
def transcription(self):
|
|
964
|
+
if self._transcription is None:
|
|
965
|
+
from .transcription.client import AsyncTranscriptionClient # noqa: E402
|
|
966
|
+
|
|
967
|
+
self._transcription = AsyncTranscriptionClient(client_wrapper=self._client_wrapper)
|
|
968
|
+
return self._transcription
|