Projet

Général

Profil

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

    (1-2/2)