Assign numbers to a campaign in bulk
Overview
This script will let you assign numbers to your campaign all in one go requiring only some simple Python, our Campaign Registry APIs, and a CSV of your numbers! If you need help getting a CSV of the numbers you want to add, you could try listing your account numbers to csv or purchasing new numbers in bulk.
Full code example: Assigning Numbers to a Campaign in Bulk
import requests
from requests.auth import HTTPBasicAuth
import csv
# define your variables here to reuse throughout code
SpaceURL = '.signalwire.com'
projectID = ""
authToken = ""
campaignSID = ""
PathToCSV = 'UnregisteredNumbers.csv'
results = []
# Open CSV file with unregistered numbers
with open(PathToCSV, 'r', encoding='utf-8-sig') as csvfile:
reader = csv.reader(csvfile)
next(reader, None)
# Change to E164 format if it's not already in that format
for row in reader:
if "+" not in row[0]:
results.append("+" + row[0])
else:
results.append(row[0])
for result in results:
try:
response = requests.post(f"https://{SpaceURL}/api/relay/rest/registry/beta/campaigns/{campaignSID}/orders",
json={"phone_numbers": [result]},
headers={
"Accept": "application/json",
"Content-Type": "application/json"},
auth=HTTPBasicAuth(projectID, authToken))
if response.ok:
print(f"{result} added to campaign")
else:
print(f"{response.status_code} {response.text}. {result} not added to campaign.")
except Exception as e:
print(f"Error: {str(e)}")
Required Resources
This script does not require any additional packages except for those native to Python!
However, you will need the campaignSID
of the campaign that will contain the numbers you are assigning.
You can find your campaign SID by going to the Messaging Campaigns section of your SignalWire Space and clicking the specific campaign whose numbers you need.
The SID is the long alphanumeric string at the top as shown here:
** How to get API Credentials **
The API also requires that you authenticate yourself using your Project ID, API Token, and Space URL. If you do not know where to find these values, check out our guide to Navigating your SignalWire Space!
How to Run the Snippet
If you copy the code and save it to a file named assignNumbers.py
, for example, to run it you will need to run:
MacOS/Linux - python3 assignNumbers.py
Windows - py assignNumbers.py
Step by Step Code Walkthrough
This snippet essentially consists of only three parts - we import our required libraries and define our variables, we read in our CSV, and we rotate through each number in the CSV making an HTTP request to assign it to our campaign. That's all there is to it!
Import Required Libraries and Define Variables
Here we will import csv, requests, and HTTPBasicAuth from requests. These tools make it easier to manage our CSV file and make HTTP requests to SignalWire. Make sure that PathToCSV
is correct for both your OS and your file structure! If your UnregisteredNumbers.csv
file is in a different folder, you will need to adjust the value given to make sure that you point to the correct path.
import requests
from requests.auth import HTTPBasicAuth
import csv
# define your variables here to reuse throughout code
SpaceURL = '.signalwire.com'
projectID = ""
authToken = ""
campaignSID = ""
PathToCSV = 'UnregisteredNumbers.csv'
results = []
Open CSV File with Numbers to Register
In this step, we will use csv
to open our file containing the numbers to be registered. We will use next(reader, None)
to skip the header, but if your CSV doesn't have a header, you can comment this line out! We will check each number to make sure that it is in E164 format and then add it to our results
list.
# Open CSV file with unregistered numbers
with open(PathToCSV, 'r', encoding='utf-8-sig') as csvfile:
reader = csv.reader(csvfile)
# skip column header
next(reader, None)
# Change to E164 format if it's not already in that format
for row in reader:
if "+" not in row[0]:
results.append("+" + row[0])
else:
results.append(row[0])
Assign Numbers to Campaign
Now that we have that all done, we can just loop through our results
list and use the assign phone number to campaign endpoint to assign each to the campaign. If the HTTP request is successful, we will print that +1xxxyyyzzzz added to the campaign
. If not, we will print that the number wasn't added and include the status code/reason why.
for result in results:
try:
response = requests.post(f"https://{SpaceURL}/api/relay/rest/registry/beta/campaigns/{campaignSID}/orders",
json={"phone_numbers": [result]},
headers={
"Accept": "application/json",
"Content-Type": "application/json"},
auth=HTTPBasicAuth(projectID, authToken))
if response.ok:
print(f"{result} added to campaign")
else:
print(f"{response.status_code} {response.text}. {result} not added to campaign.")
except Exception as e:
print(f"Error: {str(e)}")
Wrap up
By utilizing SignalWire's Campaign Registry APIs, you can easily build a system that automates all of your campaign management in any of your favorite languages!
Resources
Sign Up Here
If you would like to test this example out, you can create a SignalWire account and Space.
Please feel free to reach out to us on our Community Slack or create a Support ticket from your SignalWire Space if you need guidance!