[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