Préface
Bon après-midi
Il y a 2 choses qui m'ont poussé à écrire cet article: un petit nombre ou le manque d'exemples de travail modernes de "puces" Asterisk, ainsi que la réticence des spécialistes à partager ces mêmes "puces" avec les autres. C'est maintenant moi sur la communauté RU. Toutes sortes de «grands-pères» sur les forums sont plus susceptibles de vous arroser de slops et de vous envoyer lire des livres d'il y a dix ans que de donner des informations un peu plus ou moins utiles. Les sujets du forum eux-mêmes, créés en 2005-2010, sont très obsolètes et parfois quelque chose a déjà été scié dans la version actuelle de l'astérisque, et quelque chose doit être refait beaucoup pour que cela fonctionne.
Alors voilà.
À la suite de l'abandon de CUCM au profit d'Asterisk, la direction a été chargée de conserver les services les plus populaires auprès des utilisateurs sous leur forme la plus originale, afin de ne pas frustrer les gens. L'un d'eux était la création de conférences. À ce moment-là, je connaissais déjà Asterisk, mais pas si profondément, il m'a donc fallu environ une semaine et demie pour trier toutes sortes d'options de conférence, et une tâche différente a abouti à une décision finale.
Le problème est qu'à partir d'une solution similaire à celle-ci, il y a
un article avec un Meetme obsolète, ainsi qu'une sorte de
monstre que je ne pouvais toujours pas travailler. Je suggère quelque chose de moins encombrant.
Pâte
Je ne décrirai pas ce qu'est confbridge, quelles sections d'une configuration particulière sont responsables et quelle est cette option, je vais juste avoir ces informations et elles sont à jour. Maintenant sur la décision dans son ensemble.
Objectif: rendre la conférence possible à créer lors d'une conversation, puis y inviter plus d'abonnés. Le principal problème est que la fonction channelredirect ne fonctionne pas comme nous le souhaiterions. Autrement dit, si vous l'exécutez à partir du plan de numérotation pendant une conversation, l'un des canaux s'envolera si nécessaire, et le second s'effondrera, et escalader le plan de numérotation entier sur 2 lignes et enregistrer l'option g sur les numérotations était paresseux. Et je ne comprends pas pourquoi dans la plupart des manuels, tout le monde essaie de résoudre le problème uniquement via le plan de numérotation, ignorant la capacité de l'astérisque à travailler avec des scripts externes et des amis.
Alors. Asterisk 14.4.0
Script de conférence pour 2 options (avec commentaires):
Les gourous de la programmation peuvent corriger le code en en faisant des bonbons, j'ai écrit du mieux que je pouvais.
Ensuite, nous commençons à utiliser ce script directement dans Asterisk lui-même.
Afin de créer une conférence, j'ai choisi la combinaison * 1. Brièvement et ne recoupe pas la numérotation principale.
Ajoutez un appel de script à features.conf avec les variables requises qui lui sont transmises
[applicationmap] conference => *1,self,System(/usr/bin/php /home/script/conference.php 1 ${CHANNEL} ${BRIDGEPEER} ${CALLERID(num)})
Ensuite, pour que cela fonctionne, créez une variable dans le plan de numérotation dans la section [globaux] et ajoutez notre fonctionnalité
DYNAMIC_FEATURES=conference
Pour ajouter de nouveaux participants à une conférence déjà créée, vous devrez enregistrer le code dans confbridge.conf
[default_menu] type = menu *1=dialplan_exec(service_code-ael,conference_add,1)
Eh bien, maintenant, la meilleure partie est extensions.ael:
Pour créer une conférence (le script php s'adresse aux deux canaux de conversation ici):
conference => { ConfBridge(${CONFNUM},,,default_menu); }
Pour ajouter un nouvel utilisateur (adresses dialplan_exec ici):
conference_add => { Read(INVITEN,dial,11,i); System(/usr/bin/php /home/script/conference.php 2 ${CALLERID(num)} ${INVITEN}); }
C’est tout. Pas de kilotonnes de code dans le plan de numérotation. Tout est vaste. * 1 dans une conversation et vous êtes dans une conf, encore une fois * 1 bip et numérotation, qui ajouter.
Croissances
Confus par les souhaits des utilisateurs, j'ai commencé à développer cette fonctionnalité.
La prochaine a été l'occasion de créer des conférences à partir de zéro (pas à partir d'une conversation), ainsi que d'aller à des conférences déjà créées par leur numéro, et de ne pas attendre un appel d'invitation
Ajouter au plan de numérotation:
_*1XXXX => { NoOp(${CONFCHAN}); Set(__CONFNUM=${EXTEN:2}); System(/usr/bin/php /home/script/conference.php 3 ${CONFCHAN} ${CONFNUM} ); }
Ajoutez au script:
J'ai également dû modifier la ligne _ * X.
_*X. => { set(__CONFCHAN=${CHANNEL}); Dial(Local/${EXTEN}@service_code-ael);
Maintenant, pour entrer dans la conférence ou la créer à partir de zéro, il vous suffit d'appeler * 1 et un numéro, par exemple * 15234.
La mutation finale de ce service est la soi-disant «conférence de groupe». C'est quand les grands patrons sont trop paresseux pour ajouter tout le monde manuellement, mais je veux appuyer sur un bouton et tout est assemblé. Pour ce faire, j'ai décidé de créer des codes de service séparés (* XXX) afin que les gens eux-mêmes ne se confondent pas. Pour notre organisation, il est peu probable que plus de 1000 groupes de conférence soient nécessaires au cours des 100 prochaines années, il devrait donc y avoir suffisamment de stock de numérotation. À la maison, vous pouvez ajouter un préfixe différent, afin d'allouer une capacité de numérotation différente.
Plan de numérotation:
_*XXX=> { Set(CONFNUM=${CALLERID(num)}); System(/usr/bin/php /home/script/groups.php ${EXTEN:1} ${CONFNUM}); ConfBridge(${CONFNUM},,,default_menu); }
Le grincement des participants eux-mêmes:
Tous les groupes sont stockés dans la base de données selon la structure «Groupe, numéro, nom, description». Si un nouveau groupe apparaît, ajoutez-le simplement à la base de données.
Maintenant, pour rassembler, par exemple, tous les administrateurs d'une réunion, le général n'a qu'à composer * 100. Et en règle générale, les grands patrons ont de gros téléphones. Par conséquent, nous lions * 100 à n'importe quelle touche de numérotation rapide, nous la signons en tant que «directeurs» et l'utilisateur ne prend pas la peine de taper. J'ai appuyé sur le bouton - j'ai rassemblé la réunion.
Anticipons maintenant vos questions:Pourquoi scripts et ami? Parce qu'au moyen du plan de numérotation, je n'ai pas réussi à faire une redirection sensée des deux canaux sans les perdre en cours de route. Dans ami, dans la fonction de redirection, vous pouvez attacher un canal supplémentaire + définir une variable pour celui-ci (par exemple, le numéro de conférence, afin qu'il puisse également y ajouter quelqu'un).
Vous pouvez également remarquer que j'ai placé les fonctionnalités dans un contexte service_code-ael distinct. C'est pratique lorsque vous avez plus de deux ou trois morceaux de fonctionnalités. J'ai décidé de les faire à travers *, donc, dans n'importe quel contexte, j'écris simplement _ * X. et aborder dans ce contexte. Peut-être que quelqu'un trouvera une solution plus élégante, mais je ne l'ai pas trouvée depuis plusieurs mois. Et cette fonctionnalité a séduit les utilisateurs.
Pourquoi ael, pas conf? Eh bien, parce qu'il est plus structuré et plus facile à lire.
et plus compréhensible. Une fonction gotoif en vaut la peine. Je n'ai pas encore atteint lua.
Pourquoi, dans l'exemple de la collecte de masse, les origines sont effectuées via bash et non via AMI? Le problème est qu'en exécutant un groupe d'origines d'affilée via ami, le système attend que le précédent se termine pour donner le suivant. Et si personne ne décroche le téléphone, et qu'il y a 20 secondes de no_ans et 5 morceaux? Vous pouvez attendre le soir pour récupérer.
Et bien, c’est probablement tout. J'espère que cet article aidera les mêmes chercheurs que moi quand tout cela devait être fait rapidement, confortablement pour les utilisateurs, et surtout, à l'avenir, maintenir ce système était pratique pour moi, pour ainsi dire, avec une réserve pour l'avenir.