You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
220 lines
7.3 KiB
220 lines
7.3 KiB
#!/usr/bin/env python
|
|
|
|
import pprint
|
|
import os
|
|
import json
|
|
import random
|
|
import string
|
|
import configuration
|
|
import credentials
|
|
from flowroutenumbersandmessaging.flowroutenumbersandmessaging_client import FlowroutenumbersandmessagingClient
|
|
|
|
print("Number/Route Management v2 & Messaging v2.1 Demo")
|
|
|
|
'''
|
|
# Set up your api credentials and test mobile number for outbound SMS or MMS
|
|
basic_auth_user_name = os.environ.get('FR_ACCESS_KEY')
|
|
basic_auth_password = os.environ.get('FR_SECRET_KEY')
|
|
mobile_number = "YOUR_MOBILE_NUMBER"
|
|
'''
|
|
|
|
#Using files credentials.py and configuration.py for user-dependent variables.
|
|
default_fr_creds = credentials.FLOWROUTE_API_KEY
|
|
default_config = configuration.FLOWROUTE_DEFAULT_DIDS
|
|
basic_auth_user_name = default_fr_creds["USERNAME"]
|
|
basic_auth_password = default_fr_creds["PASSWORD"]
|
|
test_from_number = default_config["FROM"]
|
|
test_to_number = default_config["TO"]
|
|
|
|
|
|
# Instantiate API client and create controllers for Numbers, Messages, and Routes.
|
|
client = FlowroutenumbersandmessagingClient(basic_auth_user_name, basic_auth_password)
|
|
numbers_controller = client.numbers
|
|
routes_controller = client.routes
|
|
messages_controller = client.messages
|
|
|
|
|
|
#Use the numbers controller to list available area codes currently in inventory.
|
|
print("--List Available Area Codes")
|
|
max_setup_cost = 3.25
|
|
limit = 3
|
|
offset = None
|
|
result = numbers_controller.list_available_area_codes(limit, offset, max_setup_cost)
|
|
pprint.pprint(result)
|
|
|
|
|
|
#Use the numbers controller to list numbers in the specified area code that are currently in inventory.
|
|
print("--List Available Exchange Codes")
|
|
limit = 3
|
|
offset = None
|
|
max_setup_cost = None
|
|
areacode = 206
|
|
result = numbers_controller.list_available_exchange_codes(limit, offset, max_setup_cost, areacode)
|
|
pprint.pprint(result)
|
|
|
|
|
|
#Search for vanity and/or local numbers in numbers currently in inventory.
|
|
print("--Search for Purchasable Phone Numbers")
|
|
starts_with = 1
|
|
contains = 0
|
|
ends_with = 007
|
|
limit = 3
|
|
offset = None
|
|
rate_center = None
|
|
state = None
|
|
print("Searching for vanity numbers with the specified patterns")
|
|
result = numbers_controller.search_for_purchasable_phone_numbers(starts_with, contains, ends_with, limit, offset, rate_center, state)
|
|
pprint.pprint(result)
|
|
|
|
|
|
#Use the numbers controller to purchase a phone number from inventory.
|
|
print("--Purchase a Phone Number")
|
|
'''
|
|
Uncomment the result line below to allow the demo script to purchase the first number returned by the query above.
|
|
If you are not running the number search above, please specify
|
|
a purchasable_number before running the purchase a number request.
|
|
'''
|
|
purchasable_number = result['data'][0]['id']
|
|
if purchasable_number == None :
|
|
print("Please assign purchasable_number to an available number you wish to purchase")
|
|
else :
|
|
print("Uncomment the result line below to allow the demo to purchase a number")
|
|
#result = numbers_controller.purchase_a_phone_number(purchasable_number)
|
|
|
|
|
|
#Use the numbers controller to list phone numbers currently on your account
|
|
print("--List Account Phone Numbers")
|
|
starts_with = 1
|
|
ends_with = None
|
|
contains = None
|
|
limit = 5
|
|
offset = None
|
|
result = numbers_controller.list_account_phone_numbers(starts_with, ends_with, contains, limit, offset)
|
|
pprint.pprint(result)
|
|
|
|
|
|
#Use the numbers controller to list the details for a number on your account.
|
|
print("--List Phone Number Details")
|
|
#You can only get details for a number currently on your account.
|
|
number_id = result['data'][0]['id']
|
|
if number_id == None :
|
|
print ("Please assign number_id to a number to get details for")
|
|
else :
|
|
result = numbers_controller.list_phone_number_details(number_id)
|
|
pprint.pprint(result)
|
|
|
|
|
|
#Use the numbers controller to create an inbound route. Each inbound route created has a unique id, even if the route is identical.
|
|
print("---Create an Inbound Route")
|
|
# Function to generate six-character random string. If you attempt to create a route already on your account you will receive a 403 error.
|
|
def id_generator(size=6, chars=string.ascii_lowercase + string.digits):
|
|
return ''.join(random.choice(chars) for _ in range(size))
|
|
new_route = id_generator() + '.sonsofodin.com'
|
|
alias = id_generator()
|
|
for i in range(10):
|
|
alias += str(i)
|
|
|
|
#request_body is what a JSON body looks like!
|
|
request_body = '{ \
|
|
"data": { \
|
|
"type": "route", \
|
|
"attributes": { \
|
|
"route_type": "host", \
|
|
"value": "' + new_route +'", \
|
|
"alias": "' + alias + '" \
|
|
} \
|
|
} \
|
|
}'
|
|
result = routes_controller.create_an_inbound_route(request_body)
|
|
pprint.pprint(result)
|
|
|
|
|
|
#Use the numbers controller to list inbound routes currently on your account.
|
|
print ("---List Inbound Routes")
|
|
limit = 3
|
|
result = routes_controller.list_inbound_routes(limit)
|
|
pprint.pprint(result)
|
|
|
|
#assigns your primary_inbound_route_id variable to be the [0] first result from the querey above.
|
|
#The first result will always be sip-reg with a route id of 0.
|
|
primary_inbound_route_id = result['data'][0]['id']
|
|
if primary_inbound_route_id == None :
|
|
print("Please assign a primary_inbound_route_id")
|
|
|
|
#assigns the failover_route_id variable to be the [1] second result from the querey above.
|
|
failover_route_id = result['data'][1]['id']
|
|
if failover_route_id == None :
|
|
print("Please assign a failover_route_id")
|
|
|
|
|
|
#Use the routes controller to assign a primary route to a number currently on your account.
|
|
#create the primary route JSON request:
|
|
request_body = '{ \
|
|
"data": { \
|
|
"type": "route", \
|
|
"id": "' + str(primary_inbound_route_id) +'" \
|
|
} \
|
|
}'
|
|
#update the route!
|
|
print("---Update Primary Voice Route")
|
|
result = routes_controller.update_primary_voice_route(number_id, request_body)
|
|
if result is None:
|
|
print("204: No Content")
|
|
else:
|
|
print (result)
|
|
|
|
|
|
#Use the routes controller to assign a failover route to a number currently on your account.
|
|
#create the failover route JSON request:
|
|
request_body = '{ \
|
|
"data": { \
|
|
"type": "route", \
|
|
"id": "' + str(failover_route_id) +'" \
|
|
} \
|
|
}'
|
|
#update the route!
|
|
print("---Update Failover Voice Route")
|
|
result = routes_controller.update_failover_voice_route(number_id, request_body)
|
|
if result is None:
|
|
print("204: No Content")
|
|
else:
|
|
print (result)
|
|
|
|
|
|
#Use the messaging controller to send a MMS message using a number currently on your account.
|
|
#Create the JSON request:
|
|
request_body = '{ \
|
|
"data": { \
|
|
"type": "message", \
|
|
"attributes": { \
|
|
"to": "' + str(test_to_number) + '", \
|
|
"from": "' + str(test_from_number) + '", \
|
|
"body": "greetings hooman!!", \
|
|
"is_mms": "true", \
|
|
"media_urls": ["http://s3.amazonaws.com/barkpost-assets/50+GIFs/37.gif"] \
|
|
} \
|
|
} \
|
|
}'
|
|
#send the message!
|
|
print("---Send A Message")
|
|
print("Please uncomment the following two lines to send an MMS message")
|
|
#result = messages_controller.send_a_message(request_body)
|
|
#pprint.pprint(result)
|
|
|
|
|
|
#Use the messages controller to look up the MDRs for a set of messages.
|
|
print("---Look Up A Set Of Messages")
|
|
start_date = "2017-12-01"
|
|
end_date = "2018-01-08"
|
|
limit = 2
|
|
result = messages_controller.look_up_a_set_of_messages(start_date, end_date, limit)
|
|
pprint.pprint(result)
|
|
|
|
|
|
#Use the messages controller to look up the report for an MDR.
|
|
print ("---Look Up A Message Detail Record")
|
|
message_id = result['data'][0]['id']
|
|
if message_id == None :
|
|
print("You need to have sent a message within the specified date range to get its MDR.")
|
|
result = messages_controller.look_up_a_message_detail_record(message_id)
|
|
pprint.pprint(result)
|
|
|