Skip to content

Commit

Permalink
added twillio number override mechanism (#627)
Browse files Browse the repository at this point in the history
* skip error logging if iris bot fails to send messages to a channel it is not in

* removed redundant slack api call and added a warning

* added a return statement to keep the event from being counted as an error in the metrics

* added twillio number override mechanism

* minor change in case application_override_mapping is not defined in the default config

Co-authored-by: Damian Durruty <[email protected]>
  • Loading branch information
ddurruty-li and Damian Durruty authored Aug 2, 2021
1 parent 4d1dfb0 commit 4f7bdae
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 4 deletions.
1 change: 1 addition & 0 deletions configs/config.dev.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,7 @@ vendors: []
# account_sid: ''
# auth_token: ''
# twilio_number: ''
# application_override_mapping: ''
# relay_base_url: ''

## Hipchat support requires adding a new mode called "hipchat", in iris' mode table
Expand Down
10 changes: 8 additions & 2 deletions src/iris/vendors/iris_twilio.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,10 @@ def send_sms(self, message):
client = self.get_twilio_client()

sender = client.messages.create
from_ = self.config['twilio_number']
if message['application'] in self.config.get('application_override_mapping', {}):
from_ = self.config['application_override_mapping'][message['application']]
else:
from_ = self.config['twilio_number']
start = time.time()
content = self.generate_message_text(message)
status_callback_url = self.config['relay_base_url'] + '/api/v0/twilio/status'
Expand Down Expand Up @@ -111,7 +114,10 @@ def send_call(self, message):

client = self.get_twilio_client()
sender = client.calls.create
from_ = self.config['twilio_number']
if message['application'] in self.config.get('application_override_mapping', {}):
from_ = self.config['application_override_mapping'][message['application']]
else:
from_ = self.config['twilio_number']
status_callback_url = self.config['relay_base_url'] + '/api/v0/twilio/status'
content = self.generate_message_text(message)

Expand Down
36 changes: 34 additions & 2 deletions test/test_iris_vendor_twilio.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ def test_twilio_notification_call_generate(mocker):

twilio = iris_twilio({
'twilio_number': fake_from_num,
'relay_base_url': relay_base_url,
'relay_base_url': relay_base_url
})
mock_twilio_client = mocker.MagicMock()
mocker.patch.object(twilio, 'get_twilio_client').return_value = mock_twilio_client
Expand All @@ -42,6 +42,38 @@ def test_twilio_notification_call_generate(mocker):
)


def test_twilio_notification_call_generate_override(mocker):
mocker.patch('iris.vendors.iris_twilio.find_plugin')
from iris.vendors.iris_twilio import iris_twilio
relay_base_url = 'http://foo/relay'
fake_from_num = '123-123-1234'
fake_to_num = '123-123-1235'
override_num = '777-777-7777'

twilio = iris_twilio({
'twilio_number': fake_from_num,
'relay_base_url': relay_base_url,
'application_override_mapping': {'iris-sender': override_num}
})
mock_twilio_client = mocker.MagicMock()
mocker.patch.object(twilio, 'get_twilio_client').return_value = mock_twilio_client
twilio.send_call({
'destination': fake_to_num,
'application': 'iris-sender',
'subject': 'Hello',
'body': 'World',
})
mock_twilio_client.calls.create.assert_called_once_with(
to=fake_to_num,
from_=override_num,
if_machine='Continue',
url=relay_base_url + (
'/api/v0/twilio/calls/say?content=Hello.+World&'
'loop=3&source=iris-sender'),
status_callback=relay_base_url + '/api/v0/twilio/status'
)


def test_twilio_incident_call_generate(mocker):
mock_plugin = mocker.MagicMock()
mock_plugin.get_phone_menu_text.return_value = 'Press 1 to pay'
Expand All @@ -53,7 +85,7 @@ def test_twilio_incident_call_generate(mocker):
from iris.vendors.iris_twilio import iris_twilio
twilio = iris_twilio({
'twilio_number': fake_from_num,
'relay_base_url': relay_base_url,
'relay_base_url': relay_base_url
})
mock_twilio_client = mocker.MagicMock()
mocker.patch.object(twilio, 'get_twilio_client').return_value = mock_twilio_client
Expand Down

0 comments on commit 4f7bdae

Please sign in to comment.