sexta-feira, 24 de fevereiro de 2017

Biopneus: Pneus renováveis feitos de biomassa

Redação do Site Inovação Tecnológica -  
Pneus renováveis
Uma nova tecnologia para produzir pneus de automóveis usando matérias-primas vegetais - árvores e gramíneas - promete virar a indústria em direção ao uso de recursos renováveis.
Os pneus de carro são vistos como ambientalmente hostis porque são predominantemente feitos de combustíveis fósseis e não há muito o que fazer com eles depois que chegam ao final de sua vida útil. Contudo, até hoje não existem materiais alternativos em termos de preço e desempenho.
A equipe que desenvolveu o novo processo afirma que os pneus de carro produzidos a partir da biomassa serão idênticos aos pneus atuais, com a mesma composição química, cor, forma e desempenho.
"Nossa equipe criou um novo processo químico para fazer isopreno, a molécula-chave nos pneus de carro, a partir de produtos naturais como árvores, gramíneas ou milho. Esta pesquisa poderá ter um grande impacto sobre a multibilionária indústria de pneus de automóveis," disse o professor Paul Dauenhauer, da Universidade de Minnesota, nos EUA.
Isopreno biológico
Hoje, o isopreno é produzido separando-se termicamente moléculas no petróleo que são semelhantes à gasolina, em um processo chamado craqueamento. O isopreno é então separado de centenas de outros produtos e purificado. No passo final, o composto é posto para reagir consigo mesmo, formando cadeias longas que originam um polímero sólido que é o componente principal dos pneus de automóvel.
O isopreno de biomassa, por sua vez, é fabricado a partir de açúcares extraídos de plantas como gramíneas, árvores ou milho, em um processo de três passos "hibridizado", o que significa que ele combina a fermentação biológica, usando microrganismos, com a refinação catalítica convencional, que é semelhante à tecnologia de refinação do petróleo.
O primeiro passo é a fermentação microbiana dos açúcares da biomassa, como a glicose, para se obter um composto intermediário, chamado ácido itacônico. No segundo passo, o ácido itacônico reage com hidrogênio, gerando um produto químico chamado metil-THF (tetrahidrofurano). Esta etapa foi otimizada quando a equipe identificou uma combinação metal-metal única que serviu como um catalisador altamente eficiente.
Mas o grande avanço tecnológico do processo está no terceiro passo, quando o metil-THF é desidratado para gerar o isopreno. Usando um catalisador recentemente descoberto, chamado P-SPP (pentasil autoempilhado fosfórico), a equipe foi capaz de demonstrar uma eficiência catalítica de até 90%, com a maior parte do produto catalítico sendo isopreno.
Combinando as três etapas em um processo, o isopreno renovável pode ser obtido de forma renovável a partir da biomassa.
A tecnologia foi patenteada e está disponível para licenciamento pela Universidade.

Bibliografia:

Renewable Isoprene by Sequential Hydrogenation of Itaconic Acid and Dehydra-Decyclization of 3-Methyl-Tetrahydrofuran
Omar A. Abdelrahman, Dae Sung Park, Katherine P. Vinter, Charles S. Spanjers, Limin Ren, Hong Je Cho, Kechun Zhang, Wei Fan, Michael Tsapatsis, Paul J. Dauenhauer
Catalysis
Vol.: 7 (2), pp 1428-1431
DOI: 10.1021/acscatal.6b03335

Como levar a Internet das Coisas ao próximo nível?

Lisandro Sciutto * Publicada em 23 de fevereiro de 2017 às 07h03 em CIO.
Atualmente, a Internet das Coisas apresenta uma oportunidade para a indústria, principalmente se considerarmos como a transformação digital alterou a forma com que as pessoas se comunicam e se relacionam umas com as outras e com o ambiente em que vivem. Inclusive, existem iniciativas para incentivar o desenvolvimento de tecnologias para aplicações inteligentes, como o programa “Plataforma IoT — Estrutura Aberta de Tecnologias para Internet das Coisas e suas Aplicações”, lançado em 2016 pelo Governo Federal em parceria com a Universidade Federal do Ceará para a criação de soluções para aplicações em cidades inteligentes. Mesmo assim, muitas organizações ainda estão céticas ou se esforçando para entender como se engajar e por onde começar uma estratégia de Internet das Coisas (IoT).
Mesmo com acrescente adoção de Big Data pela indústria e com sensores menores e de custo cada vez mais acessível, ainda há muito a evoluir. Segundo a pesquisa da Accenture, “From Productivity to Outcomes: Using the Internet of Things to drive future business strategies”, de 2015, 84% dos principais executivos de empresas, conhecidos como C-suite, acreditam que suas companhias têm a capacidade de criar novos fluxos de renda baseados em serviços usando o IoT. No entanto, apenas 7% desenvolveram uma estratégia abrangente e direcionaram investimentos à IoT.
Simon Jacobson, analista do Gartner e autor do whitepaper "Quatro melhores práticas para gerenciar a visão estratégica para a Internet das Coisas na indústria", afirma que a visão estratégica para a Internet das coisas está ficando cada vez mais clara para o segmento industrial, estando no topo da lista de prioridades. Ele salienta que as mudanças rápidas podem criar incerteza, pois a evolução tecnológica da IoT está mais acelerada do que os acionistas da indústria podem assimilar e vincular com a maturidade baseada no desempenho. Ainda de acordo com Jacobson, a consequência pode ser a incerteza no valor e diferenciação para as compras de negócios na IoT.
Embora as empresas já tenham muitos componentes do IoT instalados, esses aplicativos são frequentemente agrupados ou fazem parte de uma Intranet, em vez de uma Internet. Por exemplo, muitas companhias usam sistemas de EAM para coletar e monitorar o status de seus equipamentos internos, há anos, e usam a telemetria para acompanhar a localização e desempenho de equipamentos pesados, incentivando, inclusive, contratos de locação por hora de uso. Além disso, a conectividade máquina a máquina é usada em máquinas de venda automática e parquímetros, onde os aparelhos enviam um sinal quando o serviço é necessário. Apesar destes casos de uso conhecidos, um novo padrão de estratégia é necessário para levar IoT para o próximo nível. Para isso, as operações e os sistemas de TI precisam se alinhar para criar uma estratégia integrada de Internet das Coisas.
Um sistema IoT não é algo que uma companhia pode comprar e ativar, e também não é uma peça de hardware ou software a ser comprado e implementado em alguns dias. É mais adequadamente descrito como uma mentalidade ou estratégia, que alavanca várias tecnologias em um plano coeso. Big Data é um componente crítico desse plano, mas o gerenciamento desses dados é um dos principais desafios. 
Ron Miller, do TechCrunch, escreveu no artigo, “If You Think Big Data is Big Now, Just Wait", sobre a enorme quantidade de dados que o IoT tem o potencial de criar. "A promessa de Big Data deu início a uma era de inteligência de dados. Provenientes desde máquinas até fluxos de pensamento humano, atualmente coletamos mais informações a cada dia, tanto que 90% dos dados no mundo de hoje foram criados apenas nos últimos dois anos. De fato, todos os dias criamos 2.5 quintilhões de bytes de dados – de acordo com algumas estimativas, isso equivale a um novo Google a cada quatro dias, e a taxa só está aumentando”.
Esta quantidade pode ser paralisante. Segundo o Gartner, as indústrias são forçadas a encontrar e dominar o alinhamento, a convergência e a integração dos ambientes de TI e tecnologia operacional (OT). Isso requer novos projetos organizacionais e habilidades e responsabilidades técnicas que antes não eram necessárias.
A IoT tem um grande potencial, mas apresenta desafios que as empresas devem enfrentar à medida que desenvolvem suas estratégias. Conectividade, armazenamento na nuvem, automação e análise de dados são fatores na equação que devem ser dominados antes que a estratégia abrangente possa ser implementada. É a combinação de conectividade dentro e fora da planta, aplicação dos dados coletados e mudança de mentalidade da organização que fará diferença para as companhias.

(*) Lisandro Sciutto é Diretor de Produtos da Infor LATAM
- See more at: http://cio.com.br/opiniao/2017/02/23/como-levar-a-internet-das-coisas-ao-proximo-nivel/#sthash.O0ZFGBjE.dpuf

quinta-feira, 23 de fevereiro de 2017

Células solares impressas como jornal

Células solares impressas como jornal
Todo o processo é baseado em "tintas solares", que podem ser aplicadas por impressão comum. [Imagem: Hairen Tan et al. - 10.1126/science.aai9081]
Células solares impressas
Pesquisadores canadenses criaram uma técnica que permite fabricar células solares flexíveis por impressão, em um processo produtivo tão simples e barato quanto imprimir um jornal.
A equipe eliminou um obstáculo crítico de fabricação de uma classe emergente de geradores solares chamados células solares de perovskita, que recentemente mostraram ter eficiência para competir com as células de silício.
Esta tecnologia solar alternativa promete painéis solares de baixo custo, impressos na forma de folhas flexíveis, que permitirão transformar quase qualquer superfície em um gerador solar.
Camada Seletiva de Elétrons
Ao contrário das células solares de silício, que exigem um material ultrapuro, temperaturas superiores a 1.000º C e grandes quantidades de solventes, as células solares de perovskita consistem em uma camada de pequenos cristais sensíveis à luz de baixo custo. Como esses cristais podem ser misturados em um líquido para formar uma espécie de "tinta solar", eles podem ser impressos em vidro, plástico ou outros materiais usando um processo de impressão do tipo jato de tinta.
Mas havia um problema: para gerar eletricidade, os elétrons excitados pela energia solar precisam ser extraídos dos cristais para que possam fluir através de um circuito e produzir a corrente. Essa extração ocorre em uma camada especial chamada "Camada Seletiva de Elétrons", cuja fabricação exigia temperaturas elevadas, por volta dos 500 graus, o que vinha impedindo o desenvolvimento de processos fabris práticos.
Células solares impressas como jornal
As novas células solares de perovskita alcançaram uma eficiência de 20,1% e podem ser fabricadas a baixas temperaturas. [Imagem: Kevin Soobrian]
Eficiência das células solares de perovskita
Hairen Tan e seus colegas da Universidade de Toronto desenvolveram agora uma nova reação química que permite fabricar uma camada seletiva de elétrons a partir de nanopartículas em solução, diretamente sobre a camada de cristais de perovskita. Embora ainda seja necessário algum calor, o processo fica sempre abaixo dos 150º C, inferior ao ponto de fusão de muitos plásticos.
As nanopartículas são revestidas com uma camada de átomos de cloro, o que as ajuda a se ligar à camada de perovskita acima. Esta forte ligação permite a extração eficiente de elétrons - a eficiência das células solares produzidas em laboratório pela equipe alcançou 20,1%.
Para comparação, as células solares de perovskita feitas com o método mais antigo de alta temperatura são apenas marginalmente melhores, chegando a 22,1%. As melhores células solares de silício atingem 26,3% de eficiência.
Outra vantagem foi um ganho significativo de estabilidade. As células solares de perovskita são instáveis, mostrando uma queda acentuada no desempenho após apenas algumas horas. As células fabricadas por Tan retiveram mais de 90% de sua eficiência após 500 horas de uso, insuficientes ainda para um produto comercial, mas mostrando que há muito espaço para viabilizar essa tecnologia de energia solar de baixo custo.

Bibliografia:

Efficient and stable solution-processed planar perovskite solar cells via contact passivation
Hairen Tan, Ankit Jain, Oleksandr Voznyy, Xinzheng Lan, F. Pelayo García de Arquer, James Z. Fan, Rafael Quintero-Bermudez, Mingjian Yuan, Bo Zhang, Yicheng Zhao, Fengjia Fan, Peicheng Li, Li Na Quan, Yongbiao Zhao, Zheng-Hong Lu, Zhenyu Yang, Sjoerd Hoogland, Edward H. Sargent
Science
Vol.: 355, Issue 6326, pp. 722-726
DOI: 10.1126/science.aai9081

Computador de DNA consegue identificar doenças

Computador de DNA já consegue identificar doenças
O processador de DNA identifica os anticorpos de uma doença e então determina se a liberação do medicamento é necessária ou não.[Imagem: ICMS Animation Studio/TUE]
Computador biológico
Pesquisadores holandeses demonstraram a possibilidade de liberação controlada de medicamentos na corrente sanguínea utilizando computadores de DNA.
Para isso, eles desenvolveram o primeiro processador de DNA capaz de detectar vários anticorpos no sangue e realizar cálculos com base nessas informações, decidindo o que fazer a seguir.
Este é um passo importante rumo ao desenvolvimento de medicamentos inteligentes que permitam um melhor controle da dosagem da medicação, produzindo menos efeitos secundários e a um custo mais baixo, além da aplicação localizada, evitando os danos colaterais muitas vezes devastadores, por exemplo, das quimioterapias.
"A pesquisa em testes diagnósticos tende a se concentrar no 'reconhecimento', mas o que é especial neste sistema é que ele pode pensar e pode ser conectado a um sistema de atuadores, para a dispensação de medicamentos," disse o professor Maarten Merkx, da Universidade de Tecnologia de Eindhoven.
Computador de DNA
A técnica pode ser comparada a um sistema de segurança que abre a porta dependendo da pessoa que se aproxima. Se a câmera reconhece a pessoa, a porta abre, mas se a pessoa for desconhecida, a porta permanecerá trancada.
Além de serem portadoras das informações genéticas, as moléculas de DNA são altamente adequadas para a realização de cálculos que levem a decisões assim. Como a sequência de DNA determina com quais outras moléculas cada DNA pode reagir, torna-se possível programar circuitos lógicos, dirigidos por reações químicas.
Contudo, as aplicações biomédicas dos processadores de DNA - justamente as mais promissoras - têm sido limitadas porque a entrada de dados para esses computadores biológicos, que todos sonham em ver atacando seletivamente as células de câncer, consistem tipicamente em outras moléculas de DNA ou RNA. E, para determinar se alguém tem uma determinada doença, é essencial medir a concentração de anticorpos específicos - agentes que o nosso sistema imunológico produz quando estamos doentes.
Computador de DNA já consegue identificar doenças
As moléculas de DNA são programadas para formar portas lógicas (Multiplex, OR, NOR etc) que fazem cálculos complexos e simultâneos. [Imagem: W. Engelen et al. - 10.1038/NCOMMS14473]
Liberação inteligente de medicamentos
O que a equipe holandesa conseguiu agora foi ligar a presença de anticorpos a um computador de DNA. O sistema traduz a presença de cada anticorpo em uma peça específica de DNA, a partir da qual o processador pode decidir se está diante de um ou mais anticorpos e, assim, determinar se a liberação do medicamento é necessária.
"A presença de uma determinada molécula de DNA coloca em movimento uma série de reações através das quais podemos fazer o computador de DNA executar vários programas," explicou Wouter Engelen, principal responsável pela criação do sistema. "Nossos resultados mostram que podemos usar o computador de DNA para controlar a atividade das enzimas, mas acreditamos que também deve ser possível controlar a atividade de um anticorpo terapêutico".
Agora que a equipe constatou que o computador de DNA gera os resultados corretos, eles precisarão anexá-lo a um sistema atuador, possivelmente nanopartículas encapsuladoras que sejam avisadas para se abrir e liberar as moléculas do medicamento que levam em seu interior.

Bibliografia:

Antibody-controlled actuation of DNA-based molecular circuits
W. Engelen, L. Meijer, T. de Greef, M. Merkx
Nature Communications
DOI: 10.1038/NCOMMS14473

quarta-feira, 22 de fevereiro de 2017

BOT Framework e Integração com Aplicações

A Microsoft criou o BOT, que é um Framework capaz de trocar mensagens e integrar diversos tipos de conectores de aplicações famosas (Skype, Slack, Email no Office 365, SMS, etc) com a aplicação BOT no servidor.
O objetivo deste artigo é criar um serviço de BOT básico, armazenado no Azure, e depois integrar com um banco de dados, de forma que as mensagens trocadas sejam enviadas e respondidas num Emulador e numa aplicação integrada com o Slack. Utilizei o Visual Studio 2015 RC 2 para escrever este artigo.

O que é o BOT Framework?

BOT Framework é um serviço operado pela Microsoft baseado num SDK e seus conectores, este é o Core do BOT Framework. Ao criar um BOT, você pode usar diversos serviços para hospedar o BOT, serviços de linguagem natural do Machine Learning (LUIS), reconhecimento de voz com as API, integração com o Azure, entre outras, conforme a figura 1.
Facilidades do BOT
Figura 1 – Facilidades do BOT

Onde usar?

Você pode criar o seu BOT e integrá-lo diretamente nos seus negócios através da integração com conectores como chat, Email no Office 365, Skype, Slack, Telegram, SMS, GroupMe, entre outros, conforme a figura 2. O SDK permite criar projetos em C# + Node.js e publica-los no Azure. Esta integração é feita através de serviços REST.
Conectores do BOT
Figura 2 – Conectores do BOT

Funcionamento do BOT

O BOT é baseado em uma lógica que requisita e recebe textos de um Web Service, normalmente armazenado no Azure. Dependendo do texto solicitado ao servidor, o mesmo trata a mensagem segundo uma Inteligência que você cria, e responde à solicitação. Quando falo sobre inteligência, quero dizer que você pode e deve criar um conjunto de expressões, por exemplo, usar o LUIS (Language Understanding Intelligent Service https://www.microsoft.com/cognitive-services/en-us/language-understanding-intelligent-service-luis  http://luis.ai) para treinar este modelo de expressões. O treinamento é baseado no Machine Learning, que através dos diversos modelos matemáticos e estatísticos submete tais expressões.
Como um BOT é baseado em serviços REST, tenha em mente que todas as mensagens trocadas entre cliente e servidor são mapeadas em JSON, por exemplo, a figura 3 mostra o conector BOT para o canal SMS. Imagine que você quer fazer o pedido de uma pizza através de um conector, não importa qual seja, o servidor recebe a mensagem (text: “Diga fazer pedido para iniciar o pedido”), processa e entende que o cliente deseja iniciar o pedido. Então, o cliente recebe a mensagem texto do servidor dando as instruções. Veja que no JSON é definida a linguagem a ser usada, até o momento está disponível apenas para algumas.
Estrutura da mensagem trocada em JSON
Figura 3 – Estrutura da mensagem trocada em JSON

Como Desenvolver um BOT?

O primeiro passo é instalar o template para BOT no Visual Studio 2015 (Update 1 no mínimo). Navegue no link http://aka.ms/bf-bc-vstemplate e faça o download. Quando finalizar, mova o .zip para a pasta de templates do VS, normalmente localizada em “%USERPROFILE%\Documents\Visual Studio 2015\Templates\ProjectTemplates\Visual C#". Pronto, agora você já tem o template necessário para o BOT.
Em seguida, crie um novo projeto chamado BOTArtigoMSDN. Selecione o template Visual C# / Bot Application, conforme a figura 4, clique em OK e aguarde a criação do projeto.
Novo projeto BOT
Figura 4 – Novo projeto BOT
O mais importante neste projeto é que você pode publica-lo em qualquer servidor de internet onde os conectores terão acesso. E, todo BOT tem o AppId e a AppSecret descritos no Web.Config. Como o projeto foi criado agora, ainda não temos estas informações, mas quando registrarmos o BOT, elas são geradas e aí sim, basta copiar as informações aqui.
<appSettings> 
  <!-- update these with your appid and one of your appsecret keys--> 
  <add key="AppId" value="YourAppId" /> 
  <add key="AppSecret" value="YourAppSecret" /> 
</appSettings>
Abra o arquivo MessagesController.cs e note que a declaração do código a seguir. Aqui é o local onde é recebida a mensagem do usuário e enviada a resposta. Roda assíncrona, e se a mensagem for do tipo Message, o código trata e retorna uma expressão em CreateReplyMessage. Neste exemplo padrão, o texto devolve a quantidade de caracteres contidas na expressão. Caso contrário é disparado o HandleSystemMessage que verifica qual interação foi identificada e retorna a mensagem.
public async Task<Message> Post([FromBody]Message message) 
{ 
    if (message.Type == "Message") 
    { 
        // calculate something for us to return 
        int length = (message.Text ?? string.Empty).Length; 
 
        // return our reply to the user 
        return message.CreateReplyMessage($"You sent {length} characters"); 
    } 
    else 
    { 
        return HandleSystemMessage(message); 
    } 
} 
 
private Message HandleSystemMessage(Message message) 
{ 
    if (message.Type == "Ping") 
    { 
        Message reply = message.CreateReplyMessage(); 
        reply.Type = "Ping"; 
        return reply; 
    } 
    else if (message.Type == "DeleteUserData") 
    { 
        // Implement user deletion here 
        // If we handle user deletion, return a real message 
    } 
    else if (message.Type == "BotAddedToConversation") 
    { 
    } 
    else if (message.Type == "BotRemovedFromConversation") 
    { 
    } 
    else if (message.Type == "UserAddedToConversation") 
    { 
    } 
    else if (message.Type == "UserRemovedFromConversation") 
    { 
    } 
    else if (message.Type == "EndOfConversation") 
    { 
    } 
 
    return null; 
}
Neste exemplo, adicione o seguinte código que retorna uma mensagem no IF a seguir:
else if (message.Type == "BotAddedToConversation") 
{ 
    return message.CreateReplyMessage("Olá Bot MSDN"); 
}
Agora, compile e rode a aplicação (F5). Você pode abrir em qualquer navegador e verá a página default.htm, conforme a figura 5.
BOT rodando localmente
Figura 5 – BOT rodando localmente
No entanto, você não consegue interagir, então, a melhor coisa é instalar o emulador (http://aka.ms/bf-bc-emulator). Veja que a mensagem no navegador diz que você pode navegar no site do BOT e ao registrá-lo, é preciso adicionar o “/api/messages” no final da URL, afinal é um serviço REST. Neste momento, copie a URL, deixe a aplicação rodando no VS e pode fechar o navegador. Abra o emulador, por default a porta usada é 3978, note que já é inserido o “/api/messages”. Note ainda, que você precisa fornecer o AppId e AppSecret, caso seja diferente do padrão.
Conforme a figura 6, clique no botão Send e veja que a resposta é a expressão “Olá Bot MSDN”, o qual é a que inserimos no código anterior. Isto porque já foi identificado que o tipo de mensagem é message.Type == "BotAddedToConversation".
Interação com emulador
Figura 6 – Interação com emulador
Agora vamos enviar uma mensagem para o BOT, na caixa de texto no rodapé digite um texto e clique na seta para enviar. Veja que no chat são mostradas todas as mensagens trocadas. Se você selecionar qualquer mensagem, será mostrado o JSON do lado direito, conforme a figura 7, assim você pode saber o que realmente está sendo enviado e recebido do servidor.
JSON da mensagem
Figura 7 – JSON da mensagem
Sendo assim, você pode construir toda a sua camada de negócios de forma que a própria mensagem faça uma pesquisa no banco de dados ou em um serviço na web, a fim de retornar dados, por exemplo, valor da ação de uma empresa, cotação de moedas, se há estoque de um produto, emergências médicas, enfim, há uma infinidade de cenários.
Desta forma, criei um serviço REST que contém um Controller com uma Action que recebe o ID de um produto e retorna dados (ID, nome e preço) do mesmo. Foquei aqui somente no código, sem tratar qualquer HttpNotFound ou erros para que você entenda mais facilmente.
// GET api/ProdutosWebAPI/5 
public class ProdutosWebAPIController : ApiController 
{ 
    NORTHWNDEntities ctx = new NORTHWNDEntities();  
 
public ProdViewModelAPI Get(int id) 
{ 
    return ctx.Products 
                .Select(p => new ProdViewModelAPI 
                { 
                    id = p.ProductID, 
                    nome = p.ProductName, 
                    preco = p.UnitPrice 
                }) 
                .FirstOrDefault(p => p.id == id); 
} 
}
Em seguida, no projeto do BotArtigoMSDN, criei a classe ServiceProduto com o método GetProdutosAsync, tudo assíncrono é claro, que recebe o ID, chama o serviço armazenado em algum servidor (no meu caso, localhost), passa o ID como parâmetro e aguarda o retorno.
public class ServiceProduto 
{ 
    public static async Task<string> GetProdutosAsync(int id) 
    { 
        string url = $"http://localhost:23736/api/ProdutosWebAPI/{id}"; 
        string dados; 
        using (WebClient client = new WebClient()) 
        { 
            dados = await client.DownloadStringTaskAsync(url).ConfigureAwait(false); 
        } 
        if (dados != "null") 
        { 
            string nome = dados.Split(',')[1].Split(':')[1].Split('\"')[1]; 
            double preco = Convert.ToDouble(dados.Split(',')[2].Split(':')[1].Replace("}""")); 
            return $"{nome} - preço: {preco:n2}"; 
        } 
        else 
        { 
            return $"o produto {id} não consta no estoque"; 
        } 
    } 
}
Já no arquivo MessageController.cs, veja o Post que faz a chamada ao GetProdutos passando o Message como parâmetro, ou seja, o dado que o usuário enviou.
public async Task<Message> Post([FromBody]Message message) 
{ 
    if (message.Type == "Message") 
    { 
        string msg = await GetProdutos(message); 
        return message.CreateReplyMessage(msg); 
    } 
    else 
    { 
        return HandleSystemMessage(message); 
    } 
}
O método GetProdutos verifica se o conteúdo é um número ou não. Caso não seja, retorna a mensagem para fornecer um número. Caso contrário, chama o serviço (ServiceProduto.GetProdutoAsync) que irá na WEB pesquisar o ID e retorna um REST tratado. Qualquer condição que seja, a mensagem (msg) será string.
private static async Task<string> GetProdutos(Message message) 
{ 
    int id; 
    string msg = string.Empty; 
    bool EhNumero = int.TryParse(Convert.ToString(message.Text), out id); 
    if (!EhNumero) 
    { 
        msg = "forneça um número, letras não são aceitas"; 
    } 
    else 
    { 
        msg = await ServiceProduto.GetProdutosAsync(id); 
    } 
    return msg; 
}
Executando a aplicação BOT no Emulador, veja na figura 8 os dados retornados, conforme as condições que estabeleci.
Retorno dos dados dos produtos
Figura 8 – Retorno dos dados dos produtos
Pronto, este BOT já está finalizado para ser publicado em algum servidor.

Publicar o BOT no Azure

Agora vamos publicar o BOT no Azure de forma que fique à disposição de quem quiser usar. Cabe ressaltar que você deverá ativar os recursos de Cognitive Services na sua conta do Azure. Para organizar os grupos no Azure, criei um grupo chamado BotFramework e toda vez que eu criar uma aplicação WEB de BOT, a insiro neste grupo.
No Solution Explorer clique no projeto do BOT e selecione Publish. Selecione a opção Microsoft Azure App Service. Clique no botão Next, conforme a figura 9.
Publicação da aplicação no Azure
Figura 9 – Publicação da aplicação no Azure
Faça o login, caso precise, escolha a sua assinatura e o Serviços de Aplicativo já criado no Azure. Caso não tenha criado ainda, clique no botão New e preencha o formulário para cria-lo. Ao final, clique no botão OK, conforme a figura 10.
Publicação no Azure
Figura 10 – Publicação no Azure
Serão exibidas as informações referentes ao servidor, nome do site, login e url a ser criada. Clique no botão Next e nas demais telas, não há mistério, basta finalizar o assistente e aguardar a publicação, conforme a figura 11.
Credenciais para publicação no Azure
Figura 11 – Credenciais para publicação no Azure
Assim que a publicação finaliza, é aberto o navegador já com a URL criada. Isto é tudo o que precisamos até o momento, o projeto está publicado no Azure.

Registrar o BOT no Bot web site

O próximo passo é ir no site dev.botframework.com e registrar o seu BOT. Neste site, você encontrará uma documentação, pode registrar ou alterar um BOT e ver quais BOTs existem. Faça o login, clique na opção “Register a bot” e preencha todos os campos necessários para o registro. Basicamente os campos são:
Name: nome do seu BOT
Description: breve descrição do seu BOT
Endpoint: será a Url gerada na publicação no Azure seguido da expressão “/api/messages”. É recomendado usar https caso use autorização básica. O link final no meu caso é: https://botartigomsdn.azurewebsites.net/api/messages
Publisher: coloque o seu nome
Bot Privacy URL: pode usar esta da MS http://go.microsoft.com/fwlink/?linkid=521839
Publisher Email: seu email
App ID: coloque um texto, apenas letras e você não poderá alterar isto depois que salvar o registro.
Ao final, clique no chekbox para concordar com os termos e clique no botão Register e aguarde. Conforme a figura 12, veja o painel da esquerda com todas as informações do BOT. E, no painel da direita todos os conectores disponíveis para você associar ao BOT, ou seja, integrar o BOT ao Email, Skype, Slack, etc.
BOT registrado com sucesso
Figura 12 – BOT registrado com sucesso
Agora é preciso fazer um ajuste necessário nas configurações da aplicação criada no VS 2015. Lembre-se que no arquivo Web.Config temos o AppId e o AppSecret? Pois bem, o projeto está publicado no Azure com credenciais default. Isto significa que se você testar o seu BOT agora, dará erro. No painel do lado esquerdo do BOT criado, há estas duas chaves que precisamos, portanto, abra o Web.Config no VS 2015, copie e cole os dados do App ID e “Primary app secret”.
<appSettings> 
  <!-- update these with your appid and one of your appsecret keys--> 
  <add key="AppId" value="BuildArtigoMSDN" /> 
  <add key="AppSecret" value="a4c282d165ca41cdb5a724b718d6f69a" /> 
</appSettings>
No Solution Explorer, rode novamente o processo de Publish no Azure, é rápido pois foi alterado apenas um arquivo. Mesmo assim, se você executar pelo emulador ou diretamente na janela de teste do MY BOTS dará erro. Isto porque o projeto aponta para o banco de dados em localhost. Sendo assim, vamos alterar a classe ServiceProduto de forma que a pesquisa seja feita apenas em uma pequena lista de produtos. E, não se esqueça de criar a classe Produto.
public class Produto 
{ 
    public int ID { get; set; } 
    public string nome { get; set; } 
    public decimal preco { get; set; } 
} 
public class ServiceProduto 
{ 
    public static async Task<string> GetProdutosAsync(int id) 
    { 
        #region teste local antes de publicar no Azure 
        //string url = $"http://localhost:23736/api/ProdutosWebAPI/{id}"; 
        ... 
        //    return $"o produto {id} não consta no estoque"; 
        //} 
        #endregion 
 
        #region teste depois de publicar no azure 
        var lista = new List<Produto> 
        { 
            new Produto { ID=1, nome="Batata", preco=8}, 
            new Produto { ID=2, nome="Morango", preco=10}, 
            new Produto { ID=3, nome="Laranja", preco=22}, 
            new Produto { ID=4, nome="Melancia", preco=25}, 
        }; 
        var prod = lista.FirstOrDefault(p => p.ID == id); 
        if (prod != null) 
            return $"{prod.nome} - preço: {prod.preco:n2}"; 
        else 
            return $"o produto {id} não consta no estoque"; 
        #endregion 
    }
Salve tudo e novamente publique no Azure. Agora sim, podemos testar à vontade no emulador. Certifique-se que a URL seja HTTPS seguida da mesma URL anterior https://botartigomsdn.azurewebsites.net/api/messages. Outra coisa importante é que o emulador está com as credenciais antigas, então, altere para as que você gerou e inicie os testes, conforme a figura 13. Que fantástico, você já tem o BOT registrado e publicado no Azure.
Teste real do BOT no Azure
Figura 13 – Teste real do BOT no Azure
Para garantir, faça o teste diretamente na janela do seu BOT em My BOTS. Como o seu BOT está selecionado, digite um número (ID do produto) na caixa de texto e clique no botão Send. Veja o resultado JSON completo do retorno da mensagem, conforme a figura 14.
Teste diretamente no My Bots
Figura 14 – Teste diretamente no My Bots

Integração com SLACK

Agora chegou a hora de mostrar como integrar o BOT já publicado no Azure ao canal integrador. Como acho o Slack bem útil e de fácil entendimento, mostrarei o passo a passo. No site dev.botframework.com, uma vez logado, clique no “My BOTS”. Na lista de canais, o Slack está exibido, portanto, clique no botão Add, conforme a figura 15.
Conectores do BOT
Figura 15 – Conectores do BOT
É aberta uma nova janela no navegador para você seguir as etapas. Basicamente você precisa se ter uma conta no Slack, se logar e criar a aplicação do seu BOT
https://api.slack.com/applications/new). Os três passos são fáceis de seguir porque o site já mostra o que você deve fazer para seguir o roteiro, conforme a figura 16.
Roteiro para integração com Slack
Figura 16 – Roteiro para integração com Slack
A figura 17 exibe os dados da aplicação criada no Slack, contendo o Client ID, o Client Secret e a Redirect URI que foi colada quando gerada a aplicação no BOT.
Aplicação registrada no Slack
Figura 17 – Aplicação registrada no Slack
A figura 18 mostra o link gerado a ser copiado e colado para o campo “Use this Redirect URI”, quando você cria a aplicação no BOT.
URL do Slack
Figura 18 – URL do Slack
No site do Slack, desça até encontrar a sessão “Bot User”, conforme a figura 19. No site do BOT, seguindo o passo a passo, na sessão “Scroll down on page and create a bot”, clique no botão “Add a bot to this app” para adicionar o usuário ao Slack.
Usuário associado ao Slack
Figura 19 – Usuário associado ao Slack
E, para terminar, seguindo o passo a passo no site do BOT, localize a sessão “Submit your Client ID and Client Secret saved from above”. Aqui são solicitados dois dados (Client ID e Client Secret), os quais você deverá copiar e colar do site do Slack (gerados na figura 17). Clique no botão “Submit Slack Credentials” e pronto.
Nos bastidores o Slack aprova e já disponibiliza em quais canais você quer que este usuário seja chamado. Você pode associar à sessão #general.
Agora, vamos ao teste real das solicitações de dados ao BOT. Abra o Slack.com, faça o login e crie outro usuário para você testar ou pode pedir para um amigo aceitar. Na caixa de texto de mensagens, para você chamar o BOT no Azure passando o parâmetro, use @usuário (@botartigomsdn:) seguido de um número, que é o código do produto. Dê ENTER e aguarde o retorno do Auzre com os dados sobre o produto. Veja na figura 19 as várias solicitações feitas e seus devidos retornos.
Slack solicitando dados no BOT no Azure
Figura 19 – Slack solicitando dados no BOT no Azure
Agora que você já sabe o que e como usar o BOT, abra a sua mente e tente criar exemplos de como integrar o BOT aos conectores, afim de facilitar a vida de muitos usuários.

Conclusão

Integrar serviços armazenados em um servidor ou Azure diretamente com aplicações famosas como Slack, Skype e outras, é o caminho para disseminar as informações e serviços de forma simples, rápida e acessível de qualquer dispositivo. Portanto, estude o BOT e aplique o conhecimento ilustrado neste artigo.
Agradeço a oportunidade de poder compartilhar o conhecimento deste artigo. Qualquer dúvida e necessitando de treinamento, por favor me contate.

Sobre o Autor

Renato Haddad ( rehaddad@msn.com  – www.renatohaddad.com) é MVP, MS Regional Director, MCPD e MCTS, palestrante em eventos da Microsoft em diversos países, ministra treinamentos focados em produtividade com o VS.NET 2013/2015, ASP.NET Core, 4/5, Power BI, Entity Framework, Reporting Services, Universal Windows Platform. Visite o blog http://weblogs.asp.net/renatohaddad.