Jump to content
Fivewin Brasil

Integração com WatsApp


Marca

Recommended Posts

Isso está no meio do sistema e e, posso postar aqui, mas não sei se vai ajudar ou atrapalhar, mas segue em anexo para ver se ajuda.

Nota: o colega João Alpande que desenvolveu tudo.

 

#include "hwgui_sagi.ch"

**********************
#DEFINE httpGet  1
#DEFINE httpPost 2
**********************
/* 
  MEGAAPI API WHATSAPP
  Manual: https://documenter.getpostman.com/view/7432615/Tzedh4uW#intro
  
  Acesso do painel:
  https://megaapi-painel.com.br/sec_Login/

*/
CLASS TWhatsapp_MegaAPI

		DATA cToken     INIT GET_PARAMETRO('SYG_TOKEN_WHATSAPP',.T.)
		DATA cEndPoint  INIT GET_PARAMETRO('SYG_URL_WHATSAPP',.T.)
       
		DATA cRet           INIT ''
		DATA hHash          INIT Hash()
		DATA cValue_qrcode  INIT ''
		DATA cFile_qrcode   INIT ''

  METHOD New(nIDUSER) CONSTRUCTOR
        METHOD PegaConfAPI(lMsg,nNr_Enviou)
		METHOD ComunicaAPI(oObj,cUrl, nMetodo, cContato, cMsg, cFilename,cTipo_Arq,cNomeArq)
		METHOD Status(oObj)
		METHOD OBTER_QRCODE(oObj)
		METHOD VerSeContatotemWhats(oObj)
		METHOD Reiniciar(oObj)
		METHOD Desconectar(oObj)
		METHOD EnviarMsg(oObj,cContato, cMsg, cFilename,lLink,lMsg,cNomeArq)

		Method End() INLINE Self := Nil
EndClass

**************************************
METHOD New(nIDUSER) CLASS TWhatsapp_MegaAPI
**************************************
LOCAL aSQL:={}

nIDUSER:=IF(nIDUSER=Nil,_pnIDUSER(),nIDUSER)

   ::cRet  := ''
   ::hHash := Hash()
   ::cToken     := GET_PARAMETRO('SYG_TOKEN_WHATSAPP',.T.)
   ::cEndPoint  := GET_PARAMETRO('SYG_URL_WHATSAPP',.T.)
           
   aSQL:=ES("select usa_api_whatsapp,   "+;
             "       syg_url_whatsapp,   "+;
             "       syg_token_whatsapp, "+;
             "       syg_numero_whatsapp "+;
             "from sagi_whatsapp_usuario "+;
             "where id_usuario="+CS(nIDUSER)+ " limit 1 ")
   IF LEN(aSQL) > 0
      IF ALLTRIM(aSQL[1,1]) <> 'DESABILITADO'
         ::cEndPoint:= aSQL[1,2]
         ::cToken   := aSQL[1,3]
      ENDIF
   ENDIF
 
return self

***********************************************************
METHOD PegaConfAPI(lMsg,nNr_Enviou) CLASS TWhatsapp_MegaAPI
***********************************************************
LOCAL aSQL:={}, lRET:=.F., lSemAPI:=.F.

lMsg:=IF(lMsg=Nil,.T.,lMsg)
nNr_Enviou:=IF(nNr_Enviou=Nil,'',nNr_Enviou)

aSQL:=ES("select usa_api_whatsapp,   "+;
          "       syg_url_whatsapp,   "+;
          "       syg_token_whatsapp, "+;
          "       syg_numero_whatsapp "+;
          "from sagi_whatsapp_usuario "+;
          "where id_usuario="+CS(_pnIDUSER())+ " limit 1 ")
IF LEN(aSQL) > 0
   IF ALLTRIM(aSQL[1,1]) <> 'DESABILITADO' .AND.  ALLTRIM(aSQL[1,2])<>'' .AND. ALLTRIM(aSQL[1,3])<>''  
      lRET:=.T. 
      nNr_Enviou:=aSQL[1,4]
   ENDIF
   IF ALLTRIM(aSQL[1,1]) = 'DESABILITADO'
      IF !EMPTY(GET_PARAMETRO('SYG_TOKEN_WHATSAPP',.T.)) .AND. !EMPTY(GET_PARAMETRO('SYG_URL_WHATSAPP',.T.))
         lRET:=.T.
      ENDIF
   ENDIF
ELSE
   IF !EMPTY(GET_PARAMETRO('SYG_TOKEN_WHATSAPP',.T.)) .AND. !EMPTY(GET_PARAMETRO('SYG_URL_WHATSAPP',.T.))
      lRET:=.T.
   ENDIF   
ENDIF
IF !lRET .AND. lMsg
   ShowMsg("Favor preencher os parâmetros do sistema ou no Usuário com o token e endereço URL para uso do WhatsApp, "+ HB_OsNewLine()+;
           "caso ainda não tenha contratado o serviço, favor entrar em contato com a Sygecom.")
ENDIF 
      
Return(lRET)

****************************************
METHOD Status(oObj) Class TWhatsapp_MegaAPI
****************************************
LOCAL lRET:=.T., cFileQRCode:='', lQrCode:=.F., lConectado:=.F.

IF !::PegaConfAPI()
   RETURN(.T.)
ENDIF 
                    
::ComunicaAPI(oObj,"/status", httpGet) 

IF VALTYPE(::hHash) != 'H'
   RETURN(.T.)
ENDIF

IF HHasKey( ::hHash, 'accountStatus' )
   IF ::hHash['accountStatus'] = .F.
      lRET:=.F.
      IF ALLTRIM(::hHash['state'])  = 'disconnected'  .OR. ALLTRIM(::hHash['state'])  = 'connecting'
         lQrCode:=.T.
      ENDIF
   ELSE
      IF ALLTRIM(::hHash['state'])  = 'connected'  .OR. ALLTRIM(::hHash['state'])  = 'connecting'
         lConectado:=.T.
      ENDIF                  
   ENDIF 
   
   IF lConectado
      cFileQRCode:=PEGA_ARQUIVO_SAGI(1075,.T.)
   ENDIF
   
   IF lQrCode
      cFileQRCode:=PEGA_ARQUIVO_SAGI(1076,.T.)
   ENDIF
   ::cFile_qrcode :=cFileQRCode  
   IF oObj <> Nil      
      oObj:oBitmap1:Hide()     
      IF lConectado .OR. lQrCode
         oObj:oBitmap1:nStretch:= 0
         oObj:oBitmap1:ReplaceBitmap( cFileQRCode , .F. )
      ENDIF
      oObj:oBitmap1:REFRESH()
      oObj:oBitmap1:SHOW()
   ENDIF
ENDIF               

      
Return(lRET)  

********************************************************
METHOD OBTER_QRCODE(oObj) Class TWhatsapp_MegaAPI
********************************************************
LOCAL cFileQRCode:='', lRET:=.T. , cQrCodeBase64:=''

IF !::PegaConfAPI()
   RETURN(.T.)
ENDIF

oObj:oRetorno:SETTEXT("Obtendo QRCode...")
oObj:oRetorno:REFRESH()
  
IF ::ComunicaAPI(oObj,'/qrcode', httpGet)=.F.
   lRET:=.F.
ENDIF   

IF lRET

   IF 'connected' = ALLTRIM(::hHash['state'])
      oObj:oRetorno:SETTEXT("Já existe um celular conectado à API. Use Desconectar para sair")
      oObj:oRetorno:REFRESH()   
      lRET:=.F.
   
   ELSEIF 'disconnected'= ALLTRIM(::hHash['state'])
      cQrCodeBase64:= STRTRAN(::hHash['qrCode'], "data:image/png;base64,")
       
      cFileQRCode:= SYG_GERAFILE()+".png"   
      MemoWrit( cFileQRCode , SYG_BASE64DECODE(cQrCodeBase64), .F. )
      ::cFile_qrcode :=cFileQRCode
   ELSE
      oObj:oRetorno:SETTEXT("Erro ao gerar QR CODE")
      oObj:oRetorno:REFRESH()   
      lRET:=.F.
   ENDIF
ENDIF  

Return(lRET)  

*******************************************************************
METHOD EnviarMsg(oObj,cContato, cMsg, cFilename,lLink,lMsg,cNomeArq) Class TWhatsapp_MegaAPI
*******************************************************************
LOCAL cUrl, lRET:=.T., nNr_Enviou:=''
LOCAL cRetErro:='',cTipoArq:='' , cExtensao:=''

DEFAULT cMsg      TO ''
DEFAULT cFilename TO ''

IF !::PegaConfAPI(lMsg,@nNr_Enviou)
   RETURN(.T.)
ENDIF

nNr_Enviou:=IF( ALLTRIM(nNr_Enviou)='' , GET_PARAMETRO('SYG_NUMERO_WHATSAPP',.T.) ,nNr_Enviou) 
 
lLink:=IF(lLink=Nil,.F.,lLink) 
lMsg :=IF(lMsg =Nil,.T.,lMsg )
cNomeArq:=IF(cNomeArq =Nil,'',cNomeArq )

IF EMPTY(cFilename) .AND. EMPTY(cMsg)
   IF lMsg
      showmsg('Digite Mensagem ou selecione arquivo para enviar.')
   ENDIF   
   RETURN(.F.)  
ENDIF

IF EMPTY(cFilename)
   IF lMsg
	  sygDialogo("Enviando mensagem de texto...")
   ENDIF
   cUrl := "/sendmessage"
ELSE
   cExtensao:= UPPER(Subs(cFilename,RAT(".",cFilename)+1))
   IF cExtensao= 'PDF'
      cTipoArq:='PDF'
   ELSEIF cExtensao='MP3'
      cTipoArq:='AUDIO'
   ELSEIF cExtensao='MP4'
      cTipoArq:='VIDEO'   
   ELSEIF cExtensao='PNG' .OR. cExtensao='BMP' .OR. cExtensao='JPG' .OR. cExtensao='JPEG'
      cTipoArq:='IMAGEM'
   ELSE
      cTipoArq:='LINK'
   ENDIF
   IF lMsg
	  sygDialogo("Enviando arquivo...")
   ENDIF
   cUrl := IF(lLInk ,"/sendfile", "/sendfilebase64")
ENDIF

IF ::ComunicaAPI(oObj,cUrl, httpPost, cContato, cMsg, cFilename,cTipoArq,cNomeArq,@cRetErro) = .F.
   lRET:=.F.
   IF lMsg
      Showmsg_Edit("Não Enviou a Mensagem."+hb_osnewline()+ALLTRIM(cRetErro) )
   ENDIF   
ELSE
   IF oObj = Nil // se não é na tela de teste dos parâmetros
      IF !EMPTY(cFilename)
         cMsg:='Enviou arquivo ' + cMsg
      ENDIF
      cMsg:= STRTRAN( cMsg , '\n' ,' ') 
      SYG_BEGINTRANSACTION()
       ES( " insert into sagi_log_whatsapp( nr_enviou, nr_recebeu, mensagem, data, hora, usuario, empresa) " + ;
           "      values ( " + CS( nNr_Enviou)  + "," + ;
                               CS( cContato)    + "," + ;
                               CS( cMsg )       + "," + ;
                               CS( My_Date() )  + "," + ;
                               CS( Time() )     + "," + ;
                               CS( _Usuario() ) + "," + ;
                               CS( _Filial() )  + ")"  )
       SYG_ENDTRANSACTION()
    ENDIF   
ENDIF  

IF lMsg
   sygDialogo()
ENDIF   
Return(lRET)  
   
********************************************
METHOD VerSeContatotemWhats(oObj) Class TWhatsapp_MegaAPI
********************************************
LOCAL cContato:='',cMsg:='',cFilename:='', lRET:=.T.

IF !::PegaConfAPI()
   RETURN(.T.)
ENDIF

WITH OBJECT oObj
     cContato:=  ALLTRIM(:oTel:VARGET())
     cMsg:=      ALLTRIM(:oTexto:VARGET())
     cFilename:= ALLTRIM(:oArq:VARGET())
END

IF ::ComunicaAPI(oObj, "/checknumber", httpPost, '55'+cContato,cMsg,cFilename) = .F.
   lRET:=.F.
ENDIF

Return(.t.)    

*****************************************
METHOD Reiniciar(oObj) Class TWhatsapp_MegaAPI
*****************************************
LOCAL lRET:=.T.

IF !::PegaConfAPI()
   RETURN(.T.)
ENDIF

IF ::ComunicaAPI(oObj,"/takeover", httpGet ) = .F.
   lRET:=.F.
ENDIF
IF lRET 
   oObj:oRetorno:SETTEXT("Desconectado")
   oObj:oRetorno:REFRESH()
   oOBJ:oBitmap1:Hide()
   oOBJ:oBitmap1:nStretch:= 0
   oOBJ:oBitmap1:ReplaceBitmap( PEGA_ARQUIVO_SAGI(1076,.T.) , .F. )
   oOBJ:oBitmap1:REFRESH()
   oOBJ:oBitmap1:SHOW()
ENDIF
 
Return(.t.)    

*******************************************
METHOD Desconectar(oObj) Class TWhatsapp_MegaAPI
*******************************************
LOCAL lRET:=.T.

IF !::PegaConfAPI()
   RETURN(.T.)
ENDIF

IF !::ComunicaAPI(oObj,"/logout", httpGet)
   lRET:=.F.
ENDIF
IF lRET  
   oObj:oRetorno:SETTEXT("Desconectado")  
   oObj:oRetorno:REFRESH()
   oOBJ:oBitmap1:Hide()
   oOBJ:oBitmap1:nStretch:= 0
   oOBJ:oBitmap1:ReplaceBitmap( PEGA_ARQUIVO_SAGI(1076,.T.) , .F. )
   oOBJ:oBitmap1:REFRESH()
   oOBJ:oBitmap1:SHOW()
ENDIF   

Return(lRET)    

***********************************************************************************************************************
METHOD ComunicaAPI(oObj,cUrl, nMetodo, cContato, cMsg, cFilename, cTipo_Arq,cNomeArq,cRetErro) Class TWhatsapp_MegaAPI
************************************************************************************************************************
LOCAL cMetodo, oWeb, sContent := '', lRET:=.T., cRETLINK:='' , cJSON:='', cRetorno:=''
LOCAL cExtensao:='' ,  lVerSeTemWhats:=.F. , lQrCode:=.F.

IF !::PegaConfAPI()
   RETURN(.T.)
ENDIF

cRetErro:=IF(cRetErro=Nil,'',cRetErro)
cNomeArq:=IF(cNomeArq=Nil,'',cNomeArq)
cTipo_Arq:=IF(cTipo_Arq=Nil,'PDF',cTipo_Arq)
IF oObj<> NIl
   cTipo_Arq:=ALLTRIM(oObj:oTipo_Arq:VARGET())
ENDIF

TRY
   oWeb := xhb_CreateObject("MSXML2.ServerXMLHTTP.6.0")
CATCH
   // NAO FAZ NADA
END

if oWeb=nil
   ShowMsg('Erro ao tentar realizar a consulta, favor verificar se as DLL usada para NFe está registradas')
   RETURN(.F.)
endif

IF EMPTY(cContato) .AND. nMetodo = httpPost  
  	showmsg("Falta telefone de destino")
  	RETURN(.F.)
ENDif

IF !EMPTY(GET_CONFIG_INI('Proxy','url',''))
   oWeb:SetProxy( 2, GET_CONFIG_INI('Proxy','url','')+":"+ALLTRIM(STR(GET_CONFIG_INI('Proxy','porta',0))))
   IF !EMPTY(GET_CONFIG_INI('Proxy','user',''))
      oWeb:setProxyCredentials(GET_CONFIG_INI('Proxy','url','')+"\\"+GET_CONFIG_INI('Proxy','user',''), GET_CONFIG_INI('Proxy','pass',''))
   ENDIF
ENDIF

IF cUrl = "/checknumber"
   lVerSeTemWhats:=.T.
ENDIF
IF ALLTRIM(cUrl) = '/qrcode'
   lQrCode:=.T.
ENDIF

cUrl    := ALLTRIM(::cEndPoint)  + ALLTRIM(cUrl)  +"?token=" + ALLTRIM(::cToken)
cMetodo := IIF( nMetodo == httpGet, 'GET', 'POST')

IF _SemSenha()='N' 
   showmsg_edit(cUrl)
ENDIF

TRY     
   //https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms760403(v%3Dvs.85)
   oWeb:setTimeouts(1000*60, 1000*60, 0, 0)  // PARAMETRO ZERO É INFINITO    
   oWeb:Open( cMetodo, cUrl,  .F.)  // True = pra vir o ResponseBody
   
CATCH
   ShowMSG('ERRO : Não conseguiu abrir o Web Service :'+Ole2TxtError() )
   RETURN(.F.)
END
 
IF nMetodo = httpPost
   oWeb:setRequestHeader( "Content-Type", "application/json" )
   IF lVerSeTemWhats
      cJSON:='{'+;
                '"phone": "' +ALLTRIM(cContato)+'"'+;
             '}'
   ELSE
      IF !EMPTY(cFilename)
         
         IF cTipo_Arq <> 'LINK'           
            sContent := MemoRead(cFilename)
         	sContent := SYG_BASE64ENCODE(sContent)
            sContent := Syg_Limpa(  ALLTRIM( sContent ) )
         ENDIF  
         cJSON:='{'+;
                '"phone": "' +ALLTRIM(cContato)+'",'

         cExtensao:= STRTRAN( LOWER(Subs(cFilename,RAT(".",cFilename)+1)), 'jpg' ,'jpeg')  
                 
         IF !EMPTY(cNomeArq)
            cNomeArq:= ALLTRIM(cNomeArq)+'.' 
         ELSE
            cNomeArq:= 'arquivo.'
         ENDIF  
         cNomeArq+= cExtensao

         IF cTipo_Arq = 'PDF'
            cJSON+= '"body": "'  +'data:application/pdf;base64,'+ALLTRIM(sContent)+'",'
         ELSEIF cTipo_Arq = 'IMAGEM'     
            cJSON+= '"body": "'  +'data:image/'+cExtensao+';base64,'+ALLTRIM(sContent)+'",'
         ELSEIF cTipo_Arq = 'AUDIO' 
            cJSON+= '"body": "'  +'data:audio/mpeg;base64,'+ALLTRIM(sContent)+'",'
         ELSEIF cTipo_Arq = 'VIDEO' 
            cJSON+= '"body": "'  +'data:video/mp4;base64,'+ALLTRIM(sContent)+'",' 
         ELSEIF cTipo_Arq = 'LINK'
            cJSON+= '"body": "'  +ALLTRIM(cFilename)+'",'             
         ENDIF     
         cJSON+=   '"filename":"'+ ALLTRIM(cNomeArq) +'",'+;
	            '"caption":"' +ALLTRIM(cMsg)+'"'+;
                   '}' 
    	ELSE
	      IF !EMPTY(cMsg)
            cJSON:='{'+;
                   '"phone": "' +ALLTRIM(cContato)+'",'+;
                   '"body": "'  +ALLTRIM(cMsg)+'"'+;
                   '}'
           
    	  ENDIF
      ENDIF
   ENDIF
ENDIF

TRY
   IF EMPTY(cJSON)
	  oWeb:Send()  
   ELSE
	  oWeb:Send( cJSON )  
   ENDIF
CATCH
   lRET:=.F.
END

IF _SemSenha()='N' .AND. !EMPTY(cJSON) 
   showmsg_edit('JSON: ' + cJSON)
ENDIF

IF lRET 
   DO WHILE oWeb:readyState <> 4
      millisec(500)
   ENDDO
   cRETLINK := oWeb:responseText
ENDIF

IF _SemSenha()='N' 
   showmsg_edit('RESPOSTA: ' + cRETLINK)
ENDIF

IF !EMPTY(cRETLINK)
   ::cRet := cRETLINK 
   hb_jsondecode( ::cRet, @::hHash )
            
   IF VALTYPE(::hHash) != 'H'
      cRetorno:='Algo deu errado, verifique Endereço/token da API'
      IF oObj<>Nil
         oObj:oRetorno:SETTEXT(cRetorno)
         oObj:oRetorno:REFRESH() 
      ENDIF        
      RETURN(.F.)
   ENDIF 
   
   IF len(::hHash)<0
      cRetorno:='Algo deu errado, verifique Endereço/token da API ou retorno vazio, tente novamente'
      IF oObj<>Nil
         oObj:oRetorno:SETTEXT(cRetorno)
         oObj:oRetorno:REFRESH() 
      ENDIF        
      RETURN(.F.)
   ENDIF 

   IF HHasKey( ::hHash, 'error' )
      cRetorno:="ERRO: "+ALLTRIM(::hHash['error']) 
      cRetErro:="ERRO: "+ALLTRIM(::hHash['error']) 
      lRET:=.F.
   ENDIF 
   IF !lQrCode
      IF HHasKey( ::hHash, 'accountStatus' )
         IF ::hHash['accountStatus']
            lRET:=.T.
         ELSE
            lRET:=.F.
            cRetErro:="ERRO: "+IF(HHasKey( ::hHash, 'message' ) ,  ALLTRIM(::hHash['message']),'')
         ENDIF  
      ENDIF
   ENDIF            
   IF lRET   
   
      cRetorno:= IF(HHasKey( ::hHash, 'state' )   ,  ALLTRIM(::hHash['state']),'') + ' ' +;  
                 IF(HHasKey( ::hHash, 'message' ) ,  ALLTRIM(::hHash['message']),'')
   ENDIF
ELSE
   RETURN(.F.)
ENDIF

IF oObj<>Nil
   oObj:oRetorno:SETTEXT(cRetorno)
   oObj:oRetorno:REFRESH()
ELSE
 //  showmsg_edit(cRetorno)
ENDIF

oWeb:=NIL

RETURN(lRET)



  

 

Link to comment
Share on other sites

  • 2 weeks later...

Pessoal. Bom dia

Somente para que outros não tenham o mesmo problema que eu tive aqui

A respeito desta Api do tal Handel pra os que pensam em utilizar que saibam que o suporte dele simplesmente inexiste. Estamos aguardando a pelo menos uns 20 dias uma situação que se consiga capturar os áudios enviados e o mesmo ficou de liberar e até hoje nada. Na semana passada alguns clientes que começaram a utilizar o módulo que utiliza a Api dele reclamaram de mensagens enviadas que simplesmente não chegam no cliente. Entramos em contato com os clientes que não receberam e se quer .JPG chega para estas pessoas. A resposta dele é que havia tido uma atualização e que isso resolveria o problema. Indaguei a ele sobre estas mensagens que não chegaram como eu faria pra saber quais não foram entregues e o mesmo respondeu que não tem o que fazer. Resumo. O cara vende um produto que não consegue dar suporte e que profissionalmente não atende com seriedade nossas necessidades.  Fica ai a Dica.

Link to comment
Share on other sites

Amigos,
Apenas API Oficiais realmente funcionam bem com whatszap. API(s) como essa da MEGA API não conseguem entregar todos os recursos que o APP disponibiliza e vc ainda corre o risco de ficar sem o serviço, pq toda vez que é descoberta a brecha através da qual essas API(s) não oficiais acessam o serviço, a empresa simplesmente derruba o serviço e todos os seus clientes vão ficar a ver navios... uma verdadeira dor de cabeça.

Link to comment
Share on other sites

1 hora atrás, vilian disse:

Amigos,
Apenas API Oficiais realmente funcionam bem com whatszap. API(s) como essa da MEGA API não conseguem entregar todos os recursos que o APP disponibiliza e vc ainda corre o risco de ficar sem o serviço, pq toda vez que é descoberta a brecha através da qual essas API(s) não oficiais acessam o serviço, a empresa simplesmente derruba o serviço e todos os seus clientes vão ficar a ver navios... uma verdadeira dor de cabeça.

Pois é Vilian. Este é o grande problema

Passei uma informação a meu cliente que não consegui cumprir. O Tal Handel citado ai inclusive agora bloqueou minha API mesmo eu tendo pago por ela. Procurarei meus direitos de alguma maneira e ainda bem que temos credibilidade com nossos clientes e explicamos +- isso no início para eles. Sendo que um cliente que não entende nada ainda vinculou o problema a mim.

 

Link to comment
Share on other sites

  • 2 months later...

Ola a todos,

Sei que essa conversa é de setembro e já faz alguns meses, mas só pra informar que eu também fiquei na mão com o Hendel e ele me deixou sem nenhum suporte, porem soube pela esposa dele que ele está hospitalizado e que um cara chamado Fabio vai atender. Eu não vou mais precisar pois já fiz com outra plataforma.

Link to comment
Share on other sites

3 horas atrás, hcunha disse:

Ola a todos,

Sei que essa conversa é de setembro e já faz alguns meses, mas só pra informar que eu também fiquei na mão com o Hendel e ele me deixou sem nenhum suporte, porem soube pela esposa dele que ele está hospitalizado e que um cara chamado Fabio vai atender. Eu não vou mais precisar pois já fiz com outra plataforma.

HCunha.

Esta esposa dele já matou o tal Hendel 3x ressuscitou outras 4 e ai por diante. Nada que venha deles acredite pôs simplesmente é mais uma história.

Link to comment
Share on other sites

Bom dia,

Também tivemos vários problemas com o Hendell.
Compramos a API e a Central dele em abril do ano passado, para atender a demanda de nossos clientes, e acabaram nos vencendo pelo cansaço.
Como disse o Marcelo, ele já morreu algumas vezes.
Com isso acabamos desenvolvendo nossa própria API REST, com integração de forma bem simples com o FiveWin.
Se alguém tiver interesse em usá-la é só entrar em contato (21) 9 9239-4998.  

Link to comment
Share on other sites

4 horas atrás, sygecom disse:

Tenho usado cada vez mais a MEGA API , está muito boa, nunca tivemos problemas e, tem bastante recurso

O Problema é em um momento como este gerarmos mais um custo ao cliente. Não sei ai na região de vcs mais por aqui está tudo muito parado.
Falar com o cliente em mais 100,00 150,00 reais a mais é praticamente um tiro no pé.

 

Link to comment
Share on other sites

@Marca

Acredito que precisa avaliar isso, que citou, crie boas ideias/soluções no seu software que justifique o cliente investir, na integração da MEGA tem um WEBHOOK, que você consegue deixar o cara inclusive falando no chat do sistema como se tivesse no whatsapp. Ainda acho que vale a pena

Link to comment
Share on other sites

  • 2 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...