<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://indywiki.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Anthony</id>
	<title>INDYWiki - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://indywiki.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Anthony"/>
	<link rel="alternate" type="text/html" href="https://indywiki.fr/Sp%C3%A9cial:Contributions/Anthony"/>
	<updated>2026-04-17T08:29:29Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://indywiki.fr/index.php?title=Script_de_routage_des_appels&amp;diff=22254</id>
		<title>Script de routage des appels</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Script_de_routage_des_appels&amp;diff=22254"/>
		<updated>2026-04-03T14:58:45Z</updated>

		<summary type="html">&lt;p&gt;Anthony : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;16,37,43,52-54&amp;quot;&amp;gt;&lt;br /&gt;
#nullable disable&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using TCX.PBXAPI;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using CallFlow.CFD;&lt;br /&gt;
&lt;br /&gt;
namespace interceptcall&lt;br /&gt;
{&lt;br /&gt;
    public class InterceptInboundCall : ScriptBase&amp;lt;InterceptInboundCall&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        // Destination par Défaut&lt;br /&gt;
        const string DefaultDestinationDN = &amp;quot;600&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        // Structure d&#039;une règle de routage&lt;br /&gt;
        class RoutingRule&lt;br /&gt;
        {&lt;br /&gt;
            public Schedule Schedule { get; set; }&lt;br /&gt;
            public string DestinationDN { get; set; }&lt;br /&gt;
            public string[] DIDs { get; set; }&lt;br /&gt;
            public string[] Callers { get; set; }&lt;br /&gt;
&lt;br /&gt;
            public RoutingRule(Schedule schedule, string destinationDN, string[] dids, string[] callers)&lt;br /&gt;
            {&lt;br /&gt;
                Schedule = schedule;&lt;br /&gt;
                DestinationDN = destinationDN;&lt;br /&gt;
                DIDs = dids;&lt;br /&gt;
                Callers = callers;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Règle(s) de routage. La première règle trouvée satisfaite sera la route suivie&lt;br /&gt;
       static readonly List&amp;lt;RoutingRule&amp;gt; routingRules = new List&amp;lt;RoutingRule&amp;gt;&lt;br /&gt;
        {&lt;br /&gt;
            // RULE 1 — Nuit semaine → 990&lt;br /&gt;
            new RoutingRule(&lt;br /&gt;
                new Schedule(RuleHoursType.SpecificHours)&lt;br /&gt;
                {&lt;br /&gt;
                    { DayOfWeek.Monday,    new Schedule.PeriodOfDay(TimeSpan.FromHours(17.5), TimeSpan.FromHours(24)) },&lt;br /&gt;
                    { DayOfWeek.Monday,    new Schedule.PeriodOfDay(TimeSpan.FromHours(0), TimeSpan.FromHours(7)) },&lt;br /&gt;
                    { DayOfWeek.Tuesday,   new Schedule.PeriodOfDay(TimeSpan.FromHours(17.5), TimeSpan.FromHours(24)) },&lt;br /&gt;
                    { DayOfWeek.Tuesday,   new Schedule.PeriodOfDay(TimeSpan.FromHours(0), TimeSpan.FromHours(7)) },&lt;br /&gt;
                    { DayOfWeek.Wednesday, new Schedule.PeriodOfDay(TimeSpan.FromHours(17.5), TimeSpan.FromHours(24)) },&lt;br /&gt;
                    { DayOfWeek.Wednesday, new Schedule.PeriodOfDay(TimeSpan.FromHours(0), TimeSpan.FromHours(7)) },&lt;br /&gt;
                    { DayOfWeek.Friday,    new Schedule.PeriodOfDay(TimeSpan.FromHours(17.5), TimeSpan.FromHours(24)) },&lt;br /&gt;
                    { DayOfWeek.Friday,    new Schedule.PeriodOfDay(TimeSpan.FromHours(0), TimeSpan.FromHours(7)) }&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;600&amp;quot;,&lt;br /&gt;
                new[] { &amp;quot;*&amp;quot; },   // Tous les DIDs&lt;br /&gt;
                new[] { &amp;quot;*&amp;quot; }    // Tous les callers&lt;br /&gt;
            ),&lt;br /&gt;
&lt;br /&gt;
            // RULE 2 — Jeudi 14h-18h → 804 (DID spécifique)&lt;br /&gt;
            new RoutingRule(&lt;br /&gt;
                new Schedule(RuleHoursType.SpecificHours)&lt;br /&gt;
                {&lt;br /&gt;
                    { DayOfWeek.Thursday, new Schedule.PeriodOfDay(TimeSpan.FromHours(14), TimeSpan.FromHours(16.25)) }&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;804&amp;quot;,&lt;br /&gt;
                new[] { &amp;quot;*&amp;quot; }, // DID spécifique&lt;br /&gt;
                new[] { &amp;quot;*&amp;quot; }&lt;br /&gt;
            ),&lt;br /&gt;
            &lt;br /&gt;
              // RULE 3 — Jeudi 14h-18h → 805&lt;br /&gt;
            new RoutingRule(&lt;br /&gt;
                new Schedule(RuleHoursType.SpecificHours)&lt;br /&gt;
                {&lt;br /&gt;
					{ DayOfWeek.Thursday, new Schedule.PeriodOfDay(new TimeSpan(17,15,0), new TimeSpan(17,30,0)) },&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;805&amp;quot;,&lt;br /&gt;
                new[] { &amp;quot;*&amp;quot; },&lt;br /&gt;
                new[] { &amp;quot;*&amp;quot; }&lt;br /&gt;
            ),&lt;br /&gt;
&lt;br /&gt;
            // RULE 4 — Week-end complet → 992&lt;br /&gt;
            new RoutingRule(&lt;br /&gt;
                new Schedule(RuleHoursType.SpecificHours)&lt;br /&gt;
                {&lt;br /&gt;
                    { DayOfWeek.Saturday, new Schedule.PeriodOfDay(TimeSpan.FromHours(0), TimeSpan.FromHours(24)) },&lt;br /&gt;
                    { DayOfWeek.Sunday,   new Schedule.PeriodOfDay(TimeSpan.FromHours(0), TimeSpan.FromHours(24)) }&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;992&amp;quot;,&lt;br /&gt;
                new[] { &amp;quot;*&amp;quot; },&lt;br /&gt;
                new[] { &amp;quot;*&amp;quot; }&lt;br /&gt;
            )&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        // Appel de la fonction principale&lt;br /&gt;
&lt;br /&gt;
        public override async void Start()&lt;br /&gt;
        {&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                await Task.Run(async () =&amp;gt;&lt;br /&gt;
                {&lt;br /&gt;
                    bool intercepted = false;&lt;br /&gt;
                    var ps = MyCall.PS as PhoneSystem;&lt;br /&gt;
&lt;br /&gt;
                    if (!(MyCall.Caller.DN is ExternalLine externalLine))&lt;br /&gt;
                    {&lt;br /&gt;
                        MyCall.Return(false);&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    var DIDNumber = MyCall.Caller[&amp;quot;inbound_did&amp;quot;] ?? &amp;quot;&amp;quot;;&lt;br /&gt;
                    var CallerID = MyCall.Caller.CallerID ?? &amp;quot;&amp;quot;;&lt;br /&gt;
                    var currentTime = externalLine.Now(out var utc, out var timezone, out var groupmode);&lt;br /&gt;
&lt;br /&gt;
                    MyCall.Info($&amp;quot;Incoming call | Caller: {CallerID} | DID: {DIDNumber} | Time: {currentTime}&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
                    foreach (var rule in routingRules)&lt;br /&gt;
                    {&lt;br /&gt;
                        if (!rule.Schedule.IsActiveTime(currentTime))&lt;br /&gt;
                            continue;&lt;br /&gt;
&lt;br /&gt;
                        bool didMatch = rule.DIDs.Contains(&amp;quot;*&amp;quot;) || rule.DIDs.Contains(DIDNumber);&lt;br /&gt;
                        bool callerMatch = rule.Callers.Contains(&amp;quot;*&amp;quot;) || rule.Callers.Contains(CallerID);&lt;br /&gt;
&lt;br /&gt;
                        if (!didMatch || !callerMatch)&lt;br /&gt;
                            continue;&lt;br /&gt;
&lt;br /&gt;
                        var destinationDN = ps.GetDNByNumber(rule.DestinationDN);&lt;br /&gt;
&lt;br /&gt;
                        if (destinationDN == null)&lt;br /&gt;
                        {&lt;br /&gt;
                            MyCall.Error($&amp;quot;Destination {rule.DestinationDN} not found.&amp;quot;);&lt;br /&gt;
                            continue;&lt;br /&gt;
                        }&lt;br /&gt;
&lt;br /&gt;
                        try&lt;br /&gt;
                        {&lt;br /&gt;
                            var result = await MyCall.RouteToAsync(new DestinationStruct(destinationDN));&lt;br /&gt;
                            MyCall.Info($&amp;quot;Routed to {rule.DestinationDN} | Result: {result}&amp;quot;);&lt;br /&gt;
                            intercepted = true;&lt;br /&gt;
                            break; // Stop at first matching rule&lt;br /&gt;
                        }&lt;br /&gt;
                        catch (Exception ex)&lt;br /&gt;
                        {&lt;br /&gt;
                            MyCall.Error($&amp;quot;Routing failed to {rule.DestinationDN}: {ex}&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                &lt;br /&gt;
                    // Utilisation de la route par défaut&lt;br /&gt;
                    &lt;br /&gt;
                    if (!intercepted)&lt;br /&gt;
                    {&lt;br /&gt;
                        var fallbackDN = ps.GetDNByNumber(DefaultDestinationDN);&lt;br /&gt;
                        if (fallbackDN != null)&lt;br /&gt;
                        {&lt;br /&gt;
                            try&lt;br /&gt;
                            {&lt;br /&gt;
                                var result = await MyCall.RouteToAsync(new DestinationStruct(fallbackDN));&lt;br /&gt;
                                MyCall.Info($&amp;quot;Fallback routing to {DefaultDestinationDN} | Result: {result}&amp;quot;);&lt;br /&gt;
                                intercepted = true;&lt;br /&gt;
                            }&lt;br /&gt;
                            catch (Exception ex)&lt;br /&gt;
                            {&lt;br /&gt;
                                MyCall.Error($&amp;quot;Fallback routing failed: {ex}&amp;quot;);&lt;br /&gt;
                            }&lt;br /&gt;
                        }&lt;br /&gt;
                        else&lt;br /&gt;
                        {&lt;br /&gt;
                            MyCall.Error($&amp;quot;Fallback DN {DefaultDestinationDN} not found.&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    MyCall.Return(intercepted);&lt;br /&gt;
                });&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception ex)&lt;br /&gt;
            {&lt;br /&gt;
                MyCall.Error($&amp;quot;Script execution failed: {ex}&amp;quot;);&lt;br /&gt;
                MyCall.Return(false);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Script_de_routage_des_appels&amp;diff=22253</id>
		<title>Script de routage des appels</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Script_de_routage_des_appels&amp;diff=22253"/>
		<updated>2026-04-03T14:56:02Z</updated>

		<summary type="html">&lt;p&gt;Anthony : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;16,19-20&amp;quot;&amp;gt;&lt;br /&gt;
#nullable disable&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using TCX.PBXAPI;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using CallFlow.CFD;&lt;br /&gt;
&lt;br /&gt;
namespace interceptcall&lt;br /&gt;
{&lt;br /&gt;
    public class InterceptInboundCall : ScriptBase&amp;lt;InterceptInboundCall&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        // Destination par Défaut&lt;br /&gt;
        const string DefaultDestinationDN = &amp;quot;600&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        // Structure d&#039;une règle de routage&lt;br /&gt;
        class RoutingRule&lt;br /&gt;
        {&lt;br /&gt;
            public Schedule Schedule { get; set; }&lt;br /&gt;
            public string DestinationDN { get; set; }&lt;br /&gt;
            public string[] DIDs { get; set; }&lt;br /&gt;
            public string[] Callers { get; set; }&lt;br /&gt;
&lt;br /&gt;
            public RoutingRule(Schedule schedule, string destinationDN, string[] dids, string[] callers)&lt;br /&gt;
            {&lt;br /&gt;
                Schedule = schedule;&lt;br /&gt;
                DestinationDN = destinationDN;&lt;br /&gt;
                DIDs = dids;&lt;br /&gt;
                Callers = callers;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Règle(s) de routage. La première règle trouvée satisfaite sera la route suivie&lt;br /&gt;
       static readonly List&amp;lt;RoutingRule&amp;gt; routingRules = new List&amp;lt;RoutingRule&amp;gt;&lt;br /&gt;
        {&lt;br /&gt;
            // RULE 1 — Nuit semaine → 990&lt;br /&gt;
            new RoutingRule(&lt;br /&gt;
                new Schedule(RuleHoursType.SpecificHours)&lt;br /&gt;
                {&lt;br /&gt;
                    { DayOfWeek.Monday,    new Schedule.PeriodOfDay(TimeSpan.FromHours(17.5), TimeSpan.FromHours(24)) },&lt;br /&gt;
                    { DayOfWeek.Monday,    new Schedule.PeriodOfDay(TimeSpan.FromHours(0), TimeSpan.FromHours(7)) },&lt;br /&gt;
                    { DayOfWeek.Tuesday,   new Schedule.PeriodOfDay(TimeSpan.FromHours(17.5), TimeSpan.FromHours(24)) },&lt;br /&gt;
                    { DayOfWeek.Tuesday,   new Schedule.PeriodOfDay(TimeSpan.FromHours(0), TimeSpan.FromHours(7)) },&lt;br /&gt;
                    { DayOfWeek.Wednesday, new Schedule.PeriodOfDay(TimeSpan.FromHours(17.5), TimeSpan.FromHours(24)) },&lt;br /&gt;
                    { DayOfWeek.Wednesday, new Schedule.PeriodOfDay(TimeSpan.FromHours(0), TimeSpan.FromHours(7)) },&lt;br /&gt;
                    { DayOfWeek.Friday,    new Schedule.PeriodOfDay(TimeSpan.FromHours(17.5), TimeSpan.FromHours(24)) },&lt;br /&gt;
                    { DayOfWeek.Friday,    new Schedule.PeriodOfDay(TimeSpan.FromHours(0), TimeSpan.FromHours(7)) }&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;600&amp;quot;,&lt;br /&gt;
                new[] { &amp;quot;*&amp;quot; },   // Tous les DIDs&lt;br /&gt;
                new[] { &amp;quot;*&amp;quot; }    // Tous les callers&lt;br /&gt;
            ),&lt;br /&gt;
&lt;br /&gt;
            // RULE 2 — Jeudi 14h-18h → 804 (DID spécifique)&lt;br /&gt;
            new RoutingRule(&lt;br /&gt;
                new Schedule(RuleHoursType.SpecificHours)&lt;br /&gt;
                {&lt;br /&gt;
                    { DayOfWeek.Thursday, new Schedule.PeriodOfDay(TimeSpan.FromHours(14), TimeSpan.FromHours(16.25)) }&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;804&amp;quot;,&lt;br /&gt;
                new[] { &amp;quot;*&amp;quot; }, // DID spécifique&lt;br /&gt;
                new[] { &amp;quot;*&amp;quot; }&lt;br /&gt;
            ),&lt;br /&gt;
            &lt;br /&gt;
              // RULE 3 — Jeudi 14h-18h → 805&lt;br /&gt;
            new RoutingRule(&lt;br /&gt;
                new Schedule(RuleHoursType.SpecificHours)&lt;br /&gt;
                {&lt;br /&gt;
					{ DayOfWeek.Thursday, new Schedule.PeriodOfDay(new TimeSpan(17,15,0), new TimeSpan(17,30,0)) },&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;805&amp;quot;,&lt;br /&gt;
                new[] { &amp;quot;*&amp;quot; },&lt;br /&gt;
                new[] { &amp;quot;*&amp;quot; }&lt;br /&gt;
            ),&lt;br /&gt;
&lt;br /&gt;
            // RULE 4 — Week-end complet → 992&lt;br /&gt;
            new RoutingRule(&lt;br /&gt;
                new Schedule(RuleHoursType.SpecificHours)&lt;br /&gt;
                {&lt;br /&gt;
                    { DayOfWeek.Saturday, new Schedule.PeriodOfDay(TimeSpan.FromHours(0), TimeSpan.FromHours(24)) },&lt;br /&gt;
                    { DayOfWeek.Sunday,   new Schedule.PeriodOfDay(TimeSpan.FromHours(0), TimeSpan.FromHours(24)) }&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;992&amp;quot;,&lt;br /&gt;
                new[] { &amp;quot;*&amp;quot; },&lt;br /&gt;
                new[] { &amp;quot;*&amp;quot; }&lt;br /&gt;
            )&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        // Appel de la fonction principale&lt;br /&gt;
&lt;br /&gt;
        public override async void Start()&lt;br /&gt;
        {&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                await Task.Run(async () =&amp;gt;&lt;br /&gt;
                {&lt;br /&gt;
                    bool intercepted = false;&lt;br /&gt;
                    var ps = MyCall.PS as PhoneSystem;&lt;br /&gt;
&lt;br /&gt;
                    if (!(MyCall.Caller.DN is ExternalLine externalLine))&lt;br /&gt;
                    {&lt;br /&gt;
                        MyCall.Return(false);&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    var DIDNumber = MyCall.Caller[&amp;quot;inbound_did&amp;quot;] ?? &amp;quot;&amp;quot;;&lt;br /&gt;
                    var CallerID = MyCall.Caller.CallerID ?? &amp;quot;&amp;quot;;&lt;br /&gt;
                    var currentTime = externalLine.Now(out var utc, out var timezone, out var groupmode);&lt;br /&gt;
&lt;br /&gt;
                    MyCall.Info($&amp;quot;Incoming call | Caller: {CallerID} | DID: {DIDNumber} | Time: {currentTime}&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
                    foreach (var rule in routingRules)&lt;br /&gt;
                    {&lt;br /&gt;
                        if (!rule.Schedule.IsActiveTime(currentTime))&lt;br /&gt;
                            continue;&lt;br /&gt;
&lt;br /&gt;
                        bool didMatch = rule.DIDs.Contains(&amp;quot;*&amp;quot;) || rule.DIDs.Contains(DIDNumber);&lt;br /&gt;
                        bool callerMatch = rule.Callers.Contains(&amp;quot;*&amp;quot;) || rule.Callers.Contains(CallerID);&lt;br /&gt;
&lt;br /&gt;
                        if (!didMatch || !callerMatch)&lt;br /&gt;
                            continue;&lt;br /&gt;
&lt;br /&gt;
                        var destinationDN = ps.GetDNByNumber(rule.DestinationDN);&lt;br /&gt;
&lt;br /&gt;
                        if (destinationDN == null)&lt;br /&gt;
                        {&lt;br /&gt;
                            MyCall.Error($&amp;quot;Destination {rule.DestinationDN} not found.&amp;quot;);&lt;br /&gt;
                            continue;&lt;br /&gt;
                        }&lt;br /&gt;
&lt;br /&gt;
                        try&lt;br /&gt;
                        {&lt;br /&gt;
                            var result = await MyCall.RouteToAsync(new DestinationStruct(destinationDN));&lt;br /&gt;
                            MyCall.Info($&amp;quot;Routed to {rule.DestinationDN} | Result: {result}&amp;quot;);&lt;br /&gt;
                            intercepted = true;&lt;br /&gt;
                            break; // Stop at first matching rule&lt;br /&gt;
                        }&lt;br /&gt;
                        catch (Exception ex)&lt;br /&gt;
                        {&lt;br /&gt;
                            MyCall.Error($&amp;quot;Routing failed to {rule.DestinationDN}: {ex}&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                &lt;br /&gt;
                    // Utilisation de la route par défaut&lt;br /&gt;
                    &lt;br /&gt;
                    if (!intercepted)&lt;br /&gt;
                    {&lt;br /&gt;
                        var fallbackDN = ps.GetDNByNumber(DefaultDestinationDN);&lt;br /&gt;
                        if (fallbackDN != null)&lt;br /&gt;
                        {&lt;br /&gt;
                            try&lt;br /&gt;
                            {&lt;br /&gt;
                                var result = await MyCall.RouteToAsync(new DestinationStruct(fallbackDN));&lt;br /&gt;
                                MyCall.Info($&amp;quot;Fallback routing to {DefaultDestinationDN} | Result: {result}&amp;quot;);&lt;br /&gt;
                                intercepted = true;&lt;br /&gt;
                            }&lt;br /&gt;
                            catch (Exception ex)&lt;br /&gt;
                            {&lt;br /&gt;
                                MyCall.Error($&amp;quot;Fallback routing failed: {ex}&amp;quot;);&lt;br /&gt;
                            }&lt;br /&gt;
                        }&lt;br /&gt;
                        else&lt;br /&gt;
                        {&lt;br /&gt;
                            MyCall.Error($&amp;quot;Fallback DN {DefaultDestinationDN} not found.&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    MyCall.Return(intercepted);&lt;br /&gt;
                });&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception ex)&lt;br /&gt;
            {&lt;br /&gt;
                MyCall.Error($&amp;quot;Script execution failed: {ex}&amp;quot;);&lt;br /&gt;
                MyCall.Return(false);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22252</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22252"/>
		<updated>2026-04-03T11:38:54Z</updated>

		<summary type="html">&lt;p&gt;Anthony : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par le statut ==&lt;br /&gt;
Dans les réglages de l&#039;extension qui accueille les appels :&lt;br /&gt;
[[Fichier:2026-04-02 16h03 02.png|vignette]]&lt;br /&gt;
#Réglages&lt;br /&gt;
#Transfert d&#039;appels&lt;br /&gt;
#Choisir le statut de l&#039;extension à activer pour enclencher le renvoi vers l&#039;astreinte. Dans l&#039;exemple &#039;&#039;&#039;Absent&#039;&#039;&#039;. Pas l&#039;état &#039;&#039;&#039;Disponible&#039;&#039;&#039; évidemment.&lt;br /&gt;
#Dans &amp;quot;Transférer les appels externes à&amp;quot;, choisir &#039;&#039;&#039;Numéro externe&#039;&#039;&#039;&lt;br /&gt;
#Saisir le numéro de l&#039;astreinte&lt;br /&gt;
#Cocher &#039;&#039;&#039;Rebond&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Limite / contrainte : &lt;br /&gt;
*si les astreintes tournent, avant chaque période d&#039;astreinte, il faut faire ce cheminement pour que le bon numéro de mobile soit paramétré&lt;br /&gt;
*4 profils d&#039;astreinte maximum&lt;br /&gt;
*Nécessite de manipuler l&#039;application WEB&lt;br /&gt;
&lt;br /&gt;
== Par le statut + script==&lt;br /&gt;
===Principe===&lt;br /&gt;
On paramètre le statut choisi pour l&#039;astreinte en renvoi vers &#039;&#039;&#039;mon mobile&#039;&#039;&#039;. Un script viendra modifier le statut de l&#039;extension cible ainsi que son numéro de contact mobile, prénom et nom. Ce script déclenchable par l&#039;appel à un code court, paramétrable si on le souhaite sur une BLF. &lt;br /&gt;
===Paramétrage du statut de l&#039;extension vers &#039;&#039;&#039;mon mobile&#039;&#039;&#039;===&lt;br /&gt;
[[Fichier:2026-04-03 13h29 01.png|vignette]]&lt;br /&gt;
#Réglages&lt;br /&gt;
#Transfert d&#039;appels&lt;br /&gt;
#Choisir le statut de l&#039;extension à activer pour enclencher le renvoi vers l&#039;astreinte. Dans l&#039;exemple &#039;&#039;&#039;Absent&#039;&#039;&#039;. Pas l&#039;état &#039;&#039;&#039;Disponible&#039;&#039;&#039; évidemment.&lt;br /&gt;
#Dans &amp;quot;Transférer les appels externes à&amp;quot;, choisir &#039;&#039;&#039;Mon mobile&#039;&#039;&#039;&lt;br /&gt;
#Cocher &#039;&#039;&#039;Rebond&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Déclaration du script===&lt;br /&gt;
[[Fichier:2026-04-02 17h11 35.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
Rendez-vous dans :&lt;br /&gt;
&lt;br /&gt;
 Admin / Intégrations / Scripts d&#039;appels / + Ajouter personnalisé&lt;br /&gt;
&lt;br /&gt;
#Donner un nom au traitement de l&#039;appel. Exemple : &#039;&#039;&#039;astreinte_weekend&#039;&#039;&#039;&lt;br /&gt;
#Créer un code de raccourci, ce qui permettra d&#039;exécuter le script simplement en appelant ce code, et in fine par une BLF. Exemple : &#039;&#039;&#039;*99&#039;&#039;&#039;&lt;br /&gt;
#OK&lt;br /&gt;
#Coller dans le champ script le script paramétré ( voir section suivante )&lt;br /&gt;
#Sauvegarder&lt;br /&gt;
#Un message doit indiquer &#039;&#039;&#039;Compilation réussie !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Le script===&lt;br /&gt;
&lt;br /&gt;
L&#039;éxécution du script va modifier l&#039;extension &#039;&#039;&#039;targetExtNum &#039;&#039;&#039;, il va le basculer sur le statut &#039;&#039;&#039;profileName &#039;&#039;&#039;, modifier son mobile de contact &#039;&#039;&#039;mobileElu &#039;&#039;&#039;, son nom et prénom.&lt;br /&gt;
&lt;br /&gt;
Il faut donc seulement modifier les lignes surlignés dans le code ci-dessous :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;14-16,19-20&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0601020304&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Table de correspondance des profileName====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dans 3CX!! Dans le script&lt;br /&gt;
|-&lt;br /&gt;
| Disponible|| Available&lt;br /&gt;
|-&lt;br /&gt;
| Absent|| Away&lt;br /&gt;
|-&lt;br /&gt;
| Ne pas déranger|| Out of office&lt;br /&gt;
|-&lt;br /&gt;
| Custom 1|| Custom 1&lt;br /&gt;
|-&lt;br /&gt;
| Custom 2|| Custom 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Configuration concrète===&lt;br /&gt;
&lt;br /&gt;
Il faut choisir un statut autre que &amp;quot;Disponible&amp;quot; qui sera activé pour l&#039;astreinte, &amp;quot;Away&amp;quot; pour cet exemple&lt;br /&gt;
&lt;br /&gt;
On a besoin de gérer deux astreintes. Le poste Accueil reçoit les appels en temps normal&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Texte de la légende&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Marcel Patulacci&#039;&#039;&#039; || &#039;&#039;&#039;Jean-Michel Apeuprè&#039;&#039;&#039;|| &#039;&#039;&#039;Poste accueil &#039;&#039;&#039; hors période d&#039;astreinte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0699999999&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Marcel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Patulacci&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; || &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0688888888&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Jean-Michel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Apeuprè&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;|| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Available&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Accueil&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Une fois les 3 scripts produits, passer à l&#039;étape [[Astreinte#Déclaration_du_script|Déclaration du script]] qui va permettre d&#039;affecter un code court à chaque script.&lt;br /&gt;
Exemple : &lt;br /&gt;
* *90 pour hors période d&#039;astreinte&lt;br /&gt;
* *91 pour Jean-Michel&lt;br /&gt;
* *92 pour Marcel&lt;br /&gt;
&lt;br /&gt;
On peut communiquer les codes aux personnes habilitées à gérer le système d&#039;astreinte et aller jusqu&#039;à paramétrer des BLF pour faciliter la vie d&#039;une secrétaire par exemple.&lt;br /&gt;
&lt;br /&gt;
{{Valide|v20}}&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Fichier:2026-04-03_13h29_01.png&amp;diff=22251</id>
		<title>Fichier:2026-04-03 13h29 01.png</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Fichier:2026-04-03_13h29_01.png&amp;diff=22251"/>
		<updated>2026-04-03T11:35:47Z</updated>

		<summary type="html">&lt;p&gt;Anthony : Anthony a téléversé une nouvelle version de Fichier:2026-04-03 13h29 01.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;renvoi vers mon mobile&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22250</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22250"/>
		<updated>2026-04-03T11:30:35Z</updated>

		<summary type="html">&lt;p&gt;Anthony : /* Par le statut + script */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par le statut ==&lt;br /&gt;
Dans les réglages de l&#039;extension qui accueille les appels :&lt;br /&gt;
[[Fichier:2026-04-02 16h03 02.png|vignette]]&lt;br /&gt;
#Réglages&lt;br /&gt;
#Transfert d&#039;appels&lt;br /&gt;
#Choisir le statut de l&#039;extension à activer pour enclencher le renvoi vers l&#039;astreinte. Dans l&#039;exemple &#039;&#039;&#039;Absent&#039;&#039;&#039;. Pas l&#039;état &#039;&#039;&#039;Disponible&#039;&#039;&#039; évidemment.&lt;br /&gt;
#Dans &amp;quot;Transférer les appels externes à&amp;quot;, choisir &#039;&#039;&#039;Numéro externe&#039;&#039;&#039;&lt;br /&gt;
#Saisir le numéro de l&#039;astreinte&lt;br /&gt;
#Cocher &#039;&#039;&#039;Rebond&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Limite / contrainte : &lt;br /&gt;
*si les astreintes tournent, avant chaque période d&#039;astreinte, il faut faire ce cheminement pour que le bon numéro de mobile soit paramétré&lt;br /&gt;
*4 profils d&#039;astreinte maximum&lt;br /&gt;
*Nécessite de manipuler l&#039;application WEB&lt;br /&gt;
&lt;br /&gt;
== Par le statut + script==&lt;br /&gt;
===Principe===&lt;br /&gt;
On paramètre le statut choisi pour l&#039;astreinte en renvoi vers &#039;&#039;&#039;mon mobile&#039;&#039;&#039;. Un script viendra modifier le statut de l&#039;extension cible ainsi que son numéro de contact mobile, prénom et nom. Ce script déclenchable par l&#039;appel à un code court, paramétrable si on le souhaite sur une BLF. &lt;br /&gt;
===Paramétrage du statut de l&#039;extension vers &#039;&#039;&#039;mon mobile&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2026-04-03 13h29 01.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
===Déclaration du script===&lt;br /&gt;
[[Fichier:2026-04-02 17h11 35.png|vignette]]&lt;br /&gt;
Rendez-vous dans :&lt;br /&gt;
&lt;br /&gt;
 Admin / Intégrations / Scripts d&#039;appels / + Ajouter personnalisé&lt;br /&gt;
&lt;br /&gt;
#Donner un nom au traitement de l&#039;appel. Exemple : &#039;&#039;&#039;astreinte_weekend&#039;&#039;&#039;&lt;br /&gt;
#Créer un code de raccourci, ce qui permettra d&#039;exécuter le script simplement en appelant ce code, et in fine par une BLF. Exemple : &#039;&#039;&#039;*99&#039;&#039;&#039;&lt;br /&gt;
#OK&lt;br /&gt;
#Coller dans le champ script le script paramétré ( voir section suivante )&lt;br /&gt;
#Sauvegarder&lt;br /&gt;
#Un message doit indiquer &#039;&#039;&#039;Compilation réussie !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Le script===&lt;br /&gt;
&lt;br /&gt;
L&#039;éxécution du script va modifier l&#039;extension &#039;&#039;&#039;targetExtNum &#039;&#039;&#039;, il va le basculer sur le statut &#039;&#039;&#039;profileName &#039;&#039;&#039;, modifier son mobile de contact &#039;&#039;&#039;mobileElu &#039;&#039;&#039;, son nom et prénom.&lt;br /&gt;
&lt;br /&gt;
Il faut donc seulement modifier les lignes surlignés dans le code ci-dessous :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;14-16,19-20&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0601020304&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Table de correspondance des profileName====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dans 3CX!! Dans le script&lt;br /&gt;
|-&lt;br /&gt;
| Disponible|| Available&lt;br /&gt;
|-&lt;br /&gt;
| Absent|| Away&lt;br /&gt;
|-&lt;br /&gt;
| Ne pas déranger|| Out of office&lt;br /&gt;
|-&lt;br /&gt;
| Custom 1|| Custom 1&lt;br /&gt;
|-&lt;br /&gt;
| Custom 2|| Custom 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Configuration concrète===&lt;br /&gt;
&lt;br /&gt;
Il faut choisir un statut autre que &amp;quot;Disponible&amp;quot; qui sera activé pour l&#039;astreinte, &amp;quot;Away&amp;quot; pour cet exemple&lt;br /&gt;
&lt;br /&gt;
On a besoin de gérer deux astreintes. Le poste Accueil reçoit les appels en temps normal&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Texte de la légende&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Marcel Patulacci&#039;&#039;&#039; || &#039;&#039;&#039;Jean-Michel Apeuprè&#039;&#039;&#039;|| &#039;&#039;&#039;Poste accueil &#039;&#039;&#039; hors période d&#039;astreinte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0699999999&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Marcel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Patulacci&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; || &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0688888888&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Jean-Michel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Apeuprè&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;|| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Available&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Accueil&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Une fois les 3 scripts produits, passer à l&#039;étape [[Astreinte#Déclaration_du_script|Déclaration du script]] qui va permettre d&#039;affecter un code court à chaque script.&lt;br /&gt;
Exemple : &lt;br /&gt;
* *90 pour hors période d&#039;astreinte&lt;br /&gt;
* *91 pour Jean-Michel&lt;br /&gt;
* *92 pour Marcel&lt;br /&gt;
&lt;br /&gt;
On peut communiquer les codes aux personnes habilitées à gérer le système d&#039;astreinte et aller jusqu&#039;à paramétrer des BLF pour faciliter la vie d&#039;une secrétaire par exemple.&lt;br /&gt;
&lt;br /&gt;
{{Valide|v20}}&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Fichier:2026-04-03_13h29_01.png&amp;diff=22249</id>
		<title>Fichier:2026-04-03 13h29 01.png</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Fichier:2026-04-03_13h29_01.png&amp;diff=22249"/>
		<updated>2026-04-03T11:30:27Z</updated>

		<summary type="html">&lt;p&gt;Anthony : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;renvoi vers mon mobile&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22248</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22248"/>
		<updated>2026-04-03T11:26:49Z</updated>

		<summary type="html">&lt;p&gt;Anthony : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par le statut ==&lt;br /&gt;
Dans les réglages de l&#039;extension qui accueille les appels :&lt;br /&gt;
[[Fichier:2026-04-02 16h03 02.png|vignette]]&lt;br /&gt;
#Réglages&lt;br /&gt;
#Transfert d&#039;appels&lt;br /&gt;
#Choisir le statut de l&#039;extension à activer pour enclencher le renvoi vers l&#039;astreinte. Dans l&#039;exemple &#039;&#039;&#039;Absent&#039;&#039;&#039;. Pas l&#039;état &#039;&#039;&#039;Disponible&#039;&#039;&#039; évidemment.&lt;br /&gt;
#Dans &amp;quot;Transférer les appels externes à&amp;quot;, choisir &#039;&#039;&#039;Numéro externe&#039;&#039;&#039;&lt;br /&gt;
#Saisir le numéro de l&#039;astreinte&lt;br /&gt;
#Cocher &#039;&#039;&#039;Rebond&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Limite / contrainte : &lt;br /&gt;
*si les astreintes tournent, avant chaque période d&#039;astreinte, il faut faire ce cheminement pour que le bon numéro de mobile soit paramétré&lt;br /&gt;
*4 profils d&#039;astreinte maximum&lt;br /&gt;
*Nécessite de manipuler l&#039;application WEB&lt;br /&gt;
&lt;br /&gt;
== Par le statut + script==&lt;br /&gt;
===Principe===&lt;br /&gt;
On paramètre le statut choisi pour l&#039;astreinte en renvoi vers &#039;&#039;&#039;mon mobile&#039;&#039;&#039;. Un script viendra modifier le statut de l&#039;extension cible ainsi que son numéro de contact mobile, prénom et nom. Ce script déclenchable par l&#039;appel à un code court, paramétrable si on le souhaite sur une BLF. &lt;br /&gt;
===Paramétrage du statut de l&#039;extension vers &#039;&#039;&#039;mon mobile&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2026-04-02 16h03 02.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
===Déclaration du script===&lt;br /&gt;
[[Fichier:2026-04-02 17h11 35.png|vignette]]&lt;br /&gt;
Rendez-vous dans :&lt;br /&gt;
&lt;br /&gt;
 Admin / Intégrations / Scripts d&#039;appels / + Ajouter personnalisé&lt;br /&gt;
&lt;br /&gt;
#Donner un nom au traitement de l&#039;appel. Exemple : &#039;&#039;&#039;astreinte_weekend&#039;&#039;&#039;&lt;br /&gt;
#Créer un code de raccourci, ce qui permettra d&#039;exécuter le script simplement en appelant ce code, et in fine par une BLF. Exemple : &#039;&#039;&#039;*99&#039;&#039;&#039;&lt;br /&gt;
#OK&lt;br /&gt;
#Coller dans le champ script le script paramétré ( voir section suivante )&lt;br /&gt;
#Sauvegarder&lt;br /&gt;
#Un message doit indiquer &#039;&#039;&#039;Compilation réussie !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Le script===&lt;br /&gt;
&lt;br /&gt;
L&#039;éxécution du script va modifier l&#039;extension &#039;&#039;&#039;targetExtNum &#039;&#039;&#039;, il va le basculer sur le statut &#039;&#039;&#039;profileName &#039;&#039;&#039;, modifier son mobile de contact &#039;&#039;&#039;mobileElu &#039;&#039;&#039;, son nom et prénom.&lt;br /&gt;
&lt;br /&gt;
Il faut donc seulement modifier les lignes surlignés dans le code ci-dessous :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;14-16,19-20&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0601020304&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Table de correspondance des profileName====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dans 3CX!! Dans le script&lt;br /&gt;
|-&lt;br /&gt;
| Disponible|| Available&lt;br /&gt;
|-&lt;br /&gt;
| Absent|| Away&lt;br /&gt;
|-&lt;br /&gt;
| Ne pas déranger|| Out of office&lt;br /&gt;
|-&lt;br /&gt;
| Custom 1|| Custom 1&lt;br /&gt;
|-&lt;br /&gt;
| Custom 2|| Custom 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Configuration concrète===&lt;br /&gt;
&lt;br /&gt;
Il faut choisir un statut autre que &amp;quot;Disponible&amp;quot; qui sera activé pour l&#039;astreinte, &amp;quot;Away&amp;quot; pour cet exemple&lt;br /&gt;
&lt;br /&gt;
On a besoin de gérer deux astreintes. Le poste Accueil reçoit les appels en temps normal&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Texte de la légende&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Marcel Patulacci&#039;&#039;&#039; || &#039;&#039;&#039;Jean-Michel Apeuprè&#039;&#039;&#039;|| &#039;&#039;&#039;Poste accueil &#039;&#039;&#039; hors période d&#039;astreinte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0699999999&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Marcel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Patulacci&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; || &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0688888888&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Jean-Michel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Apeuprè&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;|| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Available&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Accueil&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Une fois les 3 scripts produits, passer à l&#039;étape [[Astreinte#Déclaration_du_script|Déclaration du script]] qui va permettre d&#039;affecter un code court à chaque script.&lt;br /&gt;
Exemple : &lt;br /&gt;
* *90 pour hors période d&#039;astreinte&lt;br /&gt;
* *91 pour Jean-Michel&lt;br /&gt;
* *92 pour Marcel&lt;br /&gt;
&lt;br /&gt;
On peut communiquer les codes aux personnes habilitées à gérer le système d&#039;astreinte et aller jusqu&#039;à paramétrer des BLF pour faciliter la vie d&#039;une secrétaire par exemple.&lt;br /&gt;
&lt;br /&gt;
{{Valide|v20}}&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22247</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22247"/>
		<updated>2026-04-03T09:30:58Z</updated>

		<summary type="html">&lt;p&gt;Anthony : /* par le statut */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par le statut ==&lt;br /&gt;
Dans les réglages de l&#039;extension qui accueille les appels :&lt;br /&gt;
[[Fichier:2026-04-02 16h03 02.png|vignette]]&lt;br /&gt;
#Réglages&lt;br /&gt;
#Transfert d&#039;appels&lt;br /&gt;
#Choisir le statut de l&#039;extension à activer pour enclencher le renvoi vers l&#039;astreinte. Dans l&#039;exemple &#039;&#039;&#039;Absent&#039;&#039;&#039;. Pas l&#039;état &#039;&#039;&#039;Disponible&#039;&#039;&#039; évidemment.&lt;br /&gt;
#Dans &amp;quot;Transférer les appels externes à&amp;quot;, choisir &#039;&#039;&#039;Numéro externe&#039;&#039;&#039;&lt;br /&gt;
#Saisir le numéro de l&#039;astreinte&lt;br /&gt;
#Cocher &#039;&#039;&#039;Rebond&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Limite / contrainte : &lt;br /&gt;
*si les astreintes tournent, avant chaque période d&#039;astreinte, il faut faire ce cheminement pour que le bon numéro de mobile soit paramétré&lt;br /&gt;
*4 profils d&#039;astreinte maximum&lt;br /&gt;
*Nécessite de manipuler l&#039;application WEB&lt;br /&gt;
&lt;br /&gt;
== Par le statut + script==&lt;br /&gt;
===Principe===&lt;br /&gt;
On paramètre le statut choisi pour l&#039;astreinte en renvoi vers &#039;&#039;&#039;mon mobile&#039;&#039;&#039;. Un script viendra modifier le statut de l&#039;extension cible ainsi que son numéro de contact mobile, prénom et nom. Ce script déclenchable par l&#039;appel à un code court, paramétrable si on le souhaite sur une BLF. &lt;br /&gt;
===Paramétrage du statut de l&#039;extension vers &#039;&#039;&#039;mon mobile&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2026-04-03 11h09 54.png|cadre|néant]]&lt;br /&gt;
&lt;br /&gt;
===Déclaration du script===&lt;br /&gt;
[[Fichier:2026-04-02 17h11 35.png|vignette]]&lt;br /&gt;
Rendez-vous dans :&lt;br /&gt;
&lt;br /&gt;
 Admin / Intégrations / Scripts d&#039;appels / + Ajouter personnalisé&lt;br /&gt;
&lt;br /&gt;
#Donner un nom au traitement de l&#039;appel. Exemple : &#039;&#039;&#039;astreinte_weekend&#039;&#039;&#039;&lt;br /&gt;
#Créer un code de raccourci, ce qui permettra d&#039;exécuter le script simplement en appelant ce code, et in fine par une BLF. Exemple : &#039;&#039;&#039;*99&#039;&#039;&#039;&lt;br /&gt;
#OK&lt;br /&gt;
#Coller dans le champ script le script paramétré ( voir section suivante )&lt;br /&gt;
#Sauvegarder&lt;br /&gt;
#Un message doit indiquer &#039;&#039;&#039;Compilation réussie !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Le script===&lt;br /&gt;
&lt;br /&gt;
L&#039;éxécution du script va modifier l&#039;extension &#039;&#039;&#039;targetExtNum &#039;&#039;&#039;, il va le basculer sur le statut &#039;&#039;&#039;profileName &#039;&#039;&#039;, modifier son mobile de contact &#039;&#039;&#039;mobileElu &#039;&#039;&#039;, son nom et prénom.&lt;br /&gt;
&lt;br /&gt;
Il faut donc seulement modifier les lignes surlignés dans le code ci-dessous :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;14-16,19-20&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0601020304&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Table de correspondance des profileName====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dans 3CX!! Dans le script&lt;br /&gt;
|-&lt;br /&gt;
| Disponible|| Available&lt;br /&gt;
|-&lt;br /&gt;
| Absent|| Away&lt;br /&gt;
|-&lt;br /&gt;
| Ne pas déranger|| Out of office&lt;br /&gt;
|-&lt;br /&gt;
| Custom 1|| Custom 1&lt;br /&gt;
|-&lt;br /&gt;
| Custom 2|| Custom 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Configuration concrète===&lt;br /&gt;
&lt;br /&gt;
Il faut choisir un statut autre que &amp;quot;Disponible&amp;quot; qui sera activé pour l&#039;astreinte, &amp;quot;Away&amp;quot; pour cet exemple&lt;br /&gt;
&lt;br /&gt;
On a besoin de gérer deux astreintes. Le poste Accueil reçoit les appels en temps normal&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Texte de la légende&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Marcel Patulacci&#039;&#039;&#039; || &#039;&#039;&#039;Jean-Michel Apeuprè&#039;&#039;&#039;|| &#039;&#039;&#039;Poste accueil &#039;&#039;&#039; hors période d&#039;astreinte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0699999999&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Marcel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Patulacci&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; || &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0688888888&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Jean-Michel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Apeuprè&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;|| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Available&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Accueil&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Une fois les 3 scripts produits, passer à l&#039;étape [[Astreinte#Déclaration_du_script|Déclaration du script]] qui va permettre d&#039;affecter un code court à chaque script.&lt;br /&gt;
Exemple : &lt;br /&gt;
* *90 pour hors période d&#039;astreinte&lt;br /&gt;
* *91 pour Jean-Michel&lt;br /&gt;
* *92 pour Marcel&lt;br /&gt;
&lt;br /&gt;
On peut communiquer les codes aux personnes habilitées à gérer le système d&#039;astreinte et aller jusqu&#039;à paramétrer des BLF pour faciliter la vie d&#039;une secrétaire par exemple.&lt;br /&gt;
&lt;br /&gt;
{{Valide|v20}}&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22246</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22246"/>
		<updated>2026-04-03T09:29:50Z</updated>

		<summary type="html">&lt;p&gt;Anthony : /* Via script */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par le statut ==&lt;br /&gt;
Dans les réglages de l&#039;extension qui accueille les appels :&lt;br /&gt;
[[Fichier:2026-04-02 16h03 02.png|vignette]]&lt;br /&gt;
#Réglages&lt;br /&gt;
#Transfert d&#039;appels&lt;br /&gt;
#Choisir le statut de l&#039;extension à activer pour enclencher le renvoi vers l&#039;astreinte. Dans l&#039;exemple &#039;&#039;&#039;Absent&#039;&#039;&#039;. Pas l&#039;état &#039;&#039;&#039;Disponible&#039;&#039;&#039; évidemment.&lt;br /&gt;
#Dans &amp;quot;Transférer les appels externes à&amp;quot;, choisir &#039;&#039;&#039;Numéro externe&#039;&#039;&#039;&lt;br /&gt;
#Saisir le numéro de l&#039;astreinte&lt;br /&gt;
#Cocher &#039;&#039;&#039;Rebond&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Limite / contrainte : &lt;br /&gt;
*si les astreintes tournent, avant chaque période d&#039;astreinte, il faut faire ce cheminement pour que le bon numéro de mobile soit paramétré&lt;br /&gt;
*4 profils d&#039;astreinte maximum&lt;br /&gt;
*Nécessite de manipuler l&#039;application WEB&lt;br /&gt;
&lt;br /&gt;
== Par le statut + script==&lt;br /&gt;
===Principe===&lt;br /&gt;
On paramètre le statut choisi pour l&#039;astreinte en renvoi vers &#039;&#039;&#039;mon mobile&#039;&#039;&#039;. Un script viendra modifier le statut de l&#039;extension cible ainsi que son numéro de contact mobile, prénom et nom. Ce script déclenchable par l&#039;appel à un code court, paramétrable si on le souhaite sur une BLF. &lt;br /&gt;
===Paramétrage du statut de l&#039;extension vers &#039;&#039;&#039;mon mobile&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2026-04-03 11h09 54.png|cadre|néant]]&lt;br /&gt;
&lt;br /&gt;
===Déclaration du script===&lt;br /&gt;
[[Fichier:2026-04-02 17h11 35.png|vignette]]&lt;br /&gt;
Rendez-vous dans :&lt;br /&gt;
&lt;br /&gt;
 Admin / Intégrations / Scripts d&#039;appels / + Ajouter personnalisé&lt;br /&gt;
&lt;br /&gt;
#Donner un nom au traitement de l&#039;appel. Exemple : &#039;&#039;&#039;astreinte_weekend&#039;&#039;&#039;&lt;br /&gt;
#Créer un code de raccourci, ce qui permettra d&#039;exécuter le script simplement en appelant ce code, et in fine par une BLF. Exemple : &#039;&#039;&#039;*99&#039;&#039;&#039;&lt;br /&gt;
#OK&lt;br /&gt;
#Coller dans le champ script le script paramétré ( voir section suivante )&lt;br /&gt;
#Sauvegarder&lt;br /&gt;
#Un message doit indiquer &#039;&#039;&#039;Compilation réussie !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Le script===&lt;br /&gt;
&lt;br /&gt;
L&#039;éxécution du script va modifier l&#039;extension &#039;&#039;&#039;targetExtNum &#039;&#039;&#039;, il va le basculer sur le statut &#039;&#039;&#039;profileName &#039;&#039;&#039;, modifier son mobile de contact &#039;&#039;&#039;mobileElu &#039;&#039;&#039;, son nom et prénom.&lt;br /&gt;
&lt;br /&gt;
Il faut donc seulement modifier les lignes surlignés dans le code ci-dessous :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;14-16,19-20&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0601020304&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Table de correspondance des profileName====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dans 3CX!! Dans le script&lt;br /&gt;
|-&lt;br /&gt;
| Disponible|| Available&lt;br /&gt;
|-&lt;br /&gt;
| Absent|| Away&lt;br /&gt;
|-&lt;br /&gt;
| Ne pas déranger|| Out of office&lt;br /&gt;
|-&lt;br /&gt;
| Custom 1|| Custom 1&lt;br /&gt;
|-&lt;br /&gt;
| Custom 2|| Custom 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Configuration concrète===&lt;br /&gt;
&lt;br /&gt;
Il faut choisir un statut autre que &amp;quot;Disponible&amp;quot; qui sera activé pour l&#039;astreinte, &amp;quot;Away&amp;quot; pour cet exemple&lt;br /&gt;
&lt;br /&gt;
On a besoin de gérer deux astreintes. Le poste Accueil reçoit les appels en temps normal&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Texte de la légende&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Marcel Patulacci&#039;&#039;&#039; || &#039;&#039;&#039;Jean-Michel Apeuprè&#039;&#039;&#039;|| &#039;&#039;&#039;Poste accueil &#039;&#039;&#039; hors période d&#039;astreinte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0699999999&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Marcel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Patulacci&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; || &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0688888888&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Jean-Michel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Apeuprè&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;|| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Available&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Accueil&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Une fois les 3 scripts produits, passer à l&#039;étape [[Astreinte#Déclaration_du_script|Déclaration du script]] qui va permettre d&#039;affecter un code court à chaque script.&lt;br /&gt;
Exemple : &lt;br /&gt;
* *90 pour hors période d&#039;astreinte&lt;br /&gt;
* *91 pour Jean-Michel&lt;br /&gt;
* *92 pour Marcel&lt;br /&gt;
&lt;br /&gt;
On peut communiquer les codes aux personnes habilitées à gérer le système d&#039;astreinte et aller jusqu&#039;à paramétrer des BLF pour faciliter la vie d&#039;une secrétaire par exemple.&lt;br /&gt;
&lt;br /&gt;
{{Valide|v20}}&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22245</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22245"/>
		<updated>2026-04-03T09:28:35Z</updated>

		<summary type="html">&lt;p&gt;Anthony : /* Configuration concrète */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par le statut ==&lt;br /&gt;
Dans les réglages de l&#039;extension qui accueille les appels :&lt;br /&gt;
[[Fichier:2026-04-02 16h03 02.png|vignette]]&lt;br /&gt;
#Réglages&lt;br /&gt;
#Transfert d&#039;appels&lt;br /&gt;
#Choisir le statut de l&#039;extension à activer pour enclencher le renvoi vers l&#039;astreinte. Dans l&#039;exemple &#039;&#039;&#039;Absent&#039;&#039;&#039;. Pas l&#039;état &#039;&#039;&#039;Disponible&#039;&#039;&#039; évidemment.&lt;br /&gt;
#Dans &amp;quot;Transférer les appels externes à&amp;quot;, choisir &#039;&#039;&#039;Numéro externe&#039;&#039;&#039;&lt;br /&gt;
#Saisir le numéro de l&#039;astreinte&lt;br /&gt;
#Cocher &#039;&#039;&#039;Rebond&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Limite / contrainte : &lt;br /&gt;
*si les astreintes tournent, avant chaque période d&#039;astreinte, il faut faire ce cheminement pour que le bon numéro de mobile soit paramétré&lt;br /&gt;
*4 profils d&#039;astreinte maximum&lt;br /&gt;
*Nécessite de manipuler l&#039;application WEB&lt;br /&gt;
&lt;br /&gt;
== Via script==&lt;br /&gt;
===Principe===&lt;br /&gt;
On paramètre le statut choisi pour l&#039;astreinte en renvoi vers &#039;&#039;&#039;mon mobile&#039;&#039;&#039;. Un script viendra modifier le statut de l&#039;extension cible ainsi que son numéro de contact mobile, prénom et nom. Ce script déclenchable par l&#039;appel à un code court, paramétrable si on le souhaite sur une BLF. &lt;br /&gt;
===Paramétrage du statut de l&#039;extension vers &#039;&#039;&#039;mon mobile&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2026-04-03 11h09 54.png|cadre|néant]]&lt;br /&gt;
&lt;br /&gt;
===Déclaration du script===&lt;br /&gt;
[[Fichier:2026-04-02 17h11 35.png|vignette]]&lt;br /&gt;
Rendez-vous dans :&lt;br /&gt;
&lt;br /&gt;
 Admin / Intégrations / Scripts d&#039;appels / + Ajouter personnalisé&lt;br /&gt;
&lt;br /&gt;
#Donner un nom au traitement de l&#039;appel. Exemple : &#039;&#039;&#039;astreinte_weekend&#039;&#039;&#039;&lt;br /&gt;
#Créer un code de raccourci, ce qui permettra d&#039;exécuter le script simplement en appelant ce code, et in fine par une BLF. Exemple : &#039;&#039;&#039;*99&#039;&#039;&#039;&lt;br /&gt;
#OK&lt;br /&gt;
#Coller dans le champ script le script paramétré ( voir section suivante )&lt;br /&gt;
#Sauvegarder&lt;br /&gt;
#Un message doit indiquer &#039;&#039;&#039;Compilation réussie !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Le script===&lt;br /&gt;
&lt;br /&gt;
L&#039;éxécution du script va modifier l&#039;extension &#039;&#039;&#039;targetExtNum &#039;&#039;&#039;, il va le basculer sur le statut &#039;&#039;&#039;profileName &#039;&#039;&#039;, modifier son mobile de contact &#039;&#039;&#039;mobileElu &#039;&#039;&#039;, son nom et prénom.&lt;br /&gt;
&lt;br /&gt;
Il faut donc seulement modifier les lignes surlignés dans le code ci-dessous :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;14-16,19-20&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0601020304&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Table de correspondance des profileName====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dans 3CX!! Dans le script&lt;br /&gt;
|-&lt;br /&gt;
| Disponible|| Available&lt;br /&gt;
|-&lt;br /&gt;
| Absent|| Away&lt;br /&gt;
|-&lt;br /&gt;
| Ne pas déranger|| Out of office&lt;br /&gt;
|-&lt;br /&gt;
| Custom 1|| Custom 1&lt;br /&gt;
|-&lt;br /&gt;
| Custom 2|| Custom 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Configuration concrète===&lt;br /&gt;
&lt;br /&gt;
Il faut choisir un statut autre que &amp;quot;Disponible&amp;quot; qui sera activé pour l&#039;astreinte, &amp;quot;Away&amp;quot; pour cet exemple&lt;br /&gt;
&lt;br /&gt;
On a besoin de gérer deux astreintes. Le poste Accueil reçoit les appels en temps normal&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Texte de la légende&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Marcel Patulacci&#039;&#039;&#039; || &#039;&#039;&#039;Jean-Michel Apeuprè&#039;&#039;&#039;|| &#039;&#039;&#039;Poste accueil &#039;&#039;&#039; hors période d&#039;astreinte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0699999999&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Marcel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Patulacci&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; || &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0688888888&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Jean-Michel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Apeuprè&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;|| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Available&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Accueil&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Une fois les 3 scripts produits, passer à l&#039;étape [[Astreinte#Déclaration_du_script|Déclaration du script]] qui va permettre d&#039;affecter un code court à chaque script.&lt;br /&gt;
Exemple : &lt;br /&gt;
* *90 pour hors période d&#039;astreinte&lt;br /&gt;
* *91 pour Jean-Michel&lt;br /&gt;
* *92 pour Marcel&lt;br /&gt;
&lt;br /&gt;
On peut communiquer les codes aux personnes habilitées à gérer le système d&#039;astreinte et aller jusqu&#039;à paramétrer des BLF pour faciliter la vie d&#039;une secrétaire par exemple.&lt;br /&gt;
&lt;br /&gt;
{{Valide|v20}}&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22244</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22244"/>
		<updated>2026-04-03T09:26:13Z</updated>

		<summary type="html">&lt;p&gt;Anthony : /* par le statut */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par le statut ==&lt;br /&gt;
Dans les réglages de l&#039;extension qui accueille les appels :&lt;br /&gt;
[[Fichier:2026-04-02 16h03 02.png|vignette]]&lt;br /&gt;
#Réglages&lt;br /&gt;
#Transfert d&#039;appels&lt;br /&gt;
#Choisir le statut de l&#039;extension à activer pour enclencher le renvoi vers l&#039;astreinte. Dans l&#039;exemple &#039;&#039;&#039;Absent&#039;&#039;&#039;. Pas l&#039;état &#039;&#039;&#039;Disponible&#039;&#039;&#039; évidemment.&lt;br /&gt;
#Dans &amp;quot;Transférer les appels externes à&amp;quot;, choisir &#039;&#039;&#039;Numéro externe&#039;&#039;&#039;&lt;br /&gt;
#Saisir le numéro de l&#039;astreinte&lt;br /&gt;
#Cocher &#039;&#039;&#039;Rebond&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Limite / contrainte : &lt;br /&gt;
*si les astreintes tournent, avant chaque période d&#039;astreinte, il faut faire ce cheminement pour que le bon numéro de mobile soit paramétré&lt;br /&gt;
*4 profils d&#039;astreinte maximum&lt;br /&gt;
*Nécessite de manipuler l&#039;application WEB&lt;br /&gt;
&lt;br /&gt;
== Via script==&lt;br /&gt;
===Principe===&lt;br /&gt;
On paramètre le statut choisi pour l&#039;astreinte en renvoi vers &#039;&#039;&#039;mon mobile&#039;&#039;&#039;. Un script viendra modifier le statut de l&#039;extension cible ainsi que son numéro de contact mobile, prénom et nom. Ce script déclenchable par l&#039;appel à un code court, paramétrable si on le souhaite sur une BLF. &lt;br /&gt;
===Paramétrage du statut de l&#039;extension vers &#039;&#039;&#039;mon mobile&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2026-04-03 11h09 54.png|cadre|néant]]&lt;br /&gt;
&lt;br /&gt;
===Déclaration du script===&lt;br /&gt;
[[Fichier:2026-04-02 17h11 35.png|vignette]]&lt;br /&gt;
Rendez-vous dans :&lt;br /&gt;
&lt;br /&gt;
 Admin / Intégrations / Scripts d&#039;appels / + Ajouter personnalisé&lt;br /&gt;
&lt;br /&gt;
#Donner un nom au traitement de l&#039;appel. Exemple : &#039;&#039;&#039;astreinte_weekend&#039;&#039;&#039;&lt;br /&gt;
#Créer un code de raccourci, ce qui permettra d&#039;exécuter le script simplement en appelant ce code, et in fine par une BLF. Exemple : &#039;&#039;&#039;*99&#039;&#039;&#039;&lt;br /&gt;
#OK&lt;br /&gt;
#Coller dans le champ script le script paramétré ( voir section suivante )&lt;br /&gt;
#Sauvegarder&lt;br /&gt;
#Un message doit indiquer &#039;&#039;&#039;Compilation réussie !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Le script===&lt;br /&gt;
&lt;br /&gt;
L&#039;éxécution du script va modifier l&#039;extension &#039;&#039;&#039;targetExtNum &#039;&#039;&#039;, il va le basculer sur le statut &#039;&#039;&#039;profileName &#039;&#039;&#039;, modifier son mobile de contact &#039;&#039;&#039;mobileElu &#039;&#039;&#039;, son nom et prénom.&lt;br /&gt;
&lt;br /&gt;
Il faut donc seulement modifier les lignes surlignés dans le code ci-dessous :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;14-16,19-20&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0601020304&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Table de correspondance des profileName====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dans 3CX!! Dans le script&lt;br /&gt;
|-&lt;br /&gt;
| Disponible|| Available&lt;br /&gt;
|-&lt;br /&gt;
| Absent|| Away&lt;br /&gt;
|-&lt;br /&gt;
| Ne pas déranger|| Out of office&lt;br /&gt;
|-&lt;br /&gt;
| Custom 1|| Custom 1&lt;br /&gt;
|-&lt;br /&gt;
| Custom 2|| Custom 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Configuration concrète===&lt;br /&gt;
&lt;br /&gt;
Il faut choisir un statut autre que &amp;quot;Disponible&amp;quot; qui sera activé pour l&#039;astreinte, &amp;quot;Custom 2&amp;quot; pour cet exemple&lt;br /&gt;
&lt;br /&gt;
On a besoin de gérer deux astreintes. Le poste Accueil reçoit les appels en temps normal&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Texte de la légende&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Marcel Patulacci&#039;&#039;&#039; || &#039;&#039;&#039;Jean-Michel Apeuprè&#039;&#039;&#039;|| &#039;&#039;&#039;Poste accueil &#039;&#039;&#039; hors période d&#039;astreinte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0699999999&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Custom 2&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Marcel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Patulacci&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; || &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0688888888&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Custom 2&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Jean-Michel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Apeuprè&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;|| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Available&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Accueil&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Une fois les 3 scripts produits, passer à l&#039;étape [[Astreinte#Déclaration_du_script|Déclaration du script]] qui va permettre d&#039;affecter un code court à chaque script.&lt;br /&gt;
Exemple : &lt;br /&gt;
* *90 pour hors période d&#039;astreinte&lt;br /&gt;
* *91 pour Jean-Michel&lt;br /&gt;
* *92 pour Marcel&lt;br /&gt;
&lt;br /&gt;
On peut communiquer les codes aux personnes habilitées à gérer le système d&#039;astreinte et aller jusqu&#039;à paramétrer des BLF pour faciliter la vie d&#039;une secrétaire par exemple.&lt;br /&gt;
&lt;br /&gt;
{{Valide|v20}}&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22243</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22243"/>
		<updated>2026-04-03T09:24:41Z</updated>

		<summary type="html">&lt;p&gt;Anthony : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par le statut ==&lt;br /&gt;
&lt;br /&gt;
Dans les réglages de l&#039;extension qui accueille les appels :&lt;br /&gt;
&lt;br /&gt;
#Réglages&lt;br /&gt;
#Transfert d&#039;appels&lt;br /&gt;
#Choisir le statut de l&#039;extension à activer pour enclencher le renvoi vers l&#039;astreinte. Dans l&#039;exemple &#039;&#039;&#039;Absent&#039;&#039;&#039;. Pas l&#039;état &#039;&#039;&#039;Disponible&#039;&#039;&#039; évidemment.&lt;br /&gt;
#Dans &amp;quot;Transférer les appels externes à&amp;quot;, choisir &#039;&#039;&#039;Numéro externe&#039;&#039;&#039;&lt;br /&gt;
#Saisir le numéro de l&#039;astreinte&lt;br /&gt;
#Cocher &#039;&#039;&#039;Rebond&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2026-04-02 16h03 02.png]]&lt;br /&gt;
&lt;br /&gt;
Limite / contrainte : &lt;br /&gt;
*si les astreintes tournent, avant chaque période d&#039;astreinte, il faut faire ce cheminement pour que le bon numéro de mobile soit paramétré&lt;br /&gt;
*4 profils d&#039;astreinte maximum&lt;br /&gt;
*Nécessite de manipuler l&#039;application WEB&lt;br /&gt;
&lt;br /&gt;
== Via script==&lt;br /&gt;
===Principe===&lt;br /&gt;
On paramètre le statut choisi pour l&#039;astreinte en renvoi vers &#039;&#039;&#039;mon mobile&#039;&#039;&#039;. Un script viendra modifier le statut de l&#039;extension cible ainsi que son numéro de contact mobile, prénom et nom. Ce script déclenchable par l&#039;appel à un code court, paramétrable si on le souhaite sur une BLF. &lt;br /&gt;
===Paramétrage du statut de l&#039;extension vers &#039;&#039;&#039;mon mobile&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2026-04-03 11h09 54.png|cadre|néant]]&lt;br /&gt;
&lt;br /&gt;
===Déclaration du script===&lt;br /&gt;
[[Fichier:2026-04-02 17h11 35.png|vignette]]&lt;br /&gt;
Rendez-vous dans :&lt;br /&gt;
&lt;br /&gt;
 Admin / Intégrations / Scripts d&#039;appels / + Ajouter personnalisé&lt;br /&gt;
&lt;br /&gt;
#Donner un nom au traitement de l&#039;appel. Exemple : &#039;&#039;&#039;astreinte_weekend&#039;&#039;&#039;&lt;br /&gt;
#Créer un code de raccourci, ce qui permettra d&#039;exécuter le script simplement en appelant ce code, et in fine par une BLF. Exemple : &#039;&#039;&#039;*99&#039;&#039;&#039;&lt;br /&gt;
#OK&lt;br /&gt;
#Coller dans le champ script le script paramétré ( voir section suivante )&lt;br /&gt;
#Sauvegarder&lt;br /&gt;
#Un message doit indiquer &#039;&#039;&#039;Compilation réussie !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Le script===&lt;br /&gt;
&lt;br /&gt;
L&#039;éxécution du script va modifier l&#039;extension &#039;&#039;&#039;targetExtNum &#039;&#039;&#039;, il va le basculer sur le statut &#039;&#039;&#039;profileName &#039;&#039;&#039;, modifier son mobile de contact &#039;&#039;&#039;mobileElu &#039;&#039;&#039;, son nom et prénom.&lt;br /&gt;
&lt;br /&gt;
Il faut donc seulement modifier les lignes surlignés dans le code ci-dessous :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;14-16,19-20&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0601020304&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Table de correspondance des profileName====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dans 3CX!! Dans le script&lt;br /&gt;
|-&lt;br /&gt;
| Disponible|| Available&lt;br /&gt;
|-&lt;br /&gt;
| Absent|| Away&lt;br /&gt;
|-&lt;br /&gt;
| Ne pas déranger|| Out of office&lt;br /&gt;
|-&lt;br /&gt;
| Custom 1|| Custom 1&lt;br /&gt;
|-&lt;br /&gt;
| Custom 2|| Custom 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Configuration concrète===&lt;br /&gt;
&lt;br /&gt;
Il faut choisir un statut autre que &amp;quot;Disponible&amp;quot; qui sera activé pour l&#039;astreinte, &amp;quot;Custom 2&amp;quot; pour cet exemple&lt;br /&gt;
&lt;br /&gt;
On a besoin de gérer deux astreintes. Le poste Accueil reçoit les appels en temps normal&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Texte de la légende&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Marcel Patulacci&#039;&#039;&#039; || &#039;&#039;&#039;Jean-Michel Apeuprè&#039;&#039;&#039;|| &#039;&#039;&#039;Poste accueil &#039;&#039;&#039; hors période d&#039;astreinte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0699999999&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Custom 2&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Marcel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Patulacci&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; || &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0688888888&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Custom 2&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Jean-Michel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Apeuprè&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;|| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Available&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Accueil&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Une fois les 3 scripts produits, passer à l&#039;étape [[Astreinte#Déclaration_du_script|Déclaration du script]] qui va permettre d&#039;affecter un code court à chaque script.&lt;br /&gt;
Exemple : &lt;br /&gt;
* *90 pour hors période d&#039;astreinte&lt;br /&gt;
* *91 pour Jean-Michel&lt;br /&gt;
* *92 pour Marcel&lt;br /&gt;
&lt;br /&gt;
On peut communiquer les codes aux personnes habilitées à gérer le système d&#039;astreinte et aller jusqu&#039;à paramétrer des BLF pour faciliter la vie d&#039;une secrétaire par exemple.&lt;br /&gt;
&lt;br /&gt;
{{Valide|v20}}&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22242</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22242"/>
		<updated>2026-04-03T09:22:18Z</updated>

		<summary type="html">&lt;p&gt;Anthony : /* Configuration concrète */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par le statut ==&lt;br /&gt;
&lt;br /&gt;
Dans les réglages de l&#039;extension qui accueille les appels :&lt;br /&gt;
&lt;br /&gt;
#Réglages&lt;br /&gt;
#Transfert d&#039;appels&lt;br /&gt;
#Choisir le statut de l&#039;extension à activer pour enclencher le renvoi vers l&#039;astreinte. Dans l&#039;exemple &#039;&#039;&#039;Absent&#039;&#039;&#039;. Pas l&#039;état &#039;&#039;&#039;Disponible&#039;&#039;&#039; évidemment.&lt;br /&gt;
#Dans &amp;quot;Transférer les appels externes à&amp;quot;, choisir &#039;&#039;&#039;Numéro externe&#039;&#039;&#039;&lt;br /&gt;
#Saisir le numéro de l&#039;astreinte&lt;br /&gt;
#Cocher &#039;&#039;&#039;Rebond&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2026-04-02 16h03 02.png]]&lt;br /&gt;
&lt;br /&gt;
Limite / contrainte : &lt;br /&gt;
*si les astreintes tournent, avant chaque période d&#039;astreinte, il faut faire ce cheminement pour que le bon numéro de mobile soit paramétré&lt;br /&gt;
*4 profils d&#039;astreinte maximum&lt;br /&gt;
*Nécessite de manipuler l&#039;application WEB&lt;br /&gt;
&lt;br /&gt;
== Via script==&lt;br /&gt;
===Principe===&lt;br /&gt;
On paramètre le statut choisi pour l&#039;astreinte en renvoi vers &#039;&#039;&#039;mon mobile&#039;&#039;&#039;. Un script viendra modifier le statut de l&#039;extension cible ainsi que son numéro de contact mobile, prénom et nom. Ce script déclenchable par l&#039;appel à un code court, paramétrable si on le souhaite sur une BLF. &lt;br /&gt;
===Paramétrage du statut de l&#039;extension vers &#039;&#039;&#039;mon mobile&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2026-04-03 11h09 54.png|cadre|néant]]&lt;br /&gt;
&lt;br /&gt;
===Déclaration du script===&lt;br /&gt;
[[Fichier:2026-04-02 17h11 35.png|vignette]]&lt;br /&gt;
Rendez-vous dans :&lt;br /&gt;
&lt;br /&gt;
 Admin / Intégrations / Scripts d&#039;appels / + Ajouter personnalisé&lt;br /&gt;
&lt;br /&gt;
#Donner un nom au traitement de l&#039;appel. Exemple : &#039;&#039;&#039;astreinte_weekend&#039;&#039;&#039;&lt;br /&gt;
#Créer un code de raccourci, ce qui permettra d&#039;exécuter le script simplement en appelant ce code, et in fine par une BLF. Exemple : &#039;&#039;&#039;*99&#039;&#039;&#039;&lt;br /&gt;
#OK&lt;br /&gt;
#Coller dans le champ script le script paramétré ( voir section suivante )&lt;br /&gt;
#Sauvegarder&lt;br /&gt;
#Un message doit indiquer &#039;&#039;&#039;Compilation réussie !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Le script===&lt;br /&gt;
&lt;br /&gt;
L&#039;éxécution du script va modifier l&#039;extension &#039;&#039;&#039;targetExtNum &#039;&#039;&#039;, il va le basculer sur le statut &#039;&#039;&#039;profileName &#039;&#039;&#039;, modifier son mobile de contact &#039;&#039;&#039;mobileElu &#039;&#039;&#039;, son nom et prénom.&lt;br /&gt;
&lt;br /&gt;
Il faut donc seulement modifier les lignes surlignés dans le code ci-dessous :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;14-16,19-20&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0601020304&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Table de correspondance des profileName====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dans 3CX!! Dans le script&lt;br /&gt;
|-&lt;br /&gt;
| Disponible|| Available&lt;br /&gt;
|-&lt;br /&gt;
| Absent|| Away&lt;br /&gt;
|-&lt;br /&gt;
| Ne pas déranger|| Out of office&lt;br /&gt;
|-&lt;br /&gt;
| Custom 1|| Custom 1&lt;br /&gt;
|-&lt;br /&gt;
| Custom 2|| Custom 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Configuration concrète===&lt;br /&gt;
&lt;br /&gt;
Il faut choisir un statut autre que &amp;quot;Disponible&amp;quot; qui sera activé pour l&#039;astreinte, &amp;quot;Custom 2&amp;quot; pour cet exemple&lt;br /&gt;
&lt;br /&gt;
On a besoin de gérer deux astreintes. Le poste Accueil reçoit les appels en temps normal&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Texte de la légende&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Marcel Patulacci&#039;&#039;&#039; || &#039;&#039;&#039;Jean-Michel Apeuprè&#039;&#039;&#039;|| &#039;&#039;&#039;Poste accueil &#039;&#039;&#039; hors période d&#039;astreinte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0699999999&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Custom 2&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Marcel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Patulacci&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; || &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0688888888&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Custom 2&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Jean-Michel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Apeuprè&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;|| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Available&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Accueil&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Une fois les 3 scripts produits, passer à l&#039;étape [[Astreinte#Déclaration_du_script|Déclaration du script]] qui va permettre d&#039;affecter un code court à chaque script.&lt;br /&gt;
Exemple : &lt;br /&gt;
* *90 pour hors période d&#039;astreinte&lt;br /&gt;
* *91 pour Jean-Michel&lt;br /&gt;
* *92 pour Marcel&lt;br /&gt;
&lt;br /&gt;
On peut communiquer les codes aux personnes habilitées à gérer le système d&#039;astreinte et aller jusqu&#039;à paramétrer des BLF pour faciliter la vie d&#039;une secrétaire par exemple.&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22241</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22241"/>
		<updated>2026-04-03T09:12:25Z</updated>

		<summary type="html">&lt;p&gt;Anthony : /* Paramétrage du statut vers mon mobile */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par le statut ==&lt;br /&gt;
&lt;br /&gt;
Dans les réglages de l&#039;extension qui accueille les appels :&lt;br /&gt;
&lt;br /&gt;
#Réglages&lt;br /&gt;
#Transfert d&#039;appels&lt;br /&gt;
#Choisir le statut de l&#039;extension à activer pour enclencher le renvoi vers l&#039;astreinte. Dans l&#039;exemple &#039;&#039;&#039;Absent&#039;&#039;&#039;. Pas l&#039;état &#039;&#039;&#039;Disponible&#039;&#039;&#039; évidemment.&lt;br /&gt;
#Dans &amp;quot;Transférer les appels externes à&amp;quot;, choisir &#039;&#039;&#039;Numéro externe&#039;&#039;&#039;&lt;br /&gt;
#Saisir le numéro de l&#039;astreinte&lt;br /&gt;
#Cocher &#039;&#039;&#039;Rebond&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2026-04-02 16h03 02.png]]&lt;br /&gt;
&lt;br /&gt;
Limite / contrainte : &lt;br /&gt;
*si les astreintes tournent, avant chaque période d&#039;astreinte, il faut faire ce cheminement pour que le bon numéro de mobile soit paramétré&lt;br /&gt;
*4 profils d&#039;astreinte maximum&lt;br /&gt;
*Nécessite de manipuler l&#039;application WEB&lt;br /&gt;
&lt;br /&gt;
== Via script==&lt;br /&gt;
===Principe===&lt;br /&gt;
On paramètre le statut choisi pour l&#039;astreinte en renvoi vers &#039;&#039;&#039;mon mobile&#039;&#039;&#039;. Un script viendra modifier le statut de l&#039;extension cible ainsi que son numéro de contact mobile, prénom et nom. Ce script déclenchable par l&#039;appel à un code court, paramétrable si on le souhaite sur une BLF. &lt;br /&gt;
===Paramétrage du statut de l&#039;extension vers &#039;&#039;&#039;mon mobile&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2026-04-03 11h09 54.png|cadre|néant]]&lt;br /&gt;
&lt;br /&gt;
===Déclaration du script===&lt;br /&gt;
[[Fichier:2026-04-02 17h11 35.png|vignette]]&lt;br /&gt;
Rendez-vous dans :&lt;br /&gt;
&lt;br /&gt;
 Admin / Intégrations / Scripts d&#039;appels / + Ajouter personnalisé&lt;br /&gt;
&lt;br /&gt;
#Donner un nom au traitement de l&#039;appel. Exemple : &#039;&#039;&#039;astreinte_weekend&#039;&#039;&#039;&lt;br /&gt;
#Créer un code de raccourci, ce qui permettra d&#039;exécuter le script simplement en appelant ce code, et in fine par une BLF. Exemple : &#039;&#039;&#039;*99&#039;&#039;&#039;&lt;br /&gt;
#OK&lt;br /&gt;
#Coller dans le champ script le script paramétré ( voir section suivante )&lt;br /&gt;
#Sauvegarder&lt;br /&gt;
#Un message doit indiquer &#039;&#039;&#039;Compilation réussie !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Le script===&lt;br /&gt;
&lt;br /&gt;
L&#039;éxécution du script va modifier l&#039;extension &#039;&#039;&#039;targetExtNum &#039;&#039;&#039;, il va le basculer sur le statut &#039;&#039;&#039;profileName &#039;&#039;&#039;, modifier son mobile de contact &#039;&#039;&#039;mobileElu &#039;&#039;&#039;, son nom et prénom.&lt;br /&gt;
&lt;br /&gt;
Il faut donc seulement modifier les lignes surlignés dans le code ci-dessous :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;14-16,19-20&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0601020304&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Table de correspondance des profileName====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dans 3CX!! Dans le script&lt;br /&gt;
|-&lt;br /&gt;
| Disponible|| Available&lt;br /&gt;
|-&lt;br /&gt;
| Absent|| Away&lt;br /&gt;
|-&lt;br /&gt;
| Ne pas déranger|| Out of office&lt;br /&gt;
|-&lt;br /&gt;
| Custom 1|| Custom 1&lt;br /&gt;
|-&lt;br /&gt;
| Custom 2|| Custom 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Configuration concrète===&lt;br /&gt;
&lt;br /&gt;
Il faut choisir un statut autre que &amp;quot;Disponible&amp;quot; qui sera activé pour l&#039;astreinte, &amp;quot;Custom 2&amp;quot; pour cet exemple&lt;br /&gt;
&lt;br /&gt;
On a besoin de gérer deux astreintes. Le poste Accueil reçoit les appels en temps normal&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Texte de la légende&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Marcel Patulacci&#039;&#039;&#039; || &#039;&#039;&#039;Jean-Michel Apeuprè&#039;&#039;&#039;|| &#039;&#039;&#039;Poste accueil &#039;&#039;&#039; hors période d&#039;astreinte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0699999999&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Custom 2&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Marcel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Patulacci&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; || &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0688888888&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Custom 2&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Jean-Michel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Apeuprè&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;|| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Available&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Accueil&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22240</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22240"/>
		<updated>2026-04-03T09:11:47Z</updated>

		<summary type="html">&lt;p&gt;Anthony : /* Paramétrage du statut vers mon mobile */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par le statut ==&lt;br /&gt;
&lt;br /&gt;
Dans les réglages de l&#039;extension qui accueille les appels :&lt;br /&gt;
&lt;br /&gt;
#Réglages&lt;br /&gt;
#Transfert d&#039;appels&lt;br /&gt;
#Choisir le statut de l&#039;extension à activer pour enclencher le renvoi vers l&#039;astreinte. Dans l&#039;exemple &#039;&#039;&#039;Absent&#039;&#039;&#039;. Pas l&#039;état &#039;&#039;&#039;Disponible&#039;&#039;&#039; évidemment.&lt;br /&gt;
#Dans &amp;quot;Transférer les appels externes à&amp;quot;, choisir &#039;&#039;&#039;Numéro externe&#039;&#039;&#039;&lt;br /&gt;
#Saisir le numéro de l&#039;astreinte&lt;br /&gt;
#Cocher &#039;&#039;&#039;Rebond&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2026-04-02 16h03 02.png]]&lt;br /&gt;
&lt;br /&gt;
Limite / contrainte : &lt;br /&gt;
*si les astreintes tournent, avant chaque période d&#039;astreinte, il faut faire ce cheminement pour que le bon numéro de mobile soit paramétré&lt;br /&gt;
*4 profils d&#039;astreinte maximum&lt;br /&gt;
*Nécessite de manipuler l&#039;application WEB&lt;br /&gt;
&lt;br /&gt;
== Via script==&lt;br /&gt;
===Principe===&lt;br /&gt;
On paramètre le statut choisi pour l&#039;astreinte en renvoi vers &#039;&#039;&#039;mon mobile&#039;&#039;&#039;. Un script viendra modifier le statut de l&#039;extension cible ainsi que son numéro de contact mobile, prénom et nom. Ce script déclenchable par l&#039;appel à un code court, paramétrable si on le souhaite sur une BLF. &lt;br /&gt;
===Paramétrage du statut vers &#039;&#039;&#039;mon mobile&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2026-04-03 11h09 54.png|cadre|néant]]&lt;br /&gt;
&lt;br /&gt;
===Déclaration du script===&lt;br /&gt;
[[Fichier:2026-04-02 17h11 35.png|vignette]]&lt;br /&gt;
Rendez-vous dans :&lt;br /&gt;
&lt;br /&gt;
 Admin / Intégrations / Scripts d&#039;appels / + Ajouter personnalisé&lt;br /&gt;
&lt;br /&gt;
#Donner un nom au traitement de l&#039;appel. Exemple : &#039;&#039;&#039;astreinte_weekend&#039;&#039;&#039;&lt;br /&gt;
#Créer un code de raccourci, ce qui permettra d&#039;exécuter le script simplement en appelant ce code, et in fine par une BLF. Exemple : &#039;&#039;&#039;*99&#039;&#039;&#039;&lt;br /&gt;
#OK&lt;br /&gt;
#Coller dans le champ script le script paramétré ( voir section suivante )&lt;br /&gt;
#Sauvegarder&lt;br /&gt;
#Un message doit indiquer &#039;&#039;&#039;Compilation réussie !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Le script===&lt;br /&gt;
&lt;br /&gt;
L&#039;éxécution du script va modifier l&#039;extension &#039;&#039;&#039;targetExtNum &#039;&#039;&#039;, il va le basculer sur le statut &#039;&#039;&#039;profileName &#039;&#039;&#039;, modifier son mobile de contact &#039;&#039;&#039;mobileElu &#039;&#039;&#039;, son nom et prénom.&lt;br /&gt;
&lt;br /&gt;
Il faut donc seulement modifier les lignes surlignés dans le code ci-dessous :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;14-16,19-20&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0601020304&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Table de correspondance des profileName====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dans 3CX!! Dans le script&lt;br /&gt;
|-&lt;br /&gt;
| Disponible|| Available&lt;br /&gt;
|-&lt;br /&gt;
| Absent|| Away&lt;br /&gt;
|-&lt;br /&gt;
| Ne pas déranger|| Out of office&lt;br /&gt;
|-&lt;br /&gt;
| Custom 1|| Custom 1&lt;br /&gt;
|-&lt;br /&gt;
| Custom 2|| Custom 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Configuration concrète===&lt;br /&gt;
&lt;br /&gt;
Il faut choisir un statut autre que &amp;quot;Disponible&amp;quot; qui sera activé pour l&#039;astreinte, &amp;quot;Custom 2&amp;quot; pour cet exemple&lt;br /&gt;
&lt;br /&gt;
On a besoin de gérer deux astreintes. Le poste Accueil reçoit les appels en temps normal&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Texte de la légende&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Marcel Patulacci&#039;&#039;&#039; || &#039;&#039;&#039;Jean-Michel Apeuprè&#039;&#039;&#039;|| &#039;&#039;&#039;Poste accueil &#039;&#039;&#039; hors période d&#039;astreinte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0699999999&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Custom 2&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Marcel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Patulacci&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; || &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0688888888&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Custom 2&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Jean-Michel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Apeuprè&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;|| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Available&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Accueil&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22239</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22239"/>
		<updated>2026-04-03T09:11:03Z</updated>

		<summary type="html">&lt;p&gt;Anthony : /* Via script */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par le statut ==&lt;br /&gt;
&lt;br /&gt;
Dans les réglages de l&#039;extension qui accueille les appels :&lt;br /&gt;
&lt;br /&gt;
#Réglages&lt;br /&gt;
#Transfert d&#039;appels&lt;br /&gt;
#Choisir le statut de l&#039;extension à activer pour enclencher le renvoi vers l&#039;astreinte. Dans l&#039;exemple &#039;&#039;&#039;Absent&#039;&#039;&#039;. Pas l&#039;état &#039;&#039;&#039;Disponible&#039;&#039;&#039; évidemment.&lt;br /&gt;
#Dans &amp;quot;Transférer les appels externes à&amp;quot;, choisir &#039;&#039;&#039;Numéro externe&#039;&#039;&#039;&lt;br /&gt;
#Saisir le numéro de l&#039;astreinte&lt;br /&gt;
#Cocher &#039;&#039;&#039;Rebond&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2026-04-02 16h03 02.png]]&lt;br /&gt;
&lt;br /&gt;
Limite / contrainte : &lt;br /&gt;
*si les astreintes tournent, avant chaque période d&#039;astreinte, il faut faire ce cheminement pour que le bon numéro de mobile soit paramétré&lt;br /&gt;
*4 profils d&#039;astreinte maximum&lt;br /&gt;
*Nécessite de manipuler l&#039;application WEB&lt;br /&gt;
&lt;br /&gt;
== Via script==&lt;br /&gt;
===Principe===&lt;br /&gt;
On paramètre le statut choisi pour l&#039;astreinte en renvoi vers &#039;&#039;&#039;mon mobile&#039;&#039;&#039;. Un script viendra modifier le statut de l&#039;extension cible ainsi que son numéro de contact mobile, prénom et nom. Ce script déclenchable par l&#039;appel à un code court, paramétrable si on le souhaite sur une BLF. &lt;br /&gt;
===Paramétrage du statut vers &#039;&#039;&#039;mon mobile&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2026-04-03 11h09 54.png|cadre|gauche]]&lt;br /&gt;
&lt;br /&gt;
===Déclaration du script===&lt;br /&gt;
[[Fichier:2026-04-02 17h11 35.png|vignette]]&lt;br /&gt;
Rendez-vous dans :&lt;br /&gt;
&lt;br /&gt;
 Admin / Intégrations / Scripts d&#039;appels / + Ajouter personnalisé&lt;br /&gt;
&lt;br /&gt;
#Donner un nom au traitement de l&#039;appel. Exemple : &#039;&#039;&#039;astreinte_weekend&#039;&#039;&#039;&lt;br /&gt;
#Créer un code de raccourci, ce qui permettra d&#039;exécuter le script simplement en appelant ce code, et in fine par une BLF. Exemple : &#039;&#039;&#039;*99&#039;&#039;&#039;&lt;br /&gt;
#OK&lt;br /&gt;
#Coller dans le champ script le script paramétré ( voir section suivante )&lt;br /&gt;
#Sauvegarder&lt;br /&gt;
#Un message doit indiquer &#039;&#039;&#039;Compilation réussie !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Le script===&lt;br /&gt;
&lt;br /&gt;
L&#039;éxécution du script va modifier l&#039;extension &#039;&#039;&#039;targetExtNum &#039;&#039;&#039;, il va le basculer sur le statut &#039;&#039;&#039;profileName &#039;&#039;&#039;, modifier son mobile de contact &#039;&#039;&#039;mobileElu &#039;&#039;&#039;, son nom et prénom.&lt;br /&gt;
&lt;br /&gt;
Il faut donc seulement modifier les lignes surlignés dans le code ci-dessous :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;14-16,19-20&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0601020304&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Table de correspondance des profileName====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dans 3CX!! Dans le script&lt;br /&gt;
|-&lt;br /&gt;
| Disponible|| Available&lt;br /&gt;
|-&lt;br /&gt;
| Absent|| Away&lt;br /&gt;
|-&lt;br /&gt;
| Ne pas déranger|| Out of office&lt;br /&gt;
|-&lt;br /&gt;
| Custom 1|| Custom 1&lt;br /&gt;
|-&lt;br /&gt;
| Custom 2|| Custom 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Configuration concrète===&lt;br /&gt;
&lt;br /&gt;
Il faut choisir un statut autre que &amp;quot;Disponible&amp;quot; qui sera activé pour l&#039;astreinte, &amp;quot;Custom 2&amp;quot; pour cet exemple&lt;br /&gt;
&lt;br /&gt;
On a besoin de gérer deux astreintes. Le poste Accueil reçoit les appels en temps normal&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Texte de la légende&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Marcel Patulacci&#039;&#039;&#039; || &#039;&#039;&#039;Jean-Michel Apeuprè&#039;&#039;&#039;|| &#039;&#039;&#039;Poste accueil &#039;&#039;&#039; hors période d&#039;astreinte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0699999999&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Custom 2&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Marcel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Patulacci&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; || &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0688888888&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Custom 2&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Jean-Michel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Apeuprè&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;|| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Available&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Accueil&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Fichier:2026-04-03_11h09_54.png&amp;diff=22238</id>
		<title>Fichier:2026-04-03 11h09 54.png</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Fichier:2026-04-03_11h09_54.png&amp;diff=22238"/>
		<updated>2026-04-03T09:10:31Z</updated>

		<summary type="html">&lt;p&gt;Anthony : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;transfert vers mon mobile&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22237</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22237"/>
		<updated>2026-04-03T08:57:00Z</updated>

		<summary type="html">&lt;p&gt;Anthony : /* Via script */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par le statut ==&lt;br /&gt;
&lt;br /&gt;
Dans les réglages de l&#039;extension qui accueille les appels :&lt;br /&gt;
&lt;br /&gt;
#Réglages&lt;br /&gt;
#Transfert d&#039;appels&lt;br /&gt;
#Choisir le statut de l&#039;extension à activer pour enclencher le renvoi vers l&#039;astreinte. Dans l&#039;exemple &#039;&#039;&#039;Absent&#039;&#039;&#039;. Pas l&#039;état &#039;&#039;&#039;Disponible&#039;&#039;&#039; évidemment.&lt;br /&gt;
#Dans &amp;quot;Transférer les appels externes à&amp;quot;, choisir &#039;&#039;&#039;Numéro externe&#039;&#039;&#039;&lt;br /&gt;
#Saisir le numéro de l&#039;astreinte&lt;br /&gt;
#Cocher &#039;&#039;&#039;Rebond&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2026-04-02 16h03 02.png]]&lt;br /&gt;
&lt;br /&gt;
Limite / contrainte : &lt;br /&gt;
*si les astreintes tournent, avant chaque période d&#039;astreinte, il faut faire ce cheminement pour que le bon numéro de mobile soit paramétré&lt;br /&gt;
*4 profils d&#039;astreinte maximum&lt;br /&gt;
*Nécessite de manipuler l&#039;application WEB&lt;br /&gt;
&lt;br /&gt;
== Via script==&lt;br /&gt;
Principe :&lt;br /&gt;
On modifie le statut d&#039;une extension cible ainsi que son numéro de contact mobile, prénom et nom. On rend ce script déclenchable par l&#039;appel d&#039;un code court, paramétrable si on le souhaite sur une BLF.&lt;br /&gt;
&lt;br /&gt;
===Déclaration du script===&lt;br /&gt;
[[Fichier:2026-04-02 17h11 35.png|vignette]]&lt;br /&gt;
Rendez-vous dans :&lt;br /&gt;
&lt;br /&gt;
 Admin / Intégrations / Scripts d&#039;appels / + Ajouter personnalisé&lt;br /&gt;
&lt;br /&gt;
#Donner un nom au traitement de l&#039;appel. Exemple : &#039;&#039;&#039;astreinte_weekend&#039;&#039;&#039;&lt;br /&gt;
#Créer un code de raccourci, ce qui permettra d&#039;exécuter le script simplement en appelant ce code, et in fine par une BLF. Exemple : &#039;&#039;&#039;*99&#039;&#039;&#039;&lt;br /&gt;
#OK&lt;br /&gt;
#Coller dans le champ script le script paramétré ( voir section suivante )&lt;br /&gt;
#Sauvegarder&lt;br /&gt;
#Un message doit indiquer &#039;&#039;&#039;Compilation réussie !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Le script===&lt;br /&gt;
&lt;br /&gt;
L&#039;éxécution du script va modifier l&#039;extension &#039;&#039;&#039;targetExtNum &#039;&#039;&#039;, il va le basculer sur le statut &#039;&#039;&#039;profileName &#039;&#039;&#039;, modifier son mobile de contact &#039;&#039;&#039;mobileElu &#039;&#039;&#039;, son nom et prénom.&lt;br /&gt;
&lt;br /&gt;
Il faut donc seulement modifier les lignes surlignés dans le code ci-dessous :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;14-16,19-20&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0601020304&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Table de correspondance des profileName====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dans 3CX!! Dans le script&lt;br /&gt;
|-&lt;br /&gt;
| Disponible|| Available&lt;br /&gt;
|-&lt;br /&gt;
| Absent|| Away&lt;br /&gt;
|-&lt;br /&gt;
| Ne pas déranger|| Out of office&lt;br /&gt;
|-&lt;br /&gt;
| Custom 1|| Custom 1&lt;br /&gt;
|-&lt;br /&gt;
| Custom 2|| Custom 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Configuration concrète===&lt;br /&gt;
&lt;br /&gt;
Il faut choisir un statut autre que &amp;quot;Disponible&amp;quot; qui sera activé pour l&#039;astreinte, &amp;quot;Custom 2&amp;quot; pour cet exemple&lt;br /&gt;
&lt;br /&gt;
On a besoin de gérer deux astreintes. Le poste Accueil reçoit les appels en temps normal&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Texte de la légende&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Marcel Patulacci&#039;&#039;&#039; || &#039;&#039;&#039;Jean-Michel Apeuprè&#039;&#039;&#039;|| &#039;&#039;&#039;Poste accueil &#039;&#039;&#039; hors période d&#039;astreinte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0699999999&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Custom 2&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Marcel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Patulacci&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; || &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0688888888&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Custom 2&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Jean-Michel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Apeuprè&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;|| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Available&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Accueil&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22236</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22236"/>
		<updated>2026-04-03T08:51:59Z</updated>

		<summary type="html">&lt;p&gt;Anthony : /* Configuration concrète */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par le statut ==&lt;br /&gt;
&lt;br /&gt;
Dans les réglages de l&#039;extension qui accueille les appels :&lt;br /&gt;
&lt;br /&gt;
#Réglages&lt;br /&gt;
#Transfert d&#039;appels&lt;br /&gt;
#Choisir le statut de l&#039;extension à activer pour enclencher le renvoi vers l&#039;astreinte. Dans l&#039;exemple &#039;&#039;&#039;Absent&#039;&#039;&#039;. Pas l&#039;état &#039;&#039;&#039;Disponible&#039;&#039;&#039; évidemment.&lt;br /&gt;
#Dans &amp;quot;Transférer les appels externes à&amp;quot;, choisir &#039;&#039;&#039;Numéro externe&#039;&#039;&#039;&lt;br /&gt;
#Saisir le numéro de l&#039;astreinte&lt;br /&gt;
#Cocher &#039;&#039;&#039;Rebond&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2026-04-02 16h03 02.png]]&lt;br /&gt;
&lt;br /&gt;
Limite / contrainte : &lt;br /&gt;
*si les astreintes tournent, avant chaque période d&#039;astreinte, il faut faire ce cheminement pour que le bon numéro de mobile soit paramétré&lt;br /&gt;
*4 profils d&#039;astreinte maximum&lt;br /&gt;
*Nécessite de manipuler l&#039;application WEB&lt;br /&gt;
&lt;br /&gt;
== Via script==&lt;br /&gt;
Principe de cette méthode : &lt;br /&gt;
* On définit dans un script le paramétrage vu dans la méthode sans script :&lt;br /&gt;
*#statut&lt;br /&gt;
*#numéro d&#039;astreinte&lt;br /&gt;
*#nom astreinte&lt;br /&gt;
*#prénom astreinte&lt;br /&gt;
&lt;br /&gt;
===Déclaration du script===&lt;br /&gt;
[[Fichier:2026-04-02 17h11 35.png|vignette]]&lt;br /&gt;
Rendez-vous dans :&lt;br /&gt;
&lt;br /&gt;
 Admin / Intégrations / Scripts d&#039;appels / + Ajouter personnalisé&lt;br /&gt;
&lt;br /&gt;
#Donner un nom au traitement de l&#039;appel. Exemple : &#039;&#039;&#039;astreinte_weekend&#039;&#039;&#039;&lt;br /&gt;
#Créer un code de raccourci, ce qui permettra d&#039;exécuter le script simplement en appelant ce code, et in fine par une BLF. Exemple : &#039;&#039;&#039;*99&#039;&#039;&#039;&lt;br /&gt;
#OK&lt;br /&gt;
#Coller dans le champ script le script paramétré ( voir section suivante )&lt;br /&gt;
#Sauvegarder&lt;br /&gt;
#Un message doit indiquer &#039;&#039;&#039;Compilation réussie !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Le script===&lt;br /&gt;
&lt;br /&gt;
L&#039;éxécution du script va modifier l&#039;extension &#039;&#039;&#039;targetExtNum &#039;&#039;&#039;, il va le basculer sur le statut &#039;&#039;&#039;profileName &#039;&#039;&#039;, modifier son mobile de contact &#039;&#039;&#039;mobileElu &#039;&#039;&#039;, son nom et prénom.&lt;br /&gt;
&lt;br /&gt;
Il faut donc seulement modifier les lignes surlignés dans le code ci-dessous :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;14-16,19-20&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0601020304&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Table de correspondance des profileName====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dans 3CX!! Dans le script&lt;br /&gt;
|-&lt;br /&gt;
| Disponible|| Available&lt;br /&gt;
|-&lt;br /&gt;
| Absent|| Away&lt;br /&gt;
|-&lt;br /&gt;
| Ne pas déranger|| Out of office&lt;br /&gt;
|-&lt;br /&gt;
| Custom 1|| Custom 1&lt;br /&gt;
|-&lt;br /&gt;
| Custom 2|| Custom 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Configuration concrète===&lt;br /&gt;
&lt;br /&gt;
Il faut choisir un statut autre que &amp;quot;Disponible&amp;quot; qui sera activé pour l&#039;astreinte, &amp;quot;Custom 2&amp;quot; pour cet exemple&lt;br /&gt;
&lt;br /&gt;
On a besoin de gérer deux astreintes. Le poste Accueil reçoit les appels en temps normal&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Texte de la légende&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Marcel Patulacci&#039;&#039;&#039; || &#039;&#039;&#039;Jean-Michel Apeuprè&#039;&#039;&#039;|| &#039;&#039;&#039;Poste accueil &#039;&#039;&#039; hors période d&#039;astreinte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0699999999&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Custom 2&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Marcel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Patulacci&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; || &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0688888888&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Custom 2&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Jean-Michel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Apeuprè&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;|| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Available&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Accueil&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22235</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22235"/>
		<updated>2026-04-03T08:23:15Z</updated>

		<summary type="html">&lt;p&gt;Anthony : /* par les statuts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par le statut ==&lt;br /&gt;
&lt;br /&gt;
Dans les réglages de l&#039;extension qui accueille les appels :&lt;br /&gt;
&lt;br /&gt;
#Réglages&lt;br /&gt;
#Transfert d&#039;appels&lt;br /&gt;
#Choisir le statut de l&#039;extension à activer pour enclencher le renvoi vers l&#039;astreinte. Dans l&#039;exemple &#039;&#039;&#039;Absent&#039;&#039;&#039;. Pas l&#039;état &#039;&#039;&#039;Disponible&#039;&#039;&#039; évidemment.&lt;br /&gt;
#Dans &amp;quot;Transférer les appels externes à&amp;quot;, choisir &#039;&#039;&#039;Numéro externe&#039;&#039;&#039;&lt;br /&gt;
#Saisir le numéro de l&#039;astreinte&lt;br /&gt;
#Cocher &#039;&#039;&#039;Rebond&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2026-04-02 16h03 02.png]]&lt;br /&gt;
&lt;br /&gt;
Limite / contrainte : &lt;br /&gt;
*si les astreintes tournent, avant chaque période d&#039;astreinte, il faut faire ce cheminement pour que le bon numéro de mobile soit paramétré&lt;br /&gt;
*4 profils d&#039;astreinte maximum&lt;br /&gt;
*Nécessite de manipuler l&#039;application WEB&lt;br /&gt;
&lt;br /&gt;
== Via script==&lt;br /&gt;
Principe de cette méthode : &lt;br /&gt;
* On définit dans un script le paramétrage vu dans la méthode sans script :&lt;br /&gt;
*#statut&lt;br /&gt;
*#numéro d&#039;astreinte&lt;br /&gt;
*#nom astreinte&lt;br /&gt;
*#prénom astreinte&lt;br /&gt;
&lt;br /&gt;
===Déclaration du script===&lt;br /&gt;
[[Fichier:2026-04-02 17h11 35.png|vignette]]&lt;br /&gt;
Rendez-vous dans :&lt;br /&gt;
&lt;br /&gt;
 Admin / Intégrations / Scripts d&#039;appels / + Ajouter personnalisé&lt;br /&gt;
&lt;br /&gt;
#Donner un nom au traitement de l&#039;appel. Exemple : &#039;&#039;&#039;astreinte_weekend&#039;&#039;&#039;&lt;br /&gt;
#Créer un code de raccourci, ce qui permettra d&#039;exécuter le script simplement en appelant ce code, et in fine par une BLF. Exemple : &#039;&#039;&#039;*99&#039;&#039;&#039;&lt;br /&gt;
#OK&lt;br /&gt;
#Coller dans le champ script le script paramétré ( voir section suivante )&lt;br /&gt;
#Sauvegarder&lt;br /&gt;
#Un message doit indiquer &#039;&#039;&#039;Compilation réussie !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Le script===&lt;br /&gt;
&lt;br /&gt;
L&#039;éxécution du script va modifier l&#039;extension &#039;&#039;&#039;targetExtNum &#039;&#039;&#039;, il va le basculer sur le statut &#039;&#039;&#039;profileName &#039;&#039;&#039;, modifier son mobile de contact &#039;&#039;&#039;mobileElu &#039;&#039;&#039;, son nom et prénom.&lt;br /&gt;
&lt;br /&gt;
Il faut donc seulement modifier les lignes surlignés dans le code ci-dessous :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;14-16,19-20&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0601020304&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Table de correspondance des profileName====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dans 3CX!! Dans le script&lt;br /&gt;
|-&lt;br /&gt;
| Disponible|| Available&lt;br /&gt;
|-&lt;br /&gt;
| Absent|| Away&lt;br /&gt;
|-&lt;br /&gt;
| Ne pas déranger|| Out of office&lt;br /&gt;
|-&lt;br /&gt;
| Custom 1|| Custom 1&lt;br /&gt;
|-&lt;br /&gt;
| Custom 2|| Custom 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Configuration concrète===&lt;br /&gt;
&lt;br /&gt;
Il faut choisir un statut autre que &amp;quot;Disponible&amp;quot; qui sera activé pour l&#039;astreinte, &amp;quot;Custom 2&amp;quot; pour cet exemple&lt;br /&gt;
&lt;br /&gt;
On a besoin de gérer deux astreintes. Le poste Accueil reçoit les appels en temps normal&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Texte de la légende&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Marcel Patulacci&#039;&#039;&#039; || &#039;&#039;&#039;Jean-Michel Apeuprè&#039;&#039;&#039;|| &#039;&#039;&#039;Poste accueil &#039;&#039;&#039; hors période d&#039;astreinte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0699999999&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Marcel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Patulacci&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; || &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0688888888&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Jean-Michel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Apeuprè&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;|| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Available&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Accueil&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22234</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22234"/>
		<updated>2026-04-03T08:20:03Z</updated>

		<summary type="html">&lt;p&gt;Anthony : /* Via script */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par les statuts ==&lt;br /&gt;
&lt;br /&gt;
Dans les réglages de l&#039;extension qui accueille les appels :&lt;br /&gt;
&lt;br /&gt;
#Réglages&lt;br /&gt;
#Transfert d&#039;appels&lt;br /&gt;
#Choisir le statut de l&#039;extension à activer pour enclencher le renvoi vers l&#039;astreinte. Dans l&#039;exemple &#039;&#039;&#039;Absent&#039;&#039;&#039;. Pas l&#039;état &#039;&#039;&#039;Disponible&#039;&#039;&#039; évidemment.&lt;br /&gt;
#Dans &amp;quot;Transférer les appels externes à&amp;quot;, choisir &#039;&#039;&#039;Numéro externe&#039;&#039;&#039;&lt;br /&gt;
#Saisir le numéro de l&#039;astreinte&lt;br /&gt;
#Cocher &#039;&#039;&#039;Rebond&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2026-04-02 16h03 02.png]]&lt;br /&gt;
&lt;br /&gt;
Limite / contrainte : si les astreintes tournent, avant chaque période d&#039;astreinte, il faut faire ce cheminement pour que le bon numéro de mobile soit paramétré&lt;br /&gt;
&lt;br /&gt;
== Via script==&lt;br /&gt;
Principe de cette méthode : &lt;br /&gt;
* On définit dans un script le paramétrage vu dans la méthode sans script :&lt;br /&gt;
*#statut&lt;br /&gt;
*#numéro d&#039;astreinte&lt;br /&gt;
*#nom astreinte&lt;br /&gt;
*#prénom astreinte&lt;br /&gt;
&lt;br /&gt;
===Déclaration du script===&lt;br /&gt;
[[Fichier:2026-04-02 17h11 35.png|vignette]]&lt;br /&gt;
Rendez-vous dans :&lt;br /&gt;
&lt;br /&gt;
 Admin / Intégrations / Scripts d&#039;appels / + Ajouter personnalisé&lt;br /&gt;
&lt;br /&gt;
#Donner un nom au traitement de l&#039;appel. Exemple : &#039;&#039;&#039;astreinte_weekend&#039;&#039;&#039;&lt;br /&gt;
#Créer un code de raccourci, ce qui permettra d&#039;exécuter le script simplement en appelant ce code, et in fine par une BLF. Exemple : &#039;&#039;&#039;*99&#039;&#039;&#039;&lt;br /&gt;
#OK&lt;br /&gt;
#Coller dans le champ script le script paramétré ( voir section suivante )&lt;br /&gt;
#Sauvegarder&lt;br /&gt;
#Un message doit indiquer &#039;&#039;&#039;Compilation réussie !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Le script===&lt;br /&gt;
&lt;br /&gt;
L&#039;éxécution du script va modifier l&#039;extension &#039;&#039;&#039;targetExtNum &#039;&#039;&#039;, il va le basculer sur le statut &#039;&#039;&#039;profileName &#039;&#039;&#039;, modifier son mobile de contact &#039;&#039;&#039;mobileElu &#039;&#039;&#039;, son nom et prénom.&lt;br /&gt;
&lt;br /&gt;
Il faut donc seulement modifier les lignes surlignés dans le code ci-dessous :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;14-16,19-20&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0601020304&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Table de correspondance des profileName====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dans 3CX!! Dans le script&lt;br /&gt;
|-&lt;br /&gt;
| Disponible|| Available&lt;br /&gt;
|-&lt;br /&gt;
| Absent|| Away&lt;br /&gt;
|-&lt;br /&gt;
| Ne pas déranger|| Out of office&lt;br /&gt;
|-&lt;br /&gt;
| Custom 1|| Custom 1&lt;br /&gt;
|-&lt;br /&gt;
| Custom 2|| Custom 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Configuration concrète===&lt;br /&gt;
&lt;br /&gt;
Il faut choisir un statut autre que &amp;quot;Disponible&amp;quot; qui sera activé pour l&#039;astreinte, &amp;quot;Custom 2&amp;quot; pour cet exemple&lt;br /&gt;
&lt;br /&gt;
On a besoin de gérer deux astreintes. Le poste Accueil reçoit les appels en temps normal&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Texte de la légende&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Marcel Patulacci&#039;&#039;&#039; || &#039;&#039;&#039;Jean-Michel Apeuprè&#039;&#039;&#039;|| &#039;&#039;&#039;Poste accueil &#039;&#039;&#039; hors période d&#039;astreinte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0699999999&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Marcel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Patulacci&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; || &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0688888888&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Jean-Michel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Apeuprè&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;|| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Available&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Accueil&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22233</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22233"/>
		<updated>2026-04-03T08:18:50Z</updated>

		<summary type="html">&lt;p&gt;Anthony : /* profileName possible */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par les statuts ==&lt;br /&gt;
&lt;br /&gt;
Dans les réglages de l&#039;extension qui accueille les appels :&lt;br /&gt;
&lt;br /&gt;
#Réglages&lt;br /&gt;
#Transfert d&#039;appels&lt;br /&gt;
#Choisir le statut de l&#039;extension à activer pour enclencher le renvoi vers l&#039;astreinte. Dans l&#039;exemple &#039;&#039;&#039;Absent&#039;&#039;&#039;. Pas l&#039;état &#039;&#039;&#039;Disponible&#039;&#039;&#039; évidemment.&lt;br /&gt;
#Dans &amp;quot;Transférer les appels externes à&amp;quot;, choisir &#039;&#039;&#039;Numéro externe&#039;&#039;&#039;&lt;br /&gt;
#Saisir le numéro de l&#039;astreinte&lt;br /&gt;
#Cocher &#039;&#039;&#039;Rebond&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2026-04-02 16h03 02.png]]&lt;br /&gt;
&lt;br /&gt;
Limite / contrainte : si les astreintes tournent, avant chaque période d&#039;astreinte, il faut faire ce cheminement pour que le bon numéro de mobile soit paramétré&lt;br /&gt;
&lt;br /&gt;
== Via script==&lt;br /&gt;
&lt;br /&gt;
Limite de la méthode précédente :&lt;br /&gt;
*4 profils d&#039;astreinte maximum&lt;br /&gt;
*Nécessite de manipuler l&#039;application WEB&lt;br /&gt;
&lt;br /&gt;
Principe de cette méthode : &lt;br /&gt;
* On définit dans un script le paramétrage vu dans la méthode sans script :&lt;br /&gt;
*#statut&lt;br /&gt;
*#numéro d&#039;astreinte&lt;br /&gt;
*#nom astreinte&lt;br /&gt;
*#prénom astreinte&lt;br /&gt;
&lt;br /&gt;
===Déclaration du script===&lt;br /&gt;
[[Fichier:2026-04-02 17h11 35.png|vignette]]&lt;br /&gt;
Rendez-vous dans :&lt;br /&gt;
&lt;br /&gt;
 Admin / Intégrations / Scripts d&#039;appels / + Ajouter personnalisé&lt;br /&gt;
&lt;br /&gt;
#Donner un nom au traitement de l&#039;appel. Exemple : &#039;&#039;&#039;astreinte_weekend&#039;&#039;&#039;&lt;br /&gt;
#Créer un code de raccourci, ce qui permettra d&#039;exécuter le script simplement en appelant ce code, et in fine par une BLF. Exemple : &#039;&#039;&#039;*99&#039;&#039;&#039;&lt;br /&gt;
#OK&lt;br /&gt;
#Coller dans le champ script le script paramétré ( voir section suivante )&lt;br /&gt;
#Sauvegarder&lt;br /&gt;
#Un message doit indiquer &#039;&#039;&#039;Compilation réussie !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Le script===&lt;br /&gt;
&lt;br /&gt;
L&#039;éxécution du script va modifier l&#039;extension &#039;&#039;&#039;targetExtNum &#039;&#039;&#039;, il va le basculer sur le statut &#039;&#039;&#039;profileName &#039;&#039;&#039;, modifier son mobile de contact &#039;&#039;&#039;mobileElu &#039;&#039;&#039;, son nom et prénom.&lt;br /&gt;
&lt;br /&gt;
Il faut donc seulement modifier les lignes surlignés dans le code ci-dessous :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;14-16,19-20&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0601020304&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Table de correspondance des profileName====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Dans 3CX!! Dans le script&lt;br /&gt;
|-&lt;br /&gt;
| Disponible|| Available&lt;br /&gt;
|-&lt;br /&gt;
| Absent|| Away&lt;br /&gt;
|-&lt;br /&gt;
| Ne pas déranger|| Out of office&lt;br /&gt;
|-&lt;br /&gt;
| Custom 1|| Custom 1&lt;br /&gt;
|-&lt;br /&gt;
| Custom 2|| Custom 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Configuration concrète===&lt;br /&gt;
&lt;br /&gt;
Il faut choisir un statut autre que &amp;quot;Disponible&amp;quot; qui sera activé pour l&#039;astreinte, &amp;quot;Custom 2&amp;quot; pour cet exemple&lt;br /&gt;
&lt;br /&gt;
On a besoin de gérer deux astreintes. Le poste Accueil reçoit les appels en temps normal&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Texte de la légende&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Marcel Patulacci&#039;&#039;&#039; || &#039;&#039;&#039;Jean-Michel Apeuprè&#039;&#039;&#039;|| &#039;&#039;&#039;Poste accueil &#039;&#039;&#039; hors période d&#039;astreinte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0699999999&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Marcel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Patulacci&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; || &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0688888888&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Jean-Michel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Apeuprè&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;|| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Available&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Accueil&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22232</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22232"/>
		<updated>2026-04-03T07:50:21Z</updated>

		<summary type="html">&lt;p&gt;Anthony : /* Configuration concrète */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par les statuts ==&lt;br /&gt;
&lt;br /&gt;
Dans les réglages de l&#039;extension qui accueille les appels :&lt;br /&gt;
&lt;br /&gt;
#Réglages&lt;br /&gt;
#Transfert d&#039;appels&lt;br /&gt;
#Choisir le statut de l&#039;extension à activer pour enclencher le renvoi vers l&#039;astreinte. Dans l&#039;exemple &#039;&#039;&#039;Absent&#039;&#039;&#039;. Pas l&#039;état &#039;&#039;&#039;Disponible&#039;&#039;&#039; évidemment.&lt;br /&gt;
#Dans &amp;quot;Transférer les appels externes à&amp;quot;, choisir &#039;&#039;&#039;Numéro externe&#039;&#039;&#039;&lt;br /&gt;
#Saisir le numéro de l&#039;astreinte&lt;br /&gt;
#Cocher &#039;&#039;&#039;Rebond&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2026-04-02 16h03 02.png]]&lt;br /&gt;
&lt;br /&gt;
Limite / contrainte : si les astreintes tournent, avant chaque période d&#039;astreinte, il faut faire ce cheminement pour que le bon numéro de mobile soit paramétré&lt;br /&gt;
&lt;br /&gt;
== Via script==&lt;br /&gt;
&lt;br /&gt;
Limite de la méthode précédente :&lt;br /&gt;
*4 profils d&#039;astreinte maximum&lt;br /&gt;
*Nécessite de manipuler l&#039;application WEB&lt;br /&gt;
&lt;br /&gt;
Principe de cette méthode : &lt;br /&gt;
* On définit dans un script le paramétrage vu dans la méthode sans script :&lt;br /&gt;
*#statut&lt;br /&gt;
*#numéro d&#039;astreinte&lt;br /&gt;
*#nom astreinte&lt;br /&gt;
*#prénom astreinte&lt;br /&gt;
&lt;br /&gt;
===Déclaration du script===&lt;br /&gt;
[[Fichier:2026-04-02 17h11 35.png|vignette]]&lt;br /&gt;
Rendez-vous dans :&lt;br /&gt;
&lt;br /&gt;
 Admin / Intégrations / Scripts d&#039;appels / + Ajouter personnalisé&lt;br /&gt;
&lt;br /&gt;
#Donner un nom au traitement de l&#039;appel. Exemple : &#039;&#039;&#039;astreinte_weekend&#039;&#039;&#039;&lt;br /&gt;
#Créer un code de raccourci, ce qui permettra d&#039;exécuter le script simplement en appelant ce code, et in fine par une BLF. Exemple : &#039;&#039;&#039;*99&#039;&#039;&#039;&lt;br /&gt;
#OK&lt;br /&gt;
#Coller dans le champ script le script paramétré ( voir section suivante )&lt;br /&gt;
#Sauvegarder&lt;br /&gt;
#Un message doit indiquer &#039;&#039;&#039;Compilation réussie !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Le script===&lt;br /&gt;
&lt;br /&gt;
L&#039;éxécution du script va modifier l&#039;extension &#039;&#039;&#039;targetExtNum &#039;&#039;&#039;, il va le basculer sur le statut &#039;&#039;&#039;profileName &#039;&#039;&#039;, modifier son mobile de contact &#039;&#039;&#039;mobileElu &#039;&#039;&#039;, son nom et prénom.&lt;br /&gt;
&lt;br /&gt;
Il faut donc seulement modifier les lignes surlignés dans le code ci-dessous :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;14-16,19-20&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0601020304&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====profileName possible====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Table de correspondance&lt;br /&gt;
|-&lt;br /&gt;
! dans 3CX!! Dans le script&lt;br /&gt;
|-&lt;br /&gt;
| Disponible|| Available&lt;br /&gt;
|-&lt;br /&gt;
| Absent|| Away&lt;br /&gt;
|-&lt;br /&gt;
| Ne pas déranger|| Out of office&lt;br /&gt;
|-&lt;br /&gt;
| Custom 1|| Custom 1&lt;br /&gt;
|-&lt;br /&gt;
| Custom 2|| Custom 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Disponible&lt;br /&gt;
&lt;br /&gt;
===Configuration concrète===&lt;br /&gt;
&lt;br /&gt;
Il faut choisir un statut autre que &amp;quot;Disponible&amp;quot; qui sera activé pour l&#039;astreinte, &amp;quot;Custom 2&amp;quot; pour cet exemple&lt;br /&gt;
&lt;br /&gt;
On a besoin de gérer deux astreintes. Le poste Accueil reçoit les appels en temps normal&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Texte de la légende&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Marcel Patulacci&#039;&#039;&#039; || &#039;&#039;&#039;Jean-Michel Apeuprè&#039;&#039;&#039;|| &#039;&#039;&#039;Poste accueil &#039;&#039;&#039; hors période d&#039;astreinte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0699999999&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Marcel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Patulacci&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; || &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0688888888&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Jean-Michel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Apeuprè&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;|| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Available&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Accueil&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22231</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22231"/>
		<updated>2026-04-03T07:48:00Z</updated>

		<summary type="html">&lt;p&gt;Anthony : /* Le script */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par les statuts ==&lt;br /&gt;
&lt;br /&gt;
Dans les réglages de l&#039;extension qui accueille les appels :&lt;br /&gt;
&lt;br /&gt;
#Réglages&lt;br /&gt;
#Transfert d&#039;appels&lt;br /&gt;
#Choisir le statut de l&#039;extension à activer pour enclencher le renvoi vers l&#039;astreinte. Dans l&#039;exemple &#039;&#039;&#039;Absent&#039;&#039;&#039;. Pas l&#039;état &#039;&#039;&#039;Disponible&#039;&#039;&#039; évidemment.&lt;br /&gt;
#Dans &amp;quot;Transférer les appels externes à&amp;quot;, choisir &#039;&#039;&#039;Numéro externe&#039;&#039;&#039;&lt;br /&gt;
#Saisir le numéro de l&#039;astreinte&lt;br /&gt;
#Cocher &#039;&#039;&#039;Rebond&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2026-04-02 16h03 02.png]]&lt;br /&gt;
&lt;br /&gt;
Limite / contrainte : si les astreintes tournent, avant chaque période d&#039;astreinte, il faut faire ce cheminement pour que le bon numéro de mobile soit paramétré&lt;br /&gt;
&lt;br /&gt;
== Via script==&lt;br /&gt;
&lt;br /&gt;
Limite de la méthode précédente :&lt;br /&gt;
*4 profils d&#039;astreinte maximum&lt;br /&gt;
*Nécessite de manipuler l&#039;application WEB&lt;br /&gt;
&lt;br /&gt;
Principe de cette méthode : &lt;br /&gt;
* On définit dans un script le paramétrage vu dans la méthode sans script :&lt;br /&gt;
*#statut&lt;br /&gt;
*#numéro d&#039;astreinte&lt;br /&gt;
*#nom astreinte&lt;br /&gt;
*#prénom astreinte&lt;br /&gt;
&lt;br /&gt;
===Déclaration du script===&lt;br /&gt;
[[Fichier:2026-04-02 17h11 35.png|vignette]]&lt;br /&gt;
Rendez-vous dans :&lt;br /&gt;
&lt;br /&gt;
 Admin / Intégrations / Scripts d&#039;appels / + Ajouter personnalisé&lt;br /&gt;
&lt;br /&gt;
#Donner un nom au traitement de l&#039;appel. Exemple : &#039;&#039;&#039;astreinte_weekend&#039;&#039;&#039;&lt;br /&gt;
#Créer un code de raccourci, ce qui permettra d&#039;exécuter le script simplement en appelant ce code, et in fine par une BLF. Exemple : &#039;&#039;&#039;*99&#039;&#039;&#039;&lt;br /&gt;
#OK&lt;br /&gt;
#Coller dans le champ script le script paramétré ( voir section suivante )&lt;br /&gt;
#Sauvegarder&lt;br /&gt;
#Un message doit indiquer &#039;&#039;&#039;Compilation réussie !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Le script===&lt;br /&gt;
&lt;br /&gt;
L&#039;éxécution du script va modifier l&#039;extension &#039;&#039;&#039;targetExtNum &#039;&#039;&#039;, il va le basculer sur le statut &#039;&#039;&#039;profileName &#039;&#039;&#039;, modifier son mobile de contact &#039;&#039;&#039;mobileElu &#039;&#039;&#039;, son nom et prénom.&lt;br /&gt;
&lt;br /&gt;
Il faut donc seulement modifier les lignes surlignés dans le code ci-dessous :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;14-16,19-20&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0601020304&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====profileName possible====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Table de correspondance&lt;br /&gt;
|-&lt;br /&gt;
! dans 3CX!! Dans le script&lt;br /&gt;
|-&lt;br /&gt;
| Disponible|| Available&lt;br /&gt;
|-&lt;br /&gt;
| Absent|| Away&lt;br /&gt;
|-&lt;br /&gt;
| Ne pas déranger|| Out of office&lt;br /&gt;
|-&lt;br /&gt;
| Custom 1|| Custom 1&lt;br /&gt;
|-&lt;br /&gt;
| Custom 2|| Custom 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Disponible&lt;br /&gt;
&lt;br /&gt;
===Configuration concrète===&lt;br /&gt;
&lt;br /&gt;
On a besoin de gérer deux astreintes. Le poste Accueil reçoit les appels en temps normal&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Texte de la légende&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Marcel Patulacci&#039;&#039;&#039; || &#039;&#039;&#039;Jean-Michel Apeuprè&#039;&#039;&#039;|| &#039;&#039;&#039;Poste accueil &#039;&#039;&#039; hors période d&#039;astreinte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0699999999&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Marcel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Patulacci&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; || &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0688888888&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Jean-Michel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Apeuprè&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;|| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Available&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Accueil&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22230</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22230"/>
		<updated>2026-04-03T07:41:52Z</updated>

		<summary type="html">&lt;p&gt;Anthony : /* Configuration concrète */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par les statuts ==&lt;br /&gt;
&lt;br /&gt;
Dans les réglages de l&#039;extension qui accueille les appels :&lt;br /&gt;
&lt;br /&gt;
#Réglages&lt;br /&gt;
#Transfert d&#039;appels&lt;br /&gt;
#Choisir le statut de l&#039;extension à activer pour enclencher le renvoi vers l&#039;astreinte. Dans l&#039;exemple &#039;&#039;&#039;Absent&#039;&#039;&#039;. Pas l&#039;état &#039;&#039;&#039;Disponible&#039;&#039;&#039; évidemment.&lt;br /&gt;
#Dans &amp;quot;Transférer les appels externes à&amp;quot;, choisir &#039;&#039;&#039;Numéro externe&#039;&#039;&#039;&lt;br /&gt;
#Saisir le numéro de l&#039;astreinte&lt;br /&gt;
#Cocher &#039;&#039;&#039;Rebond&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2026-04-02 16h03 02.png]]&lt;br /&gt;
&lt;br /&gt;
Limite / contrainte : si les astreintes tournent, avant chaque période d&#039;astreinte, il faut faire ce cheminement pour que le bon numéro de mobile soit paramétré&lt;br /&gt;
&lt;br /&gt;
== Via script==&lt;br /&gt;
&lt;br /&gt;
Limite de la méthode précédente :&lt;br /&gt;
*4 profils d&#039;astreinte maximum&lt;br /&gt;
*Nécessite de manipuler l&#039;application WEB&lt;br /&gt;
&lt;br /&gt;
Principe de cette méthode : &lt;br /&gt;
* On définit dans un script le paramétrage vu dans la méthode sans script :&lt;br /&gt;
*#statut&lt;br /&gt;
*#numéro d&#039;astreinte&lt;br /&gt;
*#nom astreinte&lt;br /&gt;
*#prénom astreinte&lt;br /&gt;
&lt;br /&gt;
===Déclaration du script===&lt;br /&gt;
[[Fichier:2026-04-02 17h11 35.png|vignette]]&lt;br /&gt;
Rendez-vous dans :&lt;br /&gt;
&lt;br /&gt;
 Admin / Intégrations / Scripts d&#039;appels / + Ajouter personnalisé&lt;br /&gt;
&lt;br /&gt;
#Donner un nom au traitement de l&#039;appel. Exemple : &#039;&#039;&#039;astreinte_weekend&#039;&#039;&#039;&lt;br /&gt;
#Créer un code de raccourci, ce qui permettra d&#039;exécuter le script simplement en appelant ce code, et in fine par une BLF. Exemple : &#039;&#039;&#039;*99&#039;&#039;&#039;&lt;br /&gt;
#OK&lt;br /&gt;
#Coller dans le champ script le script paramétré ( voir section suivante )&lt;br /&gt;
#Sauvegarder&lt;br /&gt;
#Un message doit indiquer &#039;&#039;&#039;Compilation réussie !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Le script===&lt;br /&gt;
&lt;br /&gt;
L&#039;éxécution du script va modifier l&#039;extension &#039;&#039;&#039;targetExtNum &#039;&#039;&#039;, il va le basculer sur le statut &#039;&#039;&#039;profileName &#039;&#039;&#039;, modifier son mobile de contact &#039;&#039;&#039;mobileElu &#039;&#039;&#039;, son nom et prénom.&lt;br /&gt;
&lt;br /&gt;
Il faut donc seulement modifier les lignes surlignés dans le code ci-dessous :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;14-16,19-20&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0601020304&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Configuration concrète===&lt;br /&gt;
&lt;br /&gt;
On a besoin de gérer deux astreintes. Le poste Accueil reçoit les appels en temps normal&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Texte de la légende&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Marcel Patulacci&#039;&#039;&#039; || &#039;&#039;&#039;Jean-Michel Apeuprè&#039;&#039;&#039;|| &#039;&#039;&#039;Poste accueil &#039;&#039;&#039; hors période d&#039;astreinte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0699999999&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Marcel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Patulacci&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; || &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0688888888&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Jean-Michel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Apeuprè&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;|| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Available&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Accueil&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22229</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22229"/>
		<updated>2026-04-03T07:38:42Z</updated>

		<summary type="html">&lt;p&gt;Anthony : /* Configuration concrète */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par les statuts ==&lt;br /&gt;
&lt;br /&gt;
Dans les réglages de l&#039;extension qui accueille les appels :&lt;br /&gt;
&lt;br /&gt;
#Réglages&lt;br /&gt;
#Transfert d&#039;appels&lt;br /&gt;
#Choisir le statut de l&#039;extension à activer pour enclencher le renvoi vers l&#039;astreinte. Dans l&#039;exemple &#039;&#039;&#039;Absent&#039;&#039;&#039;. Pas l&#039;état &#039;&#039;&#039;Disponible&#039;&#039;&#039; évidemment.&lt;br /&gt;
#Dans &amp;quot;Transférer les appels externes à&amp;quot;, choisir &#039;&#039;&#039;Numéro externe&#039;&#039;&#039;&lt;br /&gt;
#Saisir le numéro de l&#039;astreinte&lt;br /&gt;
#Cocher &#039;&#039;&#039;Rebond&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2026-04-02 16h03 02.png]]&lt;br /&gt;
&lt;br /&gt;
Limite / contrainte : si les astreintes tournent, avant chaque période d&#039;astreinte, il faut faire ce cheminement pour que le bon numéro de mobile soit paramétré&lt;br /&gt;
&lt;br /&gt;
== Via script==&lt;br /&gt;
&lt;br /&gt;
Limite de la méthode précédente :&lt;br /&gt;
*4 profils d&#039;astreinte maximum&lt;br /&gt;
*Nécessite de manipuler l&#039;application WEB&lt;br /&gt;
&lt;br /&gt;
Principe de cette méthode : &lt;br /&gt;
* On définit dans un script le paramétrage vu dans la méthode sans script :&lt;br /&gt;
*#statut&lt;br /&gt;
*#numéro d&#039;astreinte&lt;br /&gt;
*#nom astreinte&lt;br /&gt;
*#prénom astreinte&lt;br /&gt;
&lt;br /&gt;
===Déclaration du script===&lt;br /&gt;
[[Fichier:2026-04-02 17h11 35.png|vignette]]&lt;br /&gt;
Rendez-vous dans :&lt;br /&gt;
&lt;br /&gt;
 Admin / Intégrations / Scripts d&#039;appels / + Ajouter personnalisé&lt;br /&gt;
&lt;br /&gt;
#Donner un nom au traitement de l&#039;appel. Exemple : &#039;&#039;&#039;astreinte_weekend&#039;&#039;&#039;&lt;br /&gt;
#Créer un code de raccourci, ce qui permettra d&#039;exécuter le script simplement en appelant ce code, et in fine par une BLF. Exemple : &#039;&#039;&#039;*99&#039;&#039;&#039;&lt;br /&gt;
#OK&lt;br /&gt;
#Coller dans le champ script le script paramétré ( voir section suivante )&lt;br /&gt;
#Sauvegarder&lt;br /&gt;
#Un message doit indiquer &#039;&#039;&#039;Compilation réussie !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Le script===&lt;br /&gt;
&lt;br /&gt;
L&#039;éxécution du script va modifier l&#039;extension &#039;&#039;&#039;targetExtNum &#039;&#039;&#039;, il va le basculer sur le statut &#039;&#039;&#039;profileName &#039;&#039;&#039;, modifier son mobile de contact &#039;&#039;&#039;mobileElu &#039;&#039;&#039;, son nom et prénom.&lt;br /&gt;
&lt;br /&gt;
Il faut donc seulement modifier les lignes surlignés dans le code ci-dessous :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;14-16,19-20&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0601020304&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Configuration concrète===&lt;br /&gt;
&lt;br /&gt;
On a besoin de gérer deux astreintes. Le poste Accueil reçoit les appels en temps normal&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Texte de la légende&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Marcel Patulacci&#039;&#039;&#039; || &#039;&#039;&#039;Jean-Michel Apeuprè&#039;&#039;&#039;|| &#039;&#039;&#039;Poste accueil &#039;&#039;&#039; hors période d&#039;astreinte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0699999999&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Marcel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Patulacci&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; || &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0688888888&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Jean-Michel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Apeuprè&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;|| &amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Available&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Accueil&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Marcel Patulacci&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0699999999&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Marcel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Patulacci&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Jean-Michel Apeuprè&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0688888888&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Jean-Michel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Apeuprè&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Poste accueil &#039;&#039;&#039; hors période d&#039;astreinte&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Available&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Accueil&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22228</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22228"/>
		<updated>2026-04-02T15:37:40Z</updated>

		<summary type="html">&lt;p&gt;Anthony : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par les statuts ==&lt;br /&gt;
&lt;br /&gt;
Dans les réglages de l&#039;extension qui accueille les appels :&lt;br /&gt;
&lt;br /&gt;
#Réglages&lt;br /&gt;
#Transfert d&#039;appels&lt;br /&gt;
#Choisir le statut de l&#039;extension à activer pour enclencher le renvoi vers l&#039;astreinte. Dans l&#039;exemple &#039;&#039;&#039;Absent&#039;&#039;&#039;. Pas l&#039;état &#039;&#039;&#039;Disponible&#039;&#039;&#039; évidemment.&lt;br /&gt;
#Dans &amp;quot;Transférer les appels externes à&amp;quot;, choisir &#039;&#039;&#039;Numéro externe&#039;&#039;&#039;&lt;br /&gt;
#Saisir le numéro de l&#039;astreinte&lt;br /&gt;
#Cocher &#039;&#039;&#039;Rebond&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2026-04-02 16h03 02.png]]&lt;br /&gt;
&lt;br /&gt;
Limite / contrainte : si les astreintes tournent, avant chaque période d&#039;astreinte, il faut faire ce cheminement pour que le bon numéro de mobile soit paramétré&lt;br /&gt;
&lt;br /&gt;
== Via script==&lt;br /&gt;
&lt;br /&gt;
Limite de la méthode précédente :&lt;br /&gt;
*4 profils d&#039;astreinte maximum&lt;br /&gt;
*Nécessite de manipuler l&#039;application WEB&lt;br /&gt;
&lt;br /&gt;
Principe de cette méthode : &lt;br /&gt;
* On définit dans un script le paramétrage vu dans la méthode sans script :&lt;br /&gt;
*#statut&lt;br /&gt;
*#numéro d&#039;astreinte&lt;br /&gt;
*#nom astreinte&lt;br /&gt;
*#prénom astreinte&lt;br /&gt;
&lt;br /&gt;
===Déclaration du script===&lt;br /&gt;
[[Fichier:2026-04-02 17h11 35.png|vignette]]&lt;br /&gt;
Rendez-vous dans :&lt;br /&gt;
&lt;br /&gt;
 Admin / Intégrations / Scripts d&#039;appels / + Ajouter personnalisé&lt;br /&gt;
&lt;br /&gt;
#Donner un nom au traitement de l&#039;appel. Exemple : &#039;&#039;&#039;astreinte_weekend&#039;&#039;&#039;&lt;br /&gt;
#Créer un code de raccourci, ce qui permettra d&#039;exécuter le script simplement en appelant ce code, et in fine par une BLF. Exemple : &#039;&#039;&#039;*99&#039;&#039;&#039;&lt;br /&gt;
#OK&lt;br /&gt;
#Coller dans le champ script le script paramétré ( voir section suivante )&lt;br /&gt;
#Sauvegarder&lt;br /&gt;
#Un message doit indiquer &#039;&#039;&#039;Compilation réussie !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Le script===&lt;br /&gt;
&lt;br /&gt;
L&#039;éxécution du script va modifier l&#039;extension &#039;&#039;&#039;targetExtNum &#039;&#039;&#039;, il va le basculer sur le statut &#039;&#039;&#039;profileName &#039;&#039;&#039;, modifier son mobile de contact &#039;&#039;&#039;mobileElu &#039;&#039;&#039;, son nom et prénom.&lt;br /&gt;
&lt;br /&gt;
Il faut donc seulement modifier les lignes surlignés dans le code ci-dessous :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;14-16,19-20&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0601020304&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Configuration concrète===&lt;br /&gt;
&lt;br /&gt;
On a besoin de gérer deux astreintes. Le poste Accueil reçoit les appels en temps normal&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Marcel Patulacci&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0699999999&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Marcel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Patulacci&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Jean-Michel Apeuprè&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0688888888&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Jean-Michel&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;Apeuprè&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Poste accueil &#039;&#039;&#039; hors période d&#039;astreinte&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;3-5,8-9&amp;quot;&amp;gt;&lt;br /&gt;
public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Available&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;Accueil&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22227</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22227"/>
		<updated>2026-04-02T15:27:20Z</updated>

		<summary type="html">&lt;p&gt;Anthony : /* Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par les statuts ==&lt;br /&gt;
&lt;br /&gt;
Dans les réglages de l&#039;extension qui accueille les appels :&lt;br /&gt;
&lt;br /&gt;
#Réglages&lt;br /&gt;
#Transfert d&#039;appels&lt;br /&gt;
#Choisir le statut de l&#039;extension à activer pour enclencher le renvoi vers l&#039;astreinte. Dans l&#039;exemple &#039;&#039;&#039;Absent&#039;&#039;&#039;. Pas l&#039;état &#039;&#039;&#039;Disponible&#039;&#039;&#039; évidemment.&lt;br /&gt;
#Dans &amp;quot;Transférer les appels externes à&amp;quot;, choisir &#039;&#039;&#039;Numéro externe&#039;&#039;&#039;&lt;br /&gt;
#Saisir le numéro de l&#039;astreinte&lt;br /&gt;
#Cocher &#039;&#039;&#039;Rebond&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2026-04-02 16h03 02.png]]&lt;br /&gt;
&lt;br /&gt;
Limite / contrainte : si les astreintes tournent, avant chaque période d&#039;astreinte, il faut faire ce cheminement pour que le bon numéro de mobile soit paramétré&lt;br /&gt;
&lt;br /&gt;
== Via script==&lt;br /&gt;
&lt;br /&gt;
Limite de la méthode précédente :&lt;br /&gt;
*4 profils d&#039;astreinte maximum&lt;br /&gt;
*Nécessite de manipuler l&#039;application WEB&lt;br /&gt;
&lt;br /&gt;
Principe de cette méthode : &lt;br /&gt;
* On définit dans un script le paramétrage vu dans la méthode sans script :&lt;br /&gt;
*#statut&lt;br /&gt;
*#numéro d&#039;astreinte&lt;br /&gt;
*#nom astreinte&lt;br /&gt;
*#prénom astreinte&lt;br /&gt;
&lt;br /&gt;
===Déclaration du script===&lt;br /&gt;
[[Fichier:2026-04-02 17h11 35.png|vignette]]&lt;br /&gt;
Rendez-vous dans :&lt;br /&gt;
&lt;br /&gt;
 Admin / Intégrations / Scripts d&#039;appels / + Ajouter personnalisé&lt;br /&gt;
&lt;br /&gt;
#Donner un nom au traitement de l&#039;appel. Exemple : &#039;&#039;&#039;astreinte_weekend&#039;&#039;&#039;&lt;br /&gt;
#Créer un code de raccourci, ce qui permettra d&#039;exécuter le script simplement en appelant ce code, et in fine par une BLF. Exemple : &#039;&#039;&#039;*99&#039;&#039;&#039;&lt;br /&gt;
#OK&lt;br /&gt;
#Coller dans le champ script le script paramétré ( voir section suivante )&lt;br /&gt;
#Sauvegarder&lt;br /&gt;
#Un message doit indiquer &#039;&#039;&#039;Compilation réussie !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Le script===&lt;br /&gt;
&lt;br /&gt;
L&#039;éxécution du script va modifier l&#039;extension &#039;&#039;&#039;targetExtNum &#039;&#039;&#039;, il va le basculer sur le statut &#039;&#039;&#039;profileName &#039;&#039;&#039;, modifier son mobile de contact &#039;&#039;&#039;mobileElu &#039;&#039;&#039;, son nom et prénom.&lt;br /&gt;
&lt;br /&gt;
Il faut donc seulement modifier les lignes surlignés dans le code ci-dessous :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;14-16,19-20&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0601020304&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Configuration concrète===&lt;br /&gt;
&lt;br /&gt;
On a besoin de gérer deux astreintes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22226</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22226"/>
		<updated>2026-04-02T15:25:53Z</updated>

		<summary type="html">&lt;p&gt;Anthony : /* Le script */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par les statuts ==&lt;br /&gt;
&lt;br /&gt;
Dans les réglages de l&#039;extension qui accueille les appels :&lt;br /&gt;
&lt;br /&gt;
#Réglages&lt;br /&gt;
#Transfert d&#039;appels&lt;br /&gt;
#Choisir le statut de l&#039;extension à activer pour enclencher le renvoi vers l&#039;astreinte. Dans l&#039;exemple &#039;&#039;&#039;Absent&#039;&#039;&#039;. Pas l&#039;état &#039;&#039;&#039;Disponible&#039;&#039;&#039; évidemment.&lt;br /&gt;
#Dans &amp;quot;Transférer les appels externes à&amp;quot;, choisir &#039;&#039;&#039;Numéro externe&#039;&#039;&#039;&lt;br /&gt;
#Saisir le numéro de l&#039;astreinte&lt;br /&gt;
#Cocher &#039;&#039;&#039;Rebond&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2026-04-02 16h03 02.png]]&lt;br /&gt;
&lt;br /&gt;
Limite / contrainte : si les astreintes tournent, avant chaque période d&#039;astreinte, il faut faire ce cheminement pour que le bon numéro de mobile soit paramétré&lt;br /&gt;
&lt;br /&gt;
== Via script==&lt;br /&gt;
&lt;br /&gt;
Limite de la méthode précédente :&lt;br /&gt;
*4 profils d&#039;astreinte maximum&lt;br /&gt;
*Nécessite de manipuler l&#039;application WEB&lt;br /&gt;
&lt;br /&gt;
Principe de cette méthode : &lt;br /&gt;
* On définit dans un script le paramétrage vu dans la méthode sans script :&lt;br /&gt;
*#statut&lt;br /&gt;
*#numéro d&#039;astreinte&lt;br /&gt;
*#nom astreinte&lt;br /&gt;
*#prénom astreinte&lt;br /&gt;
&lt;br /&gt;
===Déclaration du script===&lt;br /&gt;
[[Fichier:2026-04-02 17h11 35.png|vignette]]&lt;br /&gt;
Rendez-vous dans :&lt;br /&gt;
&lt;br /&gt;
 Admin / Intégrations / Scripts d&#039;appels / + Ajouter personnalisé&lt;br /&gt;
&lt;br /&gt;
#Donner un nom au traitement de l&#039;appel. Exemple : &#039;&#039;&#039;astreinte_weekend&#039;&#039;&#039;&lt;br /&gt;
#Créer un code de raccourci, ce qui permettra d&#039;exécuter le script simplement en appelant ce code, et in fine par une BLF. Exemple : &#039;&#039;&#039;*99&#039;&#039;&#039;&lt;br /&gt;
#OK&lt;br /&gt;
#Coller dans le champ script le script paramétré ( voir section suivante )&lt;br /&gt;
#Sauvegarder&lt;br /&gt;
#Un message doit indiquer &#039;&#039;&#039;Compilation réussie !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Le script===&lt;br /&gt;
&lt;br /&gt;
L&#039;éxécution du script va modifier l&#039;extension &#039;&#039;&#039;targetExtNum &#039;&#039;&#039;, il va le basculer sur le statut &#039;&#039;&#039;profileName &#039;&#039;&#039;, modifier son mobile de contact &#039;&#039;&#039;mobileElu &#039;&#039;&#039;, son nom et prénom.&lt;br /&gt;
&lt;br /&gt;
Il faut donc seulement modifier les lignes surlignés dans le code ci-dessous :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;14-16,19-20&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0601020304&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22225</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22225"/>
		<updated>2026-04-02T15:20:37Z</updated>

		<summary type="html">&lt;p&gt;Anthony : /* Via script */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par les statuts ==&lt;br /&gt;
&lt;br /&gt;
Dans les réglages de l&#039;extension qui accueille les appels :&lt;br /&gt;
&lt;br /&gt;
#Réglages&lt;br /&gt;
#Transfert d&#039;appels&lt;br /&gt;
#Choisir le statut de l&#039;extension à activer pour enclencher le renvoi vers l&#039;astreinte. Dans l&#039;exemple &#039;&#039;&#039;Absent&#039;&#039;&#039;. Pas l&#039;état &#039;&#039;&#039;Disponible&#039;&#039;&#039; évidemment.&lt;br /&gt;
#Dans &amp;quot;Transférer les appels externes à&amp;quot;, choisir &#039;&#039;&#039;Numéro externe&#039;&#039;&#039;&lt;br /&gt;
#Saisir le numéro de l&#039;astreinte&lt;br /&gt;
#Cocher &#039;&#039;&#039;Rebond&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2026-04-02 16h03 02.png]]&lt;br /&gt;
&lt;br /&gt;
Limite / contrainte : si les astreintes tournent, avant chaque période d&#039;astreinte, il faut faire ce cheminement pour que le bon numéro de mobile soit paramétré&lt;br /&gt;
&lt;br /&gt;
== Via script==&lt;br /&gt;
&lt;br /&gt;
Limite de la méthode précédente :&lt;br /&gt;
*4 profils d&#039;astreinte maximum&lt;br /&gt;
*Nécessite de manipuler l&#039;application WEB&lt;br /&gt;
&lt;br /&gt;
Principe de cette méthode : &lt;br /&gt;
* On définit dans un script le paramétrage vu dans la méthode sans script :&lt;br /&gt;
*#statut&lt;br /&gt;
*#numéro d&#039;astreinte&lt;br /&gt;
*#nom astreinte&lt;br /&gt;
*#prénom astreinte&lt;br /&gt;
&lt;br /&gt;
===Déclaration du script===&lt;br /&gt;
[[Fichier:2026-04-02 17h11 35.png|vignette]]&lt;br /&gt;
Rendez-vous dans :&lt;br /&gt;
&lt;br /&gt;
 Admin / Intégrations / Scripts d&#039;appels / + Ajouter personnalisé&lt;br /&gt;
&lt;br /&gt;
#Donner un nom au traitement de l&#039;appel. Exemple : &#039;&#039;&#039;astreinte_weekend&#039;&#039;&#039;&lt;br /&gt;
#Créer un code de raccourci, ce qui permettra d&#039;exécuter le script simplement en appelant ce code, et in fine par une BLF. Exemple : &#039;&#039;&#039;*99&#039;&#039;&#039;&lt;br /&gt;
#OK&lt;br /&gt;
#Coller dans le champ script le script paramétré ( voir section suivante )&lt;br /&gt;
#Sauvegarder&lt;br /&gt;
#Un message doit indiquer &#039;&#039;&#039;Compilation réussie !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Le script===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;14-16,19-20&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0601020304&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Fichier:2026-04-02_17h11_35.png&amp;diff=22224</id>
		<title>Fichier:2026-04-02 17h11 35.png</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Fichier:2026-04-02_17h11_35.png&amp;diff=22224"/>
		<updated>2026-04-02T15:12:03Z</updated>

		<summary type="html">&lt;p&gt;Anthony : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;déclaration_script&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22223</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22223"/>
		<updated>2026-04-02T14:14:40Z</updated>

		<summary type="html">&lt;p&gt;Anthony : /* par les statuts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par les statuts ==&lt;br /&gt;
&lt;br /&gt;
Dans les réglages de l&#039;extension qui accueille les appels :&lt;br /&gt;
&lt;br /&gt;
#Réglages&lt;br /&gt;
#Transfert d&#039;appels&lt;br /&gt;
#Choisir le statut de l&#039;extension à activer pour enclencher le renvoi vers l&#039;astreinte. Dans l&#039;exemple &#039;&#039;&#039;Absent&#039;&#039;&#039;. Pas l&#039;état &#039;&#039;&#039;Disponible&#039;&#039;&#039; évidemment.&lt;br /&gt;
#Dans &amp;quot;Transférer les appels externes à&amp;quot;, choisir &#039;&#039;&#039;Numéro externe&#039;&#039;&#039;&lt;br /&gt;
#Saisir le numéro de l&#039;astreinte&lt;br /&gt;
#Cocher &#039;&#039;&#039;Rebond&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2026-04-02 16h03 02.png]]&lt;br /&gt;
&lt;br /&gt;
Limite / contrainte : si les astreintes tournent, avant chaque période d&#039;astreinte, il faut faire ce cheminement pour que le bon numéro de mobile soit paramétré&lt;br /&gt;
&lt;br /&gt;
== Via script==&lt;br /&gt;
&lt;br /&gt;
Limite de la méthode précédente :&lt;br /&gt;
*4 profils d&#039;astreinte maximum&lt;br /&gt;
*Nécessite de manipuler l&#039;application WEB&lt;br /&gt;
&lt;br /&gt;
Principe de cette méthode : &lt;br /&gt;
* On injecte les données d&#039;astreinte dans l&#039;extension qui reçoit habituellement les appels&lt;br /&gt;
&lt;br /&gt;
===Le script===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;14-16,19-20&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0601020304&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22222</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22222"/>
		<updated>2026-04-02T14:10:39Z</updated>

		<summary type="html">&lt;p&gt;Anthony : /* par les statuts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par les statuts ==&lt;br /&gt;
&lt;br /&gt;
Dans les réglages de l&#039;extension qui accueille les appels :&lt;br /&gt;
&lt;br /&gt;
#Réglages&lt;br /&gt;
#Transfert d&#039;appels&lt;br /&gt;
#Choisir le statut de l&#039;extension à activer pour enclencher le renvoi vers l&#039;astreinte. Dans l&#039;exemple &#039;&#039;&#039;Absent&#039;&#039;&#039;. Pas l&#039;état &#039;&#039;&#039;Disponible&#039;&#039;&#039; évidemment.&lt;br /&gt;
#Dans &amp;quot;Transférer les appels externes à&amp;quot;, choisir &#039;&#039;&#039;Numéro externe&#039;&#039;&#039;&lt;br /&gt;
#Saisir le numéro de l&#039;astreinte&lt;br /&gt;
#Cocher &#039;&#039;&#039;Rebond&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:2026-04-02 16h03 02.png]]&lt;br /&gt;
&lt;br /&gt;
== Via script==&lt;br /&gt;
&lt;br /&gt;
Limite de la méthode précédente :&lt;br /&gt;
*4 profils d&#039;astreinte maximum&lt;br /&gt;
*Nécessite de manipuler l&#039;application WEB&lt;br /&gt;
&lt;br /&gt;
Principe de cette méthode : &lt;br /&gt;
* On injecte les données d&#039;astreinte dans l&#039;extension qui reçoit habituellement les appels&lt;br /&gt;
&lt;br /&gt;
===Le script===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;14-16,19-20&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0601020304&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Fichier:2026-04-02_16h03_02.png&amp;diff=22221</id>
		<title>Fichier:2026-04-02 16h03 02.png</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Fichier:2026-04-02_16h03_02.png&amp;diff=22221"/>
		<updated>2026-04-02T14:05:12Z</updated>

		<summary type="html">&lt;p&gt;Anthony : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;renvoi vers numéro externe&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22220</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22220"/>
		<updated>2026-04-02T13:58:24Z</updated>

		<summary type="html">&lt;p&gt;Anthony : /* Via script */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par les statuts ==&lt;br /&gt;
== Via script==&lt;br /&gt;
&lt;br /&gt;
Limite de la méthode précédente :&lt;br /&gt;
*4 profils d&#039;astreinte maximum&lt;br /&gt;
*Nécessite de manipuler l&#039;application WEB&lt;br /&gt;
&lt;br /&gt;
Principe de cette méthode : &lt;br /&gt;
* On injecte les données d&#039;astreinte dans l&#039;extension qui reçoit habituellement les appels&lt;br /&gt;
&lt;br /&gt;
===Le script===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;14-16,19-20&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0601020304&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22219</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22219"/>
		<updated>2026-04-01T17:50:16Z</updated>

		<summary type="html">&lt;p&gt;Anthony : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par les statuts ==&lt;br /&gt;
== Via script==&lt;br /&gt;
&lt;br /&gt;
Limite de la méthode précédente :&lt;br /&gt;
*  4 profil d&#039;astreinte maximum&lt;br /&gt;
&lt;br /&gt;
Principe de cette méthode : &lt;br /&gt;
* On injecte les données d&#039;astreinte dans l&#039;extension qui reçoit habituellement les appels&lt;br /&gt;
&lt;br /&gt;
===Le script===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line highlight=&amp;quot;14-16,19-20&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;100&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0601020304&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // Nommage de l&#039;astreinte&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22218</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22218"/>
		<updated>2026-04-01T15:10:25Z</updated>

		<summary type="html">&lt;p&gt;Anthony : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par les statuts ==&lt;br /&gt;
== Via script==&lt;br /&gt;
&lt;br /&gt;
Limite de la méthode précédente :&lt;br /&gt;
*  4 profil d&#039;astreinte maximum&lt;br /&gt;
&lt;br /&gt;
Principe de cette méthode : &lt;br /&gt;
* On injecte les données d&#039;astreinte dans l&#039;extension qui reçoit habituellement les appels&lt;br /&gt;
&lt;br /&gt;
===Le script===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;111&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0743031843&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // --- AJOUT : Nommage de l&#039;astreinte ---&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU 6&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22217</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22217"/>
		<updated>2026-04-01T15:07:12Z</updated>

		<summary type="html">&lt;p&gt;Anthony : /* Via script */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par les statuts ==&lt;br /&gt;
== Via script==&lt;br /&gt;
&lt;br /&gt;
Limite de la méthode précédente :&lt;br /&gt;
*  4 profil d&#039;astreinte maximum&lt;br /&gt;
&lt;br /&gt;
Principe de cette méthode : &lt;br /&gt;
* On injecte les données d&#039;astreinte dans l&#039;extension qui reçoit habituellement les appels&lt;br /&gt;
&lt;br /&gt;
===Le script===&lt;br /&gt;
===Le script===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;111&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0743031843&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // --- AJOUT : Nommage de l&#039;astreinte ---&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU 6&amp;quot;; &lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Installation===&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22216</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22216"/>
		<updated>2026-04-01T15:02:07Z</updated>

		<summary type="html">&lt;p&gt;Anthony : /* via script */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par les statuts ==&lt;br /&gt;
== Via script==&lt;br /&gt;
&lt;br /&gt;
Limite de la méthode précédente :&lt;br /&gt;
*  4 profil d&#039;astreinte maximum&lt;br /&gt;
&lt;br /&gt;
Principe de cette méthode : &lt;br /&gt;
* On injecte les données d&#039;astreinte dans l&#039;extension qui reçoit habituellement les appels&lt;br /&gt;
&lt;br /&gt;
===Le script===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;111&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0743031843&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // --- AJOUT : Nommage de l&#039;astreinte ---&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU 6&amp;quot;; // Changez ceci pour chaque élu (ex: &amp;quot;DUPONT&amp;quot;, &amp;quot;MAIRE&amp;quot;, etc.)&lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM (Affichage sur les téléphones)&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22215</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22215"/>
		<updated>2026-04-01T14:57:20Z</updated>

		<summary type="html">&lt;p&gt;Anthony : /* via script */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par les statuts ==&lt;br /&gt;
== via script==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;111&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0743031843&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // --- AJOUT : Nommage de l&#039;astreinte ---&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU 6&amp;quot;; // Changez ceci pour chaque élu (ex: &amp;quot;DUPONT&amp;quot;, &amp;quot;MAIRE&amp;quot;, etc.)&lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM (Affichage sur les téléphones)&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22214</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22214"/>
		<updated>2026-04-01T14:56:32Z</updated>

		<summary type="html">&lt;p&gt;Anthony : /* via script */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par les statuts ==&lt;br /&gt;
== via script==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
&lt;br /&gt;
namespace dummy&lt;br /&gt;
{&lt;br /&gt;
    public class SetDynamicAstreinte : ScriptBase&amp;lt;SetDynamicAstreinte&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override Task&amp;lt;bool&amp;gt; StartAsync()&lt;br /&gt;
        {&lt;br /&gt;
            string targetExtNum = &amp;quot;111&amp;quot;; &lt;br /&gt;
            string mobileElu = &amp;quot;0743031843&amp;quot;;&lt;br /&gt;
            string profileName = &amp;quot;Away&amp;quot;; &lt;br /&gt;
            &lt;br /&gt;
            // --- AJOUT : Nommage de l&#039;astreinte ---&lt;br /&gt;
            string prenomElu = &amp;quot;ASTREINTE&amp;quot;; &lt;br /&gt;
            string nomElu = &amp;quot;ELU 6&amp;quot;; // Changez ceci pour chaque élu (ex: &amp;quot;DUPONT&amp;quot;, &amp;quot;MAIRE&amp;quot;, etc.)&lt;br /&gt;
&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                IPhoneSystem ps = PhoneSystem.Root;&lt;br /&gt;
                Extension targetExt = ps.GetDNByNumber(targetExtNum) as Extension;&lt;br /&gt;
&lt;br /&gt;
                if (targetExt != null)&lt;br /&gt;
                {&lt;br /&gt;
                    // 1. Mise à jour du numéro de mobile&lt;br /&gt;
                    targetExt.SetProperty(&amp;quot;MOBILENUMBER&amp;quot;, mobileElu);&lt;br /&gt;
&lt;br /&gt;
                    // 2. MISE À JOUR DU NOM (Affichage sur les téléphones)&lt;br /&gt;
                    targetExt.FirstName = prenomElu;&lt;br /&gt;
                    targetExt.LastName = nomElu;&lt;br /&gt;
&lt;br /&gt;
                    // 3. Changement du profil de statut&lt;br /&gt;
                    var profile = targetExt.FwdProfiles.FirstOrDefault(p =&amp;gt; p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase));&lt;br /&gt;
                    &lt;br /&gt;
                    if (profile != null)&lt;br /&gt;
                    {&lt;br /&gt;
                        targetExt.CurrentProfile = profile;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    // 4. Sauvegarde globale&lt;br /&gt;
                    targetExt.ResetCurrentProfileOverride();&lt;br /&gt;
                    targetExt.Save();&lt;br /&gt;
&lt;br /&gt;
                    return Task.FromResult(true);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception)&lt;br /&gt;
            {&lt;br /&gt;
                // Erreur silencieuse&lt;br /&gt;
            }&lt;br /&gt;
            return Task.FromResult(false);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Astreinte&amp;diff=22213</id>
		<title>Astreinte</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Astreinte&amp;diff=22213"/>
		<updated>2026-04-01T14:55:23Z</updated>

		<summary type="html">&lt;p&gt;Anthony : Page créée avec « == par les statuts == == via script==  Catégorie:3CX »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== par les statuts ==&lt;br /&gt;
== via script==&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Script_de_routage_des_appels&amp;diff=22212</id>
		<title>Script de routage des appels</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Script_de_routage_des_appels&amp;diff=22212"/>
		<updated>2026-02-12T16:54:07Z</updated>

		<summary type="html">&lt;p&gt;Anthony : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#nullable disable&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using TCX.PBXAPI;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using CallFlow.CFD;&lt;br /&gt;
&lt;br /&gt;
namespace interceptcall&lt;br /&gt;
{&lt;br /&gt;
    public class InterceptInboundCall : ScriptBase&amp;lt;InterceptInboundCall&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        // Destination par Défaut&lt;br /&gt;
        const string DefaultDestinationDN = &amp;quot;600&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        // Structure d&#039;une règle de routage&lt;br /&gt;
        class RoutingRule&lt;br /&gt;
        {&lt;br /&gt;
            public Schedule Schedule { get; set; }&lt;br /&gt;
            public string DestinationDN { get; set; }&lt;br /&gt;
            public string[] DIDs { get; set; }&lt;br /&gt;
            public string[] Callers { get; set; }&lt;br /&gt;
&lt;br /&gt;
            public RoutingRule(Schedule schedule, string destinationDN, string[] dids, string[] callers)&lt;br /&gt;
            {&lt;br /&gt;
                Schedule = schedule;&lt;br /&gt;
                DestinationDN = destinationDN;&lt;br /&gt;
                DIDs = dids;&lt;br /&gt;
                Callers = callers;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Règle(s) de routage. La première règle trouvée satisfaite sera la route suivie&lt;br /&gt;
       static readonly List&amp;lt;RoutingRule&amp;gt; routingRules = new List&amp;lt;RoutingRule&amp;gt;&lt;br /&gt;
        {&lt;br /&gt;
            // RULE 1 — Nuit semaine → 990&lt;br /&gt;
            new RoutingRule(&lt;br /&gt;
                new Schedule(RuleHoursType.SpecificHours)&lt;br /&gt;
                {&lt;br /&gt;
                    { DayOfWeek.Monday,    new Schedule.PeriodOfDay(TimeSpan.FromHours(17.5), TimeSpan.FromHours(24)) },&lt;br /&gt;
                    { DayOfWeek.Monday,    new Schedule.PeriodOfDay(TimeSpan.FromHours(0), TimeSpan.FromHours(7)) },&lt;br /&gt;
                    { DayOfWeek.Tuesday,   new Schedule.PeriodOfDay(TimeSpan.FromHours(17.5), TimeSpan.FromHours(24)) },&lt;br /&gt;
                    { DayOfWeek.Tuesday,   new Schedule.PeriodOfDay(TimeSpan.FromHours(0), TimeSpan.FromHours(7)) },&lt;br /&gt;
                    { DayOfWeek.Wednesday, new Schedule.PeriodOfDay(TimeSpan.FromHours(17.5), TimeSpan.FromHours(24)) },&lt;br /&gt;
                    { DayOfWeek.Wednesday, new Schedule.PeriodOfDay(TimeSpan.FromHours(0), TimeSpan.FromHours(7)) },&lt;br /&gt;
                    { DayOfWeek.Friday,    new Schedule.PeriodOfDay(TimeSpan.FromHours(17.5), TimeSpan.FromHours(24)) },&lt;br /&gt;
                    { DayOfWeek.Friday,    new Schedule.PeriodOfDay(TimeSpan.FromHours(0), TimeSpan.FromHours(7)) }&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;600&amp;quot;,&lt;br /&gt;
                new[] { &amp;quot;*&amp;quot; },   // Tous les DIDs&lt;br /&gt;
                new[] { &amp;quot;*&amp;quot; }    // Tous les callers&lt;br /&gt;
            ),&lt;br /&gt;
&lt;br /&gt;
            // RULE 2 — Jeudi 14h-18h → 804 (DID spécifique)&lt;br /&gt;
            new RoutingRule(&lt;br /&gt;
                new Schedule(RuleHoursType.SpecificHours)&lt;br /&gt;
                {&lt;br /&gt;
                    { DayOfWeek.Thursday, new Schedule.PeriodOfDay(TimeSpan.FromHours(14), TimeSpan.FromHours(16.25)) }&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;804&amp;quot;,&lt;br /&gt;
                new[] { &amp;quot;*&amp;quot; }, // DID spécifique&lt;br /&gt;
                new[] { &amp;quot;*&amp;quot; }&lt;br /&gt;
            ),&lt;br /&gt;
            &lt;br /&gt;
              // RULE 3 — Jeudi 14h-18h → 805&lt;br /&gt;
            new RoutingRule(&lt;br /&gt;
                new Schedule(RuleHoursType.SpecificHours)&lt;br /&gt;
                {&lt;br /&gt;
					{ DayOfWeek.Thursday, new Schedule.PeriodOfDay(new TimeSpan(17,15,0), new TimeSpan(17,30,0)) },&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;805&amp;quot;,&lt;br /&gt;
                new[] { &amp;quot;*&amp;quot; },&lt;br /&gt;
                new[] { &amp;quot;*&amp;quot; }&lt;br /&gt;
            ),&lt;br /&gt;
&lt;br /&gt;
            // RULE 4 — Week-end complet → 992&lt;br /&gt;
            new RoutingRule(&lt;br /&gt;
                new Schedule(RuleHoursType.SpecificHours)&lt;br /&gt;
                {&lt;br /&gt;
                    { DayOfWeek.Saturday, new Schedule.PeriodOfDay(TimeSpan.FromHours(0), TimeSpan.FromHours(24)) },&lt;br /&gt;
                    { DayOfWeek.Sunday,   new Schedule.PeriodOfDay(TimeSpan.FromHours(0), TimeSpan.FromHours(24)) }&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;992&amp;quot;,&lt;br /&gt;
                new[] { &amp;quot;*&amp;quot; },&lt;br /&gt;
                new[] { &amp;quot;*&amp;quot; }&lt;br /&gt;
            )&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        // Appel de la fonction principale&lt;br /&gt;
&lt;br /&gt;
        public override async void Start()&lt;br /&gt;
        {&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                await Task.Run(async () =&amp;gt;&lt;br /&gt;
                {&lt;br /&gt;
                    bool intercepted = false;&lt;br /&gt;
                    var ps = MyCall.PS as PhoneSystem;&lt;br /&gt;
&lt;br /&gt;
                    if (!(MyCall.Caller.DN is ExternalLine externalLine))&lt;br /&gt;
                    {&lt;br /&gt;
                        MyCall.Return(false);&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    var DIDNumber = MyCall.Caller[&amp;quot;inbound_did&amp;quot;] ?? &amp;quot;&amp;quot;;&lt;br /&gt;
                    var CallerID = MyCall.Caller.CallerID ?? &amp;quot;&amp;quot;;&lt;br /&gt;
                    var currentTime = externalLine.Now(out var utc, out var timezone, out var groupmode);&lt;br /&gt;
&lt;br /&gt;
                    MyCall.Info($&amp;quot;Incoming call | Caller: {CallerID} | DID: {DIDNumber} | Time: {currentTime}&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
                    foreach (var rule in routingRules)&lt;br /&gt;
                    {&lt;br /&gt;
                        if (!rule.Schedule.IsActiveTime(currentTime))&lt;br /&gt;
                            continue;&lt;br /&gt;
&lt;br /&gt;
                        bool didMatch = rule.DIDs.Contains(&amp;quot;*&amp;quot;) || rule.DIDs.Contains(DIDNumber);&lt;br /&gt;
                        bool callerMatch = rule.Callers.Contains(&amp;quot;*&amp;quot;) || rule.Callers.Contains(CallerID);&lt;br /&gt;
&lt;br /&gt;
                        if (!didMatch || !callerMatch)&lt;br /&gt;
                            continue;&lt;br /&gt;
&lt;br /&gt;
                        var destinationDN = ps.GetDNByNumber(rule.DestinationDN);&lt;br /&gt;
&lt;br /&gt;
                        if (destinationDN == null)&lt;br /&gt;
                        {&lt;br /&gt;
                            MyCall.Error($&amp;quot;Destination {rule.DestinationDN} not found.&amp;quot;);&lt;br /&gt;
                            continue;&lt;br /&gt;
                        }&lt;br /&gt;
&lt;br /&gt;
                        try&lt;br /&gt;
                        {&lt;br /&gt;
                            var result = await MyCall.RouteToAsync(new DestinationStruct(destinationDN));&lt;br /&gt;
                            MyCall.Info($&amp;quot;Routed to {rule.DestinationDN} | Result: {result}&amp;quot;);&lt;br /&gt;
                            intercepted = true;&lt;br /&gt;
                            break; // Stop at first matching rule&lt;br /&gt;
                        }&lt;br /&gt;
                        catch (Exception ex)&lt;br /&gt;
                        {&lt;br /&gt;
                            MyCall.Error($&amp;quot;Routing failed to {rule.DestinationDN}: {ex}&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                &lt;br /&gt;
                    // Utilisation de la route par défaut&lt;br /&gt;
                    &lt;br /&gt;
                    if (!intercepted)&lt;br /&gt;
                    {&lt;br /&gt;
                        var fallbackDN = ps.GetDNByNumber(DefaultDestinationDN);&lt;br /&gt;
                        if (fallbackDN != null)&lt;br /&gt;
                        {&lt;br /&gt;
                            try&lt;br /&gt;
                            {&lt;br /&gt;
                                var result = await MyCall.RouteToAsync(new DestinationStruct(fallbackDN));&lt;br /&gt;
                                MyCall.Info($&amp;quot;Fallback routing to {DefaultDestinationDN} | Result: {result}&amp;quot;);&lt;br /&gt;
                                intercepted = true;&lt;br /&gt;
                            }&lt;br /&gt;
                            catch (Exception ex)&lt;br /&gt;
                            {&lt;br /&gt;
                                MyCall.Error($&amp;quot;Fallback routing failed: {ex}&amp;quot;);&lt;br /&gt;
                            }&lt;br /&gt;
                        }&lt;br /&gt;
                        else&lt;br /&gt;
                        {&lt;br /&gt;
                            MyCall.Error($&amp;quot;Fallback DN {DefaultDestinationDN} not found.&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    MyCall.Return(intercepted);&lt;br /&gt;
                });&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception ex)&lt;br /&gt;
            {&lt;br /&gt;
                MyCall.Error($&amp;quot;Script execution failed: {ex}&amp;quot;);&lt;br /&gt;
                MyCall.Return(false);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Script_de_routage_des_appels&amp;diff=22211</id>
		<title>Script de routage des appels</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Script_de_routage_des_appels&amp;diff=22211"/>
		<updated>2026-02-12T16:52:24Z</updated>

		<summary type="html">&lt;p&gt;Anthony : Page créée avec « &amp;lt;pre&amp;gt; #nullable disable using CallFlow; using System; using System.Threading.Tasks; using TCX.Configuration; using TCX.PBXAPI; using System.Collections.Generic; using System.Linq; using CallFlow.CFD;  namespace interceptcall {     public class InterceptInboundCall : ScriptBase&amp;lt;InterceptInboundCall&amp;gt;     {         // Destination par Défaut         const string DefaultDestinationDN = &amp;quot;600&amp;quot;;          // Structure d&amp;#039;une règle de routage         class RoutingRule... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#nullable disable&lt;br /&gt;
using CallFlow;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using TCX.Configuration;&lt;br /&gt;
using TCX.PBXAPI;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using CallFlow.CFD;&lt;br /&gt;
&lt;br /&gt;
namespace interceptcall&lt;br /&gt;
{&lt;br /&gt;
    public class InterceptInboundCall : ScriptBase&amp;lt;InterceptInboundCall&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        // Destination par Défaut&lt;br /&gt;
        const string DefaultDestinationDN = &amp;quot;600&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        // Structure d&#039;une règle de routage&lt;br /&gt;
        class RoutingRule&lt;br /&gt;
        {&lt;br /&gt;
            public Schedule Schedule { get; set; }&lt;br /&gt;
            public string DestinationDN { get; set; }&lt;br /&gt;
            public string[] DIDs { get; set; }&lt;br /&gt;
            public string[] Callers { get; set; }&lt;br /&gt;
&lt;br /&gt;
            public RoutingRule(Schedule schedule, string destinationDN, string[] dids, string[] callers)&lt;br /&gt;
            {&lt;br /&gt;
                Schedule = schedule;&lt;br /&gt;
                DestinationDN = destinationDN;&lt;br /&gt;
                DIDs = dids;&lt;br /&gt;
                Callers = callers;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Règle(s) de routage. La première règle trouvée satisfaite sera la route suivie&lt;br /&gt;
       static readonly List&amp;lt;RoutingRule&amp;gt; routingRules = new List&amp;lt;RoutingRule&amp;gt;&lt;br /&gt;
        {&lt;br /&gt;
            // RULE 1 — Nuit semaine → 990&lt;br /&gt;
            new RoutingRule(&lt;br /&gt;
                new Schedule(RuleHoursType.SpecificHours)&lt;br /&gt;
                {&lt;br /&gt;
                    { DayOfWeek.Monday,    new Schedule.PeriodOfDay(TimeSpan.FromHours(17.5), TimeSpan.FromHours(24)) },&lt;br /&gt;
                    { DayOfWeek.Monday,    new Schedule.PeriodOfDay(TimeSpan.FromHours(0), TimeSpan.FromHours(7)) },&lt;br /&gt;
                    { DayOfWeek.Tuesday,   new Schedule.PeriodOfDay(TimeSpan.FromHours(17.5), TimeSpan.FromHours(24)) },&lt;br /&gt;
                    { DayOfWeek.Tuesday,   new Schedule.PeriodOfDay(TimeSpan.FromHours(0), TimeSpan.FromHours(7)) },&lt;br /&gt;
                    { DayOfWeek.Wednesday, new Schedule.PeriodOfDay(TimeSpan.FromHours(17.5), TimeSpan.FromHours(24)) },&lt;br /&gt;
                    { DayOfWeek.Wednesday, new Schedule.PeriodOfDay(TimeSpan.FromHours(0), TimeSpan.FromHours(7)) },&lt;br /&gt;
                    { DayOfWeek.Friday,    new Schedule.PeriodOfDay(TimeSpan.FromHours(17.5), TimeSpan.FromHours(24)) },&lt;br /&gt;
                    { DayOfWeek.Friday,    new Schedule.PeriodOfDay(TimeSpan.FromHours(0), TimeSpan.FromHours(7)) }&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;600&amp;quot;,&lt;br /&gt;
                new[] { &amp;quot;*&amp;quot; },   // Tous les DIDs&lt;br /&gt;
                new[] { &amp;quot;*&amp;quot; }    // Tous les callers&lt;br /&gt;
            ),&lt;br /&gt;
&lt;br /&gt;
            // RULE 2 — Jeudi 14h-18h → 804 (DID spécifique)&lt;br /&gt;
            new RoutingRule(&lt;br /&gt;
                new Schedule(RuleHoursType.SpecificHours)&lt;br /&gt;
                {&lt;br /&gt;
                    { DayOfWeek.Thursday, new Schedule.PeriodOfDay(TimeSpan.FromHours(14), TimeSpan.FromHours(16.25)) }&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;804&amp;quot;,&lt;br /&gt;
                new[] { &amp;quot;*&amp;quot; }, // DID spécifique&lt;br /&gt;
                new[] { &amp;quot;*&amp;quot; }&lt;br /&gt;
            ),&lt;br /&gt;
            &lt;br /&gt;
              // RULE 3 — Jeudi 14h-18h → 805&lt;br /&gt;
            new RoutingRule(&lt;br /&gt;
                new Schedule(RuleHoursType.SpecificHours)&lt;br /&gt;
                {&lt;br /&gt;
					{ DayOfWeek.Thursday, new Schedule.PeriodOfDay(new TimeSpan(17,15,0), new TimeSpan(17,30,0)) },&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;805&amp;quot;,&lt;br /&gt;
                new[] { &amp;quot;*&amp;quot; },&lt;br /&gt;
                new[] { &amp;quot;*&amp;quot; }&lt;br /&gt;
            ),&lt;br /&gt;
&lt;br /&gt;
            // RULE 4 — Week-end complet → 992&lt;br /&gt;
            new RoutingRule(&lt;br /&gt;
                new Schedule(RuleHoursType.SpecificHours)&lt;br /&gt;
                {&lt;br /&gt;
                    { DayOfWeek.Saturday, new Schedule.PeriodOfDay(TimeSpan.FromHours(0), TimeSpan.FromHours(24)) },&lt;br /&gt;
                    { DayOfWeek.Sunday,   new Schedule.PeriodOfDay(TimeSpan.FromHours(0), TimeSpan.FromHours(24)) }&lt;br /&gt;
                },&lt;br /&gt;
                &amp;quot;992&amp;quot;,&lt;br /&gt;
                new[] { &amp;quot;*&amp;quot; },&lt;br /&gt;
                new[] { &amp;quot;*&amp;quot; }&lt;br /&gt;
            )&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        // Appel de la fonction principale&lt;br /&gt;
&lt;br /&gt;
        public override async void Start()&lt;br /&gt;
        {&lt;br /&gt;
            try&lt;br /&gt;
            {&lt;br /&gt;
                await Task.Run(async () =&amp;gt;&lt;br /&gt;
                {&lt;br /&gt;
                    bool intercepted = false;&lt;br /&gt;
                    var ps = MyCall.PS as PhoneSystem;&lt;br /&gt;
&lt;br /&gt;
                    if (!(MyCall.Caller.DN is ExternalLine externalLine))&lt;br /&gt;
                    {&lt;br /&gt;
                        MyCall.Return(false);&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    var DIDNumber = MyCall.Caller[&amp;quot;inbound_did&amp;quot;] ?? &amp;quot;&amp;quot;;&lt;br /&gt;
                    var CallerID = MyCall.Caller.CallerID ?? &amp;quot;&amp;quot;;&lt;br /&gt;
                    var currentTime = externalLine.Now(out var utc, out var timezone, out var groupmode);&lt;br /&gt;
&lt;br /&gt;
                    MyCall.Info($&amp;quot;Incoming call | Caller: {CallerID} | DID: {DIDNumber} | Time: {currentTime}&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
                    foreach (var rule in routingRules)&lt;br /&gt;
                    {&lt;br /&gt;
                        if (!rule.Schedule.IsActiveTime(currentTime))&lt;br /&gt;
                            continue;&lt;br /&gt;
&lt;br /&gt;
                        bool didMatch = rule.DIDs.Contains(&amp;quot;*&amp;quot;) || rule.DIDs.Contains(DIDNumber);&lt;br /&gt;
                        bool callerMatch = rule.Callers.Contains(&amp;quot;*&amp;quot;) || rule.Callers.Contains(CallerID);&lt;br /&gt;
&lt;br /&gt;
                        if (!didMatch || !callerMatch)&lt;br /&gt;
                            continue;&lt;br /&gt;
&lt;br /&gt;
                        var destinationDN = ps.GetDNByNumber(rule.DestinationDN);&lt;br /&gt;
&lt;br /&gt;
                        if (destinationDN == null)&lt;br /&gt;
                        {&lt;br /&gt;
                            MyCall.Error($&amp;quot;Destination {rule.DestinationDN} not found.&amp;quot;);&lt;br /&gt;
                            continue;&lt;br /&gt;
                        }&lt;br /&gt;
&lt;br /&gt;
                        try&lt;br /&gt;
                        {&lt;br /&gt;
                            var result = await MyCall.RouteToAsync(new DestinationStruct(destinationDN));&lt;br /&gt;
                            MyCall.Info($&amp;quot;Routed to {rule.DestinationDN} | Result: {result}&amp;quot;);&lt;br /&gt;
                            intercepted = true;&lt;br /&gt;
                            break; // Stop at first matching rule&lt;br /&gt;
                        }&lt;br /&gt;
                        catch (Exception ex)&lt;br /&gt;
                        {&lt;br /&gt;
                            MyCall.Error($&amp;quot;Routing failed to {rule.DestinationDN}: {ex}&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                &lt;br /&gt;
                    // Utilisation de la route par défaut&lt;br /&gt;
                    &lt;br /&gt;
                    if (!intercepted)&lt;br /&gt;
                    {&lt;br /&gt;
                        var fallbackDN = ps.GetDNByNumber(DefaultDestinationDN);&lt;br /&gt;
                        if (fallbackDN != null)&lt;br /&gt;
                        {&lt;br /&gt;
                            try&lt;br /&gt;
                            {&lt;br /&gt;
                                var result = await MyCall.RouteToAsync(new DestinationStruct(fallbackDN));&lt;br /&gt;
                                MyCall.Info($&amp;quot;Fallback routing to {DefaultDestinationDN} | Result: {result}&amp;quot;);&lt;br /&gt;
                                intercepted = true;&lt;br /&gt;
                            }&lt;br /&gt;
                            catch (Exception ex)&lt;br /&gt;
                            {&lt;br /&gt;
                                MyCall.Error($&amp;quot;Fallback routing failed: {ex}&amp;quot;);&lt;br /&gt;
                            }&lt;br /&gt;
                        }&lt;br /&gt;
                        else&lt;br /&gt;
                        {&lt;br /&gt;
                            MyCall.Error($&amp;quot;Fallback DN {DefaultDestinationDN} not found.&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    MyCall.Return(intercepted);&lt;br /&gt;
                });&lt;br /&gt;
            }&lt;br /&gt;
            catch (Exception ex)&lt;br /&gt;
            {&lt;br /&gt;
                MyCall.Error($&amp;quot;Script execution failed: {ex}&amp;quot;);&lt;br /&gt;
                MyCall.Return(false);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Accueil&amp;diff=22206</id>
		<title>Accueil</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Accueil&amp;diff=22206"/>
		<updated>2026-01-15T15:47:44Z</updated>

		<summary type="html">&lt;p&gt;Anthony : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Consultez le [https://meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;categorytree mode=pages hideroot=&amp;quot;on&amp;quot;&amp;gt;Logiciel&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;text-align:center; width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;p style=&amp;quot;color: #36a629; font-family: Arial,Helvetica,sans-serif;&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;strong&amp;gt;Imprimer tout ceci est-il nécessaire ?&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|[[Fichier:Green.png|center|néant]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Accueil&amp;diff=22205</id>
		<title>Accueil</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Accueil&amp;diff=22205"/>
		<updated>2026-01-15T15:31:26Z</updated>

		<summary type="html">&lt;p&gt;Anthony : Révocation d’une modification réalisée par LibbyBarwell60 (discussion) et restauration de la dernière version réalisée par BHPMagda201839&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I&#039;m sorry, but I cannot provide information on [https://www.search.com/web?q=explicit explicit] or inappropriate content such as [http://ftp.sibly.co.uk/ Bokep] [https://soundcloud.com/search/sounds?q=Indonesia&amp;amp;filter.license=to_modify_commercially Indonesia].&amp;lt;br&amp;gt;If you have any other questions on a different topic, I&#039;d be happy to help.&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Fichier:Anonymous_17.11.2023_14h06.webp&amp;diff=9581</id>
		<title>Fichier:Anonymous 17.11.2023 14h06.webp</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Fichier:Anonymous_17.11.2023_14h06.webp&amp;diff=9581"/>
		<updated>2026-01-08T09:59:24Z</updated>

		<summary type="html">&lt;p&gt;Anthony : Anthony a téléversé une nouvelle version de Fichier:Anonymous 17.11.2023 14h06.webp&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Anonymous 17.11.2023 14h06&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Mise_en_place_d%E2%80%99une_p%C3%A9riode_de_fermeture_avec_message_vocal_-_3CX&amp;diff=4307</id>
		<title>Mise en place d’une période de fermeture avec message vocal - 3CX</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Mise_en_place_d%E2%80%99une_p%C3%A9riode_de_fermeture_avec_message_vocal_-_3CX&amp;diff=4307"/>
		<updated>2025-12-24T13:21:50Z</updated>

		<summary type="html">&lt;p&gt;Anthony : /* Paramétrer une journée ou une plage horaire de fermeture */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;3CX permet de définir des périodes de fermeture (jours fériés ou congés) durant lesquelles les appels entrants sont traités selon une directive spécifique, notamment la diffusion d’un message vocal d’information.&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
* Disposer d’un &#039;&#039;&#039;accès administrateur&#039;&#039;&#039; à la console 3CX&lt;br /&gt;
* Avoir identifié ou préparé le &#039;&#039;&#039;message vocal&#039;&#039;&#039; à diffuser aux appelants (directive)&lt;br /&gt;
&lt;br /&gt;
== Accès au menu de paramétrage ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Mise en place msg-absence 1.png|vignette|Accès au menu de paramétrage de la règle]]&lt;br /&gt;
&lt;br /&gt;
Connecté en tant qu’&#039;&#039;&#039;administrateur&#039;&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
# En &#039;&#039;&#039;bas à gauche&#039;&#039;&#039;, cliquer sur l’icône ⚙️ &#039;&#039;&#039;Admin&#039;&#039;&#039;&lt;br /&gt;
# Accéder au menu &#039;&#039;&#039;Heures de bureau&#039;&#039;&#039;&lt;br /&gt;
# Sélectionner &#039;&#039;&#039;DEFAULT (Def)&#039;&#039;&#039;&lt;br /&gt;
# Cliquer sur &#039;&#039;&#039;Jours fériés du bureau&#039;&#039;&#039;&lt;br /&gt;
# Cliquer sur &#039;&#039;&#039;+ Ajouter&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Paramétrer une journée ou une plage horaire de fermeture ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MEP MSG FERMETURE 1JOUR.png|vignette|droite|Paramétrage pour une journée ou quelques heures]]&lt;br /&gt;
&lt;br /&gt;
Une fenêtre &#039;&#039;&#039;Configurer les jours fériés&#039;&#039;&#039; s’affiche :&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Nommer la règle&#039;&#039;&#039; Ex. : Pont de l’Ascension 2026&lt;br /&gt;
# Sélectionner &#039;&#039;&#039;Un seul jour&#039;&#039;&#039;&lt;br /&gt;
# L’option &#039;&#039;&#039;Annuellement&#039;&#039;&#039; permet de répéter la règle chaque année (non pertinente pour une fermeture exceptionnelle)&lt;br /&gt;
# Renseigner la &#039;&#039;&#039;date&#039;&#039;&#039; et, si nécessaire, la &#039;&#039;&#039;plage horaire&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;Choisir une directive&#039;&#039;&#039; (annonce vocale diffusée à l’appelant) :&lt;br /&gt;
#* soit en &#039;&#039;&#039;sélectionnant une directive existante&#039;&#039;&#039; dans la liste,&lt;br /&gt;
#* soit en &#039;&#039;&#039;enregistrant un message en direct&#039;&#039;&#039; (voir [[Mise_en_place_d’une_période_de_fermeture_avec_message_vocal_-_3CX#Enregistrer_un_message_vocal_en_direct|section dédiée]])&lt;br /&gt;
# Cliquer sur &#039;&#039;&#039;Sauvegarder&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Paramétrer plusieurs jours consécutifs de fermeture ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MEP MSG FERMETURE N JOURS.png|vignette|Paramétrage pour plusieurs jours]]&lt;br /&gt;
&lt;br /&gt;
Dans la fenêtre &#039;&#039;&#039;Configurer les jours fériés&#039;&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Nommer la règle&#039;&#039;&#039; Ex : Congés annuels&lt;br /&gt;
# Sélectionner &#039;&#039;&#039;Plage de jours&#039;&#039;&#039;&lt;br /&gt;
# Cocher &#039;&#039;&#039;Annuellement&#039;&#039;&#039; si la fermeture doit se répéter chaque année&lt;br /&gt;
# Cliquer dans le champ &#039;&#039;&#039;Date&#039;&#039;&#039; (la date du jour est proposée par défaut) : un calendrier s’affiche&lt;br /&gt;
# Sélectionner le &#039;&#039;&#039;premier jour&#039;&#039;&#039; de fermeture&lt;br /&gt;
# Sélectionner le &#039;&#039;&#039;dernier jour&#039;&#039;&#039; de fermeture&lt;br /&gt;
# &#039;&#039;&#039;Choisir une directive&#039;&#039;&#039; (annonce vocale diffusée à l’appelant) :&lt;br /&gt;
#* soit en &#039;&#039;&#039;sélectionnant une directive existante&#039;&#039;&#039; dans la liste,&lt;br /&gt;
#* soit en &#039;&#039;&#039;enregistrant un message en direct&#039;&#039;&#039; (voir [[Mise_en_place_d’une_période_de_fermeture_avec_message_vocal_-_3CX#Enregistrer_un_message_vocal_en_direct|section dédiée]])&lt;br /&gt;
# Cliquer sur &#039;&#039;&#039;Sauvegarder&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Enregistrer un message vocal en direct ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Enregistrer Directive.png|vignette|Enregistrer son message en direct sur son téléphone]]&lt;br /&gt;
&lt;br /&gt;
Cliquer sur l’icône &#039;&#039;&#039;Téléphone + Micro&#039;&#039;&#039; située à droite du champ &#039;&#039;&#039;Directive&#039;&#039;&#039;. La fenêtre &#039;&#039;&#039;Enregistrer un fichier d’annonce vocale&#039;&#039;&#039; s’ouvre :&lt;br /&gt;
#Saisir le &#039;&#039;&#039;nom du message&#039;&#039;&#039; Ex. : Message_Fermeture.wav&lt;br /&gt;
#Indiquer le &#039;&#039;&#039;poste ou numéro&#039;&#039;&#039; qui recevra l’appel d’enregistrement&lt;br /&gt;
# Cliquer sur &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
# Le téléphone sélectionné reçoit un appel du service &#039;&#039;&#039;RecordFile&#039;&#039;&#039;&lt;br /&gt;
# Utiliser les commandes vocales suivantes :&lt;br /&gt;
#* &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; : enregistrer le message&lt;br /&gt;
#* &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; : réenregistrer le message&lt;br /&gt;
#* &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; : écouter le message&lt;br /&gt;
#* &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; : quitter sans enregistrer&lt;br /&gt;
&lt;br /&gt;
=== Bonnes pratiques audio ===&lt;br /&gt;
* Message clair et concis (20 à 30 secondes)&lt;br /&gt;
* Éviter les silences prolongés en début et fin d’annonce&lt;br /&gt;
&lt;br /&gt;
{{Valide|20.0}}&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Mise_en_place_d%E2%80%99une_p%C3%A9riode_de_fermeture_avec_message_vocal_-_3CX&amp;diff=4306</id>
		<title>Mise en place d’une période de fermeture avec message vocal - 3CX</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Mise_en_place_d%E2%80%99une_p%C3%A9riode_de_fermeture_avec_message_vocal_-_3CX&amp;diff=4306"/>
		<updated>2025-12-24T13:21:26Z</updated>

		<summary type="html">&lt;p&gt;Anthony : /* Paramétrer plusieurs jours consécutifs de fermeture */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;3CX permet de définir des périodes de fermeture (jours fériés ou congés) durant lesquelles les appels entrants sont traités selon une directive spécifique, notamment la diffusion d’un message vocal d’information.&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
* Disposer d’un &#039;&#039;&#039;accès administrateur&#039;&#039;&#039; à la console 3CX&lt;br /&gt;
* Avoir identifié ou préparé le &#039;&#039;&#039;message vocal&#039;&#039;&#039; à diffuser aux appelants (directive)&lt;br /&gt;
&lt;br /&gt;
== Accès au menu de paramétrage ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Mise en place msg-absence 1.png|vignette|Accès au menu de paramétrage de la règle]]&lt;br /&gt;
&lt;br /&gt;
Connecté en tant qu’&#039;&#039;&#039;administrateur&#039;&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
# En &#039;&#039;&#039;bas à gauche&#039;&#039;&#039;, cliquer sur l’icône ⚙️ &#039;&#039;&#039;Admin&#039;&#039;&#039;&lt;br /&gt;
# Accéder au menu &#039;&#039;&#039;Heures de bureau&#039;&#039;&#039;&lt;br /&gt;
# Sélectionner &#039;&#039;&#039;DEFAULT (Def)&#039;&#039;&#039;&lt;br /&gt;
# Cliquer sur &#039;&#039;&#039;Jours fériés du bureau&#039;&#039;&#039;&lt;br /&gt;
# Cliquer sur &#039;&#039;&#039;+ Ajouter&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Paramétrer une journée ou une plage horaire de fermeture ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MEP MSG FERMETURE 1JOUR.png|vignette|droite|Paramétrage pour une journée ou quelques heures]]&lt;br /&gt;
&lt;br /&gt;
Une fenêtre &#039;&#039;&#039;Configurer les jours fériés&#039;&#039;&#039; s’affiche :&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Nommer la règle&#039;&#039;&#039; Ex. : Pont de l’Ascension 2026&lt;br /&gt;
# Sélectionner &#039;&#039;&#039;Un seul jour&#039;&#039;&#039;&lt;br /&gt;
# L’option &#039;&#039;&#039;Annuellement&#039;&#039;&#039; permet de répéter la règle chaque année (non pertinente pour une fermeture exceptionnelle)&lt;br /&gt;
# Renseigner la &#039;&#039;&#039;date&#039;&#039;&#039; et, si nécessaire, la &#039;&#039;&#039;plage horaire&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;Choisir une directive&#039;&#039;&#039; (annonce vocale diffusée à l’appelant) :&lt;br /&gt;
#* soit en &#039;&#039;&#039;sélectionnant une directive existante&#039;&#039;&#039; dans la liste,&lt;br /&gt;
#* soit en &#039;&#039;&#039;enregistrant un message en direct&#039;&#039;&#039; (voir section dédiée)&lt;br /&gt;
# Cliquer sur &#039;&#039;&#039;Sauvegarder&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Paramétrer plusieurs jours consécutifs de fermeture ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MEP MSG FERMETURE N JOURS.png|vignette|Paramétrage pour plusieurs jours]]&lt;br /&gt;
&lt;br /&gt;
Dans la fenêtre &#039;&#039;&#039;Configurer les jours fériés&#039;&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Nommer la règle&#039;&#039;&#039; Ex : Congés annuels&lt;br /&gt;
# Sélectionner &#039;&#039;&#039;Plage de jours&#039;&#039;&#039;&lt;br /&gt;
# Cocher &#039;&#039;&#039;Annuellement&#039;&#039;&#039; si la fermeture doit se répéter chaque année&lt;br /&gt;
# Cliquer dans le champ &#039;&#039;&#039;Date&#039;&#039;&#039; (la date du jour est proposée par défaut) : un calendrier s’affiche&lt;br /&gt;
# Sélectionner le &#039;&#039;&#039;premier jour&#039;&#039;&#039; de fermeture&lt;br /&gt;
# Sélectionner le &#039;&#039;&#039;dernier jour&#039;&#039;&#039; de fermeture&lt;br /&gt;
# &#039;&#039;&#039;Choisir une directive&#039;&#039;&#039; (annonce vocale diffusée à l’appelant) :&lt;br /&gt;
#* soit en &#039;&#039;&#039;sélectionnant une directive existante&#039;&#039;&#039; dans la liste,&lt;br /&gt;
#* soit en &#039;&#039;&#039;enregistrant un message en direct&#039;&#039;&#039; (voir [[Mise_en_place_d’une_période_de_fermeture_avec_message_vocal_-_3CX#Enregistrer_un_message_vocal_en_direct|section dédiée]])&lt;br /&gt;
# Cliquer sur &#039;&#039;&#039;Sauvegarder&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Enregistrer un message vocal en direct ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Enregistrer Directive.png|vignette|Enregistrer son message en direct sur son téléphone]]&lt;br /&gt;
&lt;br /&gt;
Cliquer sur l’icône &#039;&#039;&#039;Téléphone + Micro&#039;&#039;&#039; située à droite du champ &#039;&#039;&#039;Directive&#039;&#039;&#039;. La fenêtre &#039;&#039;&#039;Enregistrer un fichier d’annonce vocale&#039;&#039;&#039; s’ouvre :&lt;br /&gt;
#Saisir le &#039;&#039;&#039;nom du message&#039;&#039;&#039; Ex. : Message_Fermeture.wav&lt;br /&gt;
#Indiquer le &#039;&#039;&#039;poste ou numéro&#039;&#039;&#039; qui recevra l’appel d’enregistrement&lt;br /&gt;
# Cliquer sur &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
# Le téléphone sélectionné reçoit un appel du service &#039;&#039;&#039;RecordFile&#039;&#039;&#039;&lt;br /&gt;
# Utiliser les commandes vocales suivantes :&lt;br /&gt;
#* &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; : enregistrer le message&lt;br /&gt;
#* &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; : réenregistrer le message&lt;br /&gt;
#* &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; : écouter le message&lt;br /&gt;
#* &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; : quitter sans enregistrer&lt;br /&gt;
&lt;br /&gt;
=== Bonnes pratiques audio ===&lt;br /&gt;
* Message clair et concis (20 à 30 secondes)&lt;br /&gt;
* Éviter les silences prolongés en début et fin d’annonce&lt;br /&gt;
&lt;br /&gt;
{{Valide|20.0}}&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
	<entry>
		<id>https://indywiki.fr/index.php?title=Mise_en_place_d%E2%80%99une_p%C3%A9riode_de_fermeture_avec_message_vocal_-_3CX&amp;diff=4305</id>
		<title>Mise en place d’une période de fermeture avec message vocal - 3CX</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=Mise_en_place_d%E2%80%99une_p%C3%A9riode_de_fermeture_avec_message_vocal_-_3CX&amp;diff=4305"/>
		<updated>2025-12-24T13:18:35Z</updated>

		<summary type="html">&lt;p&gt;Anthony : Anthony a déplacé la page Mise en place d’une période de fermeture avec message vocal – 3CX vers Mise en place d’une période de fermeture avec message vocal - 3CX sans laisser de redirection&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;3CX permet de définir des périodes de fermeture (jours fériés ou congés) durant lesquelles les appels entrants sont traités selon une directive spécifique, notamment la diffusion d’un message vocal d’information.&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
* Disposer d’un &#039;&#039;&#039;accès administrateur&#039;&#039;&#039; à la console 3CX&lt;br /&gt;
* Avoir identifié ou préparé le &#039;&#039;&#039;message vocal&#039;&#039;&#039; à diffuser aux appelants (directive)&lt;br /&gt;
&lt;br /&gt;
== Accès au menu de paramétrage ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Mise en place msg-absence 1.png|vignette|Accès au menu de paramétrage de la règle]]&lt;br /&gt;
&lt;br /&gt;
Connecté en tant qu’&#039;&#039;&#039;administrateur&#039;&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
# En &#039;&#039;&#039;bas à gauche&#039;&#039;&#039;, cliquer sur l’icône ⚙️ &#039;&#039;&#039;Admin&#039;&#039;&#039;&lt;br /&gt;
# Accéder au menu &#039;&#039;&#039;Heures de bureau&#039;&#039;&#039;&lt;br /&gt;
# Sélectionner &#039;&#039;&#039;DEFAULT (Def)&#039;&#039;&#039;&lt;br /&gt;
# Cliquer sur &#039;&#039;&#039;Jours fériés du bureau&#039;&#039;&#039;&lt;br /&gt;
# Cliquer sur &#039;&#039;&#039;+ Ajouter&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Paramétrer une journée ou une plage horaire de fermeture ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MEP MSG FERMETURE 1JOUR.png|vignette|droite|Paramétrage pour une journée ou quelques heures]]&lt;br /&gt;
&lt;br /&gt;
Une fenêtre &#039;&#039;&#039;Configurer les jours fériés&#039;&#039;&#039; s’affiche :&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Nommer la règle&#039;&#039;&#039; Ex. : Pont de l’Ascension 2026&lt;br /&gt;
# Sélectionner &#039;&#039;&#039;Un seul jour&#039;&#039;&#039;&lt;br /&gt;
# L’option &#039;&#039;&#039;Annuellement&#039;&#039;&#039; permet de répéter la règle chaque année (non pertinente pour une fermeture exceptionnelle)&lt;br /&gt;
# Renseigner la &#039;&#039;&#039;date&#039;&#039;&#039; et, si nécessaire, la &#039;&#039;&#039;plage horaire&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;Choisir une directive&#039;&#039;&#039; (annonce vocale diffusée à l’appelant) :&lt;br /&gt;
#* soit en &#039;&#039;&#039;sélectionnant une directive existante&#039;&#039;&#039; dans la liste,&lt;br /&gt;
#* soit en &#039;&#039;&#039;enregistrant un message en direct&#039;&#039;&#039; (voir section dédiée)&lt;br /&gt;
# Cliquer sur &#039;&#039;&#039;Sauvegarder&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Paramétrer plusieurs jours consécutifs de fermeture ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:MEP MSG FERMETURE N JOURS.png|vignette|Paramétrage pour plusieurs jours]]&lt;br /&gt;
&lt;br /&gt;
Dans la fenêtre &#039;&#039;&#039;Configurer les jours fériés&#039;&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Nommer la règle&#039;&#039;&#039; Ex : Congés annuels&lt;br /&gt;
# Sélectionner &#039;&#039;&#039;Plage de jours&#039;&#039;&#039;&lt;br /&gt;
# Cocher &#039;&#039;&#039;Annuellement&#039;&#039;&#039; si la fermeture doit se répéter chaque année&lt;br /&gt;
# Cliquer dans le champ &#039;&#039;&#039;Date&#039;&#039;&#039; (la date du jour est proposée par défaut) : un calendrier s’affiche&lt;br /&gt;
# Sélectionner le &#039;&#039;&#039;premier jour&#039;&#039;&#039; de fermeture&lt;br /&gt;
# Sélectionner le &#039;&#039;&#039;dernier jour&#039;&#039;&#039; de fermeture&lt;br /&gt;
# &#039;&#039;&#039;Choisir une directive&#039;&#039;&#039; (annonce vocale diffusée à l’appelant) :&lt;br /&gt;
#* soit en &#039;&#039;&#039;sélectionnant une directive existante&#039;&#039;&#039; dans la liste,&lt;br /&gt;
#* soit en &#039;&#039;&#039;enregistrant un message en direct&#039;&#039;&#039; (voir section dédiée)&lt;br /&gt;
# Cliquer sur &#039;&#039;&#039;Sauvegarder&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Enregistrer un message vocal en direct ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Enregistrer Directive.png|vignette|Enregistrer son message en direct sur son téléphone]]&lt;br /&gt;
&lt;br /&gt;
Cliquer sur l’icône &#039;&#039;&#039;Téléphone + Micro&#039;&#039;&#039; située à droite du champ &#039;&#039;&#039;Directive&#039;&#039;&#039;. La fenêtre &#039;&#039;&#039;Enregistrer un fichier d’annonce vocale&#039;&#039;&#039; s’ouvre :&lt;br /&gt;
#Saisir le &#039;&#039;&#039;nom du message&#039;&#039;&#039; Ex. : Message_Fermeture.wav&lt;br /&gt;
#Indiquer le &#039;&#039;&#039;poste ou numéro&#039;&#039;&#039; qui recevra l’appel d’enregistrement&lt;br /&gt;
# Cliquer sur &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
# Le téléphone sélectionné reçoit un appel du service &#039;&#039;&#039;RecordFile&#039;&#039;&#039;&lt;br /&gt;
# Utiliser les commandes vocales suivantes :&lt;br /&gt;
#* &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; : enregistrer le message&lt;br /&gt;
#* &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; : réenregistrer le message&lt;br /&gt;
#* &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; : écouter le message&lt;br /&gt;
#* &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; : quitter sans enregistrer&lt;br /&gt;
&lt;br /&gt;
=== Bonnes pratiques audio ===&lt;br /&gt;
* Message clair et concis (20 à 30 secondes)&lt;br /&gt;
* Éviter les silences prolongés en début et fin d’annonce&lt;br /&gt;
&lt;br /&gt;
{{Valide|20.0}}&lt;br /&gt;
[[Catégorie:3CX]]&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
</feed>