Dicas de .NET
Como criar e publicar uma Azure Function em C# para consultar o mercado de ações
Criando uma Azure Function para verificar preços de ações (C#)
Azure Functions em C#: consulte ações e envie por e-mail com Resend (Parte 1)
Crie uma Function em .NET com Timer Trigger, consuma a API Alpha Vantage e mande a cotação por e-mail
Neste passo a passo você vai criar uma Azure Function em C# (.NET) com Timer Trigger para consultar a cotação de ações na API Alpha Vantage e enviar um e-mail com o último fechamento usando o serviço Resend. O vídeo cobre a instalação das ferramentas, criação do projeto com Azure Functions Core Tools, configuração de secrets no local.settings.json, debug local com Azurite, parsing do JSON (System.Text.Json), montagem de HTML e envio via HTTP (sem SDK). Ao final, é mostrado o e-mail recebido com a cotação.
O que você vai aprender:
- Instalar e validar Azure Functions Core Tools e Azurite
- Criar Function App (.NET) e Timer Trigger (cron com segundos)
- Obter e configurar API Keys (Alpha Vantage e Resend) em local.settings.json
- Consumir a API TIME_SERIES_DAILY do Alpha Vantage
- Parsear JSON com propriedades "peculiares" (Time Series com datas e "4. close")
- Gerar HTML de e-mail e enviar via Resend com HttpClient (Authorization Bearer)
- Debug local no VS Code com breakpoints
- Entender cuidados: limites da API (25 req/dia na camada free), bounce de e-mails temporários
Pré-requisitos:
- Node.js e npm
- NET SDK 8 instalado
- VS Code com extensões C#, Azure Functions e Azure Resources
- Conta Resend com domínio verificado (para envio)
- Chave gratuita da Alpha Vantage
Comandos-chave usados:
- npm i -g azure-functions-core-tools@4
- npm i -g azurite
- azurite --version
- func --version
- dotnet --list-sdks
- func init nome --worker-runtime dotnet --target-framework net8.0
- func new --name FunctionName --template "Timer trigger"
- F5 (debug no VS Code)
Observações:
- Não versionar local.settings.json (contém segredos; já está no .gitignore por padrão)
- A Alpha Vantage free impõe limites (25 requisições/dia); evite intervalos muito curtos em testes
- Alguns provedores bloqueiam e-mails temporários; prefira um e-mail real verificado no domínio do Resend
---
### Capítulos
00:00:00 API Alpha Vantage e recursos na descrição
00:02:31 Checando .NET e alvo em .NET 8
00:02:54 Organização de pastas do projeto
00:03:17 Instalando Azure Functions Core Tools (npm)
00:04:37 Instalando o Azurite (Storage local)
00:06:23 Preços e camada gratuita do Azure Functions
00:07:36 dotnet new vs func init; criando o projeto
00:09:38 Verificando SDKs do .NET
00:12:22 Criando a Function (func new) com Timer Trigger
00:16:22 Cron com 6 campos (inclui segundos)
00:18:31 Escolha de ativos (Petrobras, Apple, etc.)
00:19:40 Extensões VS Code recomendadas
00:21:07 Configurando Resend e gerando API Key
00:23:02 Adicionando Resend API Key no local.settings.json
00:26:17 Gerando API Key gratuita (limites da Alpha Vantage)
00:30:22 Documentação da Alpha Vantage e endpoints
00:31:30 TIME_SERIES_DAILY e base URL
00:35:37 Async/await e EnsureSuccessStatusCode
00:36:21 Subindo o Azurite e preparando o debug
00:37:01 Ajustando o timer para 2 minutos
00:42:00 Parse com JsonDocument e extração do último fechamento
00:45:03 Construindo o HTML do e-mail
00:47:03 Generalizando para "stock" (dinâmico)
00:47:31 Método de envio de e-mail via Resend
00:48:27 Payload JSON e header Authorization (Bearer)
00:51:34 Debug do envio; conferindo valores
00:57:12 Serialização e SendAsync
00:58:20 Verificando logs do Resend
Azure Functions em C#: consulte ações e envie por e-mail com Resend (Parte 1)
Crie uma Function em .NET com Timer Trigger, consuma a API Alpha Vantage e mande a cotação por e-mail
Neste passo a passo você vai criar uma Azure Function em C# (.NET) com Timer Trigger para consultar a cotação de ações na API Alpha Vantage e enviar um e-mail com o último fechamento usando o serviço Resend. O vídeo cobre a instalação das ferramentas, criação do projeto com Azure Functions Core Tools, configuração de secrets no local.settings.json, debug local com Azurite, parsing do JSON (System.Text.Json), montagem de HTML e envio via HTTP (sem SDK). Ao final, é mostrado o e-mail recebido com a cotação.
O que você vai aprender:
- Instalar e validar Azure Functions Core Tools e Azurite
- Criar Function App (.NET) e Timer Trigger (cron com segundos)
- Obter e configurar API Keys (Alpha Vantage e Resend) em local.settings.json
- Consumir a API TIME_SERIES_DAILY do Alpha Vantage
- Parsear JSON com propriedades "peculiares" (Time Series com datas e "4. close")
- Gerar HTML de e-mail e enviar via Resend com HttpClient (Authorization Bearer)
- Debug local no VS Code com breakpoints
- Entender cuidados: limites da API (25 req/dia na camada free), bounce de e-mails temporários
Pré-requisitos:
- Node.js e npm
- NET SDK 8 instalado
- VS Code com extensões C#, Azure Functions e Azure Resources
- Conta Resend com domínio verificado (para envio)
- Chave gratuita da Alpha Vantage
Comandos-chave usados:
- npm i -g azure-functions-core-tools@4
- npm i -g azurite
- azurite --version
- func --version
- dotnet --list-sdks
- func init nome --worker-runtime dotnet --target-framework net8.0
- func new --name FunctionName --template "Timer trigger"
- F5 (debug no VS Code)
Observações:
- Não versionar local.settings.json (contém segredos; já está no .gitignore por padrão)
- A Alpha Vantage free impõe limites (25 requisições/dia); evite intervalos muito curtos em testes
- Alguns provedores bloqueiam e-mails temporários; prefira um e-mail real verificado no domínio do Resend
---
### Capítulos
00:00:00 API Alpha Vantage e recursos na descrição
00:02:31 Checando .NET e alvo em .NET 8
00:02:54 Organização de pastas do projeto
00:03:17 Instalando Azure Functions Core Tools (npm)
00:04:37 Instalando o Azurite (Storage local)
00:06:23 Preços e camada gratuita do Azure Functions
00:07:36 dotnet new vs func init; criando o projeto
00:09:38 Verificando SDKs do .NET
00:12:22 Criando a Function (func new) com Timer Trigger
00:16:22 Cron com 6 campos (inclui segundos)
00:18:31 Escolha de ativos (Petrobras, Apple, etc.)
00:19:40 Extensões VS Code recomendadas
00:21:07 Configurando Resend e gerando API Key
00:23:02 Adicionando Resend API Key no local.settings.json
00:26:17 Gerando API Key gratuita (limites da Alpha Vantage)
00:30:22 Documentação da Alpha Vantage e endpoints
00:31:30 TIME_SERIES_DAILY e base URL
00:35:37 Async/await e EnsureSuccessStatusCode
00:36:21 Subindo o Azurite e preparando o debug
00:37:01 Ajustando o timer para 2 minutos
00:42:00 Parse com JsonDocument e extração do último fechamento
00:45:03 Construindo o HTML do e-mail
00:47:03 Generalizando para "stock" (dinâmico)
00:47:31 Método de envio de e-mail via Resend
00:48:27 Payload JSON e header Authorization (Bearer)
00:51:34 Debug do envio; conferindo valores
00:57:12 Serialização e SendAsync
00:58:20 Verificando logs do Resend
Links
Azurite (Storage local)
https://github.com/Azure/Azurite
Azure Functions Core Tools
https://learn.microsoft.com/azure/azure-functions/functions-run-local
Timer trigger (cron)
https://learn.microsoft.com/azure/azure-functions/functions-bindings-timer
Alpha Vantage
Portal Azure
Preços Azure Functions
https://azure.microsoft.com/pt-pt/pricing/details/functions/#pricing
Resend Github
https://github.com/resend/resend-dotnet/
Resend Nuget
https://www.nuget.org/packages/Resend
Portal Resend
Instalar o AZ CLI
https://learn.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest
Email temporário
Comandos usados
az login
# criar o resource group...
az group create --name alpha-quote-rg --location eastus
# criar o storage account
az storage account create --name alphaquotestorage --location eastus --resource-group alpha-quote-rg --sku Standard_LRS
# criar a function app
az functionapp create --name alphaquotefuncapp --resource-group alpha-quote-rg --storage-account alphaquotestorage --consumption-plan-location eastus --runtime dotnet --functions-version 4 --os-type Windows
# testar se foi criado
az functionapp list --resource-group alpha-quote-rg --output table
# publicar a functionapp...
func azure functionapp publish alphaquotefuncapp
# publicar app settings...
az functionapp config appsettings set --name alphaquotefuncapp --resource-group alpha-quote-rg --settings "RESEND_API_KEY=seu_valor_aqui" "ALPHA_VANTAGE_API_KEY=seu_valor_aqui"
# deletar tudo o que foi criado...
az group delete --name alpha-quote-rg
# listar e exibir recursos
az resource list --resource-group alpha-quote-rg --output table
az resource show --name <nome> --resource-group alpha-quote-rg