mock-twilio 0.8.0 → 1.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b143e540dfe26cd133a5b50c513a556b2829897bd0eb3223183eb8e1e22acd1a
4
- data.tar.gz: 5352342bd728fba1514ee6546eef76380113d713c52c254afe086e737eafab0f
3
+ metadata.gz: '0288825792a2120cef9986fac4b2b0d862870f8684494d6e5cd5ff56118e2df4'
4
+ data.tar.gz: 114f34bac6342aaacaec7717e8b4dbd167534dbaa2256f295280fb689b2bcb40
5
5
  SHA512:
6
- metadata.gz: 463cbf7ad14d9d8d1fe8a6b89c7697ebd5d15556fd07f260039dc740879129315dce2aaa94b857024cdb740a36c00a3465406c64bad0b6beafa8dbb0c22a3f70
7
- data.tar.gz: 287593b9368e6d4163fa39662c752c74a2386d77b2261adc4ad31fa8e7fbd08aa1296eaefd1f345aee646e304971bd1a0c863cfbdfc0d71aadcbae88c1461e9d
6
+ metadata.gz: 3b28d6052491c9fe19af3239b06472b8d2ca31e519f3ea18df82ce506f723fe4a9d4de70f59a6e963052b1c13f3bb12a08362aef4bd38340f9c3919c9543be9e
7
+ data.tar.gz: f6de2b86dd622fa70f2df6825a39a1a2bb06090e34bbf1ae6888f1deb7c4bb64ba7f8e78ce43a011eec806ca59f9b68983195777e7f94f9ab50cdaae4a49efa2
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## [1.1.0] - 2024-08-08
2
+ - Add conference call no-answer use case webhooks flow
3
+
4
+ ## [1.0.0] - 2024-08-06
5
+ - Support Webhooks::InboundMessages
6
+
1
7
  ## [0.8.0] - 2024-07-24
2
8
  - Support BrandsRegistratiosA2p
3
9
  - Support A2pTrustProduct
data/README.md CHANGED
@@ -26,6 +26,38 @@ OR
26
26
  - `proxy_port = 4010`
27
27
  - `proxy_protocol = http`
28
28
 
29
+ ## Features Support
30
+
31
+ | Mock::Twilio::Client | Support |
32
+ | ------------- | ------------- |
33
+ | `client.messages.create(to: "+593978613041", body: "Testing SMS", from: "+13212855389")` | :white_check_mark: |
34
+ | `client.messaging.v1.services("MG"+"F"*32).phone_numbers.create(phone_number_sid: @phone_number_sid)` | :white_check_mark: |
35
+ | `client.available_phone_numbers('US').local.list(limit: 20)` | :white_check_mark: |
36
+ | `client.incoming_phone_numbers.create(phone_number: "+1987654321", voice_url: "#{BASE_URL}/api/v1/twilio_calls/incoming", sms_url: "#{BASE_URL}/api/v1/twilio_requests/inbound")` | :white_check_mark: |
37
+ | `client.lookups.v2.phone_numbers("+14159929960").fetch(fields: :line_type_intelligence)` | :white_check_mark: |
38
+ | `client.calls.create(url: '<http://demo.twilio.com/docs/voice.xml>', to: '+14155551212', from: '+15017122661', status_callback: '<https://myapp.com/events>', status_callback_event: ['ringing'], status_callback_method: 'POST')` | :white_check_mark: |
39
+ | `client.conferences("CF"+("F")*32).participants.create(label: 'customer', early_media: true, beep: 'onEnter', status_callback: '<https://myapp.com/events>', status_callback_event: ['ringing'], record: true, from: '+15017122661', to: '+15558675310')` | :white_check_mark: |
40
+ | `client.trusthub.v1.customer_profiles.create(**twilio_attributes)` | :white_check_mark: |
41
+ | `client.trusthub.v1.customer_profiles(customer_profile_sid).customer_profiles_entity_assignments.create(object_sid:)` | :white_check_mark: |
42
+ | `client.trusthub.v1.end_users.create(**twilio_parameters)` | :white_check_mark: |
43
+ | `client.trusthub.v1.supporting_documents.create(**twilio_parameters)` | :white_check_mark: |
44
+ | `client.addresses.create(**twilio_parameters)` | :white_check_mark: |
45
+ | `client.trusthub.v1.customer_profiles.create(**twilio_attributes)` | :white_check_mark: |
46
+ | `client.trusthub.v1.customer_profiles(customer_profile.sid).customer_profiles_evaluations.create(policy_sid:)` | :white_check_mark: |
47
+
48
+
49
+ ## Trigger resources updates
50
+
51
+ | Mock::Twilio::Webhooks | Support |
52
+ | ------------- | ------------- |
53
+ | `Webhooks::Messages` | :white_check_mark: |
54
+ | `Webhooks::InboundMessages` | :white_check_mark: |
55
+ | `Webhooks::Calls` | :white_check_mark: |
56
+ | `Webhooks::CallStatusUpdates` | :white_check_mark: |
57
+ | `Webhooks::Conferences` | :white_check_mark: |
58
+ | `Webhooks::CustomerProfiles` | :white_check_mark: |
59
+ | `Webhooks::Brands` | :white_check_mark: |
60
+
29
61
  ## How to use
30
62
  Initializer sample
31
63
  ```ruby
@@ -35,7 +67,6 @@ Mock::Twilio.configure do |config|
35
67
  config.port = "3000"
36
68
  config.proto = "http"
37
69
  end
38
-
39
70
  ```
40
71
 
41
72
  Example
@@ -30,15 +30,17 @@ module Mock
30
30
  scheduler.in '2s' do
31
31
  conference_uuid = request.data["Url"].split("conference_uuid=").last
32
32
  begin
33
- response = Mock::Twilio::Webhooks::CallStatusUpdates.trigger(sid, conference_uuid)
33
+ response = Mock::Twilio::Webhooks::CallStatusUpdates.trigger(sid, conference_uuid, 'unknown')
34
34
 
35
- conference_response = if response.status == 200
35
+ conference_response = if response.success?
36
36
  twiMl_xml = Nokogiri::XML response.body
37
37
  friendly_name = twiMl_xml.at_xpath('//Dial').at_xpath('//Conference').children.text
38
38
  Mock::Twilio::Webhooks::Conferences.trigger(friendly_name)
39
39
  end
40
40
 
41
- Mock::Twilio::Webhooks::Calls.trigger(sid) if conference_response.status == 200
41
+ participant_response = Mock::Twilio::Webhooks::Calls.trigger(sid) if conference_response.success?
42
+
43
+ Mock::Twilio::Webhooks::CallStatusUpdates.trigger(sid, conference_uuid, 'machine_start') if participant_response.success?
42
44
  rescue => e
43
45
  puts e
44
46
  end
@@ -14,8 +14,12 @@ module Mock
14
14
  body["end_time"] = Time.current.rfc2822 if body["end_time"]
15
15
 
16
16
  message_sid(body, request) if body["sid"]
17
+ body["messaging_service_sid"] = request.data["MessagingServiceSid"] if request.data["MessagingServiceSid"]
17
18
  pagination(body) if body["available_phone_numbers"]
18
19
 
20
+ body["to"] = request.data["To"] if request.data["To"]
21
+ body["from"] = request.data["From"] if request.data["From"]
22
+
19
23
  body
20
24
  end
21
25
 
@@ -33,7 +37,12 @@ module Mock
33
37
  scheduler = Rufus::Scheduler.new
34
38
  scheduler.in '2s' do
35
39
  begin
36
- Mock::Twilio::Webhooks::Messages.trigger(sid)
40
+ response = Mock::Twilio::Webhooks::Messages.trigger(sid)
41
+
42
+ if response.success? && request.data["Body"].downcase.include?("inbound")
43
+ inbound_sid = prefix + SecureRandom.hex(16)
44
+ Mock::Twilio::Webhooks::InboundMessages.trigger(inbound_sid, request.data)
45
+ end
37
46
  rescue => e
38
47
  puts e
39
48
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Mock
4
4
  module Twilio
5
- VERSION = "0.8.0"
5
+ VERSION = "1.1.0"
6
6
  end
7
7
  end
@@ -6,13 +6,13 @@ module Mock
6
6
  class CallStatusUpdates < Base
7
7
  URL = "/api/v1/twilio_calls/voice_responses"
8
8
 
9
- def self.trigger(sid, conference_uuid)
9
+ def self.trigger(sid, conference_uuid, answered_by)
10
10
  # Wait simulation from twilio
11
11
  sleep DELAY.sample
12
12
 
13
13
  request_url = Mock::Twilio.proto + "://" + Mock::Twilio.forwarded_host + URL
14
14
 
15
- data = call_status_updates_data(sid, conference_uuid)
15
+ data = call_status_updates_data(sid, conference_uuid, answered_by)
16
16
 
17
17
  signature = build_signature_for_request(request_url, data)
18
18
 
@@ -33,7 +33,7 @@ module Mock
33
33
  end
34
34
  end
35
35
 
36
- def self.call_status_updates_data(sid, conference_uuid)
36
+ def self.call_status_updates_data(sid, conference_uuid, answered_by)
37
37
  {
38
38
  :AccountSid=> twilio_client.account_sid,
39
39
  :ApiVersion=> "2010-04-01",
@@ -68,7 +68,7 @@ module Mock
68
68
  :ToZip=> "33605",
69
69
  :StirStatus=> "B",
70
70
  :StirVerstat=> "TN-Validation-Passed-B",
71
- :AnsweredBy=> "unknown",
71
+ :AnsweredBy=> answered_by,
72
72
  :conference_uuid=> conference_uuid
73
73
  }
74
74
  end
@@ -50,7 +50,7 @@ module Mock
50
50
  :CallerState=> "CA",
51
51
  :CallerZip=> "no value",
52
52
  :CallSid=> sid,
53
- :CallStatus=> "in-progress",
53
+ :CallStatus=> "ringing",
54
54
  :Direction=> "outbound-api",
55
55
  :Duration=> "0",
56
56
  :From=> "+18111111111",
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mock
4
+ module Twilio
5
+ module Webhooks
6
+ class InboundMessages < Base
7
+ URL = "/api/v1/twilio_requests/inbound"
8
+
9
+ def self.trigger(sid, params)
10
+ raise Webhooks::RestError, "Invalid Inbound message data" if params['To'].empty? || params['From'].empty?
11
+ # Wait simulation from twilio
12
+ sleep DELAY.sample
13
+
14
+ request_url = Mock::Twilio.proto + "://" + Mock::Twilio.forwarded_host + URL
15
+
16
+ data = inbound_data(sid, params)
17
+
18
+ signature = build_signature_for_request(request_url, data)
19
+
20
+ response = webhook_client.request(Mock::Twilio.host,
21
+ Mock::Twilio.port,
22
+ 'POST',
23
+ URL,
24
+ nil,
25
+ data,
26
+ headers.merge!({ 'X-Twilio-Signature': signature }),
27
+ auth_twilio,
28
+ nil)
29
+ case response.status
30
+ when 200..204
31
+ response
32
+ when 400..600
33
+ raise Webhooks::RestError, Mock::Twilio::ErrorHandler.new(response).raise
34
+ end
35
+ end
36
+
37
+ def self.inbound_data(sid, params)
38
+ {
39
+ "ToCountry": "US",
40
+ "ToState": "MS",
41
+ "SmsMessageSid": sid,
42
+ "NumMedia": "0",
43
+ "ToCity": "SARDIS",
44
+ "FromZip": "98315",
45
+ "SmsSid": sid,
46
+ "FromState": "WA",
47
+ "SmsStatus": "received",
48
+ "FromCity": "SILVERDALE",
49
+ "Body": "Inbound::Message mock reply",
50
+ "FromCountry": "US",
51
+ "To": params["To"],
52
+ "MessagingServiceSid": params['MessagingServiceSid'],
53
+ "ToZip": "38666",
54
+ "AddOns": "{\"status\":\"successful\",\"message\":null,\"code\":null,\"results\":{}}",
55
+ "NumSegments": "1",
56
+ "MessageSid": sid,
57
+ "AccountSid": ::Twilio.account_sid,
58
+ "From": params["From"],
59
+ "ApiVersion": "2010-04-01"
60
+ }
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
data/lib/mock/twilio.rb CHANGED
@@ -13,6 +13,7 @@ require_relative "twilio/webhooks/call_status_updates"
13
13
  require_relative "twilio/webhooks/conferences"
14
14
  require_relative "twilio/webhooks/customer_profiles"
15
15
  require_relative "twilio/webhooks/brands"
16
+ require_relative "twilio/webhooks/inbound_messages"
16
17
  require_relative "twilio/util/configuration"
17
18
  require_relative "twilio/util/error_handler"
18
19
  require_relative "twilio/util/generator"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mock-twilio
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - SchoolStatus Platform Team
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-07-24 00:00:00.000000000 Z
11
+ date: 2024-08-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -117,6 +117,7 @@ files:
117
117
  - lib/mock/twilio/webhooks/calls.rb
118
118
  - lib/mock/twilio/webhooks/conferences.rb
119
119
  - lib/mock/twilio/webhooks/customer_profiles.rb
120
+ - lib/mock/twilio/webhooks/inbound_messages.rb
120
121
  - lib/mock/twilio/webhooks/messages.rb
121
122
  - lib/twilio/rest/messaging/v1/service/phone_number_decorator.rb
122
123
  - sig/mock/twilio.rbs