Cursos Asterisk en México

Ayuda DialStatus

Colapsar

Anuncio

Colapsar
No hay anuncio todavía.
X
 
  • Filtrar
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes

  • Ayuda DialStatus

    Hola buen dia amigos... de nuevo solicitando su ayuda, estoy tratando de hacer mi propio dialplan con un sistema fedora 24 y asterisk 11.21
    el detalle es que quiero saber que status de llamada se tiene una vez que se respondio (ANSWER, FAILURE, etc.).

    mi problema es que cuando hago un NoOp(${Dialstatus}) no me retorna nada.
    anexo la configuracion de mis contextos.

    Código:
    [celular]
    exten => _XXXXXXXXXX,1,Set(date=${STRFTIME(${EPOCH},,%C%y-%m-%d %H:%M:%S)})
    exten => _XXXXXXXXXX,n,Set(ODBC_banco()=${date},${EXTEN},${CALLERID(num)})
    exten => _XXXXXXXXXX,n,Set(ID=${ODBC_bancoID(${EXTEN})})
    exten => _XXXXXXXXXX,n,Set(destino=${EXTEN})
    exten => _XXXXXXXXXX,n,Set(duracion=${CDR(duration)})
    exten => _XXXXXXXXXX,n,Dial(SIP/${EXTEN}@mxpruebas,15,tM(status,s,1))
    
    [macro-status]
    exten => s,1,Answer
    exten => s,n,NoOp(${DIALSTATUS})
    exten => s,n,Goto(h-${DIALSTATUS},1)
    exten => h-SUCCESS,1,NoOp(Contesto)
    exten => h-SUCCESS,n,Hangup
    exten => h-ANSWER,1,NoOp(Contesto)
    exten => h-ANSWER,n,Hangup
    exten => h-ANSWERED,1,NoOp(Contesto)
    exten => h-ANSWERED,n,Hangup
    exten => h-NOANSWER,1,NoOp(No Contesto)
    exten => h-NOANSWER,n,Hangup
    exten => h-CHANUNAVAIL,1,(Sin Canales)
    exten => h-CHANUNAVAIL,n,Hangup
    exten => h-BUSY,1,NoOp(Ocupado)
    exten => h-BUSY,n,Hangup
    exten => h-FAIL,1,NoOp(Fallo)
    exten => h-FAIL,n,Hangup
    exten => h-CONGESTION,1,NoOp(Congestion)
    exten => h-CONGESTION,n,Hangup
    exten => s,n,NoOp(${DIALSTATUS})
    exten => s,n,Hangup
    y en el verbose me retorna esto:

    Código HTML:
    Connected to Asterisk 11.21.2 currently running on localhost (pid = 28890)
      == Using SIP RTP CoS mark 5
        -- Executing [5581717575@from-internal:1] Set("SIP/0006-0000007f", "date=2017-08-02 18:59:20") in new stack
        -- Executing [5581717575@from-internal:2] Set("SIP/0006-0000007f", "ODBC_banco()=2017-08-02 18:59:20,5581717575,0006") in new stack
        -- Executing [5581717575@from-internal:3] Set("SIP/0006-0000007f", "ID=107") in new stack
        -- Executing [5581717575@from-internal:4] Set("SIP/0006-0000007f", "destino=5581717575") in new stack
        -- Executing [5581717575@from-internal:5] Set("SIP/0006-0000007f", "duracion=0") in new stack
        -- Executing [5581717575@from-internal:6] Dial("SIP/0006-0000007f", "SIP/5581717575@mxpruebas,15,tM(status,s,1)") in new stack
      == Using SIP RTP CoS mark 5
        -- Called SIP/5581717575@mxpruebas
        -- SIP/mxpruebas-00000080 is making progress passing it to SIP/0006-0000007f
        -- SIP/mxpruebas-00000080 is ringing
        -- SIP/mxpruebas-00000080 answered SIP/0006-0000007f
        -- Executing [s@macro-status:1] Answer("SIP/mxpruebas-00000080", "") in new stack
        -- Executing [s@macro-status:2] NoOp("SIP/mxpruebas-00000080", "") in new stack
        -- Executing [s@macro-status:3] Goto("SIP/mxpruebas-00000080", "h-,1") in new stack
        -- Goto (macro-status,h-,1)
      == Spawn extension (from-internal, 5581717575, 6) exited non-zero on 'SIP/0006-0000007f'
    no se que grado de dificultad tenga pero esto me tiene a topez, les garadezco su ayuda a todo la comunidad y quedo a sus servicios

    Saludos


  • #2
    El DIALSTATUS solo existe hasta que la llamada termina, por lo que lo correcto sería:

    exten => _XXXXXXXXXX,1,Set(date=${STRFTIME(${EPOCH},,%C%y-%m-%d %H:%M:%S)})
    exten => _XXXXXXXXXX,n,Set(ODBC_banco()=${date},${EXTEN},${ CALLERID(num)})
    exten => _XXXXXXXXXX,n,Set(ID=${ODBC_bancoID(${EXTEN})})
    exten => _XXXXXXXXXX,n,Set(destino=${EXTEN})
    exten => _XXXXXXXXXX,n,Set(duracion=${CDR(duration)})
    exten => _XXXXXXXXXX,n,Dial(SIP/${EXTEN}@mxpruebas,15,gt)
    exten => _XXXXXXXXXX,n,Noop(Mi DIALSTATUS es ${DIALSTATUS})

    Por favor nota la opción 'g' del Dial , que esa es la que permite continuar con el plan de marcación una vez que la llamada ha concluido. Eso te imprimirá el Dialstatus en pantalla y por lo que veo, ya sabrás que hacer con él. Saludos.
    dCAP Christian Cabrera R.
    Para aprender a usar Asterisk, asiste a uno de mis cursos Asterisk
    Si deseas asesoría pagada, por favor contáctame

    Comentario


    • #3
      Creo que tu aproximación no está del todo bien y tu plan de llamadas es bastante extraño. La variable DIALSTATUS se llenará al terminar el Dial, tu estás intentando obtenerlo a través de un macro durante el Dial cuando B contesta.

      Si quieres saber qué pasó con la llamada utiliza la extensión h, se ejecutará siempre que termine la llamada, ahí puedes dar el trato según el DIALSTATUS. Considera que la extensión h no es funcional dentro del macro, se tomará la extensión h del contexto origen.

      Si nos dices más acerca de lo que quieres hacer seguro podemos ayudarte.

      IT Specialist

      Comentario


      • #4
        Hola buen dia amigos ... Adrian, Marco muchas gracias por su ayuda son los mejores, efectivamente necesitaba agregar "g" a el dial y ocupar "h" con dialstatus. si a alguien le sirve les anexo el contexto

        Código:
        [celular]
        exten => _XXXXXXXXXX,1,Dial(SIP/11${EXTEN}@mxpruebas,15,gt)
        exten => _XXXXXXXXXX,n,Set(duracion=${CDR(duration)})
        exten => _XXXXXXXXXX,n,Set(Destino=${CDR(dst)}) ;Fuente
        exten => _XXXXXXXXXX,n,Set(inicio=${CDR(start)}) ; Inicio de la llamada
        exten => _XXXXXXXXXX,n,Set(estatus=${CDR(disposition)})
        exten => _XXXXXXXXXX,n,Set(sip=${ODBC_bancomer(${HANGUPCAUSE})})
        exten => _XXXXXXXXXX,n,NoOp(${sip})
        exten => _XXXXXXXXXX,n,GotoIf($["${estatus}"="FAILED"]?fin:continua) ;contesto no contesto u ocupado
        exten => _XXXXXXXXXX,n(fin),Set(ODBC_banco()=${CDR(start)},${Destino},${CALLERID(num)},${estatus},${HANGUPCAUSE},${sip},${UNIQUEID})
        exten => _XXXXXXXXXX,n(fin),Hangup
        exten => _XXXXXXXXXX,n(continua),Goto(h-${DIALSTATUS},1})
        exten => h-ANSWER,1,Goto(celular,s,1)
        exten => h-NOANSWER,1,Goto(celular,s,1)
        exten => h-CHANUNAVAIL,1,Goto(celular,s,1)
        exten => h-BUSY,1,Goto(celular,s,1)
        exten => h-FAIL,1,Goto(celular,s,1)
        exten => h-CONGESTION,1,Goto(celular,s,1)
        exten => s,1,Set(ODBC_banco()=${CDR(start)},${Destino},${CALLERID(num)},${DIALSTATUS},${HANGUPCAUSE},${sip},${UNIQUEID})
        exten => s,n,Hangup

        Mi problema ahora es que no me manda la duracion de la llamada estoy usando ${CDR(duration)} el valor que me regresa siempre es 0

        Muchas gracias a todos

        Saludos

        Comentario

        Principales Usuarios Activos

        Colapsar

        No hay usuarios activos superiores.
        Trabajando...
        X