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.
Files changed (497) hide show
  1. wavix/__init__.py +801 -0
  2. wavix/_default_clients.py +32 -0
  3. wavix/api_keys/__init__.py +4 -0
  4. wavix/api_keys/client.py +764 -0
  5. wavix/api_keys/raw_client.py +1191 -0
  6. wavix/billing/__init__.py +41 -0
  7. wavix/billing/client.py +82 -0
  8. wavix/billing/invoices/__init__.py +34 -0
  9. wavix/billing/invoices/client.py +203 -0
  10. wavix/billing/invoices/raw_client.py +302 -0
  11. wavix/billing/invoices/types/__init__.py +34 -0
  12. wavix/billing/invoices/types/list_invoices_response.py +31 -0
  13. wavix/billing/raw_client.py +13 -0
  14. wavix/billing/transactions/__init__.py +34 -0
  15. wavix/billing/transactions/client.py +209 -0
  16. wavix/billing/transactions/raw_client.py +253 -0
  17. wavix/billing/transactions/types/__init__.py +34 -0
  18. wavix/billing/transactions/types/list_transactions_response.py +31 -0
  19. wavix/buy/__init__.py +61 -0
  20. wavix/buy/cities/__init__.py +34 -0
  21. wavix/buy/cities/client.py +134 -0
  22. wavix/buy/cities/raw_client.py +201 -0
  23. wavix/buy/cities/types/__init__.py +34 -0
  24. wavix/buy/cities/types/list_cities_response.py +23 -0
  25. wavix/buy/client.py +139 -0
  26. wavix/buy/countries/__init__.py +34 -0
  27. wavix/buy/countries/client.py +116 -0
  28. wavix/buy/countries/raw_client.py +144 -0
  29. wavix/buy/countries/types/__init__.py +34 -0
  30. wavix/buy/countries/types/list_countries_response.py +23 -0
  31. wavix/buy/numbers/__init__.py +34 -0
  32. wavix/buy/numbers/client.py +168 -0
  33. wavix/buy/numbers/raw_client.py +227 -0
  34. wavix/buy/numbers/types/__init__.py +34 -0
  35. wavix/buy/numbers/types/list_numbers_response.py +26 -0
  36. wavix/buy/raw_client.py +13 -0
  37. wavix/buy/region_cities/__init__.py +34 -0
  38. wavix/buy/region_cities/client.py +142 -0
  39. wavix/buy/region_cities/raw_client.py +207 -0
  40. wavix/buy/region_cities/types/__init__.py +34 -0
  41. wavix/buy/region_cities/types/list_region_cities_response.py +23 -0
  42. wavix/buy/regions/__init__.py +34 -0
  43. wavix/buy/regions/client.py +132 -0
  44. wavix/buy/regions/raw_client.py +222 -0
  45. wavix/buy/regions/types/__init__.py +34 -0
  46. wavix/buy/regions/types/list_regions_response.py +23 -0
  47. wavix/call_control/__init__.py +40 -0
  48. wavix/call_control/audio/__init__.py +4 -0
  49. wavix/call_control/audio/client.py +195 -0
  50. wavix/call_control/audio/raw_client.py +333 -0
  51. wavix/call_control/client.py +796 -0
  52. wavix/call_control/raw_client.py +1224 -0
  53. wavix/call_control/streams/__init__.py +4 -0
  54. wavix/call_control/streams/client.py +250 -0
  55. wavix/call_control/streams/raw_client.py +325 -0
  56. wavix/call_control/types/__init__.py +38 -0
  57. wavix/call_control/types/call_dtmf_collect_request_prompt.py +33 -0
  58. wavix/call_control/types/call_dtmf_collect_request_prompt_say.py +31 -0
  59. wavix/call_recording/__init__.py +4 -0
  60. wavix/call_recording/client.py +430 -0
  61. wavix/call_recording/raw_client.py +726 -0
  62. wavix/call_webhooks/__init__.py +37 -0
  63. wavix/call_webhooks/client.py +281 -0
  64. wavix/call_webhooks/raw_client.py +529 -0
  65. wavix/call_webhooks/types/__init__.py +38 -0
  66. wavix/call_webhooks/types/call_webhooks_create_request_event_type.py +5 -0
  67. wavix/call_webhooks/types/delete_call_webhooks_request_event_type.py +5 -0
  68. wavix/cart/__init__.py +38 -0
  69. wavix/cart/client.py +327 -0
  70. wavix/cart/raw_client.py +629 -0
  71. wavix/cart/types/__init__.py +40 -0
  72. wavix/cart/types/checkout_cart_response.py +22 -0
  73. wavix/cart/types/get_cart_response.py +29 -0
  74. wavix/cart/types/remove_cart_response.py +22 -0
  75. wavix/cdrs/__init__.py +39 -0
  76. wavix/cdrs/client.py +968 -0
  77. wavix/cdrs/raw_client.py +1176 -0
  78. wavix/cdrs/transcription/__init__.py +4 -0
  79. wavix/cdrs/transcription/client.py +112 -0
  80. wavix/cdrs/transcription/raw_client.py +156 -0
  81. wavix/cdrs/types/__init__.py +38 -0
  82. wavix/cdrs/types/cdr_search_request_disposition.py +5 -0
  83. wavix/cdrs/types/cdr_search_request_type.py +5 -0
  84. wavix/client.py +578 -0
  85. wavix/core/__init__.py +127 -0
  86. wavix/core/api_error.py +23 -0
  87. wavix/core/client_wrapper.py +119 -0
  88. wavix/core/datetime_utils.py +70 -0
  89. wavix/core/file.py +67 -0
  90. wavix/core/force_multipart.py +18 -0
  91. wavix/core/http_client.py +839 -0
  92. wavix/core/http_response.py +59 -0
  93. wavix/core/http_sse/__init__.py +42 -0
  94. wavix/core/http_sse/_api.py +170 -0
  95. wavix/core/http_sse/_decoders.py +61 -0
  96. wavix/core/http_sse/_exceptions.py +7 -0
  97. wavix/core/http_sse/_models.py +17 -0
  98. wavix/core/jsonable_encoder.py +120 -0
  99. wavix/core/logging.py +107 -0
  100. wavix/core/parse_error.py +36 -0
  101. wavix/core/pydantic_utilities.py +508 -0
  102. wavix/core/query_encoder.py +58 -0
  103. wavix/core/remove_none_from_dict.py +11 -0
  104. wavix/core/request_options.py +35 -0
  105. wavix/core/serialization.py +347 -0
  106. wavix/environment.py +7 -0
  107. wavix/errors/__init__.py +56 -0
  108. wavix/errors/bad_request_error.py +10 -0
  109. wavix/errors/forbidden_error.py +10 -0
  110. wavix/errors/not_found_error.py +10 -0
  111. wavix/errors/service_unavailable_error.py +11 -0
  112. wavix/errors/too_many_requests_error.py +11 -0
  113. wavix/errors/unauthorized_error.py +11 -0
  114. wavix/errors/unprocessable_entity_error.py +10 -0
  115. wavix/link_shortener/__init__.py +34 -0
  116. wavix/link_shortener/client.py +194 -0
  117. wavix/link_shortener/metrics/__init__.py +4 -0
  118. wavix/link_shortener/metrics/client.py +198 -0
  119. wavix/link_shortener/metrics/raw_client.py +218 -0
  120. wavix/link_shortener/raw_client.py +265 -0
  121. wavix/number_validator/__init__.py +35 -0
  122. wavix/number_validator/client.py +271 -0
  123. wavix/number_validator/raw_client.py +383 -0
  124. wavix/number_validator/results/__init__.py +4 -0
  125. wavix/number_validator/results/client.py +114 -0
  126. wavix/number_validator/results/raw_client.py +156 -0
  127. wavix/number_validator/types/__init__.py +34 -0
  128. wavix/number_validator/types/get_number_validator_response.py +112 -0
  129. wavix/numbers/__init__.py +39 -0
  130. wavix/numbers/client.py +689 -0
  131. wavix/numbers/papers/__init__.py +4 -0
  132. wavix/numbers/papers/client.py +155 -0
  133. wavix/numbers/papers/raw_client.py +208 -0
  134. wavix/numbers/raw_client.py +1000 -0
  135. wavix/numbers/types/__init__.py +38 -0
  136. wavix/numbers/types/bulk_update_numbers_response.py +23 -0
  137. wavix/numbers/types/delete_numbers_response.py +22 -0
  138. wavix/profile/__init__.py +41 -0
  139. wavix/profile/client.py +308 -0
  140. wavix/profile/config/__init__.py +34 -0
  141. wavix/profile/config/client.py +100 -0
  142. wavix/profile/config/raw_client.py +124 -0
  143. wavix/profile/config/types/__init__.py +34 -0
  144. wavix/profile/config/types/get_config_response.py +25 -0
  145. wavix/profile/raw_client.py +360 -0
  146. wavix/profile/types/__init__.py +38 -0
  147. wavix/profile/types/profile_update_request_company_info.py +48 -0
  148. wavix/profile/types/profile_update_request_company_info_industry.py +22 -0
  149. wavix/py.typed +0 -0
  150. wavix/sip_trunks/__init__.py +4 -0
  151. wavix/sip_trunks/client.py +927 -0
  152. wavix/sip_trunks/raw_client.py +1324 -0
  153. wavix/sms_and_mms/__init__.py +66 -0
  154. wavix/sms_and_mms/client.py +101 -0
  155. wavix/sms_and_mms/messages/__init__.py +49 -0
  156. wavix/sms_and_mms/messages/client.py +625 -0
  157. wavix/sms_and_mms/messages/raw_client.py +793 -0
  158. wavix/sms_and_mms/messages/types/__init__.py +47 -0
  159. wavix/sms_and_mms/messages/types/get_messages_response.py +97 -0
  160. wavix/sms_and_mms/messages/types/list_all_messages_request_message_type.py +5 -0
  161. wavix/sms_and_mms/messages/types/list_messages_request_message_type.py +5 -0
  162. wavix/sms_and_mms/messages/types/list_messages_response.py +26 -0
  163. wavix/sms_and_mms/opt_outs/__init__.py +34 -0
  164. wavix/sms_and_mms/opt_outs/client.py +277 -0
  165. wavix/sms_and_mms/opt_outs/raw_client.py +438 -0
  166. wavix/sms_and_mms/opt_outs/types/__init__.py +34 -0
  167. wavix/sms_and_mms/opt_outs/types/create_opt_outs_response.py +22 -0
  168. wavix/sms_and_mms/raw_client.py +13 -0
  169. wavix/sms_and_mms/sender_ids/__init__.py +38 -0
  170. wavix/sms_and_mms/sender_ids/client.py +391 -0
  171. wavix/sms_and_mms/sender_ids/raw_client.py +617 -0
  172. wavix/sms_and_mms/sender_ids/types/__init__.py +40 -0
  173. wavix/sms_and_mms/sender_ids/types/delete_sender_ids_response.py +22 -0
  174. wavix/sms_and_mms/sender_ids/types/sender_id_create_request_monthly_volume.py +7 -0
  175. wavix/sms_and_mms/sender_ids/types/sender_id_create_request_usecase.py +5 -0
  176. wavix/speech_analytics/__init__.py +52 -0
  177. wavix/speech_analytics/client.py +372 -0
  178. wavix/speech_analytics/file/__init__.py +4 -0
  179. wavix/speech_analytics/file/client.py +114 -0
  180. wavix/speech_analytics/file/raw_client.py +148 -0
  181. wavix/speech_analytics/raw_client.py +527 -0
  182. wavix/speech_analytics/types/__init__.py +47 -0
  183. wavix/speech_analytics/types/create_speech_analytics_response.py +32 -0
  184. wavix/speech_analytics/types/get_speech_analytics_response.py +77 -0
  185. wavix/speech_analytics/types/get_speech_analytics_response_language.py +5 -0
  186. wavix/speech_analytics/types/get_speech_analytics_response_status.py +5 -0
  187. wavix/sub_accounts/__init__.py +52 -0
  188. wavix/sub_accounts/client.py +442 -0
  189. wavix/sub_accounts/raw_client.py +775 -0
  190. wavix/sub_accounts/transactions/__init__.py +4 -0
  191. wavix/sub_accounts/transactions/client.py +198 -0
  192. wavix/sub_accounts/transactions/raw_client.py +265 -0
  193. wavix/sub_accounts/types/__init__.py +47 -0
  194. wavix/sub_accounts/types/list_sub_accounts_request_status.py +5 -0
  195. wavix/sub_accounts/types/sub_accounts_create_request_default_destinations.py +31 -0
  196. wavix/sub_accounts/types/sub_accounts_update_request_default_destinations.py +31 -0
  197. wavix/sub_accounts/types/sub_accounts_update_request_status.py +5 -0
  198. wavix/ten_dlc/__init__.py +167 -0
  199. wavix/ten_dlc/brand_appeals/__init__.py +34 -0
  200. wavix/ten_dlc/brand_appeals/client.py +244 -0
  201. wavix/ten_dlc/brand_appeals/raw_client.py +390 -0
  202. wavix/ten_dlc/brand_appeals/types/__init__.py +34 -0
  203. wavix/ten_dlc/brand_appeals/types/create_brand_appeals_response.py +22 -0
  204. wavix/ten_dlc/brand_evidence/__init__.py +37 -0
  205. wavix/ten_dlc/brand_evidence/client.py +365 -0
  206. wavix/ten_dlc/brand_evidence/raw_client.py +599 -0
  207. wavix/ten_dlc/brand_evidence/types/__init__.py +38 -0
  208. wavix/ten_dlc/brand_evidence/types/delete_brand_evidence_response.py +22 -0
  209. wavix/ten_dlc/brand_evidence/types/upload_brand_evidence_response.py +38 -0
  210. wavix/ten_dlc/brand_vetting_appeals/__init__.py +34 -0
  211. wavix/ten_dlc/brand_vetting_appeals/client.py +258 -0
  212. wavix/ten_dlc/brand_vetting_appeals/raw_client.py +381 -0
  213. wavix/ten_dlc/brand_vetting_appeals/types/__init__.py +36 -0
  214. wavix/ten_dlc/brand_vetting_appeals/types/create_brand_vetting_appeals_response.py +22 -0
  215. wavix/ten_dlc/brand_vettings/__init__.py +4 -0
  216. wavix/ten_dlc/brand_vettings/client.py +325 -0
  217. wavix/ten_dlc/brand_vettings/raw_client.py +518 -0
  218. wavix/ten_dlc/brands/__init__.py +85 -0
  219. wavix/ten_dlc/brands/client.py +870 -0
  220. wavix/ten_dlc/brands/raw_client.py +1263 -0
  221. wavix/ten_dlc/brands/types/__init__.py +83 -0
  222. wavix/ten_dlc/brands/types/create_brands_response.py +143 -0
  223. wavix/ten_dlc/brands/types/create_brands_response_entity_type.py +7 -0
  224. wavix/ten_dlc/brands/types/create_brands_response_status.py +7 -0
  225. wavix/ten_dlc/brands/types/delete_brands_response.py +22 -0
  226. wavix/ten_dlc/brands/types/get_brands_response.py +143 -0
  227. wavix/ten_dlc/brands/types/get_brands_response_entity_type.py +7 -0
  228. wavix/ten_dlc/brands/types/get_brands_response_status.py +7 -0
  229. wavix/ten_dlc/brands/types/list_brands_response.py +33 -0
  230. wavix/ten_dlc/brands/types/list_brands_response_pagination.py +41 -0
  231. wavix/ten_dlc/brands/types/qualify_usecase_brands_request_use_case.py +35 -0
  232. wavix/ten_dlc/brands/types/qualify_usecase_brands_response.py +33 -0
  233. wavix/ten_dlc/brands/types/ten_dlc_brand_update_request_entity_type.py +7 -0
  234. wavix/ten_dlc/brands/types/ten_dlc_brand_update_request_vertical.py +18 -0
  235. wavix/ten_dlc/brands/types/update_brands_response.py +143 -0
  236. wavix/ten_dlc/brands/types/update_brands_response_entity_type.py +7 -0
  237. wavix/ten_dlc/brands/types/update_brands_response_status.py +7 -0
  238. wavix/ten_dlc/campaign_numbers/__init__.py +38 -0
  239. wavix/ten_dlc/campaign_numbers/client.py +304 -0
  240. wavix/ten_dlc/campaign_numbers/raw_client.py +448 -0
  241. wavix/ten_dlc/campaign_numbers/types/__init__.py +40 -0
  242. wavix/ten_dlc/campaign_numbers/types/link_campaign_numbers_response.py +22 -0
  243. wavix/ten_dlc/campaign_numbers/types/list_campaign_numbers_response.py +33 -0
  244. wavix/ten_dlc/campaign_numbers/types/unlink_campaign_numbers_response.py +22 -0
  245. wavix/ten_dlc/campaigns/__init__.py +64 -0
  246. wavix/ten_dlc/campaigns/client.py +1493 -0
  247. wavix/ten_dlc/campaigns/raw_client.py +1840 -0
  248. wavix/ten_dlc/campaigns/types/__init__.py +62 -0
  249. wavix/ten_dlc/campaigns/types/create_campaigns_response.py +211 -0
  250. wavix/ten_dlc/campaigns/types/delete_campaigns_response.py +22 -0
  251. wavix/ten_dlc/campaigns/types/get_campaigns_response.py +211 -0
  252. wavix/ten_dlc/campaigns/types/list_by_brand_campaigns_response.py +33 -0
  253. wavix/ten_dlc/campaigns/types/list_by_brand_campaigns_response_pagination.py +41 -0
  254. wavix/ten_dlc/campaigns/types/list_campaigns_response.py +33 -0
  255. wavix/ten_dlc/campaigns/types/list_campaigns_response_pagination.py +41 -0
  256. wavix/ten_dlc/campaigns/types/ten_dlc_campaign_update_request_usecase.py +15 -0
  257. wavix/ten_dlc/campaigns/types/update_campaigns_response.py +211 -0
  258. wavix/ten_dlc/client.py +196 -0
  259. wavix/ten_dlc/raw_client.py +13 -0
  260. wavix/ten_dlc/subscriptions/__init__.py +37 -0
  261. wavix/ten_dlc/subscriptions/client.py +271 -0
  262. wavix/ten_dlc/subscriptions/raw_client.py +398 -0
  263. wavix/ten_dlc/subscriptions/types/__init__.py +38 -0
  264. wavix/ten_dlc/subscriptions/types/create_subscriptions_response.py +31 -0
  265. wavix/ten_dlc/subscriptions/types/delete_subscriptions_response.py +22 -0
  266. wavix/two_fa/__init__.py +56 -0
  267. wavix/two_fa/client.py +101 -0
  268. wavix/two_fa/events/__init__.py +4 -0
  269. wavix/two_fa/events/client.py +114 -0
  270. wavix/two_fa/events/raw_client.py +156 -0
  271. wavix/two_fa/raw_client.py +13 -0
  272. wavix/two_fa/sessions/__init__.py +4 -0
  273. wavix/two_fa/sessions/client.py +142 -0
  274. wavix/two_fa/sessions/raw_client.py +200 -0
  275. wavix/two_fa/verification/__init__.py +49 -0
  276. wavix/two_fa/verification/client.py +395 -0
  277. wavix/two_fa/verification/raw_client.py +664 -0
  278. wavix/two_fa/verification/types/__init__.py +47 -0
  279. wavix/two_fa/verification/types/check_verification_response.py +22 -0
  280. wavix/two_fa/verification/types/create_verification_response.py +51 -0
  281. wavix/two_fa/verification/types/resend_verification_response.py +38 -0
  282. wavix/two_fa/verification/types/two_factor_verification_resend_request_channel.py +5 -0
  283. wavix/types/__init__.py +637 -0
  284. wavix/types/account_error_response.py +31 -0
  285. wavix/types/account_limits.py +32 -0
  286. wavix/types/allowed_i_ps.py +7 -0
  287. wavix/types/allowed_i_ps_item.py +27 -0
  288. wavix/types/api_key.py +138 -0
  289. wavix/types/api_key_calls_scope_permission.py +30 -0
  290. wavix/types/api_key_calls_scope_permission_allow.py +5 -0
  291. wavix/types/api_key_scope_permission.py +30 -0
  292. wavix/types/api_key_scope_permission_allow.py +5 -0
  293. wavix/types/available_number.py +97 -0
  294. wavix/types/available_number_list_response.py +26 -0
  295. wavix/types/bad_request_error_body.py +27 -0
  296. wavix/types/billing_transaction_list_response.py +31 -0
  297. wavix/types/brand_status_updated_webhook.py +28 -0
  298. wavix/types/brand_status_updated_webhook_status.py +7 -0
  299. wavix/types/call.py +92 -0
  300. wavix/types/call_control_validation_error_response.py +34 -0
  301. wavix/types/call_create_response.py +92 -0
  302. wavix/types/call_create_response_event_type.py +18 -0
  303. wavix/types/call_direction.py +5 -0
  304. wavix/types/call_disposition.py +5 -0
  305. wavix/types/call_event_type.py +18 -0
  306. wavix/types/call_list_response.py +28 -0
  307. wavix/types/call_recording_list_response.py +28 -0
  308. wavix/types/call_response.py +24 -0
  309. wavix/types/call_status_webhook.py +70 -0
  310. wavix/types/call_status_webhook_direction.py +5 -0
  311. wavix/types/call_stream_channel.py +5 -0
  312. wavix/types/call_stream_response.py +27 -0
  313. wavix/types/call_stream_type.py +5 -0
  314. wavix/types/call_webhook.py +37 -0
  315. wavix/types/call_webhook_event_type.py +5 -0
  316. wavix/types/call_webhook_list_response.py +10 -0
  317. wavix/types/call_webhook_list_response_item.py +28 -0
  318. wavix/types/call_webhook_list_response_item_event_type.py +5 -0
  319. wavix/types/campaign_status_updated_webhook.py +41 -0
  320. wavix/types/campaign_status_updated_webhook_status.py +7 -0
  321. wavix/types/cart_response.py +29 -0
  322. wavix/types/cdr.py +97 -0
  323. wavix/types/cdr_list_response.py +26 -0
  324. wavix/types/cdr_response.py +104 -0
  325. wavix/types/cdr_transcription_completed_webhook.py +28 -0
  326. wavix/types/cdr_transcription_completed_webhook_status.py +5 -0
  327. wavix/types/cdr_transcription_response.py +74 -0
  328. wavix/types/cdr_transcription_search_response.py +26 -0
  329. wavix/types/cdr_with_transcription.py +97 -0
  330. wavix/types/city.py +32 -0
  331. wavix/types/city_list_response.py +23 -0
  332. wavix/types/country.py +32 -0
  333. wavix/types/country_has_no_regions_error_response.py +27 -0
  334. wavix/types/country_list_response.py +23 -0
  335. wavix/types/document_type.py +32 -0
  336. wavix/types/document_type_id.py +7 -0
  337. wavix/types/file_transcript_response.py +30 -0
  338. wavix/types/file_transcript_turn.py +46 -0
  339. wavix/types/file_transcription_completed_webhook.py +32 -0
  340. wavix/types/file_transcription_response.py +77 -0
  341. wavix/types/file_transcription_response_language.py +5 -0
  342. wavix/types/file_transcription_response_status.py +5 -0
  343. wavix/types/financial_transaction.py +57 -0
  344. wavix/types/forbidden_error_response.py +27 -0
  345. wavix/types/inbound_call_destination.py +53 -0
  346. wavix/types/inbound_call_transport.py +6 -0
  347. wavix/types/inbound_message.py +46 -0
  348. wavix/types/invalid_recording.py +31 -0
  349. wavix/types/invoice.py +42 -0
  350. wavix/types/invoice_list_response.py +31 -0
  351. wavix/types/list_brand_evidence_response.py +23 -0
  352. wavix/types/list_sessions_response_item.py +58 -0
  353. wavix/types/message.py +103 -0
  354. wavix/types/message_body.py +29 -0
  355. wavix/types/message_create_request.py +46 -0
  356. wavix/types/message_delivery_status.py +8 -0
  357. wavix/types/message_list_response.py +26 -0
  358. wavix/types/message_response.py +97 -0
  359. wavix/types/messages_delivery_report.py +81 -0
  360. wavix/types/not_found_error_body.py +27 -0
  361. wavix/types/not_found_error_response.py +27 -0
  362. wavix/types/number.py +160 -0
  363. wavix/types/number_destination.py +38 -0
  364. wavix/types/number_document.py +58 -0
  365. wavix/types/number_list_response.py +32 -0
  366. wavix/types/number_status_updated_webhook.py +38 -0
  367. wavix/types/number_status_updated_webhook_status.py +5 -0
  368. wavix/types/number_validator_create_bulk_response.py +10 -0
  369. wavix/types/number_validator_create_bulk_response_request_id.py +26 -0
  370. wavix/types/on_call_event_payload.py +34 -0
  371. wavix/types/on_call_event_payload_type.py +5 -0
  372. wavix/types/opt_out.py +27 -0
  373. wavix/types/opt_out_item.py +38 -0
  374. wavix/types/opt_outs_list_response.py +26 -0
  375. wavix/types/pagination.py +37 -0
  376. wavix/types/phone_lookup_details.py +32 -0
  377. wavix/types/phone_number_validation_type.py +5 -0
  378. wavix/types/phone_validation_batch_response.py +38 -0
  379. wavix/types/phone_validation_batch_result_response.py +41 -0
  380. wavix/types/phone_validation_response.py +112 -0
  381. wavix/types/phone_validation_result_response.py +115 -0
  382. wavix/types/profile_config_response.py +25 -0
  383. wavix/types/profile_response.py +79 -0
  384. wavix/types/profile_response_company_info.py +53 -0
  385. wavix/types/profile_response_company_info_country.py +31 -0
  386. wavix/types/profile_response_company_info_industry.py +22 -0
  387. wavix/types/profile_response_default_destinations_item.py +27 -0
  388. wavix/types/record_not_found_error_response.py +27 -0
  389. wavix/types/recording.py +57 -0
  390. wavix/types/recording_deleted_error_response.py +38 -0
  391. wavix/types/region.py +31 -0
  392. wavix/types/region_list_response.py +23 -0
  393. wavix/types/send_messages_response.py +100 -0
  394. wavix/types/sender_id.py +48 -0
  395. wavix/types/sender_id_details.py +44 -0
  396. wavix/types/sender_id_list_response.py +23 -0
  397. wavix/types/sender_id_response.py +48 -0
  398. wavix/types/sender_id_response_type.py +5 -0
  399. wavix/types/sender_id_type.py +5 -0
  400. wavix/types/short_link_metrics_item.py +69 -0
  401. wavix/types/short_link_metrics_response.py +26 -0
  402. wavix/types/short_link_response.py +22 -0
  403. wavix/types/sip_trunk_create_request.py +132 -0
  404. wavix/types/sip_trunk_create_request_allowed_ips_item.py +22 -0
  405. wavix/types/sip_trunk_create_request_host_request.py +26 -0
  406. wavix/types/sip_trunk_list_response.py +26 -0
  407. wavix/types/sip_trunk_response.py +145 -0
  408. wavix/types/sip_trunk_summary.py +114 -0
  409. wavix/types/sip_trunk_summary_host_request.py +31 -0
  410. wavix/types/sub_accounts_list_response.py +26 -0
  411. wavix/types/sub_accounts_transactions_list_response.py +30 -0
  412. wavix/types/sub_accounts_transactions_list_response_transactions_item.py +48 -0
  413. wavix/types/sub_organization_response.py +59 -0
  414. wavix/types/sub_organization_response_default_destinations.py +31 -0
  415. wavix/types/sub_organization_response_status.py +5 -0
  416. wavix/types/submit_file_transcription_response.py +32 -0
  417. wavix/types/success_response.py +22 -0
  418. wavix/types/tcr_error_message.py +27 -0
  419. wavix/types/tcr_feedback.py +23 -0
  420. wavix/types/tcr_feedback_category.py +47 -0
  421. wavix/types/ten_dlc_brand.py +143 -0
  422. wavix/types/ten_dlc_brand_appeal.py +54 -0
  423. wavix/types/ten_dlc_brand_appeal_create_request.py +36 -0
  424. wavix/types/ten_dlc_brand_appeal_outcome.py +38 -0
  425. wavix/types/ten_dlc_brand_appeal_outcome_feedback.py +27 -0
  426. wavix/types/ten_dlc_brand_appeal_outcome_vetting_status.py +7 -0
  427. wavix/types/ten_dlc_brand_create_request.py +8 -0
  428. wavix/types/ten_dlc_brand_create_request_entity_type.py +7 -0
  429. wavix/types/ten_dlc_brand_create_request_stock_exchange.py +26 -0
  430. wavix/types/ten_dlc_brand_create_request_stock_exchange_entity_type.py +7 -0
  431. wavix/types/ten_dlc_brand_create_request_vertical.py +18 -0
  432. wavix/types/ten_dlc_brand_create_request_zero.py +24 -0
  433. wavix/types/ten_dlc_brand_create_request_zero_entity_type.py +5 -0
  434. wavix/types/ten_dlc_brand_entity_type.py +7 -0
  435. wavix/types/ten_dlc_brand_evidence.py +38 -0
  436. wavix/types/ten_dlc_brand_identity_verification_status.py +7 -0
  437. wavix/types/ten_dlc_brand_list_response.py +33 -0
  438. wavix/types/ten_dlc_brand_list_response_pagination.py +41 -0
  439. wavix/types/ten_dlc_brand_qualification_result.py +33 -0
  440. wavix/types/ten_dlc_brand_status.py +7 -0
  441. wavix/types/ten_dlc_brand_vetting.py +71 -0
  442. wavix/types/ten_dlc_brand_vetting_appeal.py +78 -0
  443. wavix/types/ten_dlc_brand_vetting_appeal_appeal_outcome.py +37 -0
  444. wavix/types/ten_dlc_brand_vetting_appeal_appeal_outcome_feedback.py +26 -0
  445. wavix/types/ten_dlc_brand_vetting_appeal_outcome.py +33 -0
  446. wavix/types/ten_dlc_brand_vetting_appeal_outcome_feedback.py +26 -0
  447. wavix/types/ten_dlc_brand_vetting_appeal_outcome_reason.py +22 -0
  448. wavix/types/ten_dlc_campaign.py +211 -0
  449. wavix/types/ten_dlc_campaign_list_response.py +33 -0
  450. wavix/types/ten_dlc_campaign_list_response_pagination.py +41 -0
  451. wavix/types/ten_dlc_campaign_nudge_request.py +32 -0
  452. wavix/types/ten_dlc_campaign_number.py +27 -0
  453. wavix/types/ten_dlc_campaign_number_list_response.py +33 -0
  454. wavix/types/ten_dlc_event_subscription.py +31 -0
  455. wavix/types/ten_dlcmno_metadata.py +101 -0
  456. wavix/types/transaction_status.py +5 -0
  457. wavix/types/transaction_type.py +50 -0
  458. wavix/types/transcript_turn.py +46 -0
  459. wavix/types/transcription_filter.py +35 -0
  460. wavix/types/transcription_filter_agent.py +36 -0
  461. wavix/types/transcription_filter_any.py +36 -0
  462. wavix/types/transcription_filter_client.py +36 -0
  463. wavix/types/transcription_language.py +5 -0
  464. wavix/types/transcription_reference.py +29 -0
  465. wavix/types/transcription_status.py +5 -0
  466. wavix/types/tts_language.py +5 -0
  467. wavix/types/tts_voice_id.py +25 -0
  468. wavix/types/two_factor_verification_check_response.py +22 -0
  469. wavix/types/two_factor_verification_event.py +47 -0
  470. wavix/types/two_factor_verification_resend_response.py +38 -0
  471. wavix/types/two_factor_verification_response.py +51 -0
  472. wavix/types/unauthorized_error_response.py +32 -0
  473. wavix/types/unprocessable_entity_error_body.py +27 -0
  474. wavix/types/validation_error_response.py +27 -0
  475. wavix/types/voice_campaign_create_request.py +20 -0
  476. wavix/types/voice_campaign_response.py +41 -0
  477. wavix/types/voice_campaigns_create_response.py +20 -0
  478. wavix/types/voice_campaigns_create_response_voice_campaign.py +43 -0
  479. wavix/types/voice_campaigns_get_response.py +20 -0
  480. wavix/types/voice_campaigns_get_response_voice_campaign.py +43 -0
  481. wavix/types/web_rtc_token.py +43 -0
  482. wavix/types/web_rtc_token_response.py +44 -0
  483. wavix/types/web_rtc_tokens_list_response.py +30 -0
  484. wavix/version.py +3 -0
  485. wavix/voice_campaigns/__init__.py +4 -0
  486. wavix/voice_campaigns/client.py +197 -0
  487. wavix/voice_campaigns/raw_client.py +332 -0
  488. wavix/webrtc/__init__.py +34 -0
  489. wavix/webrtc/client.py +63 -0
  490. wavix/webrtc/raw_client.py +13 -0
  491. wavix/webrtc/tokens/__init__.py +4 -0
  492. wavix/webrtc/tokens/client.py +432 -0
  493. wavix/webrtc/tokens/raw_client.py +869 -0
  494. wavix_python_sdk-1.0.0.dist-info/LICENSE +21 -0
  495. wavix_python_sdk-1.0.0.dist-info/METADATA +339 -0
  496. wavix_python_sdk-1.0.0.dist-info/RECORD +497 -0
  497. 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