Nie dawno zostaliśmy poproszeni przez naszego klienta o drobną modyfikację centrali telefonicznej opartej o Asteriska. Prośba polegała na przekierowaniu połączeń przychodzących na inny numer wewnętrzny (101) niż domyślnie, gdzie domyślnie połączenia przychodzące były realizowane na nr 105. Do realizacji tego zadania najwygodniej było użyć funkcji GotoIfTime(), która w zależności od spełnienia warunku (true lub false) przechodzi do wskazanego kontekstu dial planu.

W zasadzie jest to funkcja if zapisana w następującej składni pseudokodu:

1
2
...
exten =>przychodzace,1,GotoIfTime(warunek ? gdy true : gdy false)

przy czym warunek określa się według następujących elementów:
zakres czasu, dni tygodnia, dni miesiąca, miesiąc
co pozwala ściśle określić termin/moment wykonywanej akcji. Przykłady:

9:00-17:00,mon-fri,*,* – od poniedziałku do piątku w godzinach 9-17 niezależnie od miesiąca ani dnia miesiąca,
*,*,1,jan – Nowy Rok
*,*,27,mar – Wielkanoc roku 2016

Poniżej rozwiązanie wykorzystane przez nas:

1
exten =>przychodzace,1,GotoIfTime(8:00-16:00,*,*,*?wewnetrzne,105,1:wewnetrzne,101,1)