Forums » Discussions & Questions »
Demande explications sur le fonctionnement des subroutine dans Xivo (Helios)
Ajouté par Steeve Placide il y a environ 2 ans
Bonjour,
J'essaie d'appliquer des subroutines à certains de mes scenarios d'appels.
Comme indiqué dans la doc: https://documentation.xivo.solutions/projects/xivo-nextlts/en/latest/api_sdk/subroutine.html?highlight=subroutine
J'ai par exemple créé cette routine que j'ai mis dans un fichier de configuration depuis l'interface webadmin de xivo.
[testajoutdigit]
exten = s,1,NoOp(### Ajout de digit Subroutine ###)
same = n,Return()
Qui fait 2 choses :
1/ qui affiche le message "### Ajout de digit Subroutine ###" dans les logs asterisk
2/ puis la valeur Return()
Or quand j'analyse les logs de mon appel sortant. J'obtiens le résultat suivant :
[Oct 17 16:14:24] VERBOSE[17725][C-00000530] pbx.c: Executing [s@outcall:11] Gosub("SIP/z8onp3ro-00000a7c", "xivo-subroutine,s,1(testajoutdigit)") in new stack
[Oct 17 16:14:24] VERBOSE[17725][C-00000530] pbx.c: Executing [s@xivo-subroutine:1] GotoIf("SIP/z8onp3ro-00000a7c", "testajoutdigit?:nosubroutine") in new stack
[Oct 17 16:14:24] VERBOSE[17725][C-00000530] pbx.c: Executing [s@xivo-subroutine:2] GotoIf("SIP/z8onp3ro-00000a7c", "0?:nosubroutine") in new stack
[Oct 17 16:14:24] VERBOSE[17725][C-00000530] pbx_builtins.c: Goto (xivo-subroutine,s,4)
Si je comprends bien la subroutine "testajoutdigit" est appelée mais après elle est annulée par la valeur "nosubroutine" ?
Quelqu'un peut-il m'expliquer ce fonctionnement ?
Y a-t-il un paramètre à modifier dans la conf de xivo pourque mes subroutines soient prises en compte ?
Bien cordialement
Steeve PLACIDE
Réponses (2)
RE: Demande explications sur le fonctionnement des subroutine dans Xivo (Helios) - Ajouté par Steeve Placide il y a presque 2 ans
Bonjour à tous,
J'ai continué mes investigations concernant les sous-routines qui ne fonctionnent jamais.
le problème vient du fait que pour le context "Default" (de type interne) la fonction ne retrouve jamais les sous-routines.
Je m'explique.
Dans le fichier "/usr/share/xivo-config/dialplan/asterisk/extensions_lib_subr.conf", le dialplan pour les sous-routines est le suivant :
[xivo-subroutine]
exten = s,1,GotoIf(${ARG1}?:nosubroutine)
same = n,GotoIf(${VALID_EXTEN(${ARG1},s)}?:nosubroutine)
same = n,Gosub(${ARG1},s,1)
same = n(nosubroutine),Return()
Cependant en désactivant le contrôle en ligne 2 pour forcer l’exécution de la sous-routine:
;same = n,GotoIf(${VALID_EXTEN(${ARG1},s)}?:nosubroutine)
J'obtiens l'erreur suivante sur ma sous-routine "SonnerieDistinct"
pbx.c: Executing [s@xivo-subroutine:1] GotoIf("PJSIP/3ed4fw_w-000001d2", "SonnerieDistinct?:nosubroutine") in new stack
pbx.c: Executing [s@xivo-subroutine:2] Gosub("PJSIP/3ed4fw_w-000001d2", "SonnerieDistinct,s,1") in new stack
app_stack.c: Gosub attempted to reach non-existent destination 'SonnerieDistinct,s,1' from 'xivo-subroutine,s,2'
Pour rappel la fonction VALID_EXTEN() fait l'action suivante:
Returns a true value if the indicated context, extension, and priority exist.
Ma sous-routine "SonnerieDistinct" est bien déclarée dans le dossier "/etc/asterisk/extensions_extra.d/"
Apparemment pour xivo les sous-routines n'existent jamais ?
NB: un message récurent apparait dans les logs d'asterisk qui me conforte dans mon analyse
" WARNING[629411] pbx.c: Context 'default' tries to include nonexistent context 'xivo-extrafeatures'"
pourtant bien présent.
Bien cordialement
Steeve PLACIDE
RE: Demande explications sur le fonctionnement des subroutine dans Xivo (Helios) - Ajouté par Steeve Placide il y a presque 2 ans
Bonjour à tous,
je réponds à moi même et corrige ce problème d'appel de sous-routine du coup !
En fait le problème venait d'une erreur de syntaxe dans le fichier /etc/asterisk/extensions.conf
Ce message récurent dans les logs asterisk m'a mis la puce à l'oreille:
WARNING[2342466] config.c: No '=' (equal sign) in line 12 of /etc/asterisk/extensions.conf
En cherchant bien, je me suis aperçu que ma fonction include était mal déclarée.
j'avais supprimé le "#" devant la fonction include.
En corrigeant le défaut
#include extensions_extra.d/*
mes sous-routines fonctionnent correctement :D
Bonne fêtes de fin d'année à tous
Bien cordialement
Steeve PLACIDE