Package: callhub-python-wrapper
CallHub Python WrapperCallHub API Client Wrapper for PythonCreates a clean(er) python interface to several important functions of the CallHub API.Installationpip install callhub-python-wrapperRequires Python 3.5 or higherFeaturesBuilt-in (optional) ratelimiting that respects CallHub's varying rate limits for different functionsBetter error handling for uploading contacts with fields that don't exist in CallHubAbstracted away some tedious parts of using CallHub's API. When uploading contacts, CallHub wants you to map CSV columns to the ids of each field in CallHub, which is difficult and easy to mess up. This wrapper handles all of that by matching on field names.Automatically handles paging when doing bulk fetchingUses async requests to improve speed for repetitive calls (implemented in get_contacts)Implemented in latest releaseBulk create contactsGet agent leaderboardGet all fields and IDs (including custom fields)Bulk get contacts and fieldsCreate single contactGet all phone numbers on DNC listGet all DNC listsAdd/remove numbers to/from DNC list(s)Create and delete DNC listsGet campaignsCreate phonebookCreate/get/delete webhookCurrently on roadmapCreate/get teamsAdd/delete agent to/from teamCreate/delete agentExport campaignsUsageInitializationfrom callhub import CallHub

# Note the required argument for API domain: Depending on your CallHub account, you
# may have a different API domain below (EG. "https://api-na1.callhub.io")
callhub = CallHub("https://api.callhub.io", api_key="123456789ABCDEF")Contacts and Phonebooksphonebook_id = callhub.create_phonebook("My new phonebook",
                                        description="Used to test the bulk_create method")
contacts = [{'first name': 'Sumiya', 'phone number':'5555555555', 'mobile number': '5555555555'},
           {'first name': 'Joe', 'phone number':'5555555555', 'mobile number':'5555555555'}]
country_iso = "CA"

# Create multiple contacts
callhub.bulk_create(phonebook_id, contacts, country_iso)

# Create single contact
callhub.create_contact(contacts[0])

# Get all contacts (up to a user-specified limit)
callhub.get_contacts(limit=1000000)

# Get all contacts with no limit (this might take a while, see performance notes)
callhub.get_contacts()DNC Lists# Get names and ids of all do-not-contact lists
callhub.get_dnc_lists()

# Get all phone numbers marked do-not-contact and the do-not
# contact list(s) that they are associated with
callhub.get_dnc_phones()

# Create a DNC list
list_id = callhub.create_dnc_list("My DNC List Name")

# Delete a DNC list
callhub.remove_dnc_list(list_id)

# Add phone number 555-555-5555 to DNC list id 123456789
results, errors = callhub.add_dnc(["15555555555"], "123456789")

# Add multiple phone numbers to DNC list id 12345689
results, errors = callhub.add_dnc(["15555555555","15554443333"], "123456789")

# Remove number(s) from all DNC lists
errors = callhub.remove_dnc(["15554443333"])

# Remove number(s) from specific DNC list id
errors = callhub.remove_dnc(["15555555555"], "123456789")Performance NotesBulk creating contacts works differently from most other functionsThis takes advantage of CallHub's built in bulk_create API endpoint, so expect equivalent speeds to uploading a spreadsheet of contacts as a normal admin user. Note that bulk_create can only be called once every 70 seconds to comply with a special CallHub ratelimit on this endpoint.It's faster to call add_dnc/remove_dnc with ten numbers than to call add_dnc/remove_dnc with one number ten timesIf you use this library to make looping calls on most functions (e.g. add_dnc), you can expect a performance of about 0.5-1 requests/second. This is because all functions wait until they receives a response from the server before exiting.However, you can get much faster performance if you call these functions with a list of contacts (as opposed to ten times with one contact each time). This is because every function that does many similar repetitive API calls leverages async requests for repetitive calls (makes a large batch of requests and then waits for that pool of requests to finish.) Because of this, we can achieve real-world speeds of adding 5-10 numbers to a DNC list per second for large batches of numbers (CallHub's API limit is 20/s).Fetching contacts with get_contacts can take a whileCallHub only gives us 10 contacts per api request when using get_contacts, so expect this library to fetch contacts at about 100 contacts/s. That's about 17 minutes to fetch 100K contacts!