%%%-----------------------------------------------------------------------------
%%% @copyright (C) 2014-2019, 2600Hz
%%% @doc Transfers caller to the extension extracted in the regex.
%%%
%%%
Data options:
%%%
%%% - `takeback_dtmf'
%%% - Transferor can cancel the transfer request: `2'.
%%%
%%% - `moh'
%%% - Media ID for custom music on hold.
%%%
%%% - `target'
%%% - Extension number or DID to transfer to.
%%%
%%% - `ringback'
%%% - Ringback to play to transferor: `"%(2000,4000,440,480)"'.
%%%
%%%
%%% @author James Aimonetti
%%% @end
%%%-----------------------------------------------------------------------------
-module(cf_transfer).
-behaviour(gen_cf_action).
-export([handle/2]).
-include("callflow.hrl").
-spec handle(kz_json:object(), kapps_call:call()) -> no_return().
handle(Data, Call) ->
kapps_call:put_callid(Call),
[Capture|_] = kz_json:get_list_value(<<"captures">>, Data, [<<"no_match">>]),
TransferTo = kz_json:get_ne_binary_value(<<"target">>, Data, Capture),
TransferLeg = transfer_leg(kz_json:get_ne_binary_value(<<"leg">>, Data, default_transfer_leg(Capture))),
case kz_json:get_ne_binary_value(<<"transfer_type">>, Data, <<"blind">>) of
<<"attended">> -> kapps_call_command:transfer(<<"attended">>, TransferTo, Call);
<<"blind">> -> kapps_call_command:transfer(<<"blind">>, TransferTo, TransferLeg, Call)
end,
{'stop', Call}.
-spec default_transfer_leg(kz_term:ne_binary()) -> kz_term:ne_binary().
default_transfer_leg(<<"no_match">>) -> <<"self">>;
default_transfer_leg(_) -> <<"bleg">>.
-spec transfer_leg(kz_term:ne_binary()) -> kz_term:api_ne_binary().
transfer_leg(<<"self">>) -> 'undefined';
transfer_leg(Leg) -> Leg.