Πείτε όχι στους περιορισμούς των ring groups

Σκοπός αυτού του άρθρου είναι να δείξει πώς μπορείτε να καλέσετε πολλά εσωτερικά ταυτόχρονα και όταν αρχίσουν να απαντούν, να εκτελέσετε κάποια εργασία με κάθε ένα από αυτά. Αν και αυτό μοιάζει με ένα ring group, η διαφορά των ring groups είναι ότι, αν και πολλά εσωτερικά κουδουνίζουν ταυτόχρονα, όταν ένα από αυτά απαντήσει, τότε τα υπόλοιπα αποσυνδέονται.

Δυστυχώς δεν υπάρχει τρόπος να χρησιμοποιήσουμε την εντολή Dial() του Asterisk®, γιατί αυτή συμπεριφέρεται όπως και τα ring groups: όταν απαντήσει το πρώτο εσωτερικό, το Asterisk® συνδέει την κλήση και σταματά να κουδουνίζει στα υπόλοιπα εσωτερικά. Εναλλακτικές εντολές είναι οι Page() και MeetMe(), οι οποίες μπορούν να καλέσουν πολλαπλά εσωτερικά, και να τα βάλουν όλα σε ένα conference room. Εδώ όμως θέλουμε να μπορέσουμε να κάνουμε κάτι περισσότερο όταν οι χρήστες αρχίσουν να απαντούν στις κλήσεις, π.χ. να αναπαράγουμε ένα προηχογραφημένο μήνυμα.

Ο ευκολότερος τρόπος για να πετύχουμε το στόχο μας είναι να χρησιμοποιήσουμε το Asterisk® dialplan και να φτιάξουμε ένα loop. Παρόμοιος τρόπος είναι να φτιάξουμε αυτό το loop σε ένα php script και να χρησιμοποιήσουμε AGI.

Ο κώδικας είναι πολύ απλός. Στο παράδειγμα που ακολουθεί θέλουμε να καλέσουμε τα εσωτερικά από το 100 μέχρι το 150 και μόλις απαντήσουν οι χρήστες να αναπαράγουμε ένα μήνυμα που θα λέει one-two-three. Θα χρειαστούμε 2 contexts, από τα οποία το πρώτο θα λέει το μήνυμα και το δεύτερο θα καλεί τα εσωτερικά και θα τα στέλνει στο πρώτο context μόλις απαντηθεί η κλήση.

[call-all-extensions]
exten => 12345,1,Set(ext=$[100])
exten => 12345,n,GotoIf($[ ${ext} < 150]?3:6)
exten => 12345,n,System(asterisk -rx «originate SIP/${ext} extension s@do-the-job»)
exten => 12345,n,Set(x=$[${ext} + 1])
exten => 12345,n,Goto(2)
exten => 12345,n,NoOp(end of loop)

[do-the-job]
exten => s,1,Noop(Start doing our stuff)
exten => s,n,SayDigits(123);
exten => s,n,Hangup();

Καλώντας το 12345 από το τηλέφωνό σας ή από κάποιο άλλο script, θα ξεκινήσει το πρώτο context [call-all-extensions], το οποίο θα αρχίσει να καλεί όλα τα εσωετρικά από το 100 μέχρι το 150 και όταν αυτά τα εσωτερικά απαντήσουν, θα τα στείλει στο context [do-the-job] και οι χρήστες θα ακούσουν το one-two-three. Τα εσωτερικά που δεν θα απαντήσουν θα κάνουν timeout και θα σταματήσουν να κουδουνίζουν.

Βέβαια, μάλλον ποτέ δεν θα υπάρξει ανάγκη να πούμε σε όλους τους συνδρομητές του τηλεφωνικού μας κέντρου one-two-three. Πιο εποικοδομητικές χρήσεις του είναι να ανάψουμε ή να σβήσουμε φώτα (αν για παράδειγμα χρησιμοποιούμε τα ρελέ των Astribanks και των τηλεφωνικών κέντρων της Xorcom), να κάνουμε ένα lookup στα CDRs του Asterisk® για κάθε εσωτερικό και να διαβάσουμε στους χρήστες μας πόσες ώρες συνομιλίας είχαν τον προηγούμενο μήνα, ή ακόμα και αντί να καλούμε εσωτερικά, να διαβάζουμε τηλεφωνικούς αριθμούς από μια βάση για να να αναπαράγουμε ένα προηχογραφημένο μήνυμα στους τελικούς αποδέκτες, να διαβάζουμε το υπόλοιπο της καρτέλλας των πελατών μας και να τους το μεταδίδουμε κλπ.

Σχετικά άρθρα:

Κατηγορίες: Tips & Tricks & more. Ετικέτες: , , , . Προσθήκη στους σελιδοδείκτες.


Γράψτε απάντηση

Η ηλ. διεύθυνσή σας δεν κοινοποιείται. Τα υποχρεωτικά πεδία σημειώνονται με *

*


*

Επιτρέπεται η χρήση των εξής στοιχείων και ιδιοτήτων HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>