[AsteriskBrasil] RES: Qual opção correta: SQLite, MySQL ou o builtin database?

Daniel Zanutti daniel.zanutti em gmail.com
Terça Julho 7 14:41:21 BRT 2015


Ola Rodrigo

O Asterisk a partir da versão 1.10 utiliza o Sqlite para o banco de dados
interno, mas não sei como acessar a partir do Dialplan. Eu tenho um 1.8
rodando, olha as applications dele no final do e-mail.

Acho que voce tem 3 caminhos a escolher:
1) Achar uma forma de gravar direto pelo dialplan (Se existir)
2) Desenvolver um módulo em C para o Asterisk, com as funções que voce
precisa. (Demorado, complexo)
3) Usa AGI

Antes de investir no banco, descobre como fazer isso. Se não já muda logo a
estratégia.

Abraço
--


Connected to Asterisk 1.8.31.0 currently running on pbx (pid = 9033)
pbx*CLI> core show applications
    -= Registered Asterisk Applications =-
        AddQueueMember: Dynamically adds queue members.
              ADSIProg: Load Asterisk ADSI Scripts into phone
                AELSub: Launch subroutine built with AEL
            AgentLogin: Call agent login.
  AgentMonitorOutgoing: Record agent's outgoing call.
                   AGI: Executes an AGI compliant application.
         AlarmReceiver: Provide support for receiving alarm reports from a
burglar or fire alarm panel.
                   AMD: Attempt to detect answering machines.
                Answer: Answer a channel if ringing.
          Authenticate: Authenticate a user
            BackGround: Play an audio file while waiting for digits of an
extension to go to.
      BackgroundDetect: Background a file with talk detect.
                Bridge: Bridge two channels.
                  Busy: Indicate the Busy condition.
  CallCompletionCancel: Cancel call completion service
  CallCompletionRequest: Request call completion service for previous call
       CELGenUserEvent: Generates a CEL User Defined Event.
         ChangeMonitor: Change monitoring filename of a channel.
           ChanIsAvail: Check channel availability
       ChannelRedirect: Redirects given channel to a dialplan target
               ChanSpy: Listen to a channel, and optionally whisper into it.
             ClearHash: Clear the keys from a specified hashname.
            ConfBridge: Conference bridge application.
            Congestion: Indicate the Congestion condition.
         ContinueWhile: Restart a While loop.
       ControlPlayback: Play a file with fast forward and rewind.
            DAHDIBarge: Barge in (monitor) DAHDI channel.
              DAHDIRAS: Executes DAHDI ISDN RAS application.
             DAHDIScan: Scan DAHDI channels to monitor calls.
  DAHDISendCallreroutingFacility: Send an ISDN call rerouting/deflection
facility message.
  DAHDISendKeypadFacility: Send digits out of band over a PRI.
              DateTime: Says a specified time in a custom format.
                 DBdel: Delete a key from the asterisk database.
             DBdeltree: Delete a family or keytree from the asterisk
database.
               DeadAGI: Executes AGI on a hungup channel.
                  Dial: Attempt to connect to another device or endpoint
and bridge the call.
               Dictate: Virtual Dictation Machine.
             Directory: Provide directory of voicemail extensions.
                  DISA: Direct Inward System Access.
              DumpChan: Dump Info About The Calling Channel.
                  EAGI: Executes an EAGI compliant application.
                  Echo: Echo media, DTMF back to the calling party
              EndWhile: End a while loop.
                  Exec: Executes dialplan application.
                ExecIf: Executes dialplan application, conditionally.
            ExecIfTime: Conditional application execution based on the
current time.
             ExitWhile: End a While loop.
              ExtenSpy: Listen to a channel, and optionally whisper into it.
           ExternalIVR: Interfaces with an external IVR application.
              Festival: Say text to the user.
                 Flash: Flashes a DAHDI Trunk.
              FollowMe: Find-Me/Follow-Me application.
               ForkCDR: Forks the Call Data Record.
              GetCPEID: Get ADSI CPE ID.
                 Gosub: Jump to label, saving return address.
               GosubIf: Conditionally jump to label, saving return address.
                  Goto: Jump to a particular priority, extension, or
context.
                GotoIf: Conditional goto.
            GotoIfTime: Conditional Goto based on the current time.
                Hangup: Hang up the calling channel.
         IAX2Provision: Provision a calling IAXy with a given template.
                  ICES: Encode and stream using 'ices'.
             ImportVar: Import a variable from a channel into a new
variable.
            Incomplete: Returns AST_PBX_INCOMPLETE value.
                   Log: Send arbitrary text to a selected log level.
                 Macro: Macro Implementation.
        MacroExclusive: Exclusive Macro Implementation.
             MacroExit: Exit from Macro.
               MacroIf: Conditional Macro implementation.
         MailboxExists: Check to see if Voicemail mailbox exists.
                MeetMe: MeetMe conference bridge.
           MeetMeAdmin: MeetMe conference administration.
    MeetMeChannelAdmin: MeetMe conference Administration (channel specific).
           MeetMeCount: MeetMe participant count.
             Milliwatt: Generate a Constant 1004Hz tone at 0dbm (mu-law).
         MinivmAccMess: Record account specific messages.
          MinivmDelete: Delete Mini-Voicemail voicemail messages.
           MinivmGreet: Play Mini-Voicemail prompts.
             MinivmMWI: Send Message Waiting Notification to subscriber(s)
of mailbox.
          MinivmNotify: Notify voicemail owner about new messages.
          MinivmRecord: Receive Mini-Voicemail and forward via e-mail.
            MixMonitor: Record a call and mix the audio during the
recording.  Use of StopMixMonitor is required to guarantee the audio file
is available for processing during dialplan execution.
               Monitor: Monitor a channel.
             Morsecode: Plays morse code.
             MP3Player: Play an MP3 file or M3U playlist file or stream.
                  MSet: Set channel variable(s) or function value(s).
           MusicOnHold: Play Music On Hold indefinitely.
                NBScat: Play an NBS local stream.
                 NoCDR: Tell Asterisk to not maintain a CDR for the current
call
                  NoOp: Do Nothing (No Operation).
           ODBC_Commit: Commits a currently open database transaction.
         ODBC_Rollback: Rollback a currently open database transaction.
            ODBCFinish: Clear the resultset of a sucessful multirow query.
             Originate: Originate a call.
                  Page: Page series of phones
                  Park: Park yourself.
       ParkAndAnnounce: Park and Announce.
            ParkedCall: Retrieve a parked call.
          PauseMonitor: Pause monitoring of a channel.
      PauseQueueMember: Pauses a queue member.
                Pickup: Directed extension call pickup.
            PickupChan: Pickup a ringing channel.
              Playback: Play a file.
             PlayTones: Play a tone list.
        PrivacyManager: Require phone number to be entered, if no CallerID
sent
            Proceeding: Indicate proceeding.
              Progress: Indicate progress.
                 Queue: Queue a call for a call queue.
              QueueLog: Writes to the queue_log file.
        RaiseException: Handle an exceptional condition.
                  Read: Read a variable.
             ReadExten: Read an extension into a variable.
              ReadFile: Read the contents of a text file into a channel
variable.
            ReceiveFAX: Receive a FAX and save as a TIFF/F file.
                Record: Record to a file.
     RemoveQueueMember: Dynamically removes queue members.
              ResetCDR: Resets the Call Data Record.
             RetryDial: Place a call, retrying on failure allowing an
optional exit extension.
                Return: Return from gosub routine.
               Ringing: Indicate ringing tone.
              SayAlpha: Say Alpha.
             SayDigits: Say Digits.
             SayNumber: Say Number.
           SayPhonetic: Say Phonetic.
           SayUnixTime: Says a specified time in a custom format.
              SendDTMF: Sends arbitrary DTMF digits
               SendFAX: Sends a specified TIFF/F file as a FAX.
             SendImage: Sends an image file.
              SendText: Send a Text Message.
               SendURL: Send a URL.
                   Set: Set channel variable or function value.
           SetAMAFlags: Set the AMA Flags.
         SetCallerPres: Set CallerID Presentation.
        SetMusicOnHold: Set default Music On Hold class.
          SIPAddHeader: Add a SIP header to the outbound call.
           SIPDtmfMode: Change the dtmfmode for a SIP call.
       SIPRemoveHeader: Remove SIP headers previously added with
SIPAddHeader
            SLAStation: Shared Line Appearance Station.
              SLATrunk: Shared Line Appearance Trunk.
                   SMS: Communicates with SMS service centres and SMS
capable analogue phones.
            SoftHangup: Hangs up the requested channel.
  SpeechActivateGrammar: Activate a grammar.
      SpeechBackground: Play a sound file and wait for speech to be
recognized.
          SpeechCreate: Create a Speech Structure.
  SpeechDeactivateGrammar: Deactivate a grammar.
         SpeechDestroy: End speech recognition.
     SpeechLoadGrammar: Load a grammar.
  SpeechProcessingSound: Change background processing sound.
           SpeechStart: Start recognizing voice in the audio stream.
   SpeechUnloadGrammar: Unload a grammar.
              StackPop: Remove one address from gosub stack.
      StartMusicOnHold: Play Music On Hold.
        StopMixMonitor: Stop recording a call through MixMonitor, and free
the recording's file handle.
           StopMonitor: Stop monitoring a channel.
       StopMusicOnHold: Stop playing Music On Hold.
         StopPlayTones: Stop playing a tone list.
                System: Execute a system command.
            TestClient: Execute Interface Test Client.
            TestServer: Execute Interface Test Server.
              Transfer: Transfer caller to remote extension.
               TryExec: Executes dialplan application, always returning.
             TrySystem: Try executing a system command.
        UnpauseMonitor: Unpause monitoring of a channel.
    UnpauseQueueMember: Unpauses a queue member.
             UserEvent: Send an arbitrary event to the manager interface.
               Verbose: Send arbitrary text to verbose output.
        VMAuthenticate: Authenticate with Voicemail passwords.
             VMSayName: Play the name of a voicemail user
             VoiceMail: Leave a Voicemail message.
         VoiceMailMain: Check Voicemail messages.
                  Wait: Waits for some time.
             WaitExten: Waits for an extension to be entered.
          WaitForNoise: Waits for a specified amount of noise.
           WaitForRing: Wait for Ring Application.
        WaitForSilence: Waits for a specified amount of silence.
       WaitMusicOnHold: Wait, playing Music On Hold.
             WaitUntil: Wait (sleep) until the current time is the given
epoch.
                 While: Start a while loop.
            Zapateller: Block telemarketers with SIT.
    -= 179 Applications Registered =-


2015-07-07 11:56 GMT-03:00 Rodrigo Pimenta Carvalho <pimenta em inatel.br>:

> Prezado Daniel Zanutti.
>
> Bom dia.
>
> Muito obrigado por sua atenção.
>
> Estou num projeto com uma equipe de desenvolvedores onde cada um tem um
> papel específico e o meu no momento é de apenas investigar quais soluções
> iremos/poderemos adotar.
> Por exemplo, já decidimos que não iremos usar AGI dessa vez, porque nosso
> sistema, com Asterisk, será embarcado num hardware com limitação de
> recursos. Mas, nada nos impede de voltar nesse assunto e analisar o
> custo-benefício de usar AGI.
>
> Inicialmente estive planejando acessar o banco de dados diretamente do
> dial plan. Nessa visão, estou pesquisando sobre as possibilidades.
> Se ficarmos mesmo com a solução sem AGI, é possível acessar SQLite via o
> dial plan também, mas usar uma tabela proprietária? Ou seja, no meu caso
> não estou interessado em salvar dados de CDR.
>
> Eu também gosto da  abordagem de problema-solução e nossa equipe tem a
> lista de problemas/riscos a serem eliminados. Para tal, inicialmente
> investigarei as possibilidades em teoria. Depois testarei meus
> entendimentos através de protótipos. Aí sim poderei fazer perguntas mais
> específicas aqui nessa lista. Mas, até agora sou iniciante nesse assunto e
> então estou procurando os caminhos a seguir. Estou tentando ter uma ideia
> geral e inicial sobre as capacidades que o Asterisk pode nos oferecer. O
> meu primeiro passo foi ler a Wiki oficial do Asterisk.
>
> Não quero dar passos largos. Apenas curtos. Então vou continuar nessa
> investigação de uso de banco de dados. O próximo passo será usar um
> softphone proprietário nosso, feito em C, a partir do PJSIP. Como softphone
> faremos uma ligação ao Asteriski, que deverá salvar dado no banco de dados,
> via dial plan. Ou seja, a requisição de salvar dados chegará ao Asterisk
> via mensagem SIP.
>
> Daniel, por favor, faça suas críticas sobre meus comentários. Qualquer
> dica ou crítica será de grade valor.
>
> P.S.: não estou conseguindo receber as respostas dessa lista no meu inbox.
> Estou conseguindo apenas criar novos posts. Para ver as respostas, estou
> acessando a página
> http://asteriskbrasil.org/pipermail/asteriskbrasil/2015-July .
>          Ainda não descobri o motivo disso, mas já pedi o pessoal do
> suporte na minha empresa investigar.
>
> Muito obrigado.
>
> RODRIGO PIMENTA CARVALHO
> Inatel Competence Center
> Software
> Ph: +55 35 3471 9200 RAMAL 979  (Brasil)
>
> --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Ola Rodrigo
>
> Posso estar errado, mas me parece que voce esta dando um passo muito largo.
> Voce já definiu a linguagem de programação que utilizará na sua aplicação
> de backend?
>
> Em teoria qualquer banco de dados pode ser acesso no Asterisk utilizando
> AGI, pois este suporta algumas nativamente e outras através de ODBC.
>
> Pelo que entendi voce está só estudando e eu acho esta uma abordagem mais
> difícil. Eu prefiro a abordagem de problema-solução, encontre os problemas
> que voce precisa resolver, enumere eles e verifique se o banco de dados
> consegue resolver todos eles. Se não consegue, posta aqui um caso e te
> ajudamos.
>
> No geral é pesar custo x benefício de cada solução.
>
> Abraço
>
>
> --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> ________________________________________
> De: Rodrigo Pimenta Carvalho
> Enviado: terça-feira, 7 de julho de 2015 9:55
> Para: asteriskbrasil em listas.asteriskbrasil.org
> Assunto: Qual opção correta: SQLite, MySQL ou o builtin database?
>
> Olá Pessoal.
>
> Bom dia.
>
> Estive pesquisando sobre como usar banco de dados acoplado ao Asterisk.
> Estudei a wiki do Asterisk, o site Voip-Info.org e vi 1 video no youtube
> sobre o assunto.
>
> Nos temos um builtin database no Asterisk, o qual pode ser usado para
> armazenar dados e recuperá-los. Os comandos  são:
>
> DB_DELETE,  DB e DB_EXISTS. Nesse banco podemos registrar informações no
> estilo do Windows Register.
>
> Além disso, podemos também fazer uso do MySQL, usando o comando DBQuery,
> que permite executar queries no database e obter o resultado.
> Por último, existe a possibilidade de usar o SQLite, por exemplo para
> arquivar dados de CDR.
>
> No meu caso, eu preciso arquivar dados no banco de dados, que não de CDR,
> mas de atributos de elementos na minha rede. Ex: IP de uma câmera de video,
> porta, etc. Isso será necessário, porque aplicações a serem feitas para
> smartphones, no meu projeto, precisarão obter essas informações via
> mensagens SIP. Ou seja, preciso criar uma solução onde o meu Dialplan irá
> executar queries num banco de dados e colocar as informações obtidas em
> cabeçalhos de mensagens SIP a serem retornadas para as aplicações nos
> smartphones.
>
> Nesse caso, tenho as seguintes dúvidas:
>
>    Para arquivar informações simples, como atributos e valores, qual seria
> a melhor/correta opção de banco de dados a usar, pensando em facilidade de
> configuração e programação?
>
>    No asterisk, é possível usar um desses bancos de dados para arquivar
> informação que não exatamente relacionada com uma call, como eu quero fazer?
>
>
> Caso alguém já tenha usado um desses bancos, por favor, comente sobre
> facilidade de uso do mesmo. Com as percepções obtidas aqui, eu poderei
> decidir melhor sobre qual das 3 opções eu continuarei aprofundando meus
> estudos.
> Ainda não sei qual a opção mais adequada, já que ainda não trabalhei com
> banco de dados e Asterisk.
>
> Muito obrigado por qualquer dica!
>
> Abs.
>
>
>
>
>
> RODRIGO PIMENTA CARVALHO
> Inatel Competence Center
> Software
> Ph: +55 35 3471 9200 RAMAL 979
> _______________________________________________
> WORKOFFEE PORTO ALEGRE da Khomp acontecerá no dia 7/07,
> no Hotel Quality. Faça já sua inscrição em workoffee.com.br
> e  venha conhecer os lançamentos do portfólio da Khomp em
> primeira mão. Inscrições GRATUITAS.
> _______________________________________________
> DIGIVOICE: Fabricante pioneiro em Banco de Canais e Placas E1, GSM, FXO e
> FXS para Asterisk e Elastix. Temos Cursos de Telefonia IP e Asterisk.
> Construa soluções de PABX IP com produtos DigiVoice - visite
> www.digivoice.com.br
> _______________________________________________
> Para remover seu email desta lista, basta enviar um email em branco para
> asteriskbrasil-unsubscribe em listas.asteriskbrasil.org
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://asteriskbrasil.org/pipermail/asteriskbrasil/attachments/20150707/47e98de4/attachment-0001.html>


Mais detalhes sobre a lista de discussão AsteriskBrasil