Fala Pessoal, tudo certo?
Vi recentemente que algumas pessoas tentaram fazer a conexão das APIs do Blip com o Power BI e não obtiveram sucesso, então decidi fazer o meu próprio código e compartilhar com vocês.
Como integrar o API do Blip no Power BI
Para fazer o código funcionar, é preciso respeitar três regras do Power BI e da API do Blip (ou qualquer API Paginada):
- Na documentação da API do Blip não tem um tempo entre cada requisição, porém se você fizer muitas requisições por uma só ferramenta em um tempo muito curto você toma o famoso “Gateway Timeout”. Recomendo sempre colocar um time de 1seg ou mais entre cada requisição.
- Recomendo usar DataFlows para gerenciar seu banco a nível de “Atualização” ou fazer algum “Backend” em um DataWarehouse para guardar as requisições passadas como Log. Isso é devido ao Power BI só permitir você fazer 800 requisições (pelo menos nunca consegui fazer mais do que isso).
- Não faça uma requisição só que tenha muita informação.
Ex: API de contatos do Blip permite você retornar até 30k de contatos. Eu recomendo vocês fazerem em blocos de 500 - 1000 por vez e ir crescendo gradativamente esse número para adaptar a necessidade de vocês.
Para o código funcionar, eu divido ele em duas partes:
- Uma Função onde fica minha lógica da requisição;
- A consulta em si onde é feito as requisições. (Lembrando que o código estará em M query).
Função com a lógica de requisição
(skip as number)=>
let
url_comand = "/contacts?$skip="&Text.From(skip)&"&$take=100",
content= "{
""id"" : ""{{$guid}}"",
""to"": ""[email protected]"",
""method"" : ""get"",
""uri"" :"""& url_comand&"""}",
Source= Json.Document(
Web.Contents("https://drtigre.http.msging.net/commands",
tHeaders = /#"Content-type" = "application/json",#"Authorization" ="SUA KEY"],
Content = Text.ToBinary(content),Timeout=#duration(0, 5, 0, 0)])),
resource = Sourceoresource],
items = resource>items],
pagina = if List.Count(items) < 1 then null else items
in
pagina
Em vermelho circulado está a quantidade de contatos que serão retornados pela requisição. Testem a quantidade que se adapta melhor para a necessidade de vocês.
Tabela que importa os dados
let
Tickets = List.Generate(
()=>
each &t] <> null,
eachbp= >p] + 100 , t= Function.InvokeAfter(()=> FnContatoRoteador(p),#duration(0,0,0,2))],
each &t]
),
in
Tickets
Após montarem seus códigos, ficará aproximadamente assim:
Nessa segunda imagem em vermelho é usado o nome da função que você usou no primeiro bloco. Em azul é a quantidade inicial de contatos que a requisição vai pular no parâmetro “Skip” da API do Blip. Em cinza é o tempo entre cada requisição. No meu caso usei 2 segundos. E por último, em verde é a quantidade que cada requisição vai adicionando no parâmetro “Skip” da API.
Trabalhando o Power BI desta forma, eu consigo atualizar automaticamente todas as informações do meu Blip via DataFlow - mas só lembrem que existem limitações para esse tipo de requisição e tudo é questão de teste e ajustes dos parâmetros.
Esse código que está acima é um que eu uso hoje e me traz aproximadamente 100k de linhas de contatos do Blip requisitando em blocos de 100 contatos.
Qualquer dúvida, podem entrar em contato comigo que eu ficarei feliz em ajudar.
Meus contatos são esses:
Wesley Cairo
(21)98899-9684