Olá pessoal, hoje abordaremos um assunto bem legal, como enviar mensagens para o slack usando o protheus.
Mas primeiramente o que é o slack?
Saiba mais sobre isso no nosso post sobre a ferramenta clicando aqui.
Primeiros passos
Antes de iniciamos a configuração, temos que criar uma conta no slack, para isso acesse aqui.
Após termos criados a nossa conta, vamos criar um novo token de autorização dentro do slack, com esse token vamos postar as mensagens enviadas do protheus para o nosso canal, para isso siga as etapas abaixo.
- Crie um novo aplicativo na app management page;
- Clique no botão create a new app, seremos redirecionados a pagina de configuração.
- Informe um nome para seu aplicativo ex. ERPProtheus
- Seleciona o workspace que esse app pertencerá]
-
Criar Webhooks de entrada para o Slack,
- Na pagina de seus aplicativos, selecionar o novo app criado.
- Seleciona a opção, adicionar novas funcionalidades.
- Seleciona a opção webhook de entrada e a ative.
- Clique em adicionar novo webhook ao workspace(onde vamos informar em que canal serão enviadas as informações)
- Nesse momento o sistema ira gerar uma URL única, copie e guarde, vamos precisar dela no nosso fonte.
-
resumindo o webhooks de entrada são um jeito simples de compartilhar informações de fontes externas com seu workspace. Mais informações aqui.
Após a criação do nosso app no slack, temos que configurar o protheus para enviar informações, abaixo um exemplo para ler o errorl.log e enviar os novos erros para o slack, altere e use da maneira que for sua necessidade.
#Include "Protheus.ch" #INCLUDE "fileio.ch" /*/{Protheus.doc} SPSLACK (long_description) @type Function @author user @since 22/01/2020 @version version @param param_name, param_type, param_descr @return return_var, return_type, return_description @example (examples) @see (links_or_references) /*/ user Function SPSLACK() Local cUrl := ''//TODO insira aqui a sua url do slack, similar a https://hooks.slack.com/services/TSN3MSKFD/BTG0YNAMQ/M1bSfoBKUEyUX4uc7DezlC Local nTimeOut := 120 Local aHeadOut := {} Local cHeadRet := "" Local sPostRet := "" Local _ni := 0 Local aMsg := u_FSLERLOG() //get messages //aadd(aHeadOut,'User-Agent: Mozilla/4.0 (compatible; Protheus '+GetBuild()+')') aadd(aHeadOut,'Content-type: application/json') For _ni := 1 to len(aMsg) sPostRet := HttpPost(cUrl,,'{"text":"'+aMsg[_ni]+'"}',nTimeOut,aHeadOut,@cHeadRet) next if !empty(sPostRet) conout("HttpPost Ok") varinfo("WebPage", sPostRet) else conout("HttpPost Failed.") varinfo("Header", cHeadRet) Endif Return .T. /*/{Protheus.doc} User Function FSLERLOG (long_description) @type Function @author user @since 22/01/2020 @version version @param param_name, param_type, param_descr @return return_var, return_type, return_description @example (examples) @see (links_or_references) /*/ User Function FSLERLOG(cLogFile) Local aMensagem as Array Local cDelimt as Character default cLogFile := '\system\error.log' aMensagem := {} cDelimt := 'SP_JA_ENVIADO' nHdl := fOpen(cLogFile, FO_READWRITE + FO_SHARED) //fopen('\sigaadv\error.log' , FO_READWRITE + FO_SHARED ) If nHdl == -1 IF FERROR()== 516 ALERT("Feche a planilha que gerou o arquivo.") EndIF EndIf //+---------------------------------------------------------------------+ //| Verifica se foi poss�vel abrir o arquivo | //+---------------------------------------------------------------------+ If nHdl == -1 cMsg := "O arquivo de nome "+cLogFile+" nao pode ser aberto! Verifique os parametros." MsgAlert(cMsg,"Atencao!") Return Endif //+---------------------------------------------------------------------+ //| Posiciona no Inicio do Arquivo | //+---------------------------------------------------------------------+ FSEEK(nHdl,0,0) //+---------------------------------------------------------------------+ //| Traz o Tamanho do Arquivo TXT | //+---------------------------------------------------------------------+ nTamArq:=FSEEK(nHdl,0,2) //+---------------------------------------------------------------------+ //| Posicona novamemte no Inicio | //+---------------------------------------------------------------------+ FSEEK(nHdl,0,0) //+---------------------------------------------------------------------+ //| Fecha o Arquivo | //+---------------------------------------------------------------------+ fClose(nHdl) FT_FUse(cLogFile) //abre o arquivo FT_FGOTOP() //posiciona na primeira linha do arquivo nTamLinha := Len(FT_FREADLN()) //Ve o tamanho da linha FT_FGOTOP() //+---------------------------------------------------------------------+ //| Verifica quantas linhas tem o arquivo | //+---------------------------------------------------------------------+ nLinhas := nTamArq/nTamLinha nCont := 0 lAchou := .F. lAchou2 := .F. aDados:={} While !FT_FEOF() //Ler todo o arquivo enquanto n�o for o final dele //Se achou o delimetador, zera array pq as inform��es ja foram enviadas If cDelimt $ FT_FREADLN() aMensagem := {} lAchou2 := .T. Endif //rava o erro para ser postado no Slack If 'THREAD ERROR' $ FT_FREADLN() aAdd(aMensagem," ") //Adcionar uma nova mensagem lAchou := .T. Endif If lAchou .and. nCont <= 8 //gravar 8 linhas aMensagem[len(aMensagem)] += FT_FREADLN() +CHR(13)+CHR(10)+CHR(13)+CHR(10) nCont ++ else lAchou := .F. nCont := 0 Endif clinha := FT_FREADLN() conout(clinha) FT_FSKIP() EndDo FT_FUse() fClose(nHdl) If !lAchou2 nHdl := fOpen(cLogFile, FO_READWRITE + FO_SHARED) //fopen('\sigaadv\error.log' , FO_READWRITE + FO_SHARED ) //add delimetador FSeek(nHdl, 0, FS_END) // Posiciona no fim do arquivo fWrite(nHdl,cDelimt + chr(13)+chr(10) ) fClose(nHdl) Endif Return aMensagem
Esse e outros exemplos você encontra em nosso git.
Até a próxima
0 comentário