twilio-ruby 5.46.1 → 5.77.0
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.
- checksums.yaml +5 -5
- data/.github/workflows/pr-lint.yml +21 -0
- data/.github/workflows/test-and-deploy.yml +129 -0
- data/.gitignore +5 -1
- data/.rubocop.yml +1 -1
- data/.rubocop_todo.yml +91 -28
- data/CHANGES.md +1053 -0
- data/CONTRIBUTING.md +1 -7
- data/Gemfile +1 -0
- data/LICENSE +1 -1
- data/Makefile +12 -11
- data/PULL_REQUEST_TEMPLATE.md +1 -1
- data/README.md +137 -42
- data/advanced-examples/custom-http-client.md +170 -0
- data/examples/examples.rb +1 -1
- data/lib/rack/twilio_webhook_authentication.rb +25 -1
- data/lib/twilio-ruby/http/http_client.rb +20 -4
- data/lib/twilio-ruby/http.rb +5 -0
- data/lib/twilio-ruby/jwt/access_token.rb +13 -0
- data/lib/twilio-ruby/rest/api/v2010/account/address.rb +19 -3
- data/lib/twilio-ruby/rest/api/v2010/account/application.rb +22 -3
- data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number/local.rb +2 -2
- data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number/machine_to_machine.rb +2 -2
- data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number/mobile.rb +2 -2
- data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number/national.rb +2 -2
- data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number/shared_cost.rb +2 -2
- data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number/toll_free.rb +2 -2
- data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number/voip.rb +2 -2
- data/lib/twilio-ruby/rest/api/v2010/account/call/event.rb +4 -4
- data/lib/twilio-ruby/rest/api/v2010/account/call/feedback.rb +28 -28
- data/lib/twilio-ruby/rest/api/v2010/account/call/feedback_summary.rb +10 -10
- data/lib/twilio-ruby/rest/api/v2010/account/call/payment.rb +8 -8
- data/lib/twilio-ruby/rest/api/v2010/account/call/recording.rb +2 -2
- data/lib/twilio-ruby/rest/api/v2010/account/call/siprec.rb +674 -0
- data/lib/twilio-ruby/rest/api/v2010/account/call/stream.rb +674 -0
- data/lib/twilio-ruby/rest/api/v2010/account/call/user_defined_message.rb +160 -0
- data/lib/twilio-ruby/rest/api/v2010/account/call/user_defined_message_subscription.rb +251 -0
- data/lib/twilio-ruby/rest/api/v2010/account/call.rb +130 -11
- data/lib/twilio-ruby/rest/api/v2010/account/conference/participant.rb +67 -24
- data/lib/twilio-ruby/rest/api/v2010/account/conference/recording.rb +2 -2
- data/lib/twilio-ruby/rest/api/v2010/account/conference.rb +5 -5
- data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/local.rb +11 -4
- data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/mobile.rb +11 -4
- data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/toll_free.rb +11 -4
- data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number.rb +17 -10
- data/lib/twilio-ruby/rest/api/v2010/account/message.rb +34 -5
- data/lib/twilio-ruby/rest/api/v2010/account/queue/member.rb +2 -2
- data/lib/twilio-ruby/rest/api/v2010/account/queue.rb +6 -6
- data/lib/twilio-ruby/rest/api/v2010/account/recording/transcription.rb +1 -1
- data/lib/twilio-ruby/rest/api/v2010/account/recording.rb +35 -8
- data/lib/twilio-ruby/rest/api/v2010/account/sip/domain/credential_list_mapping.rb +11 -11
- data/lib/twilio-ruby/rest/api/v2010/account/sip/domain/ip_access_control_list_mapping.rb +11 -11
- data/lib/twilio-ruby/rest/api/v2010/account/sip/ip_access_control_list/ip_address.rb +5 -5
- data/lib/twilio-ruby/rest/api/v2010/account/sip/ip_access_control_list.rb +3 -3
- data/lib/twilio-ruby/rest/api/v2010/account/transcription.rb +1 -1
- data/lib/twilio-ruby/rest/api/v2010/account/usage/record/all_time.rb +1 -1
- data/lib/twilio-ruby/rest/api/v2010/account/usage/record/daily.rb +1 -1
- data/lib/twilio-ruby/rest/api/v2010/account/usage/record/last_month.rb +1 -1
- data/lib/twilio-ruby/rest/api/v2010/account/usage/record/monthly.rb +1 -1
- data/lib/twilio-ruby/rest/api/v2010/account/usage/record/this_month.rb +1 -1
- data/lib/twilio-ruby/rest/api/v2010/account/usage/record/today.rb +1 -1
- data/lib/twilio-ruby/rest/api/v2010/account/usage/record/yearly.rb +1 -1
- data/lib/twilio-ruby/rest/api/v2010/account/usage/record/yesterday.rb +1 -1
- data/lib/twilio-ruby/rest/api/v2010/account/usage/record.rb +1 -1
- data/lib/twilio-ruby/rest/api/v2010.rb +5 -4
- data/lib/twilio-ruby/rest/api.rb +1 -1
- data/lib/twilio-ruby/rest/autopilot/v1/assistant/task/task_statistics.rb +2 -2
- data/lib/twilio-ruby/rest/autopilot/v1.rb +5 -4
- data/lib/twilio-ruby/rest/bulkexports/v1/export/day.rb +1 -9
- data/lib/twilio-ruby/rest/bulkexports/v1/export/export_custom_job.rb +15 -7
- data/lib/twilio-ruby/rest/bulkexports/v1/export/job.rb +15 -9
- data/lib/twilio-ruby/rest/bulkexports/v1/export.rb +0 -8
- data/lib/twilio-ruby/rest/bulkexports/v1/export_configuration.rb +0 -8
- data/lib/twilio-ruby/rest/bulkexports/v1.rb +10 -8
- data/lib/twilio-ruby/rest/chat/v1/service/channel/message.rb +1 -1
- data/lib/twilio-ruby/rest/chat/v1/service/channel.rb +2 -2
- data/lib/twilio-ruby/rest/chat/v1/service/user.rb +1 -1
- data/lib/twilio-ruby/rest/chat/v1/service.rb +2 -2
- data/lib/twilio-ruby/rest/chat/v1.rb +10 -8
- data/lib/twilio-ruby/rest/chat/v2/service/channel/message.rb +1 -1
- data/lib/twilio-ruby/rest/chat/v2/service/channel.rb +2 -2
- data/lib/twilio-ruby/rest/chat/v2/service/user/user_channel.rb +10 -4
- data/lib/twilio-ruby/rest/chat/v2/service/user.rb +1 -1
- data/lib/twilio-ruby/rest/chat/v2/service.rb +4 -4
- data/lib/twilio-ruby/rest/chat/v2.rb +10 -8
- data/lib/twilio-ruby/rest/chat/v3/channel.rb +275 -0
- data/lib/twilio-ruby/rest/chat/v3.rb +48 -0
- data/lib/twilio-ruby/rest/chat.rb +16 -0
- data/lib/twilio-ruby/rest/client.rb +57 -13
- data/lib/twilio-ruby/rest/content/v1/content/approval_fetch.rb +195 -0
- data/lib/twilio-ruby/rest/content/v1/content.rb +346 -0
- data/lib/twilio-ruby/rest/content/v1/content_and_approvals.rb +240 -0
- data/lib/twilio-ruby/rest/content/v1/legacy_content.rb +254 -0
- data/lib/twilio-ruby/rest/content/v1.rb +59 -0
- data/lib/twilio-ruby/rest/content.rb +59 -0
- data/lib/twilio-ruby/rest/conversations/v1/address_configuration.rb +454 -0
- data/lib/twilio-ruby/rest/conversations/v1/conversation/message/delivery_receipt.rb +1 -1
- data/lib/twilio-ruby/rest/conversations/v1/conversation/message.rb +29 -7
- data/lib/twilio-ruby/rest/conversations/v1/conversation.rb +50 -5
- data/lib/twilio-ruby/rest/conversations/v1/participant_conversation.rb +312 -0
- data/lib/twilio-ruby/rest/conversations/v1/service/configuration/notification.rb +18 -2
- data/lib/twilio-ruby/rest/conversations/v1/service/configuration/webhook.rb +269 -0
- data/lib/twilio-ruby/rest/conversations/v1/service/configuration.rb +8 -0
- data/lib/twilio-ruby/rest/conversations/v1/service/conversation/message/delivery_receipt.rb +1 -1
- data/lib/twilio-ruby/rest/conversations/v1/service/conversation/message.rb +29 -7
- data/lib/twilio-ruby/rest/conversations/v1/service/conversation.rb +50 -5
- data/lib/twilio-ruby/rest/conversations/v1/service/participant_conversation.rb +324 -0
- data/lib/twilio-ruby/rest/conversations/v1/service/user/user_conversation.rb +466 -0
- data/lib/twilio-ruby/rest/conversations/v1/service/user.rb +44 -0
- data/lib/twilio-ruby/rest/conversations/v1/service.rb +23 -0
- data/lib/twilio-ruby/rest/conversations/v1/user/user_conversation.rb +442 -0
- data/lib/twilio-ruby/rest/conversations/v1/user.rb +35 -0
- data/lib/twilio-ruby/rest/conversations/v1.rb +49 -20
- data/lib/twilio-ruby/rest/conversations.rb +15 -0
- data/lib/twilio-ruby/rest/events/v1/event_type.rb +16 -9
- data/lib/twilio-ruby/rest/events/v1/schema/{schema_version.rb → version.rb} +42 -42
- data/lib/twilio-ruby/rest/events/v1/schema.rb +16 -16
- data/lib/twilio-ruby/rest/events/v1/sink/sink_test.rb +3 -3
- data/lib/twilio-ruby/rest/events/v1/sink/sink_validate.rb +3 -3
- data/lib/twilio-ruby/rest/events/v1/sink.rb +47 -10
- data/lib/twilio-ruby/rest/events/v1/subscription/subscribed_event.rb +139 -9
- data/lib/twilio-ruby/rest/events/v1/subscription.rb +15 -8
- data/lib/twilio-ruby/rest/events/v1.rb +20 -16
- data/lib/twilio-ruby/rest/flex_api/v1/assessments.rb +397 -0
- data/lib/twilio-ruby/rest/flex_api/v1/configuration.rb +56 -0
- data/lib/twilio-ruby/rest/flex_api/v1/flex_flow.rb +55 -34
- data/lib/twilio-ruby/rest/flex_api/v1/insights_assessments_comment.rb +314 -0
- data/lib/twilio-ruby/rest/flex_api/v1/insights_conversations.rb +216 -0
- data/lib/twilio-ruby/rest/flex_api/v1/insights_questionnaires.rb +394 -0
- data/lib/twilio-ruby/rest/flex_api/v1/insights_questionnaires_category.rb +313 -0
- data/lib/twilio-ruby/rest/flex_api/v1/insights_questionnaires_question.rb +390 -0
- data/lib/twilio-ruby/rest/flex_api/v1/insights_segments.rb +413 -0
- data/lib/twilio-ruby/rest/{preview/trusted_comms/brands_information.rb → flex_api/v1/insights_session.rb} +58 -55
- data/lib/twilio-ruby/rest/flex_api/v1/insights_settings_answersets.rb +144 -0
- data/lib/twilio-ruby/rest/flex_api/v1/insights_settings_comment.rb +130 -0
- data/lib/twilio-ruby/rest/{preview/trusted_comms/cps.rb → flex_api/v1/insights_user_roles.rb} +42 -54
- data/lib/twilio-ruby/rest/flex_api/v1/interaction/interaction_channel/interaction_channel_invite.rb +236 -0
- data/lib/twilio-ruby/rest/flex_api/v1/interaction/interaction_channel/interaction_channel_participant.rb +330 -0
- data/lib/twilio-ruby/rest/flex_api/v1/interaction/interaction_channel.rb +405 -0
- data/lib/twilio-ruby/rest/{preview/trusted_comms/branded_channel.rb → flex_api/v1/interaction.rb} +76 -68
- data/lib/twilio-ruby/rest/flex_api/v1.rb +153 -12
- data/lib/twilio-ruby/rest/flex_api/v2/web_channels.rb +133 -0
- data/lib/twilio-ruby/rest/flex_api/v2.rb +35 -0
- data/lib/twilio-ruby/rest/flex_api.rb +98 -0
- data/lib/twilio-ruby/rest/frontline_api/v1/user.rb +258 -0
- data/lib/twilio-ruby/rest/frontline_api/v1.rb +45 -0
- data/lib/twilio-ruby/rest/{fax.rb → frontline_api.rb} +11 -11
- data/lib/twilio-ruby/rest/insights/v1/call/annotation.rb +322 -0
- data/lib/twilio-ruby/rest/insights/v1/call/summary.rb +14 -0
- data/lib/twilio-ruby/rest/insights/v1/call.rb +16 -8
- data/lib/twilio-ruby/rest/insights/v1/call_summaries.rb +447 -0
- data/lib/twilio-ruby/rest/insights/v1/conference/conference_participant.rb +474 -0
- data/lib/twilio-ruby/rest/insights/v1/conference.rb +512 -0
- data/lib/twilio-ruby/rest/insights/v1/room/participant.rb +23 -23
- data/lib/twilio-ruby/rest/insights/v1/room.rb +58 -46
- data/lib/twilio-ruby/rest/insights/v1/setting.rb +215 -0
- data/lib/twilio-ruby/rest/insights/v1.rb +41 -9
- data/lib/twilio-ruby/rest/insights.rb +21 -1
- data/lib/twilio-ruby/rest/ip_messaging/v1/service/channel/message.rb +1 -1
- data/lib/twilio-ruby/rest/ip_messaging/v1/service/channel.rb +2 -2
- data/lib/twilio-ruby/rest/ip_messaging/v1/service/user.rb +1 -1
- data/lib/twilio-ruby/rest/ip_messaging/v1/service.rb +2 -2
- data/lib/twilio-ruby/rest/ip_messaging/v1.rb +10 -8
- data/lib/twilio-ruby/rest/ip_messaging/v2/service/channel/message.rb +1 -1
- data/lib/twilio-ruby/rest/ip_messaging/v2/service/channel.rb +2 -2
- data/lib/twilio-ruby/rest/ip_messaging/v2/service/user.rb +1 -1
- data/lib/twilio-ruby/rest/ip_messaging/v2/service.rb +4 -4
- data/lib/twilio-ruby/rest/ip_messaging/v2.rb +10 -8
- data/lib/twilio-ruby/rest/lookups/v1.rb +5 -4
- data/lib/twilio-ruby/rest/lookups/v2/phone_number.rb +343 -0
- data/lib/twilio-ruby/rest/lookups/v2.rb +45 -0
- data/lib/twilio-ruby/rest/lookups.rb +7 -0
- data/lib/twilio-ruby/rest/media/v1/media_processor.rb +397 -0
- data/lib/twilio-ruby/rest/media/v1/media_recording.rb +399 -0
- data/lib/twilio-ruby/rest/media/v1/player_streamer/playback_grant.rb +221 -0
- data/lib/twilio-ruby/rest/media/v1/player_streamer.rb +403 -0
- data/lib/twilio-ruby/rest/media/v1.rb +76 -0
- data/lib/twilio-ruby/rest/media.rb +65 -0
- data/lib/twilio-ruby/rest/messaging/v1/brand_registration/brand_registration_otp.rb +134 -0
- data/lib/twilio-ruby/rest/messaging/v1/brand_registration/brand_vetting.rb +353 -0
- data/lib/twilio-ruby/rest/messaging/v1/brand_registration.rb +476 -0
- data/lib/twilio-ruby/rest/messaging/v1/domain_cert.rb +257 -0
- data/lib/twilio-ruby/rest/messaging/v1/domain_config.rb +242 -0
- data/lib/twilio-ruby/rest/messaging/v1/domain_config_messaging_service.rb +226 -0
- data/lib/twilio-ruby/rest/messaging/v1/external_campaign.rb +150 -0
- data/lib/twilio-ruby/rest/messaging/v1/linkshortening_messaging_service.rb +218 -0
- data/lib/twilio-ruby/rest/messaging/v1/service/alpha_sender.rb +2 -2
- data/lib/twilio-ruby/rest/messaging/v1/service/us_app_to_person.rb +528 -0
- data/lib/twilio-ruby/rest/messaging/v1/service/us_app_to_person_usecase.rb +129 -0
- data/lib/twilio-ruby/rest/messaging/v1/service.rb +145 -27
- data/lib/twilio-ruby/rest/messaging/v1/tollfree_verification.rb +723 -0
- data/lib/twilio-ruby/rest/messaging/v1/usecase.rb +111 -0
- data/lib/twilio-ruby/rest/messaging/v1.rb +126 -4
- data/lib/twilio-ruby/rest/messaging.rb +64 -0
- data/lib/twilio-ruby/rest/microvisor/v1/account_config.rb +317 -0
- data/lib/twilio-ruby/rest/microvisor/v1/account_secret.rb +310 -0
- data/lib/twilio-ruby/rest/microvisor/v1/app/app_manifest.rb +192 -0
- data/lib/twilio-ruby/rest/microvisor/v1/app.rb +330 -0
- data/lib/twilio-ruby/rest/microvisor/v1/device/device_config.rb +342 -0
- data/lib/twilio-ruby/rest/{preview/bulk_exports/export/day.rb → microvisor/v1/device/device_secret.rb} +125 -84
- data/lib/twilio-ruby/rest/microvisor/v1/device.rb +393 -0
- data/lib/twilio-ruby/rest/microvisor/v1.rb +92 -0
- data/lib/twilio-ruby/rest/microvisor.rb +70 -0
- data/lib/twilio-ruby/rest/monitor/v1.rb +10 -8
- data/lib/twilio-ruby/rest/notify/v1/service/notification.rb +1 -1
- data/lib/twilio-ruby/rest/notify/v1.rb +10 -8
- data/lib/twilio-ruby/rest/numbers/v1/eligibility.rb +111 -0
- data/lib/twilio-ruby/rest/numbers/v1.rb +35 -0
- data/lib/twilio-ruby/rest/numbers/v2/regulatory_compliance/bundle/bundle_copy.rb +268 -0
- data/lib/twilio-ruby/rest/numbers/v2/regulatory_compliance/bundle/replace_items.rb +188 -0
- data/lib/twilio-ruby/rest/numbers/v2/regulatory_compliance/bundle.rb +128 -26
- data/lib/twilio-ruby/rest/numbers/v2/regulatory_compliance/supporting_document.rb +7 -0
- data/lib/twilio-ruby/rest/numbers.rb +13 -0
- data/lib/twilio-ruby/rest/oauth/v1/device_code.rb +153 -0
- data/lib/twilio-ruby/rest/oauth/v1/oauth.rb +162 -0
- data/lib/twilio-ruby/rest/oauth/v1/openid_discovery.rb +242 -0
- data/lib/twilio-ruby/rest/oauth/v1/token.rb +157 -0
- data/lib/twilio-ruby/rest/oauth/v1/user_info.rb +193 -0
- data/lib/twilio-ruby/rest/oauth/v1.rb +63 -0
- data/lib/twilio-ruby/rest/oauth.rb +68 -0
- data/lib/twilio-ruby/rest/preview/deployed_devices.rb +5 -4
- data/lib/twilio-ruby/rest/preview/hosted_numbers/authorization_document/dependent_hosted_number_order.rb +2 -2
- data/lib/twilio-ruby/rest/preview/hosted_numbers/hosted_number_order.rb +2 -2
- data/lib/twilio-ruby/rest/preview/hosted_numbers.rb +10 -8
- data/lib/twilio-ruby/rest/preview/marketplace.rb +10 -8
- data/lib/twilio-ruby/rest/preview/sync/service/document.rb +4 -8
- data/lib/twilio-ruby/rest/preview/sync/service/sync_list/sync_list_item.rb +1 -1
- data/lib/twilio-ruby/rest/preview/sync.rb +5 -4
- data/lib/twilio-ruby/rest/preview/understand/assistant/task/task_statistics.rb +2 -2
- data/lib/twilio-ruby/rest/preview/understand.rb +5 -4
- data/lib/twilio-ruby/rest/preview/wireless/rate_plan.rb +1 -1
- data/lib/twilio-ruby/rest/preview/wireless.rb +15 -12
- data/lib/twilio-ruby/rest/preview.rb +0 -58
- data/lib/twilio-ruby/rest/pricing/v2/country.rb +280 -0
- data/lib/twilio-ruby/rest/pricing/v2/number.rb +225 -0
- data/lib/twilio-ruby/rest/pricing/v2.rb +37 -0
- data/lib/twilio-ruby/rest/pricing.rb +19 -0
- data/lib/twilio-ruby/rest/proxy/v1/service/phone_number.rb +1 -1
- data/lib/twilio-ruby/rest/proxy/v1/service/session/participant.rb +2 -15
- data/lib/twilio-ruby/rest/proxy/v1/service/session.rb +5 -46
- data/lib/twilio-ruby/rest/proxy/v1/service.rb +1 -1
- data/lib/twilio-ruby/rest/proxy/v1.rb +5 -4
- data/lib/twilio-ruby/rest/routes/v2/phone_number.rb +235 -0
- data/lib/twilio-ruby/rest/routes/v2/sip_domain.rb +231 -0
- data/lib/twilio-ruby/rest/routes/v2/trunk.rb +235 -0
- data/lib/twilio-ruby/rest/routes/v2.rb +76 -0
- data/lib/twilio-ruby/rest/routes.rb +62 -0
- data/lib/twilio-ruby/rest/serverless/v1/service/build.rb +11 -1
- data/lib/twilio-ruby/rest/serverless/v1/service/environment.rb +1 -1
- data/lib/twilio-ruby/rest/serverless/v1/service.rb +7 -0
- data/lib/twilio-ruby/rest/serverless/v1.rb +5 -4
- data/lib/twilio-ruby/rest/studio/v1/flow/execution.rb +1 -1
- data/lib/twilio-ruby/rest/studio/v1/flow.rb +1 -1
- data/lib/twilio-ruby/rest/studio/v1.rb +5 -4
- data/lib/twilio-ruby/rest/studio/v2/flow/execution.rb +1 -1
- data/lib/twilio-ruby/rest/studio/v2/flow/flow_revision.rb +1 -1
- data/lib/twilio-ruby/rest/studio/v2/flow.rb +1 -1
- data/lib/twilio-ruby/rest/studio/v2.rb +5 -4
- data/lib/twilio-ruby/rest/supersim/v1/esim_profile.rb +392 -0
- data/lib/twilio-ruby/rest/supersim/v1/fleet.rb +95 -44
- data/lib/twilio-ruby/rest/supersim/v1/ip_command.rb +419 -0
- data/lib/twilio-ruby/rest/supersim/v1/settings_update.rb +247 -0
- data/lib/twilio-ruby/rest/supersim/v1/sim/billing_period.rb +231 -0
- data/lib/twilio-ruby/rest/supersim/v1/sim/sim_ip_address.rb +195 -0
- data/lib/twilio-ruby/rest/supersim/v1/sim.rb +65 -0
- data/lib/twilio-ruby/rest/supersim/v1/{command.rb → sms_command.rb} +81 -78
- data/lib/twilio-ruby/rest/supersim/v1/usage_record.rb +26 -12
- data/lib/twilio-ruby/rest/supersim/v1.rb +69 -25
- data/lib/twilio-ruby/rest/supersim.rb +30 -6
- data/lib/twilio-ruby/rest/sync/v1/service/document/document_permission.rb +0 -8
- data/lib/twilio-ruby/rest/sync/v1/service/document.rb +13 -32
- data/lib/twilio-ruby/rest/sync/v1/service/sync_list/sync_list_item.rb +39 -46
- data/lib/twilio-ruby/rest/sync/v1/service/sync_list/sync_list_permission.rb +0 -8
- data/lib/twilio-ruby/rest/sync/v1/service/sync_list.rb +9 -23
- data/lib/twilio-ruby/rest/sync/v1/service/sync_map/sync_map_item.rb +38 -47
- data/lib/twilio-ruby/rest/sync/v1/service/sync_map/sync_map_permission.rb +0 -8
- data/lib/twilio-ruby/rest/sync/v1/service/sync_map.rb +9 -23
- data/lib/twilio-ruby/rest/sync/v1/service/sync_stream/stream_message.rb +0 -6
- data/lib/twilio-ruby/rest/sync/v1/service/sync_stream.rb +9 -23
- data/lib/twilio-ruby/rest/sync/v1/service.rb +1 -9
- data/lib/twilio-ruby/rest/sync/v1.rb +5 -4
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/activity.rb +7 -0
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/event.rb +1 -1
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task/reservation.rb +25 -8
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task.rb +34 -10
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_queue/task_queue_cumulative_statistics.rb +18 -14
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_queue/task_queue_real_time_statistics.rb +5 -5
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_queue.rb +10 -4
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/reservation.rb +7 -3
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/worker_channel.rb +3 -3
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/workers_cumulative_statistics.rb +6 -6
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/workers_real_time_statistics.rb +1 -1
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker.rb +32 -14
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workflow/workflow_cumulative_statistics.rb +17 -15
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workflow/workflow_real_time_statistics.rb +2 -2
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workflow.rb +1 -1
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workspace_cumulative_statistics.rb +17 -15
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workspace_real_time_statistics.rb +3 -3
- data/lib/twilio-ruby/rest/taskrouter/v1/workspace.rb +45 -30
- data/lib/twilio-ruby/rest/taskrouter/v1.rb +5 -4
- data/lib/twilio-ruby/rest/trunking/v1/trunk/origination_url.rb +2 -2
- data/lib/twilio-ruby/rest/trunking/v1/trunk.rb +19 -3
- data/lib/twilio-ruby/rest/trunking/v1.rb +5 -4
- data/lib/twilio-ruby/rest/trusthub/v1/customer_profiles/customer_profiles_channel_endpoint_assignment.rb +359 -0
- data/lib/twilio-ruby/rest/trusthub/v1/customer_profiles/customer_profiles_entity_assignments.rb +330 -0
- data/lib/twilio-ruby/rest/trusthub/v1/customer_profiles/customer_profiles_evaluations.rb +328 -0
- data/lib/twilio-ruby/rest/trusthub/v1/customer_profiles.rb +523 -0
- data/lib/twilio-ruby/rest/trusthub/v1/end_user.rb +356 -0
- data/lib/twilio-ruby/rest/trusthub/v1/end_user_type.rb +271 -0
- data/lib/twilio-ruby/rest/trusthub/v1/policies.rb +262 -0
- data/lib/twilio-ruby/rest/trusthub/v1/supporting_document.rb +369 -0
- data/lib/twilio-ruby/rest/trusthub/v1/supporting_document_type.rb +271 -0
- data/lib/twilio-ruby/rest/trusthub/v1/trust_products/trust_products_channel_endpoint_assignment.rb +359 -0
- data/lib/twilio-ruby/rest/{fax/v1/fax/fax_media.rb → trusthub/v1/trust_products/trust_products_entity_assignments.rb} +101 -85
- data/lib/twilio-ruby/rest/trusthub/v1/trust_products/trust_products_evaluations.rb +328 -0
- data/lib/twilio-ruby/rest/trusthub/v1/trust_products.rb +523 -0
- data/lib/twilio-ruby/rest/trusthub/v1.rb +146 -0
- data/lib/twilio-ruby/rest/trusthub.rb +100 -0
- data/lib/twilio-ruby/rest/verify/v2/safelist.rb +215 -0
- data/lib/twilio-ruby/rest/verify/v2/service/access_token.rb +153 -16
- data/lib/twilio-ruby/rest/verify/v2/service/entity/challenge/notification.rb +199 -0
- data/lib/twilio-ruby/rest/verify/v2/service/entity/challenge.rb +111 -28
- data/lib/twilio-ruby/rest/verify/v2/service/entity/factor.rb +68 -68
- data/lib/twilio-ruby/rest/verify/v2/service/entity/new_factor.rb +303 -0
- data/lib/twilio-ruby/rest/verify/v2/service/entity.rb +31 -11
- data/lib/twilio-ruby/rest/verify/v2/service/rate_limit/bucket.rb +2 -2
- data/lib/twilio-ruby/rest/verify/v2/service/verification.rb +31 -8
- data/lib/twilio-ruby/rest/verify/v2/service/verification_check.rb +8 -1
- data/lib/twilio-ruby/rest/verify/v2/service/webhook.rb +24 -13
- data/lib/twilio-ruby/rest/verify/v2/service.rb +102 -15
- data/lib/twilio-ruby/rest/verify/v2/template.rb +213 -0
- data/lib/twilio-ruby/rest/verify/v2/verification_attempt.rb +397 -0
- data/lib/twilio-ruby/rest/verify/v2/verification_attempts_summary.rb +234 -0
- data/lib/twilio-ruby/rest/verify/v2.rb +58 -8
- data/lib/twilio-ruby/rest/verify.rb +29 -0
- data/lib/twilio-ruby/rest/video/v1/composition.rb +24 -11
- data/lib/twilio-ruby/rest/video/v1/composition_hook.rb +0 -8
- data/lib/twilio-ruby/rest/video/v1/recording.rb +23 -2
- data/lib/twilio-ruby/rest/video/v1/room/recording.rb +9 -2
- data/lib/twilio-ruby/rest/video/v1/room/room_participant/room_participant_anonymize.rb +240 -0
- data/lib/twilio-ruby/rest/video/v1/room/room_participant.rb +16 -0
- data/lib/twilio-ruby/rest/video/v1/room/room_recording_rule.rb +0 -6
- data/lib/twilio-ruby/rest/video/v1/room.rb +66 -6
- data/lib/twilio-ruby/rest/video/v1.rb +20 -16
- data/lib/twilio-ruby/rest/voice/v1/archived_call.rb +184 -0
- data/lib/twilio-ruby/rest/voice/v1/connection_policy/connection_policy_target.rb +2 -2
- data/lib/twilio-ruby/rest/voice/v1/dialing_permissions/bulk_country_update.rb +1 -1
- data/lib/twilio-ruby/rest/voice/v1/ip_record.rb +1 -1
- data/lib/twilio-ruby/rest/voice/v1.rb +41 -16
- data/lib/twilio-ruby/rest/voice.rb +8 -0
- data/lib/twilio-ruby/rest/wireless/v1/rate_plan.rb +6 -6
- data/lib/twilio-ruby/rest/wireless/v1/sim/data_session.rb +2 -2
- data/lib/twilio-ruby/rest/wireless/v1/sim.rb +16 -26
- data/lib/twilio-ruby/rest/wireless/v1.rb +15 -12
- data/lib/twilio-ruby/rest.rb +13 -0
- data/lib/twilio-ruby/security/request_validator.rb +1 -1
- data/lib/twilio-ruby/twiml/voice_response.rb +919 -155
- data/lib/twilio-ruby/version.rb +1 -1
- data/lib/twilio-ruby.rb +6 -16
- data/sonar-project.properties +13 -0
- data/twilio-ruby.gemspec +3 -4
- metadata +144 -864
- data/.travis.yml +0 -45
- data/lib/twilio-ruby/rest/fax/v1/fax.rb +0 -536
- data/lib/twilio-ruby/rest/fax/v1.rb +0 -44
- data/lib/twilio-ruby/rest/preview/bulk_exports/export/export_custom_job.rb +0 -275
- data/lib/twilio-ruby/rest/preview/bulk_exports/export/job.rb +0 -249
- data/lib/twilio-ruby/rest/preview/bulk_exports/export.rb +0 -251
- data/lib/twilio-ruby/rest/preview/bulk_exports/export_configuration.rb +0 -234
- data/lib/twilio-ruby/rest/preview/bulk_exports.rb +0 -60
- data/lib/twilio-ruby/rest/preview/trusted_comms/branded_channel/channel.rb +0 -165
- data/lib/twilio-ruby/rest/preview/trusted_comms/current_call.rb +0 -277
- data/lib/twilio-ruby/rest/preview/trusted_comms.rb +0 -64
- data/spec/framework/request_spec.rb +0 -36
- data/spec/framework/serialize_spec.rb +0 -80
- data/spec/framework/version_spec.rb +0 -219
- data/spec/holodeck/holodeck.rb +0 -66
- data/spec/holodeck/hologram.rb +0 -4
- data/spec/http/http_client_spec.rb +0 -122
- data/spec/integration/accounts/v1/auth_token_promotion_spec.rb +0 -44
- data/spec/integration/accounts/v1/credential/aws_spec.rb +0 -222
- data/spec/integration/accounts/v1/credential/public_key_spec.rb +0 -222
- data/spec/integration/accounts/v1/credential_spec.rb +0 -12
- data/spec/integration/accounts/v1/secondary_auth_token_spec.rb +0 -69
- data/spec/integration/api/v2010/account/address/dependent_phone_number_spec.rb +0 -106
- data/spec/integration/api/v2010/account/address_spec.rb +0 -269
- data/spec/integration/api/v2010/account/application_spec.rb +0 -274
- data/spec/integration/api/v2010/account/authorized_connect_app_spec.rb +0 -137
- data/spec/integration/api/v2010/account/available_phone_number/local_spec.rb +0 -102
- data/spec/integration/api/v2010/account/available_phone_number/machine_to_machine_spec.rb +0 -102
- data/spec/integration/api/v2010/account/available_phone_number/mobile_spec.rb +0 -101
- data/spec/integration/api/v2010/account/available_phone_number/national_spec.rb +0 -102
- data/spec/integration/api/v2010/account/available_phone_number/shared_cost_spec.rb +0 -102
- data/spec/integration/api/v2010/account/available_phone_number/toll_free_spec.rb +0 -101
- data/spec/integration/api/v2010/account/available_phone_number/voip_spec.rb +0 -102
- data/spec/integration/api/v2010/account/available_phone_number_spec.rb +0 -128
- data/spec/integration/api/v2010/account/balance_spec.rb +0 -44
- data/spec/integration/api/v2010/account/call/event_spec.rb +0 -102
- data/spec/integration/api/v2010/account/call/feedback_spec.rb +0 -138
- data/spec/integration/api/v2010/account/call/feedback_summary_spec.rb +0 -149
- data/spec/integration/api/v2010/account/call/notification_spec.rb +0 -143
- data/spec/integration/api/v2010/account/call/payment_spec.rb +0 -135
- data/spec/integration/api/v2010/account/call/recording_spec.rb +0 -287
- data/spec/integration/api/v2010/account/call_spec.rb +0 -660
- data/spec/integration/api/v2010/account/conference/participant_spec.rb +0 -768
- data/spec/integration/api/v2010/account/conference/recording_spec.rb +0 -234
- data/spec/integration/api/v2010/account/conference_spec.rb +0 -458
- data/spec/integration/api/v2010/account/connect_app_spec.rb +0 -197
- data/spec/integration/api/v2010/account/incoming_phone_number/assigned_add_on/assigned_add_on_extension_spec.rb +0 -135
- data/spec/integration/api/v2010/account/incoming_phone_number/assigned_add_on_spec.rb +0 -220
- data/spec/integration/api/v2010/account/incoming_phone_number/local_spec.rb +0 -189
- data/spec/integration/api/v2010/account/incoming_phone_number/mobile_spec.rb +0 -189
- data/spec/integration/api/v2010/account/incoming_phone_number/toll_free_spec.rb +0 -189
- data/spec/integration/api/v2010/account/incoming_phone_number_spec.rb +0 -370
- data/spec/integration/api/v2010/account/key_spec.rb +0 -176
- data/spec/integration/api/v2010/account/message/feedback_spec.rb +0 -49
- data/spec/integration/api/v2010/account/message/media_spec.rb +0 -161
- data/spec/integration/api/v2010/account/message_spec.rb +0 -507
- data/spec/integration/api/v2010/account/new_key_spec.rb +0 -46
- data/spec/integration/api/v2010/account/new_signing_key_spec.rb +0 -46
- data/spec/integration/api/v2010/account/notification_spec.rb +0 -138
- data/spec/integration/api/v2010/account/outgoing_caller_id_spec.rb +0 -185
- data/spec/integration/api/v2010/account/queue/member_spec.rb +0 -208
- data/spec/integration/api/v2010/account/queue_spec.rb +0 -244
- data/spec/integration/api/v2010/account/recording/add_on_result/payload_spec.rb +0 -174
- data/spec/integration/api/v2010/account/recording/add_on_result_spec.rb +0 -165
- data/spec/integration/api/v2010/account/recording/transcription_spec.rb +0 -173
- data/spec/integration/api/v2010/account/recording_spec.rb +0 -184
- data/spec/integration/api/v2010/account/short_code_spec.rb +0 -179
- data/spec/integration/api/v2010/account/signing_key_spec.rb +0 -176
- data/spec/integration/api/v2010/account/sip/credential_list/credential_spec.rb +0 -252
- data/spec/integration/api/v2010/account/sip/credential_list_spec.rb +0 -241
- data/spec/integration/api/v2010/account/sip/domain/auth_types/auth_calls_mapping/auth_calls_credential_list_mapping_spec.rb +0 -217
- data/spec/integration/api/v2010/account/sip/domain/auth_types/auth_calls_mapping/auth_calls_ip_access_control_list_mapping_spec.rb +0 -217
- data/spec/integration/api/v2010/account/sip/domain/auth_types/auth_calls_mapping_spec.rb +0 -12
- data/spec/integration/api/v2010/account/sip/domain/auth_types/auth_registrations_mapping/auth_registrations_credential_list_mapping_spec.rb +0 -217
- data/spec/integration/api/v2010/account/sip/domain/auth_types/auth_registrations_mapping_spec.rb +0 -12
- data/spec/integration/api/v2010/account/sip/domain/auth_types_spec.rb +0 -12
- data/spec/integration/api/v2010/account/sip/domain/credential_list_mapping_spec.rb +0 -207
- data/spec/integration/api/v2010/account/sip/domain/ip_access_control_list_mapping_spec.rb +0 -217
- data/spec/integration/api/v2010/account/sip/domain_spec.rb +0 -303
- data/spec/integration/api/v2010/account/sip/ip_access_control_list/ip_address_spec.rb +0 -254
- data/spec/integration/api/v2010/account/sip/ip_access_control_list_spec.rb +0 -251
- data/spec/integration/api/v2010/account/sip_spec.rb +0 -12
- data/spec/integration/api/v2010/account/token_spec.rb +0 -71
- data/spec/integration/api/v2010/account/transcription_spec.rb +0 -166
- data/spec/integration/api/v2010/account/usage/record/all_time_spec.rb +0 -113
- data/spec/integration/api/v2010/account/usage/record/daily_spec.rb +0 -113
- data/spec/integration/api/v2010/account/usage/record/last_month_spec.rb +0 -113
- data/spec/integration/api/v2010/account/usage/record/monthly_spec.rb +0 -113
- data/spec/integration/api/v2010/account/usage/record/this_month_spec.rb +0 -113
- data/spec/integration/api/v2010/account/usage/record/today_spec.rb +0 -113
- data/spec/integration/api/v2010/account/usage/record/yearly_spec.rb +0 -113
- data/spec/integration/api/v2010/account/usage/record/yesterday_spec.rb +0 -113
- data/spec/integration/api/v2010/account/usage/record_spec.rb +0 -110
- data/spec/integration/api/v2010/account/usage/trigger_spec.rb +0 -281
- data/spec/integration/api/v2010/account/usage_spec.rb +0 -12
- data/spec/integration/api/v2010/account/validation_request_spec.rb +0 -48
- data/spec/integration/api/v2010/account_spec.rb +0 -327
- data/spec/integration/autopilot/v1/assistant/defaults_spec.rb +0 -79
- data/spec/integration/autopilot/v1/assistant/dialogue_spec.rb +0 -46
- data/spec/integration/autopilot/v1/assistant/field_type/field_value_spec.rb +0 -207
- data/spec/integration/autopilot/v1/assistant/field_type_spec.rb +0 -242
- data/spec/integration/autopilot/v1/assistant/model_build_spec.rb +0 -236
- data/spec/integration/autopilot/v1/assistant/query_spec.rb +0 -290
- data/spec/integration/autopilot/v1/assistant/style_sheet_spec.rb +0 -79
- data/spec/integration/autopilot/v1/assistant/task/field_spec.rb +0 -204
- data/spec/integration/autopilot/v1/assistant/task/sample_spec.rb +0 -249
- data/spec/integration/autopilot/v1/assistant/task/task_actions_spec.rb +0 -85
- data/spec/integration/autopilot/v1/assistant/task/task_statistics_spec.rb +0 -49
- data/spec/integration/autopilot/v1/assistant/task_spec.rb +0 -258
- data/spec/integration/autopilot/v1/assistant/webhook_spec.rb +0 -242
- data/spec/integration/autopilot/v1/assistant_spec.rb +0 -277
- data/spec/integration/autopilot/v1/restore_assistant_spec.rb +0 -53
- data/spec/integration/bulkexports/v1/export/day_spec.rb +0 -115
- data/spec/integration/bulkexports/v1/export/export_custom_job_spec.rb +0 -129
- data/spec/integration/bulkexports/v1/export/job_spec.rb +0 -78
- data/spec/integration/bulkexports/v1/export_configuration_spec.rb +0 -77
- data/spec/integration/bulkexports/v1/export_spec.rb +0 -44
- data/spec/integration/chat/v1/credential_spec.rb +0 -219
- data/spec/integration/chat/v1/service/channel/invite_spec.rb +0 -207
- data/spec/integration/chat/v1/service/channel/member_spec.rb +0 -280
- data/spec/integration/chat/v1/service/channel/message_spec.rb +0 -290
- data/spec/integration/chat/v1/service/channel_spec.rb +0 -272
- data/spec/integration/chat/v1/service/role_spec.rb +0 -260
- data/spec/integration/chat/v1/service/user/user_channel_spec.rb +0 -93
- data/spec/integration/chat/v1/service/user_spec.rb +0 -262
- data/spec/integration/chat/v1/service_spec.rb +0 -295
- data/spec/integration/chat/v2/credential_spec.rb +0 -219
- data/spec/integration/chat/v2/service/binding_spec.rb +0 -174
- data/spec/integration/chat/v2/service/channel/invite_spec.rb +0 -207
- data/spec/integration/chat/v2/service/channel/member_spec.rb +0 -263
- data/spec/integration/chat/v2/service/channel/message_spec.rb +0 -406
- data/spec/integration/chat/v2/service/channel/webhook_spec.rb +0 -303
- data/spec/integration/chat/v2/service/channel_spec.rb +0 -282
- data/spec/integration/chat/v2/service/role_spec.rb +0 -260
- data/spec/integration/chat/v2/service/user/user_binding_spec.rb +0 -177
- data/spec/integration/chat/v2/service/user/user_channel_spec.rb +0 -247
- data/spec/integration/chat/v2/service/user_spec.rb +0 -270
- data/spec/integration/chat/v2/service_spec.rb +0 -350
- data/spec/integration/conversations/v1/configuration/webhook_spec.rb +0 -90
- data/spec/integration/conversations/v1/configuration_spec.rb +0 -87
- data/spec/integration/conversations/v1/conversation/message/delivery_receipt_spec.rb +0 -136
- data/spec/integration/conversations/v1/conversation/message_spec.rb +0 -409
- data/spec/integration/conversations/v1/conversation/participant_spec.rb +0 -402
- data/spec/integration/conversations/v1/conversation/webhook_spec.rb +0 -282
- data/spec/integration/conversations/v1/conversation_spec.rb +0 -278
- data/spec/integration/conversations/v1/credential_spec.rb +0 -219
- data/spec/integration/conversations/v1/role_spec.rb +0 -249
- data/spec/integration/conversations/v1/service/binding_spec.rb +0 -166
- data/spec/integration/conversations/v1/service/configuration/notification_spec.rb +0 -115
- data/spec/integration/conversations/v1/service/configuration_spec.rb +0 -89
- data/spec/integration/conversations/v1/service/conversation/message/delivery_receipt_spec.rb +0 -144
- data/spec/integration/conversations/v1/service/conversation/message_spec.rb +0 -429
- data/spec/integration/conversations/v1/service/conversation/participant_spec.rb +0 -427
- data/spec/integration/conversations/v1/service/conversation/webhook_spec.rb +0 -299
- data/spec/integration/conversations/v1/service/conversation_spec.rb +0 -289
- data/spec/integration/conversations/v1/service/role_spec.rb +0 -260
- data/spec/integration/conversations/v1/service/user_spec.rb +0 -241
- data/spec/integration/conversations/v1/service_spec.rb +0 -174
- data/spec/integration/conversations/v1/user_spec.rb +0 -231
- data/spec/integration/events/v1/event_type_spec.rb +0 -133
- data/spec/integration/events/v1/schema/schema_version_spec.rb +0 -126
- data/spec/integration/events/v1/schema_spec.rb +0 -46
- data/spec/integration/events/v1/sink/sink_test_spec.rb +0 -42
- data/spec/integration/events/v1/sink/sink_validate_spec.rb +0 -44
- data/spec/integration/events/v1/sink_spec.rb +0 -231
- data/spec/integration/events/v1/subscription/subscribed_event_spec.rb +0 -91
- data/spec/integration/events/v1/subscription_spec.rb +0 -292
- data/spec/integration/fax/v1/fax/fax_media_spec.rb +0 -125
- data/spec/integration/fax/v1/fax_spec.rb +0 -267
- data/spec/integration/flex_api/v1/channel_spec.rb +0 -188
- data/spec/integration/flex_api/v1/configuration_spec.rb +0 -554
- data/spec/integration/flex_api/v1/flex_flow_spec.rb +0 -259
- data/spec/integration/flex_api/v1/web_channel_spec.rb +0 -216
- data/spec/integration/insights/v1/call/event_spec.rb +0 -166
- data/spec/integration/insights/v1/call/metric_spec.rb +0 -154
- data/spec/integration/insights/v1/call/summary_spec.rb +0 -64
- data/spec/integration/insights/v1/call_spec.rb +0 -46
- data/spec/integration/insights/v1/room/participant_spec.rb +0 -147
- data/spec/integration/insights/v1/room_spec.rb +0 -164
- data/spec/integration/ip_messaging/v1/credential_spec.rb +0 -219
- data/spec/integration/ip_messaging/v1/service/channel/invite_spec.rb +0 -207
- data/spec/integration/ip_messaging/v1/service/channel/member_spec.rb +0 -280
- data/spec/integration/ip_messaging/v1/service/channel/message_spec.rb +0 -290
- data/spec/integration/ip_messaging/v1/service/channel_spec.rb +0 -272
- data/spec/integration/ip_messaging/v1/service/role_spec.rb +0 -260
- data/spec/integration/ip_messaging/v1/service/user/user_channel_spec.rb +0 -93
- data/spec/integration/ip_messaging/v1/service/user_spec.rb +0 -262
- data/spec/integration/ip_messaging/v1/service_spec.rb +0 -295
- data/spec/integration/ip_messaging/v2/credential_spec.rb +0 -219
- data/spec/integration/ip_messaging/v2/service/binding_spec.rb +0 -174
- data/spec/integration/ip_messaging/v2/service/channel/invite_spec.rb +0 -207
- data/spec/integration/ip_messaging/v2/service/channel/member_spec.rb +0 -263
- data/spec/integration/ip_messaging/v2/service/channel/message_spec.rb +0 -406
- data/spec/integration/ip_messaging/v2/service/channel/webhook_spec.rb +0 -303
- data/spec/integration/ip_messaging/v2/service/channel_spec.rb +0 -282
- data/spec/integration/ip_messaging/v2/service/role_spec.rb +0 -260
- data/spec/integration/ip_messaging/v2/service/user/user_binding_spec.rb +0 -177
- data/spec/integration/ip_messaging/v2/service/user/user_channel_spec.rb +0 -247
- data/spec/integration/ip_messaging/v2/service/user_spec.rb +0 -270
- data/spec/integration/ip_messaging/v2/service_spec.rb +0 -350
- data/spec/integration/lookups/v1/phone_number_spec.rb +0 -336
- data/spec/integration/messaging/v1/deactivation_spec.rb +0 -40
- data/spec/integration/messaging/v1/service/alpha_sender_spec.rb +0 -173
- data/spec/integration/messaging/v1/service/phone_number_spec.rb +0 -198
- data/spec/integration/messaging/v1/service/short_code_spec.rb +0 -176
- data/spec/integration/messaging/v1/service_spec.rb +0 -267
- data/spec/integration/monitor/v1/alert_spec.rb +0 -138
- data/spec/integration/monitor/v1/event_spec.rb +0 -148
- data/spec/integration/notify/v1/credential_spec.rb +0 -219
- data/spec/integration/notify/v1/service/binding_spec.rb +0 -222
- data/spec/integration/notify/v1/service/notification_spec.rb +0 -98
- data/spec/integration/notify/v1/service_spec.rb +0 -289
- data/spec/integration/numbers/v2/regulatory_compliance/bundle/evaluation_spec.rb +0 -620
- data/spec/integration/numbers/v2/regulatory_compliance/bundle/item_assignment_spec.rb +0 -195
- data/spec/integration/numbers/v2/regulatory_compliance/bundle_spec.rb +0 -258
- data/spec/integration/numbers/v2/regulatory_compliance/end_user_spec.rb +0 -238
- data/spec/integration/numbers/v2/regulatory_compliance/end_user_type_spec.rb +0 -141
- data/spec/integration/numbers/v2/regulatory_compliance/regulation_spec.rb +0 -181
- data/spec/integration/numbers/v2/regulatory_compliance/supporting_document_spec.rb +0 -250
- data/spec/integration/numbers/v2/regulatory_compliance/supporting_document_type_spec.rb +0 -131
- data/spec/integration/numbers/v2/regulatory_compliance_spec.rb +0 -12
- data/spec/integration/preview/bulk_exports/export/day_spec.rb +0 -115
- data/spec/integration/preview/bulk_exports/export/export_custom_job_spec.rb +0 -129
- data/spec/integration/preview/bulk_exports/export/job_spec.rb +0 -78
- data/spec/integration/preview/bulk_exports/export_configuration_spec.rb +0 -77
- data/spec/integration/preview/bulk_exports/export_spec.rb +0 -44
- data/spec/integration/preview/deployed_devices/fleet/certificate_spec.rb +0 -234
- data/spec/integration/preview/deployed_devices/fleet/deployment_spec.rb +0 -228
- data/spec/integration/preview/deployed_devices/fleet/device_spec.rb +0 -244
- data/spec/integration/preview/deployed_devices/fleet/key_spec.rb +0 -232
- data/spec/integration/preview/deployed_devices/fleet_spec.rb +0 -241
- data/spec/integration/preview/hosted_numbers/authorization_document/dependent_hosted_number_order_spec.rb +0 -110
- data/spec/integration/preview/hosted_numbers/authorization_document_spec.rb +0 -224
- data/spec/integration/preview/hosted_numbers/hosted_number_order_spec.rb +0 -389
- data/spec/integration/preview/marketplace/available_add_on/available_add_on_extension_spec.rb +0 -121
- data/spec/integration/preview/marketplace/available_add_on_spec.rb +0 -142
- data/spec/integration/preview/marketplace/installed_add_on/installed_add_on_extension_spec.rb +0 -162
- data/spec/integration/preview/marketplace/installed_add_on_spec.rb +0 -250
- data/spec/integration/preview/sync/service/document/document_permission_spec.rb +0 -201
- data/spec/integration/preview/sync/service/document_spec.rb +0 -254
- data/spec/integration/preview/sync/service/sync_list/sync_list_item_spec.rb +0 -255
- data/spec/integration/preview/sync/service/sync_list/sync_list_permission_spec.rb +0 -201
- data/spec/integration/preview/sync/service/sync_list_spec.rb +0 -205
- data/spec/integration/preview/sync/service/sync_map/sync_map_item_spec.rb +0 -255
- data/spec/integration/preview/sync/service/sync_map/sync_map_permission_spec.rb +0 -201
- data/spec/integration/preview/sync/service/sync_map_spec.rb +0 -205
- data/spec/integration/preview/sync/service_spec.rb +0 -241
- data/spec/integration/preview/trusted_comms/branded_channel/channel_spec.rb +0 -50
- data/spec/integration/preview/trusted_comms/branded_channel_spec.rb +0 -47
- data/spec/integration/preview/trusted_comms/brands_information_spec.rb +0 -45
- data/spec/integration/preview/trusted_comms/cps_spec.rb +0 -44
- data/spec/integration/preview/trusted_comms/current_call_spec.rb +0 -58
- data/spec/integration/preview/understand/assistant/assistant_fallback_actions_spec.rb +0 -79
- data/spec/integration/preview/understand/assistant/assistant_initiation_actions_spec.rb +0 -79
- data/spec/integration/preview/understand/assistant/dialogue_spec.rb +0 -46
- data/spec/integration/preview/understand/assistant/field_type/field_value_spec.rb +0 -207
- data/spec/integration/preview/understand/assistant/field_type_spec.rb +0 -242
- data/spec/integration/preview/understand/assistant/model_build_spec.rb +0 -236
- data/spec/integration/preview/understand/assistant/query_spec.rb +0 -302
- data/spec/integration/preview/understand/assistant/style_sheet_spec.rb +0 -79
- data/spec/integration/preview/understand/assistant/task/field_spec.rb +0 -204
- data/spec/integration/preview/understand/assistant/task/sample_spec.rb +0 -249
- data/spec/integration/preview/understand/assistant/task/task_actions_spec.rb +0 -85
- data/spec/integration/preview/understand/assistant/task/task_statistics_spec.rb +0 -49
- data/spec/integration/preview/understand/assistant/task_spec.rb +0 -258
- data/spec/integration/preview/understand/assistant_spec.rb +0 -269
- data/spec/integration/preview/wireless/command_spec.rb +0 -167
- data/spec/integration/preview/wireless/rate_plan_spec.rb +0 -257
- data/spec/integration/preview/wireless/sim/usage_spec.rb +0 -50
- data/spec/integration/preview/wireless/sim_spec.rb +0 -207
- data/spec/integration/pricing/v1/messaging/country_spec.rb +0 -137
- data/spec/integration/pricing/v1/messaging_spec.rb +0 -12
- data/spec/integration/pricing/v1/phone_number/country_spec.rb +0 -128
- data/spec/integration/pricing/v1/phone_number_spec.rb +0 -12
- data/spec/integration/pricing/v1/voice/country_spec.rb +0 -138
- data/spec/integration/pricing/v1/voice/number_spec.rb +0 -55
- data/spec/integration/pricing/v1/voice_spec.rb +0 -12
- data/spec/integration/pricing/v2/voice/country_spec.rb +0 -179
- data/spec/integration/pricing/v2/voice/number_spec.rb +0 -61
- data/spec/integration/pricing/v2/voice_spec.rb +0 -12
- data/spec/integration/proxy/v1/service/phone_number_spec.rb +0 -231
- data/spec/integration/proxy/v1/service/session/interaction_spec.rb +0 -133
- data/spec/integration/proxy/v1/service/session/participant/message_interaction_spec.rb +0 -163
- data/spec/integration/proxy/v1/service/session/participant_spec.rb +0 -240
- data/spec/integration/proxy/v1/service/session_spec.rb +0 -225
- data/spec/integration/proxy/v1/service/short_code_spec.rb +0 -225
- data/spec/integration/proxy/v1/service_spec.rb +0 -214
- data/spec/integration/serverless/v1/service/asset/asset_version_spec.rb +0 -93
- data/spec/integration/serverless/v1/service/asset_spec.rb +0 -202
- data/spec/integration/serverless/v1/service/build/build_status_spec.rb +0 -48
- data/spec/integration/serverless/v1/service/build_spec.rb +0 -214
- data/spec/integration/serverless/v1/service/environment/deployment_spec.rb +0 -133
- data/spec/integration/serverless/v1/service/environment/log_spec.rb +0 -97
- data/spec/integration/serverless/v1/service/environment/variable_spec.rb +0 -207
- data/spec/integration/serverless/v1/service/environment_spec.rb +0 -170
- data/spec/integration/serverless/v1/service/function/function_version/function_version_content_spec.rb +0 -51
- data/spec/integration/serverless/v1/service/function/function_version_spec.rb +0 -96
- data/spec/integration/serverless/v1/service/function_spec.rb +0 -202
- data/spec/integration/serverless/v1/service_spec.rb +0 -205
- data/spec/integration/studio/v1/flow/engagement/engagement_context_spec.rb +0 -50
- data/spec/integration/studio/v1/flow/engagement/step/step_context_spec.rb +0 -53
- data/spec/integration/studio/v1/flow/engagement/step_spec.rb +0 -99
- data/spec/integration/studio/v1/flow/engagement_spec.rb +0 -168
- data/spec/integration/studio/v1/flow/execution/execution_context_spec.rb +0 -50
- data/spec/integration/studio/v1/flow/execution/execution_step/execution_step_context_spec.rb +0 -53
- data/spec/integration/studio/v1/flow/execution/execution_step_spec.rb +0 -100
- data/spec/integration/studio/v1/flow/execution_spec.rb +0 -214
- data/spec/integration/studio/v1/flow_spec.rb +0 -114
- data/spec/integration/studio/v2/flow/execution/execution_context_spec.rb +0 -50
- data/spec/integration/studio/v2/flow/execution/execution_step/execution_step_context_spec.rb +0 -53
- data/spec/integration/studio/v2/flow/execution/execution_step_spec.rb +0 -100
- data/spec/integration/studio/v2/flow/execution_spec.rb +0 -211
- data/spec/integration/studio/v2/flow/flow_revision_spec.rb +0 -110
- data/spec/integration/studio/v2/flow/test_user_spec.rb +0 -85
- data/spec/integration/studio/v2/flow_spec.rb +0 -251
- data/spec/integration/studio/v2/flow_validate_spec.rb +0 -46
- data/spec/integration/supersim/v1/command_spec.rb +0 -184
- data/spec/integration/supersim/v1/fleet_spec.rb +0 -214
- data/spec/integration/supersim/v1/network_access_profile/network_access_profile_network_spec.rb +0 -176
- data/spec/integration/supersim/v1/network_access_profile_spec.rb +0 -219
- data/spec/integration/supersim/v1/network_spec.rb +0 -137
- data/spec/integration/supersim/v1/sim_spec.rb +0 -323
- data/spec/integration/supersim/v1/usage_record_spec.rb +0 -647
- data/spec/integration/sync/v1/service/document/document_permission_spec.rb +0 -201
- data/spec/integration/sync/v1/service/document_spec.rb +0 -256
- data/spec/integration/sync/v1/service/sync_list/sync_list_item_spec.rb +0 -257
- data/spec/integration/sync/v1/service/sync_list/sync_list_permission_spec.rb +0 -201
- data/spec/integration/sync/v1/service/sync_list_spec.rb +0 -252
- data/spec/integration/sync/v1/service/sync_map/sync_map_item_spec.rb +0 -257
- data/spec/integration/sync/v1/service/sync_map/sync_map_permission_spec.rb +0 -201
- data/spec/integration/sync/v1/service/sync_map_spec.rb +0 -252
- data/spec/integration/sync/v1/service/sync_stream/stream_message_spec.rb +0 -47
- data/spec/integration/sync/v1/service/sync_stream_spec.rb +0 -244
- data/spec/integration/sync/v1/service_spec.rb +0 -261
- data/spec/integration/taskrouter/v1/workspace/activity_spec.rb +0 -232
- data/spec/integration/taskrouter/v1/workspace/event_spec.rb +0 -163
- data/spec/integration/taskrouter/v1/workspace/task/reservation_spec.rb +0 -222
- data/spec/integration/taskrouter/v1/workspace/task_channel_spec.rb +0 -312
- data/spec/integration/taskrouter/v1/workspace/task_queue/task_queue_cumulative_statistics_spec.rb +0 -101
- data/spec/integration/taskrouter/v1/workspace/task_queue/task_queue_real_time_statistics_spec.rb +0 -83
- data/spec/integration/taskrouter/v1/workspace/task_queue/task_queue_statistics_spec.rb +0 -107
- data/spec/integration/taskrouter/v1/workspace/task_queue/task_queues_statistics_spec.rb +0 -145
- data/spec/integration/taskrouter/v1/workspace/task_queue_spec.rb +0 -290
- data/spec/integration/taskrouter/v1/workspace/task_spec.rb +0 -325
- data/spec/integration/taskrouter/v1/workspace/worker/reservation_spec.rb +0 -191
- data/spec/integration/taskrouter/v1/workspace/worker/worker_channel_spec.rb +0 -185
- data/spec/integration/taskrouter/v1/workspace/worker/worker_statistics_spec.rb +0 -91
- data/spec/integration/taskrouter/v1/workspace/worker/workers_cumulative_statistics_spec.rb +0 -88
- data/spec/integration/taskrouter/v1/workspace/worker/workers_real_time_statistics_spec.rb +0 -69
- data/spec/integration/taskrouter/v1/workspace/worker/workers_statistics_spec.rb +0 -115
- data/spec/integration/taskrouter/v1/workspace/worker_spec.rb +0 -290
- data/spec/integration/taskrouter/v1/workspace/workflow/workflow_cumulative_statistics_spec.rb +0 -96
- data/spec/integration/taskrouter/v1/workspace/workflow/workflow_real_time_statistics_spec.rb +0 -57
- data/spec/integration/taskrouter/v1/workspace/workflow/workflow_statistics_spec.rb +0 -70
- data/spec/integration/taskrouter/v1/workspace/workflow_spec.rb +0 -266
- data/spec/integration/taskrouter/v1/workspace/workspace_cumulative_statistics_spec.rb +0 -93
- data/spec/integration/taskrouter/v1/workspace/workspace_real_time_statistics_spec.rb +0 -72
- data/spec/integration/taskrouter/v1/workspace/workspace_statistics_spec.rb +0 -104
- data/spec/integration/taskrouter/v1/workspace_spec.rb +0 -291
- data/spec/integration/trunking/v1/trunk/credential_list_spec.rb +0 -189
- data/spec/integration/trunking/v1/trunk/ip_access_control_list_spec.rb +0 -189
- data/spec/integration/trunking/v1/trunk/origination_url_spec.rb +0 -248
- data/spec/integration/trunking/v1/trunk/phone_number_spec.rb +0 -264
- data/spec/integration/trunking/v1/trunk/recording_spec.rb +0 -75
- data/spec/integration/trunking/v1/trunk_spec.rb +0 -281
- data/spec/integration/verify/v2/form_spec.rb +0 -47
- data/spec/integration/verify/v2/service/access_token_spec.rb +0 -44
- data/spec/integration/verify/v2/service/entity/challenge_spec.rb +0 -288
- data/spec/integration/verify/v2/service/entity/factor_spec.rb +0 -277
- data/spec/integration/verify/v2/service/entity_spec.rb +0 -201
- data/spec/integration/verify/v2/service/messaging_configuration_spec.rb +0 -228
- data/spec/integration/verify/v2/service/rate_limit/bucket_spec.rb +0 -245
- data/spec/integration/verify/v2/service/rate_limit_spec.rb +0 -217
- data/spec/integration/verify/v2/service/verification_check_spec.rb +0 -80
- data/spec/integration/verify/v2/service/verification_spec.rb +0 -318
- data/spec/integration/verify/v2/service/webhook_spec.rb +0 -258
- data/spec/integration/verify/v2/service_spec.rb +0 -279
- data/spec/integration/video/v1/composition_hook_spec.rb +0 -407
- data/spec/integration/video/v1/composition_settings_spec.rb +0 -85
- data/spec/integration/video/v1/composition_spec.rb +0 -347
- data/spec/integration/video/v1/recording_settings_spec.rb +0 -85
- data/spec/integration/video/v1/recording_spec.rb +0 -176
- data/spec/integration/video/v1/room/recording_spec.rb +0 -185
- data/spec/integration/video/v1/room/room_participant/room_participant_published_track_spec.rb +0 -94
- data/spec/integration/video/v1/room/room_participant/room_participant_subscribe_rule_spec.rb +0 -103
- data/spec/integration/video/v1/room/room_participant/room_participant_subscribed_track_spec.rb +0 -95
- data/spec/integration/video/v1/room/room_participant_spec.rb +0 -187
- data/spec/integration/video/v1/room/room_recording_rule_spec.rb +0 -89
- data/spec/integration/video/v1/room_spec.rb +0 -301
- data/spec/integration/voice/v1/byoc_trunk_spec.rb +0 -245
- data/spec/integration/voice/v1/connection_policy/connection_policy_target_spec.rb +0 -242
- data/spec/integration/voice/v1/connection_policy_spec.rb +0 -221
- data/spec/integration/voice/v1/dialing_permissions/bulk_country_update_spec.rb +0 -45
- data/spec/integration/voice/v1/dialing_permissions/country/highrisk_special_prefix_spec.rb +0 -60
- data/spec/integration/voice/v1/dialing_permissions/country_spec.rb +0 -110
- data/spec/integration/voice/v1/dialing_permissions/settings_spec.rb +0 -75
- data/spec/integration/voice/v1/dialing_permissions_spec.rb +0 -12
- data/spec/integration/voice/v1/ip_record_spec.rb +0 -219
- data/spec/integration/voice/v1/source_ip_mapping_spec.rb +0 -216
- data/spec/integration/wireless/v1/command_spec.rb +0 -286
- data/spec/integration/wireless/v1/rate_plan_spec.rb +0 -277
- data/spec/integration/wireless/v1/sim/data_session_spec.rb +0 -88
- data/spec/integration/wireless/v1/sim/usage_record_spec.rb +0 -114
- data/spec/integration/wireless/v1/sim_spec.rb +0 -325
- data/spec/integration/wireless/v1/usage_record_spec.rb +0 -110
- data/spec/jwt/access_token_spec.rb +0 -159
- data/spec/jwt/client_capability_spec.rb +0 -104
- data/spec/jwt/task_router_spec.rb +0 -172
- data/spec/rack/twilio_webhook_authentication_spec.rb +0 -106
- data/spec/rest/client_spec.rb +0 -255
- data/spec/security/request_validator_spec.rb +0 -125
- data/spec/spec_helper.rb +0 -38
- data/spec/support/fakeweb.rb +0 -2
- data/spec/twilio_spec.rb +0 -17
- data/spec/twiml/messaging_response_spec.rb +0 -235
- data/spec/twiml/voice_response_spec.rb +0 -847
- data/spec/util/configuration_spec.rb +0 -33
- data/spec/util/url_encode_spec.rb +0 -12
- /data/lib/twilio-ruby/framework/{domain.rb → rest/domain.rb} +0 -0
- /data/lib/twilio-ruby/framework/{error.rb → rest/error.rb} +0 -0
- /data/lib/twilio-ruby/framework/{helper.rb → rest/helper.rb} +0 -0
- /data/lib/twilio-ruby/framework/{obsolete_client.rb → rest/obsolete_client.rb} +0 -0
- /data/lib/twilio-ruby/framework/{page.rb → rest/page.rb} +0 -0
- /data/lib/twilio-ruby/framework/{resource.rb → rest/resource.rb} +0 -0
- /data/lib/twilio-ruby/framework/{version.rb → rest/version.rb} +0 -0
data/CONTRIBUTING.md
CHANGED
|
@@ -21,7 +21,7 @@ it can be.
|
|
|
21
21
|
## <a name="question"></a> Got an API/Product Question or Problem?
|
|
22
22
|
|
|
23
23
|
If you have questions about how to use `twilio-ruby`, please see our
|
|
24
|
-
[docs]
|
|
24
|
+
[docs](./README.md), and if you don't find the answer there, please contact
|
|
25
25
|
[help@twilio.com](mailto:help@twilio.com) with any issues you have.
|
|
26
26
|
|
|
27
27
|
## <a name="issue"></a> Found an Issue?
|
|
@@ -68,10 +68,6 @@ you're working on.
|
|
|
68
68
|
For large fixes, please build and test the documentation before submitting the
|
|
69
69
|
PR to be sure you haven't accidentally introduced layout or formatting issues.
|
|
70
70
|
|
|
71
|
-
If you want to help improve the docs at
|
|
72
|
-
[https://www.twilio.com/docs/libraries/ruby][docs-link], please contact
|
|
73
|
-
[help@twilio.com](mailto:help@twilio.com).
|
|
74
|
-
|
|
75
71
|
## <a name="submit"></a> Submission Guidelines
|
|
76
72
|
|
|
77
73
|
### Submitting an Issue
|
|
@@ -155,7 +151,5 @@ you are working:
|
|
|
155
151
|
* All features or bug fixes **must be tested** by one or more tests.
|
|
156
152
|
* All classes and methods **must be documented**.
|
|
157
153
|
|
|
158
|
-
|
|
159
|
-
[docs-link]: https://www.twilio.com/docs/libraries/ruby
|
|
160
154
|
[issue-link]: https://github.com/twilio/twilio-ruby/issues/new
|
|
161
155
|
[github]: https://github.com/twilio/twilio-ruby
|
data/Gemfile
CHANGED
data/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (C)
|
|
3
|
+
Copyright (C) 2023, Twilio, Inc. <help@twilio.com>
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
6
6
|
this software and associated documentation files (the "Software"), to deal in
|
data/Makefile
CHANGED
|
@@ -1,33 +1,34 @@
|
|
|
1
|
-
.PHONY: githooks install test lint docs docker-build docker-push
|
|
1
|
+
.PHONY: githooks install test test-docker lint docs docker-build docker-push
|
|
2
2
|
|
|
3
3
|
githooks:
|
|
4
4
|
ln -sf ../../githooks/pre-commit .git/hooks/pre-commit
|
|
5
5
|
|
|
6
|
-
install:
|
|
6
|
+
install:
|
|
7
7
|
bundle install --with development; bundle exec rake install
|
|
8
8
|
|
|
9
|
-
test:
|
|
9
|
+
test:
|
|
10
10
|
bundle exec rake spec
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
test-docker:
|
|
13
|
+
docker build -t twilio/twilio-ruby .
|
|
14
|
+
docker run twilio/twilio-ruby bundle exec rake spec
|
|
14
15
|
|
|
15
16
|
docs:
|
|
16
|
-
yard doc --output-dir ./doc
|
|
17
|
+
bundle exec yard doc --output-dir ./doc
|
|
17
18
|
|
|
18
19
|
authors:
|
|
19
20
|
echo "Authors\n=======\n\nA huge thanks to all of our contributors:\n\n" > AUTHORS.md
|
|
20
21
|
git log --raw | grep "^Author: " | cut -d ' ' -f2- | cut -d '<' -f1 | sed 's/^/- /' | sort | uniq >> AUTHORS.md
|
|
21
22
|
|
|
22
23
|
API_DEFINITIONS_SHA=$(shell git log --oneline | grep Regenerated | head -n1 | cut -d ' ' -f 5)
|
|
24
|
+
CURRENT_TAG=$(shell expr "${GITHUB_TAG}" : ".*-rc.*" >/dev/null && echo "rc" || echo "latest")
|
|
23
25
|
docker-build:
|
|
24
26
|
docker build -t twilio/twilio-ruby .
|
|
25
|
-
docker tag twilio/twilio-ruby twilio/twilio-ruby:${
|
|
27
|
+
docker tag twilio/twilio-ruby twilio/twilio-ruby:${GITHUB_TAG}
|
|
26
28
|
docker tag twilio/twilio-ruby twilio/twilio-ruby:apidefs-${API_DEFINITIONS_SHA}
|
|
27
|
-
docker tag twilio/twilio-ruby twilio/twilio-ruby
|
|
29
|
+
docker tag twilio/twilio-ruby twilio/twilio-ruby:${CURRENT_TAG}
|
|
28
30
|
|
|
29
31
|
docker-push:
|
|
30
|
-
|
|
31
|
-
docker push twilio/twilio-ruby:${TRAVIS_TAG}
|
|
32
|
+
docker push twilio/twilio-ruby:${GITHUB_TAG}
|
|
32
33
|
docker push twilio/twilio-ruby:apidefs-${API_DEFINITIONS_SHA}
|
|
33
|
-
docker push twilio/twilio-ruby
|
|
34
|
+
docker push twilio/twilio-ruby:${CURRENT_TAG}
|
data/PULL_REQUEST_TEMPLATE.md
CHANGED
|
@@ -3,7 +3,7 @@ We appreciate the effort for this pull request but before that please make sure
|
|
|
3
3
|
|
|
4
4
|
Please format the PR title appropriately based on the type of change:
|
|
5
5
|
<type>[!]: <description>
|
|
6
|
-
Where <type> is one of: docs, chore, feat, fix, test.
|
|
6
|
+
Where <type> is one of: docs, chore, feat, fix, test, misc.
|
|
7
7
|
Add a '!' after the type for breaking changes (e.g. feat!: new breaking feature).
|
|
8
8
|
|
|
9
9
|
**All third-party contributors acknowledge that any contributions they provide will be made under the same open-source license that the open-source project is provided under.**
|
data/README.md
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
# twilio-ruby
|
|
2
2
|
|
|
3
|
-
[][github-actions]
|
|
4
4
|
[](https://rubygems.org/gems/twilio-ruby)
|
|
5
5
|
[](https://twil.io/learn-open-source)
|
|
6
6
|
|
|
7
|
-
**The default branch name for this repository has been changed to `main` as of 07/27/2020.**
|
|
8
|
-
|
|
9
7
|
## Documentation
|
|
10
8
|
|
|
11
9
|
The documentation for the Twilio API can be found [here][apidocs].
|
|
12
10
|
|
|
13
|
-
The
|
|
11
|
+
The individual releases [here][refdocs].
|
|
14
12
|
|
|
15
13
|
## Versions
|
|
16
14
|
|
|
@@ -20,10 +18,12 @@ The Ruby library documentation can be found [here][libdocs] and individual relea
|
|
|
20
18
|
|
|
21
19
|
This library supports the following Ruby implementations:
|
|
22
20
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
- Ruby 2.4
|
|
22
|
+
- Ruby 2.5
|
|
23
|
+
- Ruby 2.6
|
|
24
|
+
- Ruby 2.7
|
|
25
|
+
- Ruby 3.0
|
|
26
|
+
- Ruby 3.1
|
|
27
27
|
|
|
28
28
|
### Migrating from 4.x
|
|
29
29
|
|
|
@@ -34,13 +34,13 @@ This library supports the following Ruby implementations:
|
|
|
34
34
|
To install using [Bundler][bundler] grab the latest stable version:
|
|
35
35
|
|
|
36
36
|
```ruby
|
|
37
|
-
gem 'twilio-ruby', '~> 5.
|
|
37
|
+
gem 'twilio-ruby', '~> 5.77.0'
|
|
38
38
|
```
|
|
39
39
|
|
|
40
40
|
To manually install `twilio-ruby` via [Rubygems][rubygems] simply gem install:
|
|
41
41
|
|
|
42
42
|
```bash
|
|
43
|
-
gem install twilio-ruby -v 5.
|
|
43
|
+
gem install twilio-ruby -v 5.77.0
|
|
44
44
|
```
|
|
45
45
|
|
|
46
46
|
To build and install the development branch yourself from the latest source:
|
|
@@ -51,18 +51,47 @@ cd twilio-ruby
|
|
|
51
51
|
make install
|
|
52
52
|
```
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
> **Info**
|
|
55
|
+
> If the command line gives you an error message that says Permission Denied, try running the above commands with sudo.
|
|
56
|
+
>
|
|
57
|
+
> For example: `sudo gem install twilio-ruby`
|
|
58
|
+
|
|
59
|
+
### Test your installation
|
|
60
|
+
|
|
61
|
+
To make sure the installation was successful, try sending yourself an SMS message, like this:
|
|
62
|
+
|
|
63
|
+
```rb
|
|
64
|
+
require "twilio-ruby"
|
|
65
|
+
|
|
66
|
+
# Your Account SID and Auth Token from console.twilio.com
|
|
67
|
+
account_sid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
|
|
68
|
+
auth_token = "your_auth_token"
|
|
69
|
+
|
|
70
|
+
@client = Twilio::REST::Client.new account_sid, auth_token
|
|
71
|
+
message = @client.messages.create(
|
|
72
|
+
body: "Hello from Ruby",
|
|
73
|
+
to: "+12345678901", # Text this number
|
|
74
|
+
from: "+15005550006", # From a valid Twilio number
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
puts message.sid
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
> **Warning**
|
|
81
|
+
> It's okay to hardcode your credentials when testing locally, but you should use environment variables to keep them secret before committing any code or deploying to production. Check out [How to Set Environment Variables](https://www.twilio.com/blog/2017/01/how-to-set-environment-variables.html) for more information.
|
|
55
82
|
|
|
56
|
-
|
|
83
|
+
## Usage
|
|
84
|
+
|
|
85
|
+
### Authenticate the Client
|
|
57
86
|
|
|
58
87
|
```ruby
|
|
59
88
|
require 'twilio-ruby'
|
|
60
89
|
|
|
61
|
-
#
|
|
90
|
+
# Your Account SID and Auth Token from console.twilio.com
|
|
62
91
|
account_sid = 'ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
|
|
63
92
|
auth_token = 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'
|
|
64
93
|
|
|
65
|
-
#
|
|
94
|
+
# Initialize the Twilio Client with your credentials
|
|
66
95
|
@client = Twilio::REST::Client.new account_sid, auth_token
|
|
67
96
|
```
|
|
68
97
|
|
|
@@ -71,8 +100,9 @@ auth_token = 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'
|
|
|
71
100
|
```ruby
|
|
72
101
|
require 'twilio-ruby'
|
|
73
102
|
|
|
74
|
-
#
|
|
103
|
+
# Your Account SID from console.twilio.com
|
|
75
104
|
account_sid = 'ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
|
|
105
|
+
# API Key from twilio.com/console/project/api-keys
|
|
76
106
|
api_key_sid = 'zzzzzzzzzzzzzzzzzzzzzz'
|
|
77
107
|
api_key_secret = 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'
|
|
78
108
|
|
|
@@ -95,22 +125,6 @@ To take advantage of Twilio's [Global Infrastructure](https://www.twilio.com/doc
|
|
|
95
125
|
@client.edge = 'sydney'
|
|
96
126
|
```
|
|
97
127
|
|
|
98
|
-
### Enable Debug logging
|
|
99
|
-
|
|
100
|
-
In order to enable debug logging, pass in a 'logger' instance to the client with the level set to at least 'DEBUG'
|
|
101
|
-
|
|
102
|
-
```ruby
|
|
103
|
-
@client = Twilio::REST::Client.new account_sid, auth_token
|
|
104
|
-
myLogger = Logger.new(STDOUT)
|
|
105
|
-
myLogger.level = Logger::DEBUG
|
|
106
|
-
@client.logger = myLogger
|
|
107
|
-
|
|
108
|
-
@client = Twilio::REST::Client.new account_sid, auth_token
|
|
109
|
-
myLogger = Logger.new('my_log.log')
|
|
110
|
-
myLogger.level = Logger::DEBUG
|
|
111
|
-
@client.logger = myLogger
|
|
112
|
-
```
|
|
113
|
-
|
|
114
128
|
This will result in the `hostname` transforming from `api.twilio.com` to `api.sydney.au1.twilio.com`.
|
|
115
129
|
|
|
116
130
|
### Make a Call
|
|
@@ -147,19 +161,59 @@ message_sid = 'SMxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
|
|
|
147
161
|
@client.messages(message_sid).fetch
|
|
148
162
|
```
|
|
149
163
|
|
|
150
|
-
###
|
|
164
|
+
### Iterate through records
|
|
151
165
|
|
|
152
|
-
`
|
|
166
|
+
The library automatically handles paging for you. Collections, such as `calls` and `messages`, have `list` and stream methods that page under the hood. With both `list` and `stream`, you can specify the number of records you want to receive (`limit`) and the maximum size you want each page fetch to be (`page_size`). The library will then handle the task for you.
|
|
153
167
|
|
|
154
|
-
|
|
155
|
-
|
|
168
|
+
`list` eagerly fetches all records and returns them as a list, whereas `stream` returns an enumerator and lazily retrieves pages of records as you iterate over the collection. You can also page manually using the `page` method.
|
|
169
|
+
|
|
170
|
+
For more information about these methods, view the [auto-generated library docs](https://www.twilio.com/docs/libraries/reference/twilio-ruby).
|
|
171
|
+
|
|
172
|
+
```rb
|
|
173
|
+
require 'twilio-ruby'
|
|
174
|
+
|
|
175
|
+
account_sid = 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
|
|
176
|
+
auth_token = 'your_auth_token'
|
|
177
|
+
|
|
178
|
+
@client = Twilio::REST::Client.new(account_sid, auth_token)
|
|
179
|
+
|
|
180
|
+
@client.calls.list
|
|
181
|
+
.each do |call|
|
|
182
|
+
puts call.direction
|
|
183
|
+
end
|
|
156
184
|
```
|
|
157
185
|
|
|
158
|
-
|
|
186
|
+
### Enable Debug logging
|
|
159
187
|
|
|
160
|
-
|
|
188
|
+
In order to enable debug logging, pass in a 'logger' instance to the client with the level set to at least 'DEBUG'
|
|
161
189
|
|
|
162
190
|
```ruby
|
|
191
|
+
@client = Twilio::REST::Client.new account_sid, auth_token
|
|
192
|
+
myLogger = Logger.new(STDOUT)
|
|
193
|
+
myLogger.level = Logger::DEBUG
|
|
194
|
+
@client.logger = myLogger
|
|
195
|
+
|
|
196
|
+
@client = Twilio::REST::Client.new account_sid, auth_token
|
|
197
|
+
myLogger = Logger.new('my_log.log')
|
|
198
|
+
myLogger.level = Logger::DEBUG
|
|
199
|
+
@client.logger = myLogger
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### Handle Exceptions {#exceptions}
|
|
203
|
+
|
|
204
|
+
If the Twilio API returns a 400 or a 500 level HTTP response, the `twilio-ruby`
|
|
205
|
+
library will throw a `Twilio::REST::RestError`. 400-level errors are normal
|
|
206
|
+
during API operation (`“Invalid number”`, `“Cannot deliver SMS to that number”`,
|
|
207
|
+
for example) and should be handled appropriately.
|
|
208
|
+
|
|
209
|
+
```rb
|
|
210
|
+
require 'twilio-ruby'
|
|
211
|
+
|
|
212
|
+
account_sid = 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
|
|
213
|
+
auth_token = 'your_auth_token'
|
|
214
|
+
|
|
215
|
+
@client = Twilio::REST::Client.new account_sid, auth_token
|
|
216
|
+
|
|
163
217
|
begin
|
|
164
218
|
messages = @client.messages.list(limit: 20)
|
|
165
219
|
rescue Twilio::REST::RestError => e
|
|
@@ -167,9 +221,51 @@ rescue Twilio::REST::RestError => e
|
|
|
167
221
|
end
|
|
168
222
|
```
|
|
169
223
|
|
|
170
|
-
|
|
224
|
+
### Debug API requests
|
|
225
|
+
|
|
226
|
+
To assist with debugging, the library allows you to access the underlying request and response objects. This capability is built into the default HTTP client that ships with the library.
|
|
227
|
+
|
|
228
|
+
For example, you can retrieve the status code of the last response like so:
|
|
229
|
+
|
|
230
|
+
```ruby
|
|
231
|
+
require 'rubygems' # Not necessary with ruby 1.9 but included for completeness
|
|
232
|
+
require 'twilio-ruby'
|
|
233
|
+
|
|
234
|
+
# Your Account SID and Auth Token from console.twilio.com
|
|
235
|
+
account_sid = 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
|
|
236
|
+
auth_token = 'your_auth_token'
|
|
237
|
+
|
|
238
|
+
@client = Twilio::REST::Client.new(account_sid, auth_token)
|
|
239
|
+
|
|
240
|
+
@message = @client.messages.create(
|
|
241
|
+
to: '+14158675309',
|
|
242
|
+
from: '+14258675310',
|
|
243
|
+
body: 'Ahoy!'
|
|
244
|
+
)
|
|
245
|
+
|
|
246
|
+
# Retrieve the status code of the last response from the HTTP client
|
|
247
|
+
puts @client.http_client.last_response.status_code
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### Customize your HTTP Client
|
|
251
|
+
|
|
252
|
+
`twilio-ruby` uses [Faraday][faraday] to make HTTP requests. You can tell `Twilio::REST::Client` to use any of the Faraday adapters like so:
|
|
253
|
+
|
|
254
|
+
```ruby
|
|
255
|
+
@client.http_client.adapter = :typhoeus
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
To use a custom HTTP client with this helper library, please see the [advanced example of how to do so](./advanced-examples/custom-http-client.md).
|
|
259
|
+
|
|
260
|
+
To apply customizations such as middleware, you can use the `configure_connection` method like so:
|
|
261
|
+
|
|
262
|
+
```ruby
|
|
263
|
+
@client.http_client.configure_connection do |faraday|
|
|
264
|
+
faraday.use SomeMiddleware
|
|
265
|
+
end
|
|
266
|
+
```
|
|
171
267
|
|
|
172
|
-
###
|
|
268
|
+
### Get started With Client Capability Tokens
|
|
173
269
|
|
|
174
270
|
If you just need to generate a Capability Token for use with Twilio Client, you can do this:
|
|
175
271
|
|
|
@@ -197,7 +293,7 @@ capability.add_scope(incoming_scope)
|
|
|
197
293
|
|
|
198
294
|
There is a slightly more detailed document in the [Capability][capability] section of the wiki.
|
|
199
295
|
|
|
200
|
-
###
|
|
296
|
+
### Generate TwiML
|
|
201
297
|
|
|
202
298
|
To control phone calls, your application needs to output [TwiML][twiml].
|
|
203
299
|
|
|
@@ -241,14 +337,13 @@ If you've instead found a bug in the library or would like new features added, g
|
|
|
241
337
|
|
|
242
338
|
[apidocs]: https://www.twilio.com/docs/api
|
|
243
339
|
[twiml]: https://www.twilio.com/docs/api/twiml
|
|
244
|
-
[libdocs]: https://www.twilio.com/docs/libraries/ruby
|
|
245
340
|
[refdocs]: https://twilio.github.io/twilio-ruby
|
|
246
341
|
[capability]: https://github.com/twilio/twilio-ruby/wiki/JWT-Tokens
|
|
247
342
|
[wiki]: https://github.com/twilio/twilio-ruby/wiki
|
|
248
343
|
[bundler]: https://bundler.io
|
|
249
344
|
[rubygems]: https://rubygems.org
|
|
250
345
|
[gem]: https://rubygems.org/gems/twilio
|
|
251
|
-
[
|
|
346
|
+
[github-actions]: https://github.com/twilio/twilio-ruby/actions/workflows/test-and-deploy.yml
|
|
252
347
|
[upgrade]: https://github.com/twilio/twilio-ruby/wiki/Ruby-Version-5.x-Upgrade-Guide
|
|
253
348
|
[issues]: https://github.com/twilio/twilio-ruby/issues
|
|
254
349
|
[faraday]: https://github.com/lostisland/faraday
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
# Custom HTTP Clients for the Twilio Ruby Helper Library
|
|
2
|
+
|
|
3
|
+
If you are working with the Twilio Ruby Helper Library, and you need to be able to modify the HTTP requests that the library makes to the Twilio servers, you’re in the right place. The most common need to alter the HTTP request is to connect and authenticate with an enterprise’s proxy server. We’ll provide sample code that you can drop right into your app to handle this use case.
|
|
4
|
+
|
|
5
|
+
Connect and authenticate with a proxy server
|
|
6
|
+
To connect and provide credentials to a proxy server that may be between your app and Twilio, you need a way to modify the HTTP requests that the Twilio helper library makes on your behalf to invoke the Twilio REST API.
|
|
7
|
+
|
|
8
|
+
The Twilio Ruby helper library uses the [Faraday](https://rubygems.org/gems/faraday) gem under the hood to make the HTTP requests. The following example shows a typical request, without a custom `http_client`:
|
|
9
|
+
|
|
10
|
+
```rb
|
|
11
|
+
@client = Twilio::REST::Client.new(account_sid, auth_token)
|
|
12
|
+
|
|
13
|
+
message = @client.messages
|
|
14
|
+
.create(
|
|
15
|
+
to: "+15558675310",
|
|
16
|
+
body: "Hey there!",
|
|
17
|
+
from: "+15017122661",
|
|
18
|
+
)
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Out of the box, the helper library is creating a default `Twilio::Http::Client` for you, using the Twilio credentials you provide. However, you can create your own `Twilio::Http::Client`, and pass it to any Twilio REST API resource action you want.
|
|
22
|
+
|
|
23
|
+
Here’s an example of sending an SMS message with a custom client:
|
|
24
|
+
|
|
25
|
+
```rb
|
|
26
|
+
# Download the helper library from https://www.twilio.com/docs/ruby/install
|
|
27
|
+
require "rubygems"
|
|
28
|
+
require "twilio-ruby"
|
|
29
|
+
require "dotenv/load"
|
|
30
|
+
|
|
31
|
+
# Custom HTTP Client
|
|
32
|
+
require_relative "MyRequestClass"
|
|
33
|
+
|
|
34
|
+
# Your Account Sid and Auth Token from twilio.com/console
|
|
35
|
+
account_sid = ENV["ACCOUNT_SID"]
|
|
36
|
+
auth_token = ENV["AUTH_TOKEN"]
|
|
37
|
+
proxy_address = ENV["PROXY_ADDRESS"]
|
|
38
|
+
proxy_protocol = ENV["PROXY_PROTOCOL"]
|
|
39
|
+
proxy_port = ENV["PROXY_PORT"]
|
|
40
|
+
|
|
41
|
+
my_request_client = MyRequestClass.new(proxy_protocol, proxy_address, proxy_port)
|
|
42
|
+
|
|
43
|
+
@client = Twilio::REST::Client.new(account_sid, auth_token,
|
|
44
|
+
nil, nil, my_request_client)
|
|
45
|
+
|
|
46
|
+
message = @client.messages
|
|
47
|
+
.create(
|
|
48
|
+
to: "+593978613041",
|
|
49
|
+
body: "RB This is the ship that made the Kesssssel Run in fourteen parsecs?",
|
|
50
|
+
from: "+13212855389",
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
puts "Message SID: #{message.sid}"
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Create your custom TwilioRestClient
|
|
57
|
+
|
|
58
|
+
When you take a closer look at the constructor for `Twilio::Http::Client`, you see that this class provides it to the Twilio helper library to make the necessary HTTP requests.
|
|
59
|
+
|
|
60
|
+
## Call Twilio through the proxy server
|
|
61
|
+
|
|
62
|
+
Now that we understand how all the components fit together, we can create our own `http_client` that can connect through a proxy server. To make this reusable, here’s a class that you can use to create this `http_client` whenever you need one.
|
|
63
|
+
|
|
64
|
+
```rb
|
|
65
|
+
class MyRequestClass
|
|
66
|
+
attr_accessor :adapter
|
|
67
|
+
attr_reader :timeout, :last_response, :last_request
|
|
68
|
+
|
|
69
|
+
def initialize(proxy_prot = nil, proxy_addr = nil, proxy_port = nil, timeout: nil)
|
|
70
|
+
@proxy_prot = proxy_prot
|
|
71
|
+
@proxy_addr = proxy_addr
|
|
72
|
+
@proxy_port = proxy_port
|
|
73
|
+
@timeout = timeout
|
|
74
|
+
@adapter = Faraday.default_adapter
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def _request(request)
|
|
78
|
+
@connection = Faraday.new(url: request.host + ":" + request.port.to_s, ssl: { verify: true }) do |f|
|
|
79
|
+
f.options.params_encoder = Faraday::FlatParamsEncoder
|
|
80
|
+
f.request :url_encoded
|
|
81
|
+
f.adapter @adapter
|
|
82
|
+
f.headers = request.headers
|
|
83
|
+
f.basic_auth(request.auth[0], request.auth[1])
|
|
84
|
+
if @proxy_addr
|
|
85
|
+
f.proxy = "#{@proxy_prot}://#{@proxy_addr}:#{@proxy_port}"
|
|
86
|
+
end
|
|
87
|
+
f.options.open_timeout = request.timeout || @timeout
|
|
88
|
+
f.options.timeout = request.timeout || @timeout
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
@last_request = request
|
|
92
|
+
@last_response = nil
|
|
93
|
+
response = @connection.send(request.method.downcase.to_sym,
|
|
94
|
+
request.url,
|
|
95
|
+
request.method == "GET" ? request.params : request.data)
|
|
96
|
+
|
|
97
|
+
if response.body && !response.body.empty?
|
|
98
|
+
object = response.body
|
|
99
|
+
elsif response.status == 400
|
|
100
|
+
object = { message: "Bad request", code: 400 }.to_json
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
twilio_response = Twilio::Response.new(response.status, object, headers: response.headers)
|
|
104
|
+
@last_response = twilio_response
|
|
105
|
+
|
|
106
|
+
twilio_response
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def request(host, port, method, url, params = {}, data = {}, headers = {}, auth = nil, timeout = nil)
|
|
110
|
+
request = Twilio::Request.new(host, port, method, url, params, data, headers, auth, timeout)
|
|
111
|
+
_request(request)
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
In this example, we are using some environment variables loaded at the program startup to retrieve various configuration settings:
|
|
117
|
+
|
|
118
|
+
- Your Twilio Account Sid and Auth Token ([found here, in the Twilio console](https://console.twilio.com))
|
|
119
|
+
- A proxy address in the form of `http://127.0.0.1:8888`
|
|
120
|
+
|
|
121
|
+
These settings are located in a file like `.env` like so:
|
|
122
|
+
|
|
123
|
+
```env
|
|
124
|
+
ACCOUNT_SID=ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
|
125
|
+
AUTH_TOKEN= your_auth_token
|
|
126
|
+
|
|
127
|
+
HTTPS_PROXY=https://127.0.0.1:8888
|
|
128
|
+
HTTP_PROXY=http://127.0.0.1:8888
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Here’s the full console program that sends a text message and shows how it all can work together. It loads the `.env` file.
|
|
132
|
+
|
|
133
|
+
```rb
|
|
134
|
+
# Download the helper library from https://www.twilio.com/docs/ruby/install
|
|
135
|
+
require "rubygems"
|
|
136
|
+
require "twilio-ruby"
|
|
137
|
+
require "dotenv/load"
|
|
138
|
+
|
|
139
|
+
# Custom HTTP Client
|
|
140
|
+
require_relative "MyRequestClass"
|
|
141
|
+
|
|
142
|
+
# Your Account Sid and Auth Token from twilio.com/console
|
|
143
|
+
account_sid = ENV["ACCOUNT_SID"]
|
|
144
|
+
auth_token = ENV["AUTH_TOKEN"]
|
|
145
|
+
proxy_address = ENV["PROXY_ADDRESS"]
|
|
146
|
+
proxy_protocol = ENV["PROXY_PROTOCOL"]
|
|
147
|
+
proxy_port = ENV["PROXY_PORT"]
|
|
148
|
+
|
|
149
|
+
my_request_client = MyRequestClass.new(proxy_protocol, proxy_address, proxy_port)
|
|
150
|
+
|
|
151
|
+
@client = Twilio::REST::Client.new(account_sid, auth_token,
|
|
152
|
+
nil, nil, my_request_client)
|
|
153
|
+
|
|
154
|
+
message = @client.messages
|
|
155
|
+
.create(
|
|
156
|
+
to: "+593978613041",
|
|
157
|
+
body: "RB This is the ship that made the Kesssssel Run in fourteen parsecs?",
|
|
158
|
+
from: "+13212855389",
|
|
159
|
+
)
|
|
160
|
+
|
|
161
|
+
puts "Message SID: #{message.sid}"
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## What else can this technique be used for?
|
|
165
|
+
|
|
166
|
+
Now that you know how to inject your own `http_client` into the Twilio API request pipeline, you could use this technique to add custom HTTP headers and authorization to the requests (perhaps as required by an upstream proxy server).
|
|
167
|
+
|
|
168
|
+
You could also implement your own `http_client` to mock the Twilio API responses so your unit and integration tests can run quickly without the need to make a connection to Twilio. In fact, there’s already an example online showing [how to do exactly that with Node.js and Prism](https://www.twilio.com/docs/openapi/mock-api-generation-with-twilio-openapi-spec).
|
|
169
|
+
|
|
170
|
+
We can’t wait to see what you build!
|
data/examples/examples.rb
CHANGED
|
@@ -69,7 +69,7 @@ puts @client.messages('SMXXXXXXXX').fetch.body
|
|
|
69
69
|
@client.messages.create(
|
|
70
70
|
from: '+14159341234',
|
|
71
71
|
to: '+16105557069',
|
|
72
|
-
|
|
72
|
+
media_url: 'http://example.com/media.png'
|
|
73
73
|
)
|
|
74
74
|
|
|
75
75
|
################ PHONE NUMBERS ################
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'rack/media_type'
|
|
4
|
+
|
|
3
5
|
module Rack
|
|
4
6
|
# Middleware that authenticates webhooks from Twilio using the request
|
|
5
7
|
# validator.
|
|
@@ -19,6 +21,10 @@ module Rack
|
|
|
19
21
|
# doesn't validate then the middleware responds immediately with a 403 status.
|
|
20
22
|
|
|
21
23
|
class TwilioWebhookAuthentication
|
|
24
|
+
# Rack's FORM_DATA_MEDIA_TYPES can be modified to taste, so we're slightly
|
|
25
|
+
# more conservative in what we consider form data.
|
|
26
|
+
FORM_URLENCODED_MEDIA_TYPE = Rack::MediaType.type('application/x-www-form-urlencoded')
|
|
27
|
+
|
|
22
28
|
def initialize(app, auth_token, *paths, &auth_token_lookup)
|
|
23
29
|
@app = app
|
|
24
30
|
@auth_token = auth_token
|
|
@@ -30,7 +36,7 @@ module Rack
|
|
|
30
36
|
return @app.call(env) unless env['PATH_INFO'].match(@path_regex)
|
|
31
37
|
request = Rack::Request.new(env)
|
|
32
38
|
original_url = request.url
|
|
33
|
-
params = request
|
|
39
|
+
params = extract_params!(request)
|
|
34
40
|
auth_token = @auth_token || get_auth_token(params['AccountSid'])
|
|
35
41
|
validator = Twilio::Security::RequestValidator.new(auth_token)
|
|
36
42
|
signature = env['HTTP_X_TWILIO_SIGNATURE'] || ''
|
|
@@ -44,5 +50,23 @@ module Rack
|
|
|
44
50
|
]
|
|
45
51
|
end
|
|
46
52
|
end
|
|
53
|
+
|
|
54
|
+
# Extract the params from the the request that we can use to determine the
|
|
55
|
+
# signature. This _may_ modify the passed in request since it may read/rewind
|
|
56
|
+
# the body.
|
|
57
|
+
def extract_params!(request)
|
|
58
|
+
return {} unless request.post?
|
|
59
|
+
|
|
60
|
+
if request.media_type == FORM_URLENCODED_MEDIA_TYPE
|
|
61
|
+
request.POST
|
|
62
|
+
else
|
|
63
|
+
request.body.rewind
|
|
64
|
+
body = request.body.read
|
|
65
|
+
request.body.rewind
|
|
66
|
+
body
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
private :extract_params!
|
|
47
71
|
end
|
|
48
72
|
end
|
|
@@ -16,25 +16,41 @@ module Twilio
|
|
|
16
16
|
@ssl_ca_file = ssl_ca_file
|
|
17
17
|
@timeout = timeout
|
|
18
18
|
@adapter = Faraday.default_adapter
|
|
19
|
+
@configure_connection_blocks = []
|
|
19
20
|
end
|
|
20
21
|
|
|
21
|
-
def
|
|
22
|
+
def configure_connection(&block)
|
|
23
|
+
raise ArgumentError, "#{__method__} must be given a block!" unless block_given?
|
|
24
|
+
|
|
25
|
+
@configure_connection_blocks << block
|
|
26
|
+
nil
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def _request(request) # rubocop:disable Metrics/MethodLength
|
|
22
30
|
@connection = Faraday.new(url: request.host + ':' + request.port.to_s, ssl: { verify: true }) do |f|
|
|
23
31
|
f.options.params_encoder = Faraday::FlatParamsEncoder
|
|
24
32
|
f.request :url_encoded
|
|
25
|
-
f.adapter @adapter
|
|
26
33
|
f.headers = request.headers
|
|
27
|
-
|
|
34
|
+
if Faraday::VERSION.start_with?('2.')
|
|
35
|
+
f.request(:authorization, :basic, request.auth[0], request.auth[1])
|
|
36
|
+
else
|
|
37
|
+
f.request(:basic_auth, request.auth[0], request.auth[1])
|
|
38
|
+
end
|
|
28
39
|
f.proxy = "#{@proxy_prot}://#{@proxy_auth}#{@proxy_path}" if @proxy_prot && @proxy_path
|
|
29
40
|
f.options.open_timeout = request.timeout || @timeout
|
|
30
41
|
f.options.timeout = request.timeout || @timeout
|
|
42
|
+
|
|
43
|
+
@configure_connection_blocks.each { |block| block.call(f) }
|
|
44
|
+
f.adapter @adapter
|
|
31
45
|
end
|
|
32
46
|
|
|
33
47
|
@last_request = request
|
|
34
48
|
@last_response = nil
|
|
35
49
|
|
|
36
50
|
response = send(request)
|
|
37
|
-
if
|
|
51
|
+
if (500..599).include?(response.status)
|
|
52
|
+
object = { message: "Server error (#{response.status})", code: response.status }.to_json
|
|
53
|
+
elsif response.body && !response.body.empty?
|
|
38
54
|
object = response.body
|
|
39
55
|
elsif response.status == 400
|
|
40
56
|
object = { message: 'Bad request', code: 400 }.to_json
|