From: jonatascalebe Date: Thu, 14 Mar 2024 18:53:43 +0000 (-0300) Subject: manager.c: Add new parameter 'PreDialGoSub' to Originate AMI action X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d4b79cb4660a4cd98ec7bd0f5e24c7e62ed6ae83;p=thirdparty%2Fasterisk.git manager.c: Add new parameter 'PreDialGoSub' to Originate AMI action manager.c: Add new parameter 'PreDialGoSub' to Originate AMI action The action originate does not has the ability to run an subroutine at initial channel, like the Aplication Originate. This update give this ability for de action originate too. For example, we can run a routine via Gosub on the channel to request an automatic answer, so the caller does not need to accept the call when using the originate command via manager, making the operation more efficient. UserNote: When using the Originate AMI Action, we now can pass the PreDialGoSub parameter, instructing the asterisk to perform an subrouting at channel before call start. With this parameter an call initiated by AMI can request the channel to start the call automaticaly, adding a SIP header to using GoSUB, instructing to autoanswer the channel, and proceeding the outbuound extension executing. Exemple of an context to perform the previus indication: [addautoanswer] exten => _s,1,Set(PJSIP_HEADER(add,Call-Info)=answer-after=0) exten => _s,n,Set(PJSIP_HEADER(add,Alert-Info)=answer-after=0) exten => _s,n,Return() --- diff --git a/main/manager.c b/main/manager.c index 7461c46d52..4813ef879d 100644 --- a/main/manager.c +++ b/main/manager.c @@ -712,6 +712,9 @@ Channel UniqueId to be set on the second local channel. + + PreDialGoSub Context,Extension,Priority to set options/headers needed before start the outgoing extension + Generates an outgoing call to a @@ -6306,6 +6309,8 @@ static int action_originate(struct mansession *s, const struct message *m) .uniqueid = astman_get_header(m, "ChannelId"), .uniqueid2 = astman_get_header(m, "OtherChannelId"), }; + const char *gosub = astman_get_header(m, "PreDialGoSub"); + struct ast_variable *vars = NULL; char *tech, *data; char *l = NULL, *n = NULL; @@ -6475,10 +6480,10 @@ static int action_originate(struct mansession *s, const struct message *m) ast_variables_destroy(vars); } else { if (exten && context && pi) { - res = ast_pbx_outgoing_exten(tech, cap, data, to, + res = ast_pbx_outgoing_exten_predial(tech, cap, data, to, context, exten, pi, &reason, AST_OUTGOING_WAIT, l, n, vars, account, NULL, bridge_early, - assignedids.uniqueid ? &assignedids : NULL); + assignedids.uniqueid ? &assignedids : NULL , gosub); ast_variables_destroy(vars); } else { astman_send_error(s, m, "Originate with 'Exten' requires 'Context' and 'Priority'");