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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | #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