diff --git a/core/kazoo_number_manager/src/carriers/knm_bandwidth.erl b/core/kazoo_number_manager/src/carriers/knm_bandwidth.erl
index 36d3441e99d..0ba954e26dc 100644
--- a/core/kazoo_number_manager/src/carriers/knm_bandwidth.erl
+++ b/core/kazoo_number_manager/src/carriers/knm_bandwidth.erl
@@ -89,9 +89,9 @@ is_local() -> 'false'.
%% @doc Check with carrier if these numbers are registered with it.
%% @end
%%------------------------------------------------------------------------------
--spec check_numbers(kz_term:ne_binaries()) -> {ok, kz_json:object()} |
- {error, any()}.
-check_numbers(_Numbers) -> {error, not_implemented}.
+-spec check_numbers(kz_term:ne_binaries()) -> {'ok', kz_json:object()} |
+ {'error', 'not_implemented'}.
+check_numbers(_Numbers) -> {'error', 'not_implemented'}.
%%------------------------------------------------------------------------------
%% @doc Query the Bandwidth.com system for a quantity of available numbers
diff --git a/core/kazoo_number_manager/src/carriers/knm_bandwidth2.erl b/core/kazoo_number_manager/src/carriers/knm_bandwidth2.erl
index 2894e15dd5c..f4f65d630ba 100644
--- a/core/kazoo_number_manager/src/carriers/knm_bandwidth2.erl
+++ b/core/kazoo_number_manager/src/carriers/knm_bandwidth2.erl
@@ -121,9 +121,9 @@ is_number_billable(_Number) -> 'true'.
%% @doc Check with carrier if these numbers are registered with it.
%% @end
%%------------------------------------------------------------------------------
--spec check_numbers(kz_term:ne_binaries()) -> {ok, kz_json:object()} |
- {error, any()}.
-check_numbers(_Numbers) -> {error, not_implemented}.
+-spec check_numbers(kz_term:ne_binaries()) -> {'ok', kz_json:object()} |
+ {'error', 'not_implemented'}.
+check_numbers(_Numbers) -> {'error', 'not_implemented'}.
%%------------------------------------------------------------------------------
%% @doc Query the Bandwidth.com system for a quantity of available numbers
@@ -464,11 +464,7 @@ tollfree_search_response_to_KNM(Xml, QID) ->
%% @doc Convert a rate center XML entity to json
%% @end
%%------------------------------------------------------------------------------
--spec rate_center_to_json(kz_types:xml_els() | kz_types:xml_el()) -> kz_json:object().
-rate_center_to_json([]) ->
- kz_json:new();
-rate_center_to_json([Xml]) ->
- rate_center_to_json(Xml);
+-spec rate_center_to_json(kz_types:xml_el()) -> kz_json:object().
rate_center_to_json(Xml) ->
kz_json:from_list(
props:filter_empty(
diff --git a/core/kazoo_number_manager/src/carriers/knm_carriers.erl b/core/kazoo_number_manager/src/carriers/knm_carriers.erl
index 65665186bd4..e6b2b5d95a1 100644
--- a/core/kazoo_number_manager/src/carriers/knm_carriers.erl
+++ b/core/kazoo_number_manager/src/carriers/knm_carriers.erl
@@ -101,7 +101,7 @@ check_fold(Module, {Nums, OKs0, KOs0}) ->
check_numbers(Module, Nums) ->
try apply(Module, check_numbers, [Nums]) of
- {ok, JObj} -> {kz_json:to_map(JObj), #{}};
+ {'ok', JObj} -> {kz_json:to_map(JObj), #{}};
{error, _} -> {#{}, maps:from_list([{Num,<<"error">>} || Num <- Nums])}
catch
_:_ ->
@@ -127,8 +127,8 @@ available_carriers(Options) ->
-spec get_available_carriers(options()) -> kz_term:atoms().
get_available_carriers(Options) ->
- case account_id(Options) =:= undefined
- orelse reseller_id(Options) =:= undefined
+ case account_id(Options) =:= 'undefined'
+ orelse reseller_id(Options) =:= 'undefined'
of
'true' -> keep_only_reachable(?CARRIER_MODULES);
'false' ->
@@ -151,20 +151,32 @@ default_carrier() ->
%%------------------------------------------------------------------------------
-spec all_modules() -> kz_term:ne_binaries().
all_modules() ->
- [<<"knm_bandwidth2">>
- ,<<"knm_bandwidth">>
+ [<<"knm_bandwidth">>
+ ,<<"knm_bandwidth2">>
+ ,<<"knm_didww">>
+ ,<<"knm_flowroute">>
+ ,<<"knm_inteliquent">>
,<<"knm_inum">>
- ,<<"knm_local">>
,<<"knm_inventory">>
+ ,<<"knm_it_vocal">>
+ ,<<"knm_level3">>
+ ,<<"knm_local">>
,<<"knm_managed">>
,<<"knm_mdn">>
+ ,<<"knm_o1">>
,<<"knm_other">>
+ ,<<"knm_peerless">>
,<<"knm_reserved">>
,<<"knm_reserved_reseller">>
,<<"knm_simwood">>
,<<"knm_telnyx">>
+ ,<<"knm_thinq">>
+ ,<<"knm_verizon">>
,<<"knm_vitelity">>
,<<"knm_voip_innovations">>
+ ,<<"knm_voxbone">>
+ ,<<"knm_windstream">>
+ ,<<"knm_ziron">>
].
%%------------------------------------------------------------------------------
@@ -173,11 +185,10 @@ all_modules() ->
%%------------------------------------------------------------------------------
-spec info(kz_term:api_ne_binary(), kz_term:api_ne_binary(), kz_term:api_ne_binary()) -> kz_json:object().
info(AuthAccountId, AccountId, ResellerId) ->
- AvailableCarriers = available_carriers([{account_id, AccountId}
- ,{reseller_id, ResellerId}
+ AvailableCarriers = available_carriers([{'account_id', AccountId}
+ ,{'reseller_id', ResellerId}
]),
- Acc0 = #{?CARRIER_INFO_MAX_PREFIX => 15
- },
+ Acc0 = #{?CARRIER_INFO_MAX_PREFIX => 15},
Map = lists:foldl(fun info_fold/2, Acc0, AvailableCarriers),
kz_json:from_map(
Map#{?CARRIER_INFO_USABLE_CARRIERS => usable_carriers()
@@ -187,11 +198,10 @@ info(AuthAccountId, AccountId, ResellerId) ->
-spec info_fold(module(), map()) -> map().
info_fold(Module, Info=#{?CARRIER_INFO_MAX_PREFIX := MaxPrefix}) ->
- try apply(Module, info, []) of
+ try apply(Module, 'info', []) of
#{?CARRIER_INFO_MAX_PREFIX := Lower}
when is_integer(Lower), Lower < MaxPrefix ->
- Info#{?CARRIER_INFO_MAX_PREFIX => Lower
- };
+ Info#{?CARRIER_INFO_MAX_PREFIX => Lower};
_ -> Info
catch
_E:_R ->
@@ -228,8 +238,8 @@ allowed_creation_states(AccountId) ->
acquire(T0=#{todo := Ns}) ->
F = fun (N, T) ->
case knm_number:attempt(fun acquire/1, [N]) of
- {ok, NewN} -> knm_numbers:ok(NewN, T);
- {error, R} -> knm_numbers:ko(N, R, T)
+ {'ok', NewN} -> knm_numbers:ok(NewN, T);
+ {'error', R} -> knm_numbers:ko(N, R, T)
end
end,
lists:foldl(F, T0, Ns);
@@ -262,8 +272,8 @@ acquire(Number, ?NE_BINARY=Mod, 'false') ->
disconnect(T0=#{todo := Ns}) ->
F = fun (N, T) ->
case knm_number:attempt(fun disconnect/1, [N]) of
- {ok, NewN} -> knm_numbers:ok(NewN, T);
- {error, R} ->
+ {'ok', NewN} -> knm_numbers:ok(NewN, T);
+ {'error', R} ->
Num = knm_phone_number:number(knm_number:phone_number(N)),
knm_numbers:ko(Num, R, T)
end
@@ -271,7 +281,7 @@ disconnect(T0=#{todo := Ns}) ->
lists:foldl(F, T0, Ns);
disconnect(Number) ->
Module = knm_phone_number:module_name(knm_number:phone_number(Number)),
- try apply(Module, disconnect_number, [Number]) of
+ try apply(Module, 'disconnect_number', [Number]) of
Result -> Result
catch
'error':_ ->
@@ -340,11 +350,11 @@ is_number_billable(PhoneNumber) ->
%%------------------------------------------------------------------------------
-spec is_local(kz_term:ne_binary()) -> boolean().
is_local(Carrier) ->
- try apply(Carrier, is_local, [])
+ try apply(Carrier, 'is_local', [])
catch
_E:_R ->
kz_util:log_stacktrace(),
- true
+ 'true'
end.
%%------------------------------------------------------------------------------
@@ -352,11 +362,11 @@ is_local(Carrier) ->
%% @end
%%------------------------------------------------------------------------------
-spec apply(module() | kz_term:ne_binary() | knm_number:knm_number(), atom(), list()) -> any().
-apply(Module, FName, Args) when is_atom(Module), Module =/= undefined ->
+apply(Module, FName, Args) when is_atom(Module), Module =/= 'undefined' ->
lager:debug("contacting carrier ~s for ~s", [Module, FName]),
erlang:apply(Module, FName, Args);
apply(?NE_BINARY=Carrier, FName, Args) ->
- Module = erlang:binary_to_atom(Carrier, utf8),
+ Module = erlang:binary_to_atom(Carrier, 'utf8'),
apply(Module, FName, Args);
apply(Number, FName, Args) ->
Carrier = knm_phone_number:module_name(knm_number:phone_number(Number)),
diff --git a/core/kazoo_number_manager/src/carriers/knm_didww.erl b/core/kazoo_number_manager/src/carriers/knm_didww.erl
new file mode 100644
index 00000000000..9fd2e7da5c7
--- /dev/null
+++ b/core/kazoo_number_manager/src/carriers/knm_didww.erl
@@ -0,0 +1,91 @@
+%%%-----------------------------------------------------------------------------
+%%% @copyright (C) 2015-2020, 2600Hz
+%%% @doc Handle client requests for phone number
+%%% @end
+%%%-----------------------------------------------------------------------------
+-module(knm_didww).
+-behaviour(knm_gen_carrier).
+
+-export([info/0]).
+-export([is_local/0]).
+-export([find_numbers/3]).
+-export([acquire_number/1]).
+-export([disconnect_number/1]).
+-export([is_number_billable/1]).
+-export([should_lookup_cnam/0]).
+-export([check_numbers/1]).
+
+-include("knm.hrl").
+
+-define(KNM_CARRIER_NAME, "didww").
+-define(KNM_CARRIER_CONFIG_CAT, <<(?KNM_CONFIG_CAT)/binary, ".", ?KNM_CARRIER_NAME>>).
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec info() -> map().
+info() ->
+ #{?CARRIER_INFO_MAX_PREFIX => 3
+ }.
+
+%%------------------------------------------------------------------------------
+%% @doc Is this carrier handling numbers local to the system?
+%%
+%%
A non-local (foreign) carrier module makes HTTP requests.
+%% @end
+%%------------------------------------------------------------------------------
+-spec is_local() -> boolean().
+is_local() -> 'false'.
+
+%%------------------------------------------------------------------------------
+%% @doc Check with carrier if these numbers are registered with it.
+%% @end
+%%------------------------------------------------------------------------------
+-spec check_numbers(kz_term:ne_binaries()) -> {'ok', kz_json:object()} |
+ {'error', 'not_implemented'}.
+check_numbers(_Numbers) -> {'error', 'not_implemented'}.
+
+%%------------------------------------------------------------------------------
+%% @doc Query carrier for available numbers.
+%% @end
+%%------------------------------------------------------------------------------
+-spec find_numbers(kz_term:ne_binary(), pos_integer(), knm_carriers:options()) ->
+ {'ok', knm_number:knm_numbers()}.
+find_numbers(_Prefix, _Quantity, _Options) ->
+ {'ok', []}.
+
+%%------------------------------------------------------------------------------
+%% @doc Acquire a given number from carrier.
+%% @end
+%%------------------------------------------------------------------------------
+-spec acquire_number(knm_number:knm_number()) -> no_return().
+acquire_number(Number) ->
+ knm_errors:by_carrier(?MODULE, 'not_implemented', Number).
+
+%%------------------------------------------------------------------------------
+%% @doc Return number back to carrier.
+%% @end
+%%------------------------------------------------------------------------------
+-spec disconnect_number(knm_number:knm_number()) ->
+ no_return().
+disconnect_number(Number) ->
+ knm_errors:by_carrier(?MODULE, 'not_implemented', Number).
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec is_number_billable(knm_phone_number:knm_phone_number()) -> boolean().
+is_number_billable(_Number) -> 'true'.
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec should_lookup_cnam() -> boolean().
+should_lookup_cnam() -> 'true'.
+
+%%%=============================================================================
+%%% Internal functions
+%%%=============================================================================
diff --git a/core/kazoo_number_manager/src/carriers/knm_flowroute.erl b/core/kazoo_number_manager/src/carriers/knm_flowroute.erl
new file mode 100644
index 00000000000..e077bc0325f
--- /dev/null
+++ b/core/kazoo_number_manager/src/carriers/knm_flowroute.erl
@@ -0,0 +1,92 @@
+%%%-----------------------------------------------------------------------------
+%%% @copyright (C) 2015-2020, 2600Hz
+%%% @doc Handle client requests for phone number
+%%% @end
+%%%-----------------------------------------------------------------------------
+-module(knm_flowroute).
+-behaviour(knm_gen_carrier).
+
+-export([info/0]).
+-export([is_local/0]).
+-export([find_numbers/3]).
+-export([acquire_number/1]).
+-export([disconnect_number/1]).
+-export([is_number_billable/1]).
+-export([should_lookup_cnam/0]).
+-export([check_numbers/1]).
+
+-include("knm.hrl").
+
+-define(KNM_CARRIER_NAME, "flowroute").
+-define(KNM_CARRIER_CONFIG_CAT, <<(?KNM_CONFIG_CAT)/binary, ".", ?KNM_CARRIER_NAME>>).
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec info() -> map().
+info() ->
+ #{?CARRIER_INFO_MAX_PREFIX => 3
+ }.
+
+%%------------------------------------------------------------------------------
+%% @doc Is this carrier handling numbers local to the system?
+%%
+%% A non-local (foreign) carrier module makes HTTP requests.
+%% @end
+%%------------------------------------------------------------------------------
+-spec is_local() -> boolean().
+is_local() -> 'false'.
+
+%%------------------------------------------------------------------------------
+%% @doc Check with carrier if these numbers are registered with it.
+%% @end
+%%------------------------------------------------------------------------------
+-spec check_numbers(kz_term:ne_binaries()) -> {'ok', kz_json:object()} |
+ {'error', 'not_implemented'}.
+check_numbers(_Numbers) -> {'error', 'not_implemented'}.
+
+%%------------------------------------------------------------------------------
+%% @doc Query carrier for available numbers.
+%% @end
+%%------------------------------------------------------------------------------
+-spec find_numbers(kz_term:ne_binary(), pos_integer(), knm_carriers:options()) ->
+ {'ok', knm_number:knm_numbers()}.
+find_numbers(_Prefix, _Quantity, _Options) ->
+ {'ok', []}.
+
+%%------------------------------------------------------------------------------
+%% @doc Acquire a given number from carrier.
+%% @end
+%%------------------------------------------------------------------------------
+-spec acquire_number(knm_number:knm_number()) ->
+ no_return().
+acquire_number(Number) ->
+ knm_errors:by_carrier(?MODULE, 'not_implemented', Number).
+
+%%------------------------------------------------------------------------------
+%% @doc Return number back to carrier.
+%% @end
+%%------------------------------------------------------------------------------
+-spec disconnect_number(knm_number:knm_number()) ->
+ no_return().
+disconnect_number(Number) ->
+ knm_errors:by_carrier(?MODULE, 'not_implemented', Number).
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec is_number_billable(knm_phone_number:knm_phone_number()) -> boolean().
+is_number_billable(_Number) -> 'true'.
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec should_lookup_cnam() -> boolean().
+should_lookup_cnam() -> 'true'.
+
+%%%=============================================================================
+%%% Internal functions
+%%%=============================================================================
diff --git a/core/kazoo_number_manager/src/carriers/knm_inteliquent.erl b/core/kazoo_number_manager/src/carriers/knm_inteliquent.erl
new file mode 100644
index 00000000000..de9fd24d1c6
--- /dev/null
+++ b/core/kazoo_number_manager/src/carriers/knm_inteliquent.erl
@@ -0,0 +1,92 @@
+%%%-----------------------------------------------------------------------------
+%%% @copyright (C) 2015-2020, 2600Hz
+%%% @doc Handle client requests for phone number
+%%% @end
+%%%-----------------------------------------------------------------------------
+-module(knm_inteliquent).
+-behaviour(knm_gen_carrier).
+
+-export([info/0]).
+-export([is_local/0]).
+-export([find_numbers/3]).
+-export([acquire_number/1]).
+-export([disconnect_number/1]).
+-export([is_number_billable/1]).
+-export([should_lookup_cnam/0]).
+-export([check_numbers/1]).
+
+-include("knm.hrl").
+
+-define(KNM_CARRIER_NAME, "inteliquent").
+-define(KNM_CARRIER_CONFIG_CAT, <<(?KNM_CONFIG_CAT)/binary, ".", ?KNM_CARRIER_NAME>>).
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec info() -> map().
+info() ->
+ #{?CARRIER_INFO_MAX_PREFIX => 3
+ }.
+
+%%------------------------------------------------------------------------------
+%% @doc Is this carrier handling numbers local to the system?
+%%
+%% A non-local (foreign) carrier module makes HTTP requests.
+%% @end
+%%------------------------------------------------------------------------------
+-spec is_local() -> boolean().
+is_local() -> 'false'.
+
+%%------------------------------------------------------------------------------
+%% @doc Check with carrier if these numbers are registered with it.
+%% @end
+%%------------------------------------------------------------------------------
+-spec check_numbers(kz_term:ne_binaries()) -> {'ok', kz_json:object()} |
+ {'error', 'not_implemented'}.
+check_numbers(_Numbers) -> {'error', 'not_implemented'}.
+
+%%------------------------------------------------------------------------------
+%% @doc Query carrier for available numbers.
+%% @end
+%%------------------------------------------------------------------------------
+-spec find_numbers(kz_term:ne_binary(), pos_integer(), knm_carriers:options()) ->
+ {'ok', knm_number:knm_numbers()}.
+find_numbers(_Prefix, _Quantity, _Options) ->
+ {'ok', []}.
+
+%%------------------------------------------------------------------------------
+%% @doc Acquire a given number from carrier.
+%% @end
+%%------------------------------------------------------------------------------
+-spec acquire_number(knm_number:knm_number()) ->
+ no_return().
+acquire_number(Number) ->
+ knm_errors:by_carrier(?MODULE, 'not_implemented', Number).
+
+%%------------------------------------------------------------------------------
+%% @doc Return number back to carrier.
+%% @end
+%%------------------------------------------------------------------------------
+-spec disconnect_number(knm_number:knm_number()) ->
+ no_return().
+disconnect_number(Number) ->
+ knm_errors:by_carrier(?MODULE, 'not_implemented', Number).
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec is_number_billable(knm_phone_number:knm_phone_number()) -> boolean().
+is_number_billable(_Number) -> 'true'.
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec should_lookup_cnam() -> boolean().
+should_lookup_cnam() -> 'true'.
+
+%%%=============================================================================
+%%% Internal functions
+%%%=============================================================================
diff --git a/core/kazoo_number_manager/src/carriers/knm_inum.erl b/core/kazoo_number_manager/src/carriers/knm_inum.erl
index 50895419ee0..47707828fcf 100644
--- a/core/kazoo_number_manager/src/carriers/knm_inum.erl
+++ b/core/kazoo_number_manager/src/carriers/knm_inum.erl
@@ -43,9 +43,9 @@ is_local() -> 'true'.
%% @doc Check with carrier if these numbers are registered with it.
%% @end
%%------------------------------------------------------------------------------
--spec check_numbers(kz_term:ne_binaries()) -> {ok, kz_json:object()} |
- {error, any()}.
-check_numbers(_Numbers) -> {error, not_implemented}.
+-spec check_numbers(kz_term:ne_binaries()) -> {'ok', kz_json:object()} |
+ {'error', 'not_implemented'}.
+check_numbers(_Numbers) -> {'error', 'not_implemented'}.
%%------------------------------------------------------------------------------
%% @doc Query the local system for a quantity of available numbers
diff --git a/core/kazoo_number_manager/src/carriers/knm_inventory.erl b/core/kazoo_number_manager/src/carriers/knm_inventory.erl
index 6020ec9a388..5f19b74d52a 100644
--- a/core/kazoo_number_manager/src/carriers/knm_inventory.erl
+++ b/core/kazoo_number_manager/src/carriers/knm_inventory.erl
@@ -44,9 +44,9 @@ is_local() -> 'false'.
%% @doc Check with carrier if these numbers are registered with it.
%% @end
%%------------------------------------------------------------------------------
--spec check_numbers(kz_term:ne_binaries()) -> {ok, kz_json:object()} |
- {error, any()}.
-check_numbers(_Numbers) -> {error, not_implemented}.
+-spec check_numbers(kz_term:ne_binaries()) -> {'ok', kz_json:object()} |
+ {'error', 'not_implemented'}.
+check_numbers(_Numbers) -> {'error', 'not_implemented'}.
%%------------------------------------------------------------------------------
%% @doc Query the local system for a quantity of available numbers
diff --git a/core/kazoo_number_manager/src/carriers/knm_it_vocal.erl b/core/kazoo_number_manager/src/carriers/knm_it_vocal.erl
new file mode 100644
index 00000000000..609812a008a
--- /dev/null
+++ b/core/kazoo_number_manager/src/carriers/knm_it_vocal.erl
@@ -0,0 +1,92 @@
+%%%-----------------------------------------------------------------------------
+%%% @copyright (C) 2015-2020, 2600Hz
+%%% @doc Handle client requests for phone number
+%%% @end
+%%%-----------------------------------------------------------------------------
+-module(knm_it_vocal).
+-behaviour(knm_gen_carrier).
+
+-export([info/0]).
+-export([is_local/0]).
+-export([find_numbers/3]).
+-export([acquire_number/1]).
+-export([disconnect_number/1]).
+-export([is_number_billable/1]).
+-export([should_lookup_cnam/0]).
+-export([check_numbers/1]).
+
+-include("knm.hrl").
+
+-define(KNM_CARRIER_NAME, "it_vocal").
+-define(KNM_CARRIER_CONFIG_CAT, <<(?KNM_CONFIG_CAT)/binary, ".", ?KNM_CARRIER_NAME>>).
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec info() -> map().
+info() ->
+ #{?CARRIER_INFO_MAX_PREFIX => 3
+ }.
+
+%%------------------------------------------------------------------------------
+%% @doc Is this carrier handling numbers local to the system?
+%%
+%% A non-local (foreign) carrier module makes HTTP requests.
+%% @end
+%%------------------------------------------------------------------------------
+-spec is_local() -> boolean().
+is_local() -> 'false'.
+
+%%------------------------------------------------------------------------------
+%% @doc Check with carrier if these numbers are registered with it.
+%% @end
+%%------------------------------------------------------------------------------
+-spec check_numbers(kz_term:ne_binaries()) -> {'ok', kz_json:object()} |
+ {'error', 'not_implemented'}.
+check_numbers(_Numbers) -> {'error', 'not_implemented'}.
+
+%%------------------------------------------------------------------------------
+%% @doc Query carrier for available numbers.
+%% @end
+%%------------------------------------------------------------------------------
+-spec find_numbers(kz_term:ne_binary(), pos_integer(), knm_carriers:options()) ->
+ {'ok', knm_number:knm_numbers()}.
+find_numbers(_Prefix, _Quantity, _Options) ->
+ {'ok', []}.
+
+%%------------------------------------------------------------------------------
+%% @doc Acquire a given number from carrier.
+%% @end
+%%------------------------------------------------------------------------------
+-spec acquire_number(knm_number:knm_number()) ->
+ no_return().
+acquire_number(Number) ->
+ knm_errors:by_carrier(?MODULE, 'not_implemented', Number).
+
+%%------------------------------------------------------------------------------
+%% @doc Return number back to carrier.
+%% @end
+%%------------------------------------------------------------------------------
+-spec disconnect_number(knm_number:knm_number()) ->
+ no_return().
+disconnect_number(Number) ->
+ knm_errors:by_carrier(?MODULE, 'not_implemented', Number).
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec is_number_billable(knm_phone_number:knm_phone_number()) -> boolean().
+is_number_billable(_Number) -> 'true'.
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec should_lookup_cnam() -> boolean().
+should_lookup_cnam() -> 'true'.
+
+%%%=============================================================================
+%%% Internal functions
+%%%=============================================================================
diff --git a/core/kazoo_number_manager/src/carriers/knm_level3.erl b/core/kazoo_number_manager/src/carriers/knm_level3.erl
new file mode 100644
index 00000000000..d5df91b78ac
--- /dev/null
+++ b/core/kazoo_number_manager/src/carriers/knm_level3.erl
@@ -0,0 +1,92 @@
+%%%-----------------------------------------------------------------------------
+%%% @copyright (C) 2015-2020, 2600Hz
+%%% @doc Handle client requests for phone number
+%%% @end
+%%%-----------------------------------------------------------------------------
+-module(knm_level3).
+-behaviour(knm_gen_carrier).
+
+-export([info/0]).
+-export([is_local/0]).
+-export([find_numbers/3]).
+-export([acquire_number/1]).
+-export([disconnect_number/1]).
+-export([is_number_billable/1]).
+-export([should_lookup_cnam/0]).
+-export([check_numbers/1]).
+
+-include("knm.hrl").
+
+-define(KNM_CARRIER_NAME, "level3").
+-define(KNM_CARRIER_CONFIG_CAT, <<(?KNM_CONFIG_CAT)/binary, ".", ?KNM_CARRIER_NAME>>).
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec info() -> map().
+info() ->
+ #{?CARRIER_INFO_MAX_PREFIX => 3
+ }.
+
+%%------------------------------------------------------------------------------
+%% @doc Is this carrier handling numbers local to the system?
+%%
+%% A non-local (foreign) carrier module makes HTTP requests.
+%% @end
+%%------------------------------------------------------------------------------
+-spec is_local() -> boolean().
+is_local() -> 'false'.
+
+%%------------------------------------------------------------------------------
+%% @doc Check with carrier if these numbers are registered with it.
+%% @end
+%%------------------------------------------------------------------------------
+-spec check_numbers(kz_term:ne_binaries()) -> {'ok', kz_json:object()} |
+ {'error', 'not_implemented'}.
+check_numbers(_Numbers) -> {'error', 'not_implemented'}.
+
+%%------------------------------------------------------------------------------
+%% @doc Query carrier for available numbers.
+%% @end
+%%------------------------------------------------------------------------------
+-spec find_numbers(kz_term:ne_binary(), pos_integer(), knm_carriers:options()) ->
+ {'ok', knm_number:knm_numbers()}.
+find_numbers(_Prefix, _Quantity, _Options) ->
+ {'ok', []}.
+
+%%------------------------------------------------------------------------------
+%% @doc Acquire a given number from carrier.
+%% @end
+%%------------------------------------------------------------------------------
+-spec acquire_number(knm_number:knm_number()) ->
+ no_return().
+acquire_number(Number) ->
+ knm_errors:by_carrier(?MODULE, 'not_implemented', Number).
+
+%%------------------------------------------------------------------------------
+%% @doc Return number back to carrier.
+%% @end
+%%------------------------------------------------------------------------------
+-spec disconnect_number(knm_number:knm_number()) ->
+ no_return().
+disconnect_number(Number) ->
+ knm_errors:by_carrier(?MODULE, 'not_implemented', Number).
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec is_number_billable(knm_phone_number:knm_phone_number()) -> boolean().
+is_number_billable(_Number) -> 'true'.
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec should_lookup_cnam() -> boolean().
+should_lookup_cnam() -> 'true'.
+
+%%%=============================================================================
+%%% Internal functions
+%%%=============================================================================
diff --git a/core/kazoo_number_manager/src/carriers/knm_local.erl b/core/kazoo_number_manager/src/carriers/knm_local.erl
index 6fbfec4961b..6e99fffa888 100644
--- a/core/kazoo_number_manager/src/carriers/knm_local.erl
+++ b/core/kazoo_number_manager/src/carriers/knm_local.erl
@@ -44,9 +44,9 @@ is_local() -> 'true'.
%% @doc Check with carrier if these numbers are registered with it.
%% @end
%%------------------------------------------------------------------------------
--spec check_numbers(kz_term:ne_binaries()) -> {ok, kz_json:object()} |
- {error, any()}.
-check_numbers(_Numbers) -> {error, not_implemented}.
+-spec check_numbers(kz_term:ne_binaries()) -> {'ok', kz_json:object()} |
+ {'error', 'not_implemented'}.
+check_numbers(_Numbers) -> {'error', 'not_implemented'}.
%%------------------------------------------------------------------------------
%% @doc Query the local system for a quantity of available numbers
diff --git a/core/kazoo_number_manager/src/carriers/knm_managed.erl b/core/kazoo_number_manager/src/carriers/knm_managed.erl
index 7490a706729..e275cb266c7 100644
--- a/core/kazoo_number_manager/src/carriers/knm_managed.erl
+++ b/core/kazoo_number_manager/src/carriers/knm_managed.erl
@@ -44,9 +44,9 @@ is_local() -> 'true'.
%% @doc Check with carrier if these numbers are registered with it.
%% @end
%%------------------------------------------------------------------------------
--spec check_numbers(kz_term:ne_binaries()) -> {ok, kz_json:object()} |
- {error, any()}.
-check_numbers(_Numbers) -> {error, not_implemented}.
+-spec check_numbers(kz_term:ne_binaries()) -> {'ok', kz_json:object()} |
+ {'error', 'not_implemented'}.
+check_numbers(_Numbers) -> {'error', 'not_implemented'}.
%%------------------------------------------------------------------------------
%% @doc Query the local system for a quantity of available numbers
diff --git a/core/kazoo_number_manager/src/carriers/knm_mdn.erl b/core/kazoo_number_manager/src/carriers/knm_mdn.erl
index bcbdf8962be..721e9dbe4f4 100644
--- a/core/kazoo_number_manager/src/carriers/knm_mdn.erl
+++ b/core/kazoo_number_manager/src/carriers/knm_mdn.erl
@@ -40,9 +40,9 @@ is_local() -> 'false'.
%% @doc Check with carrier if these numbers are registered with it.
%% @end
%%------------------------------------------------------------------------------
--spec check_numbers(kz_term:ne_binaries()) -> {ok, kz_json:object()} |
- {error, any()}.
-check_numbers(_Numbers) -> {error, not_implemented}.
+-spec check_numbers(kz_term:ne_binaries()) -> {'ok', kz_json:object()} |
+ {'error', 'not_implemented'}.
+check_numbers(_Numbers) -> {'error', 'not_implemented'}.
%%------------------------------------------------------------------------------
%% @doc Query the local system for a quantity of available numbers
diff --git a/core/kazoo_number_manager/src/carriers/knm_o1.erl b/core/kazoo_number_manager/src/carriers/knm_o1.erl
new file mode 100644
index 00000000000..7020946f871
--- /dev/null
+++ b/core/kazoo_number_manager/src/carriers/knm_o1.erl
@@ -0,0 +1,92 @@
+%%%-----------------------------------------------------------------------------
+%%% @copyright (C) 2015-2020, 2600Hz
+%%% @doc Handle client requests for phone number
+%%% @end
+%%%-----------------------------------------------------------------------------
+-module(knm_o1).
+-behaviour(knm_gen_carrier).
+
+-export([info/0]).
+-export([is_local/0]).
+-export([find_numbers/3]).
+-export([acquire_number/1]).
+-export([disconnect_number/1]).
+-export([is_number_billable/1]).
+-export([should_lookup_cnam/0]).
+-export([check_numbers/1]).
+
+-include("knm.hrl").
+
+-define(KNM_CARRIER_NAME, "o1").
+-define(KNM_CARRIER_CONFIG_CAT, <<(?KNM_CONFIG_CAT)/binary, ".", ?KNM_CARRIER_NAME>>).
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec info() -> map().
+info() ->
+ #{?CARRIER_INFO_MAX_PREFIX => 3
+ }.
+
+%%------------------------------------------------------------------------------
+%% @doc Is this carrier handling numbers local to the system?
+%%
+%% A non-local (foreign) carrier module makes HTTP requests.
+%% @end
+%%------------------------------------------------------------------------------
+-spec is_local() -> boolean().
+is_local() -> 'false'.
+
+%%------------------------------------------------------------------------------
+%% @doc Check with carrier if these numbers are registered with it.
+%% @end
+%%------------------------------------------------------------------------------
+-spec check_numbers(kz_term:ne_binaries()) -> {'ok', kz_json:object()} |
+ {'error', 'not_implemented'}.
+check_numbers(_Numbers) -> {'error', 'not_implemented'}.
+
+%%------------------------------------------------------------------------------
+%% @doc Query carrier for available numbers.
+%% @end
+%%------------------------------------------------------------------------------
+-spec find_numbers(kz_term:ne_binary(), pos_integer(), knm_carriers:options()) ->
+ {'ok', knm_number:knm_numbers()}.
+find_numbers(_Prefix, _Quantity, _Options) ->
+ {'ok', []}.
+
+%%------------------------------------------------------------------------------
+%% @doc Acquire a given number from carrier.
+%% @end
+%%------------------------------------------------------------------------------
+-spec acquire_number(knm_number:knm_number()) ->
+ no_return().
+acquire_number(Number) ->
+ knm_errors:by_carrier(?MODULE, 'not_implemented', Number).
+
+%%------------------------------------------------------------------------------
+%% @doc Return number back to carrier.
+%% @end
+%%------------------------------------------------------------------------------
+-spec disconnect_number(knm_number:knm_number()) ->
+ no_return().
+disconnect_number(Number) ->
+ knm_errors:by_carrier(?MODULE, 'not_implemented', Number).
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec is_number_billable(knm_phone_number:knm_phone_number()) -> boolean().
+is_number_billable(_Number) -> 'true'.
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec should_lookup_cnam() -> boolean().
+should_lookup_cnam() -> 'true'.
+
+%%%=============================================================================
+%%% Internal functions
+%%%=============================================================================
diff --git a/core/kazoo_number_manager/src/carriers/knm_peerless.erl b/core/kazoo_number_manager/src/carriers/knm_peerless.erl
new file mode 100644
index 00000000000..48aeacfe1f9
--- /dev/null
+++ b/core/kazoo_number_manager/src/carriers/knm_peerless.erl
@@ -0,0 +1,92 @@
+%%%-----------------------------------------------------------------------------
+%%% @copyright (C) 2015-2020, 2600Hz
+%%% @doc Handle client requests for phone number
+%%% @end
+%%%-----------------------------------------------------------------------------
+-module(knm_peerless).
+-behaviour(knm_gen_carrier).
+
+-export([info/0]).
+-export([is_local/0]).
+-export([find_numbers/3]).
+-export([acquire_number/1]).
+-export([disconnect_number/1]).
+-export([is_number_billable/1]).
+-export([should_lookup_cnam/0]).
+-export([check_numbers/1]).
+
+-include("knm.hrl").
+
+-define(KNM_CARRIER_NAME, "peerless").
+-define(KNM_CARRIER_CONFIG_CAT, <<(?KNM_CONFIG_CAT)/binary, ".", ?KNM_CARRIER_NAME>>).
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec info() -> map().
+info() ->
+ #{?CARRIER_INFO_MAX_PREFIX => 3
+ }.
+
+%%------------------------------------------------------------------------------
+%% @doc Is this carrier handling numbers local to the system?
+%%
+%% A non-local (foreign) carrier module makes HTTP requests.
+%% @end
+%%------------------------------------------------------------------------------
+-spec is_local() -> boolean().
+is_local() -> 'false'.
+
+%%------------------------------------------------------------------------------
+%% @doc Check with carrier if these numbers are registered with it.
+%% @end
+%%------------------------------------------------------------------------------
+-spec check_numbers(kz_term:ne_binaries()) -> {'ok', kz_json:object()} |
+ {'error', 'not_implemented'}.
+check_numbers(_Numbers) -> {'error', 'not_implemented'}.
+
+%%------------------------------------------------------------------------------
+%% @doc Query carrier for available numbers.
+%% @end
+%%------------------------------------------------------------------------------
+-spec find_numbers(kz_term:ne_binary(), pos_integer(), knm_carriers:options()) ->
+ {'ok', knm_number:knm_numbers()}.
+find_numbers(_Prefix, _Quantity, _Options) ->
+ {'ok', []}.
+
+%%------------------------------------------------------------------------------
+%% @doc Acquire a given number from carrier.
+%% @end
+%%------------------------------------------------------------------------------
+-spec acquire_number(knm_number:knm_number()) ->
+ no_return().
+acquire_number(Number) ->
+ knm_errors:by_carrier(?MODULE, 'not_implemented', Number).
+
+%%------------------------------------------------------------------------------
+%% @doc Return number back to carrier.
+%% @end
+%%------------------------------------------------------------------------------
+-spec disconnect_number(knm_number:knm_number()) ->
+ no_return().
+disconnect_number(Number) ->
+ knm_errors:by_carrier(?MODULE, 'not_implemented', Number).
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec is_number_billable(knm_phone_number:knm_phone_number()) -> boolean().
+is_number_billable(_Number) -> 'true'.
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec should_lookup_cnam() -> boolean().
+should_lookup_cnam() -> 'true'.
+
+%%%=============================================================================
+%%% Internal functions
+%%%=============================================================================
diff --git a/core/kazoo_number_manager/src/carriers/knm_reserved.erl b/core/kazoo_number_manager/src/carriers/knm_reserved.erl
index e47cfaf7168..fd4b03d882e 100644
--- a/core/kazoo_number_manager/src/carriers/knm_reserved.erl
+++ b/core/kazoo_number_manager/src/carriers/knm_reserved.erl
@@ -40,9 +40,9 @@ is_local() -> 'true'.
%% @doc Check with carrier if these numbers are registered with it.
%% @end
%%------------------------------------------------------------------------------
--spec check_numbers(kz_term:ne_binaries()) -> {ok, kz_json:object()} |
- {error, any()}.
-check_numbers(_Numbers) -> {error, not_implemented}.
+-spec check_numbers(kz_term:ne_binaries()) -> {'ok', kz_json:object()} |
+ {'error', 'not_implemented'}.
+check_numbers(_Numbers) -> {'error', 'not_implemented'}.
%%------------------------------------------------------------------------------
%% @doc Query the local system for a quantity of reserved numbers
diff --git a/core/kazoo_number_manager/src/carriers/knm_reserved_reseller.erl b/core/kazoo_number_manager/src/carriers/knm_reserved_reseller.erl
index 305f54adf1e..1ee9cab7b64 100644
--- a/core/kazoo_number_manager/src/carriers/knm_reserved_reseller.erl
+++ b/core/kazoo_number_manager/src/carriers/knm_reserved_reseller.erl
@@ -40,9 +40,9 @@ is_local() -> 'true'.
%% @doc Check with carrier if these numbers are registered with it.
%% @end
%%------------------------------------------------------------------------------
--spec check_numbers(kz_term:ne_binaries()) -> {ok, kz_json:object()} |
- {error, any()}.
-check_numbers(_Numbers) -> {error, not_implemented}.
+-spec check_numbers(kz_term:ne_binaries()) -> {'ok', kz_json:object()} |
+ {'error', 'not_implemented'}.
+check_numbers(_Numbers) -> {'error', 'not_implemented'}.
%%------------------------------------------------------------------------------
%% @doc Query the local system for a quantity of reserved numbers
diff --git a/core/kazoo_number_manager/src/carriers/knm_simwood.erl b/core/kazoo_number_manager/src/carriers/knm_simwood.erl
index 4d8c7062f27..d581f030451 100644
--- a/core/kazoo_number_manager/src/carriers/knm_simwood.erl
+++ b/core/kazoo_number_manager/src/carriers/knm_simwood.erl
@@ -59,9 +59,9 @@ is_local() -> 'false'.
%% @doc Check with carrier if these numbers are registered with it.
%% @end
%%------------------------------------------------------------------------------
--spec check_numbers(kz_term:ne_binaries()) -> {ok, kz_json:object()} |
- {error, any()}.
-check_numbers(_Numbers) -> {error, not_implemented}.
+-spec check_numbers(kz_term:ne_binaries()) -> {'ok', kz_json:object()} |
+ {'error', 'not_implemented'}.
+check_numbers(_Numbers) -> {'error', 'not_implemented'}.
%%------------------------------------------------------------------------------
%% @doc Query Simwood for available numbers.
diff --git a/core/kazoo_number_manager/src/carriers/knm_thinq.erl b/core/kazoo_number_manager/src/carriers/knm_thinq.erl
new file mode 100644
index 00000000000..d7886a52d50
--- /dev/null
+++ b/core/kazoo_number_manager/src/carriers/knm_thinq.erl
@@ -0,0 +1,92 @@
+%%%-----------------------------------------------------------------------------
+%%% @copyright (C) 2015-2020, 2600Hz
+%%% @doc Handle client requests for phone number
+%%% @end
+%%%-----------------------------------------------------------------------------
+-module(knm_thinq).
+-behaviour(knm_gen_carrier).
+
+-export([info/0]).
+-export([is_local/0]).
+-export([find_numbers/3]).
+-export([acquire_number/1]).
+-export([disconnect_number/1]).
+-export([is_number_billable/1]).
+-export([should_lookup_cnam/0]).
+-export([check_numbers/1]).
+
+-include("knm.hrl").
+
+-define(KNM_CARRIER_NAME, "thinq").
+-define(KNM_CARRIER_CONFIG_CAT, <<(?KNM_CONFIG_CAT)/binary, ".", ?KNM_CARRIER_NAME>>).
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec info() -> map().
+info() ->
+ #{?CARRIER_INFO_MAX_PREFIX => 3
+ }.
+
+%%------------------------------------------------------------------------------
+%% @doc Is this carrier handling numbers local to the system?
+%%
+%% A non-local (foreign) carrier module makes HTTP requests.
+%% @end
+%%------------------------------------------------------------------------------
+-spec is_local() -> boolean().
+is_local() -> 'false'.
+
+%%------------------------------------------------------------------------------
+%% @doc Check with carrier if these numbers are registered with it.
+%% @end
+%%------------------------------------------------------------------------------
+-spec check_numbers(kz_term:ne_binaries()) -> {'ok', kz_json:object()} |
+ {'error', 'not_implemented'}.
+check_numbers(_Numbers) -> {'error', 'not_implemented'}.
+
+%%------------------------------------------------------------------------------
+%% @doc Query carrier for available numbers.
+%% @end
+%%------------------------------------------------------------------------------
+-spec find_numbers(kz_term:ne_binary(), pos_integer(), knm_carriers:options()) ->
+ {'ok', knm_number:knm_numbers()}.
+find_numbers(_Prefix, _Quantity, _Options) ->
+ {'ok', []}.
+
+%%------------------------------------------------------------------------------
+%% @doc Acquire a given number from carrier.
+%% @end
+%%------------------------------------------------------------------------------
+-spec acquire_number(knm_number:knm_number()) ->
+ no_return().
+acquire_number(Number) ->
+ knm_errors:by_carrier(?MODULE, 'not_implemented', Number).
+
+%%------------------------------------------------------------------------------
+%% @doc Return number back to carrier.
+%% @end
+%%------------------------------------------------------------------------------
+-spec disconnect_number(knm_number:knm_number()) ->
+ no_return().
+disconnect_number(Number) ->
+ knm_errors:by_carrier(?MODULE, 'not_implemented', Number).
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec is_number_billable(knm_phone_number:knm_phone_number()) -> boolean().
+is_number_billable(_Number) -> 'true'.
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec should_lookup_cnam() -> boolean().
+should_lookup_cnam() -> 'true'.
+
+%%%=============================================================================
+%%% Internal functions
+%%%=============================================================================
diff --git a/core/kazoo_number_manager/src/carriers/knm_verizon.erl b/core/kazoo_number_manager/src/carriers/knm_verizon.erl
new file mode 100644
index 00000000000..9045a0cf08b
--- /dev/null
+++ b/core/kazoo_number_manager/src/carriers/knm_verizon.erl
@@ -0,0 +1,92 @@
+%%%-----------------------------------------------------------------------------
+%%% @copyright (C) 2015-2020, 2600Hz
+%%% @doc Handle client requests for phone number
+%%% @end
+%%%-----------------------------------------------------------------------------
+-module(knm_verizon).
+-behaviour(knm_gen_carrier).
+
+-export([info/0]).
+-export([is_local/0]).
+-export([find_numbers/3]).
+-export([acquire_number/1]).
+-export([disconnect_number/1]).
+-export([is_number_billable/1]).
+-export([should_lookup_cnam/0]).
+-export([check_numbers/1]).
+
+-include("knm.hrl").
+
+-define(KNM_CARRIER_NAME, "verizon").
+-define(KNM_CARRIER_CONFIG_CAT, <<(?KNM_CONFIG_CAT)/binary, ".", ?KNM_CARRIER_NAME>>).
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec info() -> map().
+info() ->
+ #{?CARRIER_INFO_MAX_PREFIX => 3
+ }.
+
+%%------------------------------------------------------------------------------
+%% @doc Is this carrier handling numbers local to the system?
+%%
+%% A non-local (foreign) carrier module makes HTTP requests.
+%% @end
+%%------------------------------------------------------------------------------
+-spec is_local() -> boolean().
+is_local() -> 'false'.
+
+%%------------------------------------------------------------------------------
+%% @doc Check with carrier if these numbers are registered with it.
+%% @end
+%%------------------------------------------------------------------------------
+-spec check_numbers(kz_term:ne_binaries()) -> {'ok', kz_json:object()} |
+ {'error', 'not_implemented'}.
+check_numbers(_Numbers) -> {'error', 'not_implemented'}.
+
+%%------------------------------------------------------------------------------
+%% @doc Query carrier for available numbers.
+%% @end
+%%------------------------------------------------------------------------------
+-spec find_numbers(kz_term:ne_binary(), pos_integer(), knm_carriers:options()) ->
+ {'ok', knm_number:knm_numbers()}.
+find_numbers(_Prefix, _Quantity, _Options) ->
+ {'ok', []}.
+
+%%------------------------------------------------------------------------------
+%% @doc Acquire a given number from carrier.
+%% @end
+%%------------------------------------------------------------------------------
+-spec acquire_number(knm_number:knm_number()) ->
+ no_return().
+acquire_number(Number) ->
+ knm_errors:by_carrier(?MODULE, 'not_implemented', Number).
+
+%%------------------------------------------------------------------------------
+%% @doc Return number back to carrier.
+%% @end
+%%------------------------------------------------------------------------------
+-spec disconnect_number(knm_number:knm_number()) ->
+ no_return().
+disconnect_number(Number) ->
+ knm_errors:by_carrier(?MODULE, 'not_implemented', Number).
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec is_number_billable(knm_phone_number:knm_phone_number()) -> boolean().
+is_number_billable(_Number) -> 'true'.
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec should_lookup_cnam() -> boolean().
+should_lookup_cnam() -> 'true'.
+
+%%%=============================================================================
+%%% Internal functions
+%%%=============================================================================
diff --git a/core/kazoo_number_manager/src/carriers/knm_vitelity.erl b/core/kazoo_number_manager/src/carriers/knm_vitelity.erl
index 1dd3ce79c99..5dc4ad8d4f8 100644
--- a/core/kazoo_number_manager/src/carriers/knm_vitelity.erl
+++ b/core/kazoo_number_manager/src/carriers/knm_vitelity.erl
@@ -43,9 +43,9 @@ is_local() -> 'false'.
%% @doc Check with carrier if these numbers are registered with it.
%% @end
%%------------------------------------------------------------------------------
--spec check_numbers(kz_term:ne_binaries()) -> {ok, kz_json:object()} |
- {error, any()}.
-check_numbers(_Numbers) -> {error, not_implemented}.
+-spec check_numbers(kz_term:ne_binaries()) -> {'ok', kz_json:object()} |
+ {'error', 'not_implemented'}.
+check_numbers(_Numbers) -> {'error', 'not_implemented'}.
%%------------------------------------------------------------------------------
%% @doc Query the Vitelity system for a quantity of available numbers
diff --git a/core/kazoo_number_manager/src/carriers/knm_voip_innovations.erl b/core/kazoo_number_manager/src/carriers/knm_voip_innovations.erl
index 8c2b945251c..215c6632acf 100644
--- a/core/kazoo_number_manager/src/carriers/knm_voip_innovations.erl
+++ b/core/kazoo_number_manager/src/carriers/knm_voip_innovations.erl
@@ -100,9 +100,9 @@ is_number_billable(_Number) -> 'true'.
%% @doc Check with carrier if these numbers are registered with it.
%% @end
%%------------------------------------------------------------------------------
--spec check_numbers(kz_term:ne_binaries()) -> {ok, kz_json:object()} |
- {error, any()}.
-check_numbers(_Numbers) -> {error, not_implemented}.
+-spec check_numbers(kz_term:ne_binaries()) -> {'ok', kz_json:object()} |
+ {'error', 'not_implemented'}.
+check_numbers(_Numbers) -> {'error', 'not_implemented'}.
%%------------------------------------------------------------------------------
diff --git a/core/kazoo_number_manager/src/carriers/knm_voxbone.erl b/core/kazoo_number_manager/src/carriers/knm_voxbone.erl
new file mode 100644
index 00000000000..2b4e4f41813
--- /dev/null
+++ b/core/kazoo_number_manager/src/carriers/knm_voxbone.erl
@@ -0,0 +1,92 @@
+%%%-----------------------------------------------------------------------------
+%%% @copyright (C) 2015-2020, 2600Hz
+%%% @doc Handle client requests for phone number
+%%% @end
+%%%-----------------------------------------------------------------------------
+-module(knm_voxbone).
+-behaviour(knm_gen_carrier).
+
+-export([info/0]).
+-export([is_local/0]).
+-export([find_numbers/3]).
+-export([acquire_number/1]).
+-export([disconnect_number/1]).
+-export([is_number_billable/1]).
+-export([should_lookup_cnam/0]).
+-export([check_numbers/1]).
+
+-include("knm.hrl").
+
+-define(KNM_CARRIER_NAME, "voxbone").
+-define(KNM_CARRIER_CONFIG_CAT, <<(?KNM_CONFIG_CAT)/binary, ".", ?KNM_CARRIER_NAME>>).
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec info() -> map().
+info() ->
+ #{?CARRIER_INFO_MAX_PREFIX => 3
+ }.
+
+%%------------------------------------------------------------------------------
+%% @doc Is this carrier handling numbers local to the system?
+%%
+%% A non-local (foreign) carrier module makes HTTP requests.
+%% @end
+%%------------------------------------------------------------------------------
+-spec is_local() -> boolean().
+is_local() -> 'false'.
+
+%%------------------------------------------------------------------------------
+%% @doc Check with carrier if these numbers are registered with it.
+%% @end
+%%------------------------------------------------------------------------------
+-spec check_numbers(kz_term:ne_binaries()) -> {'ok', kz_json:object()} |
+ {'error', 'not_implemented'}.
+check_numbers(_Numbers) -> {'error', 'not_implemented'}.
+
+%%------------------------------------------------------------------------------
+%% @doc Query carrier for available numbers.
+%% @end
+%%------------------------------------------------------------------------------
+-spec find_numbers(kz_term:ne_binary(), pos_integer(), knm_carriers:options()) ->
+ {'ok', knm_number:knm_numbers()}.
+find_numbers(_Prefix, _Quantity, _Options) ->
+ {'ok', []}.
+
+%%------------------------------------------------------------------------------
+%% @doc Acquire a given number from carrier.
+%% @end
+%%------------------------------------------------------------------------------
+-spec acquire_number(knm_number:knm_number()) ->
+ no_return().
+acquire_number(Number) ->
+ knm_errors:by_carrier(?MODULE, 'not_implemented', Number).
+
+%%------------------------------------------------------------------------------
+%% @doc Return number back to carrier.
+%% @end
+%%------------------------------------------------------------------------------
+-spec disconnect_number(knm_number:knm_number()) ->
+ no_return().
+disconnect_number(Number) ->
+ knm_errors:by_carrier(?MODULE, 'not_implemented', Number).
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec is_number_billable(knm_phone_number:knm_phone_number()) -> boolean().
+is_number_billable(_Number) -> 'true'.
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec should_lookup_cnam() -> boolean().
+should_lookup_cnam() -> 'true'.
+
+%%%=============================================================================
+%%% Internal functions
+%%%=============================================================================
diff --git a/core/kazoo_number_manager/src/carriers/knm_windstream.erl b/core/kazoo_number_manager/src/carriers/knm_windstream.erl
new file mode 100644
index 00000000000..b27949c5864
--- /dev/null
+++ b/core/kazoo_number_manager/src/carriers/knm_windstream.erl
@@ -0,0 +1,92 @@
+%%%-----------------------------------------------------------------------------
+%%% @copyright (C) 2015-2020, 2600Hz
+%%% @doc Handle client requests for phone number
+%%% @end
+%%%-----------------------------------------------------------------------------
+-module(knm_windstream).
+-behaviour(knm_gen_carrier).
+
+-export([info/0]).
+-export([is_local/0]).
+-export([find_numbers/3]).
+-export([acquire_number/1]).
+-export([disconnect_number/1]).
+-export([is_number_billable/1]).
+-export([should_lookup_cnam/0]).
+-export([check_numbers/1]).
+
+-include("knm.hrl").
+
+-define(KNM_CARRIER_NAME, "windstream").
+-define(KNM_CARRIER_CONFIG_CAT, <<(?KNM_CONFIG_CAT)/binary, ".", ?KNM_CARRIER_NAME>>).
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec info() -> map().
+info() ->
+ #{?CARRIER_INFO_MAX_PREFIX => 3
+ }.
+
+%%------------------------------------------------------------------------------
+%% @doc Is this carrier handling numbers local to the system?
+%%
+%% A non-local (foreign) carrier module makes HTTP requests.
+%% @end
+%%------------------------------------------------------------------------------
+-spec is_local() -> boolean().
+is_local() -> 'false'.
+
+%%------------------------------------------------------------------------------
+%% @doc Check with carrier if these numbers are registered with it.
+%% @end
+%%------------------------------------------------------------------------------
+-spec check_numbers(kz_term:ne_binaries()) -> {'ok', kz_json:object()} |
+ {'error', 'not_implemented'}.
+check_numbers(_Numbers) -> {'error', 'not_implemented'}.
+
+%%------------------------------------------------------------------------------
+%% @doc Query carrier for available numbers.
+%% @end
+%%------------------------------------------------------------------------------
+-spec find_numbers(kz_term:ne_binary(), pos_integer(), knm_carriers:options()) ->
+ {'ok', knm_number:knm_numbers()}.
+find_numbers(_Prefix, _Quantity, _Options) ->
+ {'ok', []}.
+
+%%------------------------------------------------------------------------------
+%% @doc Acquire a given number from carrier.
+%% @end
+%%------------------------------------------------------------------------------
+-spec acquire_number(knm_number:knm_number()) ->
+ no_return().
+acquire_number(Number) ->
+ knm_errors:by_carrier(?MODULE, 'not_implemented', Number).
+
+%%------------------------------------------------------------------------------
+%% @doc Return number back to carrier.
+%% @end
+%%------------------------------------------------------------------------------
+-spec disconnect_number(knm_number:knm_number()) ->
+ no_return().
+disconnect_number(Number) ->
+ knm_errors:by_carrier(?MODULE, 'not_implemented', Number).
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec is_number_billable(knm_phone_number:knm_phone_number()) -> boolean().
+is_number_billable(_Number) -> 'true'.
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec should_lookup_cnam() -> boolean().
+should_lookup_cnam() -> 'true'.
+
+%%%=============================================================================
+%%% Internal functions
+%%%=============================================================================
diff --git a/core/kazoo_number_manager/src/carriers/knm_ziron.erl b/core/kazoo_number_manager/src/carriers/knm_ziron.erl
new file mode 100644
index 00000000000..7a080280e36
--- /dev/null
+++ b/core/kazoo_number_manager/src/carriers/knm_ziron.erl
@@ -0,0 +1,92 @@
+%%%-----------------------------------------------------------------------------
+%%% @copyright (C) 2015-2020, 2600Hz
+%%% @doc Handle client requests for phone number
+%%% @end
+%%%-----------------------------------------------------------------------------
+-module(knm_ziron).
+-behaviour(knm_gen_carrier).
+
+-export([info/0]).
+-export([is_local/0]).
+-export([find_numbers/3]).
+-export([acquire_number/1]).
+-export([disconnect_number/1]).
+-export([is_number_billable/1]).
+-export([should_lookup_cnam/0]).
+-export([check_numbers/1]).
+
+-include("knm.hrl").
+
+-define(KNM_CARRIER_NAME, "ziron").
+-define(KNM_CARRIER_CONFIG_CAT, <<(?KNM_CONFIG_CAT)/binary, ".", ?KNM_CARRIER_NAME>>).
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec info() -> map().
+info() ->
+ #{?CARRIER_INFO_MAX_PREFIX => 3
+ }.
+
+%%------------------------------------------------------------------------------
+%% @doc Is this carrier handling numbers local to the system?
+%%
+%% A non-local (foreign) carrier module makes HTTP requests.
+%% @end
+%%------------------------------------------------------------------------------
+-spec is_local() -> boolean().
+is_local() -> 'false'.
+
+%%------------------------------------------------------------------------------
+%% @doc Check with carrier if these numbers are registered with it.
+%% @end
+%%------------------------------------------------------------------------------
+-spec check_numbers(kz_term:ne_binaries()) -> {'ok', kz_json:object()} |
+ {'error', 'not_implemented'}.
+check_numbers(_Numbers) -> {'error', 'not_implemented'}.
+
+%%------------------------------------------------------------------------------
+%% @doc Query carrier for available numbers.
+%% @end
+%%------------------------------------------------------------------------------
+-spec find_numbers(kz_term:ne_binary(), pos_integer(), knm_carriers:options()) ->
+ {'ok', knm_number:knm_numbers()}.
+find_numbers(_Prefix, _Quantity, _Options) ->
+ {'ok', []}.
+
+%%------------------------------------------------------------------------------
+%% @doc Acquire a given number from carrier.
+%% @end
+%%------------------------------------------------------------------------------
+-spec acquire_number(knm_number:knm_number()) ->
+ no_return().
+acquire_number(Number) ->
+ knm_errors:by_carrier(?MODULE, 'not_implemented', Number).
+
+%%------------------------------------------------------------------------------
+%% @doc Return number back to carrier.
+%% @end
+%%------------------------------------------------------------------------------
+-spec disconnect_number(knm_number:knm_number()) ->
+ no_return().
+disconnect_number(Number) ->
+ knm_errors:by_carrier(?MODULE, 'not_implemented', Number).
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec is_number_billable(knm_phone_number:knm_phone_number()) -> boolean().
+is_number_billable(_Number) -> 'true'.
+
+%%------------------------------------------------------------------------------
+%% @doc
+%% @end
+%%------------------------------------------------------------------------------
+-spec should_lookup_cnam() -> boolean().
+should_lookup_cnam() -> 'true'.
+
+%%%=============================================================================
+%%% Internal functions
+%%%=============================================================================
diff --git a/core/kazoo_number_manager/src/knm_gen_carrier.erl b/core/kazoo_number_manager/src/knm_gen_carrier.erl
index 6bed244d75d..7ade18c4e36 100644
--- a/core/kazoo_number_manager/src/knm_gen_carrier.erl
+++ b/core/kazoo_number_manager/src/knm_gen_carrier.erl
@@ -15,10 +15,10 @@
{'error', any()}.
-callback acquire_number(knm_number:knm_number()) ->
- knm_number:knm_number().
+ knm_number:knm_number() | no_return().
-callback disconnect_number(knm_number:knm_number()) ->
- knm_number:knm_number().
+ knm_number:knm_number() | no_return().
-callback should_lookup_cnam() ->
boolean().
@@ -45,12 +45,12 @@
-spec configuration(carrier()) -> kz_json:object().
configuration(Carrier) ->
- try carrier_callback(Carrier, configuration, []) of
- no_callback -> default_config(Carrier);
+ try carrier_callback(Carrier, 'configuration', []) of
+ 'no_callback' -> default_config(Carrier);
Value ->
case kz_json:is_json_object(Value) of
- true -> Value;
- false -> default_config(Carrier)
+ 'true' -> Value;
+ 'false' -> default_config(Carrier)
end
catch
_ -> kz_json:new()
@@ -59,7 +59,7 @@ configuration(Carrier) ->
default_config(Carrier) ->
Category = list_to_binary([?KNM_CONFIG_CAT, ".", carrier_config(Carrier)]),
case kapps_config:get_category(Category) of
- {ok, JObj} ->
+ {'ok', JObj} ->
Default = kz_json:get_json_value(<<"default">>, JObj, kz_json:new()),
kz_json:get_json_value(kz_term:to_binary(node()), JObj, Default);
_ -> kz_json:new()
diff --git a/core/kazoo_number_manager/src/knm_number.erl b/core/kazoo_number_manager/src/knm_number.erl
index 7f3842e23ce..e5a78c2dd03 100644
--- a/core/kazoo_number_manager/src/knm_number.erl
+++ b/core/kazoo_number_manager/src/knm_number.erl
@@ -110,7 +110,7 @@ is_number(_) -> 'false'.
%% Number parameter has to be normalized.
%%
%% {@link get/1}, {@link get/2} should not throw,
-%% instead they should return: `{ok,_} | {error,_} | ...'.
+%% instead they should return: `{'ok',_} | {error,_} | ...'.
%% @end
%%------------------------------------------------------------------------------
diff --git a/core/kazoo_number_manager/src/knm_number_states.erl b/core/kazoo_number_manager/src/knm_number_states.erl
index 004d9becea2..5c29dbdd630 100644
--- a/core/kazoo_number_manager/src/knm_number_states.erl
+++ b/core/kazoo_number_manager/src/knm_number_states.erl
@@ -190,7 +190,7 @@ authorize(T) ->
not_assigning_to_self(T0=#{todo := Ns}) ->
F = fun (N, T) ->
case knm_number:attempt(fun not_assigning_to_self/1, [N]) of
- {ok, NewN} -> knm_numbers:ok(NewN, T);
+ {'ok', NewN} -> knm_numbers:ok(NewN, T);
{error, R} -> knm_numbers:ko(N, R, T)
end
end,
diff --git a/core/kazoo_number_manager/src/knm_search.erl b/core/kazoo_number_manager/src/knm_search.erl
index 081b006610e..84e86bf2f3b 100644
--- a/core/kazoo_number_manager/src/knm_search.erl
+++ b/core/kazoo_number_manager/src/knm_search.erl
@@ -259,7 +259,7 @@ search_carrier(Carrier, Options) ->
wait_for_search(0) -> 'ok';
wait_for_search(N) ->
receive
- {_Carrier, {ok, []}} ->
+ {_Carrier, {'ok', []}} ->
lager:debug("~s found no numbers", [_Carrier]),
wait_for_search(N - 1);
{_Carrier, {'ok', Numbers}} ->
diff --git a/core/kazoo_number_manager/src/knm_telnyx_util.erl b/core/kazoo_number_manager/src/knm_telnyx_util.erl
index adb06aab74d..ed14e005228 100644
--- a/core/kazoo_number_manager/src/knm_telnyx_util.erl
+++ b/core/kazoo_number_manager/src/knm_telnyx_util.erl
@@ -84,7 +84,7 @@ req('put', ["numbers", "%2B1"++_, "e911_settings"], _) ->
req('put', ["numbers", "%2B1"++_], Body) ->
EnableCNAM = <<"enable_caller_id_name">>,
case kz_json:is_true(EnableCNAM, Body) of
- false -> rep({ok, 200, [], kz_json:encode(kz_json:from_list([{EnableCNAM, false}]))});
+ false -> rep({'ok', 200, [], kz_json:encode(kz_json:from_list([{EnableCNAM, false}]))});
true ->
case kz_json:get_ne_binary_value(<<"cnam_listing_details">>, Body) of
undefined -> rep_fixture("telnyx_activate_cnam_inbound.json");