Cadastre-se Revistas DevMedia Cursos
 

Space de Douglas V. Pasqua
Busca Autor


Últimas 20 atualizações de Douglas V. Pasqua

Artigo - Criando aplicações de voz diretamente no PHP

As aplicações de voz permitem novas maneiras de se comunicar na Internet. Por exemplo: permite que você ouça seus e-mails ao invés de lê-los. Você pode querer efetuar uma compra em um site usando simplesmente interação por voz ou ao invés de se comunicar com seus amigos por texto, pode-se utilizar a voz.

Com a evolução da Internet, principalmente com o surgimento da integração de telefonia móvel na rede, a comunicação por voz se tornou essencial no ambiente web.

Neste contexto, quando se fala sobre o desenvolvimento de aplicações de voz é comum nos lembrar do VoiceXML. O VoiceXML é uma linguagem baseada no formato XML (eXtensible Markup Language) com o objetivo de desenvolver aplicações de voz interativas entre homem e máquina. Embora conhecida, neste artigo vamos apresentar uma nova maneira, bem mais simples que o VoiceXML, de criar aplicações de voz. Faremos uso do VoicePHP.

O VoicePHP permite que você crie aplicações de voz utilizando códigos PHP. Há grandes vantagens nessa ferramenta, a principal é a simplicidade de sua utilização. Os programadores não precisam aprender nada além do que já sabem sobre PHP para criar aplicações de voz funcionais.

Neste sentido, o objetivo deste artigo é demonstrar como funciona o VoicePHP, como você pode usá-lo e exemplificar idéias de aplicações de voz interessantes que você pode criar.

VoicePHP e VoiceXML

É importante ter em mente que o VoicePHP não é uma extensão do PHP e também não é um módulo. O VoicePHP é uma plataforma em que o código php será rodado sem nenhuma alteração em especial com o objetivo de criar aplicações de voz. A entrada e saída que você usa no php para obter e imprimir texto você continuará usando no voicephp, sem qualquer alteração, com a diferença que a entrada e saída serão convertidos para voz ao invés de texto. Sendo assim, o mesmo código que você utiliza no PHP para imprimir um texto você utiliza no VoicePHP para produzir voz. E da mesma maneira que você utiliza o PHP para receber uma entrada de texto você utiliza para receber uma entrada de voz. Essa é uma das grandes vantagens do VoicePHP em relação a outras opções que temos para desenvolver aplicações de Voz, como por exemplo o VoiceXML.

O VoiceXML, baseado em XML, é um dos primeiros padrões criados para programação de aplicações de voz. Entretanto, ao desenvolver usando a linguagem XML perde-se o poder das reais linguagens de programação como o PHP. Criar loops complexos e interação em XML requer um grande esforço. Nesse contexto, usar o VoicePHP evita a necessidade de aprender novas ferramentas, nova linguagem markup, tags e atributos que são propriedades do VoiceXML. Para exemplificar a diferença entre os dois, veja nas Listagens 1 e 2 um simples "Hello World" feito em VoiceXML e em seguida o mesmo "Hello World" feito em VoicePHP.

Listagem 1: VoiceXML

<?xml version="1.0" encoding="UTF-8"?> 
<vxml version = "2.1" > 
    <form> 
        <block> 
            <prompt> 
                Hello World 
            </prompt> 
        </block> 
    </form> 
</vxml> 

Listagem 2: VoicePHP

<?php 
    echo "Hello World"; 
?>

Usar o XML como uma linguagem de programação é difícil por que o XML não foi criado com esse propósito. Dessa forma, o VoicePHP torna-se uma ferramenta realmente poderosa ao criar voz a partir de simples comandos php.

Arquitetura da plataforma VoicePHP

A plataforma do VoicePHP disponibiliza suporte completo para aplicações de voz. O suporte inclui reconhecimento de voz, engine de texto para fala (text-to-speech), suporte DTMF (Dual-Tone Multi-Frequency - tons utilizados na discagem de aparelhos telefônicos que usam botões ao invés de “disco”), gateways de telefonia (utilizados para o envio de SMS), Instant Messaging (Exemplos de Instant Messaging são MSN, GTalk, Skype, etc.). O suporte inclui ainda um interpretador PHP altamente otimizado que permite rodar seus scripts PHP sem a necessidade de muitas mudanças para adaptá-los ao ambiente do VoicePHP.

O reconhecimento de voz e o suporte DTMF permitem diversas possibilidades de obter a entrada do usuário, por exemplo: reconhecimento de voz, DTMF (dígitos no aparelho telefônico ou dígitos em botões de Flash) e streaming de áudio (uma forma de transmitir áudio pela Internet).

O suporte de "texto para fala" e arquivos de som permitem controlar a saída. Dessa forma, o desenvolvedor tem controle para criar aplicações completas baseadas em voz.

A interação de entrada e saída pode ser realizada através linhas telefônicas, Flash, IM (Instant Messaging), SIP (protocolo utilizado para estabelecer chamadas telefônicas através de redes VoIP), entre outros, como veremos abaixo.

A Figura 1 ilustra a arquitetura da plataforma VoicePHP. Conforme podemos observar na figura, a plataforma VoicePHP possui um interpretador php próprio que permite trabalhar com aplicativos de voz, recebendo a entrada de informações através de DTMF, reconhecimento de voz ou streaming de áudio e a saída através de “texto para fala” (Text-To-Speech), DTMF e streaming de áudio. A plataforma ainda oferece ferramentas de apoio à interação com o usuário através de aplicação Flash e do protocolo SIP. O acesso ao ambiente pode ser feito pela Internet ou telefonia.

Arquitetura do VoicePHP

Figura 1: Arquitetura do VoicePHP

Após um pouco de teoria, vamos começar a colocar a mão na massa criando nossa primeira aplicação de voz.

Criando a aplicação "Hello World"

Crie a aplicação PHP que será utilizada na plataforma do VoicePHP. Em nosso exemplo vamos simplesmente produzir a fala "Hello World". Portanto, nosso script php é bem simples:

Listagem 3: Hello world

<?php 
    echo "Hello World"; 
?>

Salve esse arquivo com a extensão ".txt" e disponibilize o arquivo dentro de um diretório público que possa ser acessado na internet. Já vamos entender o motivo de gravar o arquivo com a extensão ".txt".

Agora crie uma conta gratuitamente no site http://tringme.com/. O VoicePHP é desenvolvido pela plataforma TringMe. O Tringme disponibiliza produtos que permitem a interação por voz na web. Sua plataforma integra voz e telefonia pela Internet, Mobile Devices, SIP Devices, etc.

Faça o login no site com sua conta. Mude o campo "Select your reachability:" para VoicePHP. No campo "VoicePHP URL:" informe a URL que contém o código PHP criado anteriormente. A extensão ".txt" é necessária para que a plataforma do VoicePHP possa ler o código fonte do seu arquivo "php". Clique no botão "Save" (ver Figura 2).

Configurando o VoicePHP

Figura 2: Configurando o VoicePHP

Pronto, sua aplicação de voz já esta pronta. Após você salvar os parâmetros setados, a plataforma do VoicePHP irá criar a aplicação de voz baseada no arquivo txt que você configurou. Ela pode ser utilizada de diferentes maneiras: através de um telefone comum, website (usando Flash), Instant Messaging, TringMe MobileVoip. Veja abaixo como proceder em alguns dos principais meios de utilização.

Usando Flash

Clique na opção "Push N Talk" no menu que está na sua conta no site tringme.com. Copie o conteúdo do campo "Your Push-n-talk widget Code" e adicione em seu site. Basta clicar no botão em flash para acessar sua aplicação de voz. A Figura 3 demonstra como será exibido em seu site o botão de acesso à aplicação de voz.

Acesso via flash

Figura 3: Acesso via flash

Usando Telefone Comum

Use o número que consta na página principal de configuração da sua conta tringme. É o número que está no campo "Phone number". Basta efetuar uma ligação para esse número e acessar sua aplicação de voz. Dessa forma, a partir de qualquer lugar que você esteja basta ter um telefone convencional para poder acessar sua aplicação de voz.

Usando ligação CallBack

Na página principal de configuração da conta encontre a seção "Click 2 Call". No campo "Enter your number here..." coloque o número de telefone que você deseja receber a ligação de volta (callback). No campo "Enter your friends here..." especifique o número que o tringme designou para você. É o número que está no campo "Phone number". Você receberá uma ligação de volta (callback) e na hora que você atender sua aplicação será executada. Um exemplo prático para utilizar essa opção seria construir uma aplicação de satisfação do cliente referente a algum produto que ele comprou. Você especifica o telefone do cliente no campo de callback e o identifi

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
29/06/2012 12:20:00





Artigo - Criando e consumindo webservices em PHP 5 e Zend Framework

Web service é uma solução utilizada para integração e comunicação entre diferentes aplicações. Por meio de um web service você pode disponibilizar funções ou mensagens para qualquer outra aplicação na internet ou em aplicações corporativas internamente.

Além disso, também é possível acessar (consumir) funções e mensagens de outros web services. A comunicação é realizada através do formato XML usando o protocolo HTTP. Através do XML, que é um formato universal, é possível que aplicações rodando em plataformas diferentes se comuniquem, simplesmente traduzindo seus dados para XML antes da comunicação. Já o protocolo HTTP é o mais utilizado na internet. É através desse protocolo que você pode navegar pelos sites usando seu navegador de preferência.

Neste contexto, o PHP nos fornece funções para trabalhar com web services de forma simples e fácil. Os dois principais tipos de comunicação com Web Service são SOAP e REST. Neste artigo iremos abordar como fazer a comunicação com esses dois tipos de Web Service.

SOAP

SOAP é um protocolo de comunicação baseado em XML que permite que aplicações troquem informações utilizando o protocolo HTTP. Mais especificamente, SOAP é um protocolo para acessar um Web Service. SOAP significa “Simple Object Access Protocol”. Por seguir um padrão W3C , é independente de plataforma e independente de linguagem de programação. É simples e extensível. Por trabalhar com o protocolo HTTP, que é o protocolo mais comum utilizado na internet, ele facilita a comunicação evitando que a transmissão seja bloqueada por um firewall ou proxy.

A descrição da interface de um web service SOAP é especificado em um documento XML chamado de WSDL (Web Services Description Language). O WSDL descreve o Web service e contém informações de como acessá-lo. Ele especifica a localização do serviço e quais são os seus métodos disponíveis. Portanto, caso esteja criando um web service que deseja disponibilizar para outros programas, será preciso criar o arquivo WSDL.

Existem diversas bibliotecas escritas em PHP para criação de web services SOAP. Porém, a melhor é a extensão SOAP nativa para PHP. Esta extensão requer outra extensão chamada libxml, que já vem instalada por padrão nas versões mais recentes do PHP. Portanto, para instalar a extensão SOAP no Linux basta compilar o php com a opção -enable-soap (compilando a partir do código fonte) ou para instalar a extensão SOAP no Ubuntu basta fazer sudo apt-get install php-soap. No Windows, a extensão SOAP já vem habilitada por padrão.

O PHP disponibiliza duas principais classes para trabalhar com SOAP:

    SoapClient: classe cliente para acessar web services disponíveis por outras aplicações;
  • SoapServer: para criar novos webservices e disponibilizá-los para outros aplicativos.

Neste artigo vamos criar uma pequena aplicação SOAP exemplificando a comunicação entre cliente e servidor. Como vimos anteriormente, nosso servidor SOAP precisa de um arquivo XML, chamado de WSDL, que especifica os métodos presentes em nosso web service. Porém, criar um arquivo WSDL manualmente é muito complexo. Infelizmente a classe nativa do PHP SoapServer não gera o arquivo WSDL automaticamente.

No PHP é possível operar no modo não WSDL, ou seja, sem a necessidade de existir um arquivo WSDL. Neste modo, o cliente de web service não conseguirá obter informações importantes, por exemplo o tipo de dados, formatação, etc. Assim, operar no modo não WSDL não é recomendado. Muitas plataformas como .NET, Java ou Ruby, necessitam de um WSDL para poderem funcionar.

No PHP, para gerar WSDL você tem disponível algumas ferramentas que auxiliam esse trabalho. Recomendo usar o IDE Zend Studio ou a classe Zend_Soap_AutoDiscover distribuída com o Zend Framework. Na sessão sobre Zend_Soap mais adiante neste artigo iremos demonstrar a utilização do Zend_Soap_AutoDiscover para geração do WSDL.

Vamos agora ao exemplo de uma aplicação SOAP simples. O exemplo apresentado na Listagem 1 temos o nosso servidor SOAP operando no modo não WSDL. Portanto, especificamos a opção “uri” e passamos “null” para o primeiro parâmetro do construtor da classe SoapServer. Depois disponibilizamos a classe SoapServerExemplo no web service contendo as funções “mensagem()” e “soma()”.

Listagem 1: Utilizando SOAP sem WSDL - Servidor

<?php
/* Criamos a instância do SoapServer.
 * A opção uri indica o namespace do webservice no servidor.
 * O primeiro parâmetro null indica que estamos trabalhando 
 * com um webservice no modo não WSDL.  
 */
$options = array('uri' => 'http://127.0.0.1/soap/server/');
$server = new SoapServer(null, $options);

/* 
 * Informamos a classe em que o webservice irá se basear.
 * Podemos usar também o método addFunction() para adicionar 
 * funções em nosso webservice. 
 */
$server->setClass('SoapServerExemplo');
/*
 * O método handle() processa a requisição SOAP e envia uma resposta 
 * para o cliente.
 */
$server->handle();

/*
 * A classe SoapServerExemplo será disponibilizada em nosso 
 * webservice. Portanto temos disponíveis no webservice os métodos 
 * mensagem e soma.
 */
class SoapServerExemplo {
	
	public function mensagem($nome)
	{
		return "Boas Vindas $nome !";
	}

	public function soma($a, $b)
	{
		return $a + $b;
	}
}

Em seguida, na Listagem 2 temos o código responsável pelo cliente de nosso web service. Ele irá acessar as funções que o nosso servidor disponibiliza. Nesta listagem temos o script que irá consumir o web service criado anteriormente. Ele está trabalhando no modo não WSDL, portanto é necessário especificar os parâmetros “location” e “uri” e passar null para o primeiro parâmetro do construtor da classe SoapClient. Após isso já é possível utilizarmos as funções do web service: “mensagem()” que irá retornar uma string de “Boas Vindas” usando o parâmetro $nome e a função “soma” que retorna a soma dos dois parâmetros especificados na função.

Listagem 2: Utilizando SOAP sem WSDL - Cliente

<?php
/*
 * Criamos a instância de nosso cliente de webservice.
 * Especificamos a localização e o namespace do servidor de
 * webservice. 
 * Passando null no primeiro parâmetro do construtor indicamos
 * que o webservice irá trabalhar no modo não WSDL.
 */
$options = array(
	'location' => 'http://127.0.0.1/soap/server/server.php',
	'uri' => 'http://127.0.0.1/soap/server/'
);

$client = new SoapClient(null, $options);

/*
 * No Objeto $client podemos usar os métodos da classe 
 * SoapServerExemplo disponível em nosso webservice.
 */
echo $client->mensagem('Douglas') . "<br />";
echo $client->soma(3, 5) . "<br />"

Ao acessar nosso primeiro web service obtemos o resultado apresentado na Figura 1.

Acesso inicial ao web service

Figura 1: Acesso inicial ao web service

Para enriquecer nosso conhecimento em relação a web services SOAP vamos agora demonstrar a comunicação com o site usando a API SOAP do PHP. Neste exemplo iremos construir um cliente de web service em php que conecta no amazon.com e nos traz o resultado de uma pesquisa de livros referente ao assunto PHP5.

Para podermos trabalhar com web services na Amazon é necessário antes fazer um cadastro no site deles e obter determinadas chaves que serão usadas em nosso web service como uma espécie de credencial. Para isso, acesse o site e faça o seu cadastro selecionando a opção Sign Up Now.

Após o cadastro, faça o login no site e copie as chaves necessárias para nosso web service. Para isso, primeiro clique em Account -> Security Credentials (ver Figura 2).

Recuperando as credenciais

Figura 2: Recuperando as credenciais

Role a página até a sessão “Access Credentials” e copie as chaves “Access Key ID” e “Secret Access Key” (ver Figura 3).

Recuperando as credenciais Access Key ID e Secret Access Key

Figura 3: Recuperando as credenciais Access Key ID e Secret Access Key

Após copiar as chaves necessárias já estamos prontos para criar nosso web service. O código necessário para esta atividade está apresentado na Listagem 3. Nesta listagem, temos um script que conecta no web service do site da amazon. Para autenticação é necessário especificar as chaves obtidas no site de web service da amazon conforme descrito anteriormente. Para consumir este web service é necessário configurar alguns cabeçalhos para a requisição SOAP: Timestamp, Acces Key ID e Signature. A signature é criada a partir de um algoritmo especificado na documentação sobre web service no site da amazon. Após isso, fazemos a chamada para a função “itemSearch”. Nos parâmetros da chamada especificamos o tipo de pesquisa que desejamos: Livros que contenham a palavra-chave “PHP5”. O retorno da função é um array de objetos contendo diversas informações sobre os itens encontrados pela pesquisa. Desses dados utilizamos somente alguns para serem exibidos na tela: Título do livro, autores, preço, imagem da capa, link para o site da amazon.

Listagem 3: Acessando o web service da Amazon

<?php

/* Copie aqui a Chave ACCESS KEY ID copiada do site da Amazon */
define('ACCESS_KEY_ID', 'xxxxxxxxxxxxxxxxxxxx');
/* Copie aqui a Chave SECRET ACCESS KEY copiada do site da Amazon */
define('SECRET_ACCESS_KEY', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');

/* URL do web service da Amazon */
$wsdl_url = 'http://webservices.amazon.com/AWSECommerceService/AWSECommerceService.wsdl';
/* instância da classe SoapClient */
$client = new SoapClient($wsdl_url);

/*
Gera assinatura que deve ser enviada na requisição SOAP.
O algoritmo da assinatura é definido na especificação do
web service da Amazon
*/
$timestamp = gmdate("Y-m-d\TH:i:s\Z");
$string = 'ItemSearch'.$timestamp;
$signature = base64_encode(hash_hmac("sha256", $string, SECRET_ACCESS_KEY, true));

/*
Dados da Requisição: Iremos pesquisar livros que contenham 
a palavra-chave PHP5
*/
$request = array(
'SearchIndex' => 'Books',
'ResponseGroup' => 'Large',
'Keywords' => 'PHP5');

$params = array(
'Request' => array($request)
);

/*
Cabeçalhos SOAP necessários para comunicação com amazon
*/
$soapheaders = array (
new soapheader("http://security.amazonaws.com/doc/2007-01-01/", "Signature", $signature),
new soapheader("http://security.amazonaws.com/doc/2007-01-01/", "Timestamp", $timestamp),
new soapheader("http://security.amazonaws.com/doc/2007-01-01/", "AWSAccessKeyId", ACCESS_KEY_ID)
);

/*
Setando os headers SOAP
*/
$client->__setSoapHeaders($soapheaders);
/*
Executando a pesquisa
*/
$livros = $client->__soapCall('itemSearch', array($params));

/*
Iterando nos itens encontrados referente a bus
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
25/06/2012 11:27:00





 

Douglas V. Pasqua atua na área de Engenharia de Software, especialista nas linguagens PHP e Java e na área de Infraestrutura e Segurança da Informação, especialista em soluções baseadas em Linux. Experiência na área de Tecnologia da Informação à cerca de 10 anos. Atua também ministrando cursos e palestras na área de software livre. Possui as certificações: Zend Certified Engineer, Sun Certified Java Programmer, LPIC-1, LPIC-2.
Arquivo de atualizações
 2012

Estatísticas do Autor:
Número de posts: 2
Características dos posts deste autor:
Utilidade:
1 0
 
DevMedia Group - Tel: (21) 3382-5038 - www.devmedia.com.br
Todos os Direitos Reservados a DevMedia Group