Jump to content
Fivewin Brasil

Existe uma forma de enviar "arquivos" para whatsapp


marcioe

Recommended Posts

Olá a todos os amigos
Existe uma forma de enviar "arquivos" para whatsapp
Vou explicar melhor 
em nosso sistema de imobiliaria tem a rotina de gerar boletos, blz usamos o acbr que gera o boleto certinho em uma pasta com o nome que queremos uma blz
Porem esse cliente envia os boletos pelo whatsapp, o que é uma realidade e uma coisa muito pratica para todos os envolvidos.

porem todo mes tem que abrir as pasta com os PDF dos boletos e arrastar para Zap de cada locatário que no nosso caso dá quase 300.

Teria uma forma de "automatizar" ou algum programa que faça isso...   

Agradeço aos amigos

 

Link to comment
Share on other sites

  • 6 months later...

Existe sem custo mensal nem limite de mensagens... segue

https://documenter.getpostman.com/view/4545782/SWTHbveC?version=latest#intro

Vc vincula o Whats do cliente na API e ele usa, logicamente respeitando as regras do Whats para SPAM etc, e consegue enviar arquivos etc.

Fiz uns videos e compartilhei um exemplo de como integrar (mas em outra linguagem) porém como é via GET e POST da pra fazer tranquilo em Harbour/Fivewin.

Não comprei a API mas tenho conhecidos q usam, ela esta ativa a 3 anos. No link abaixo vc encontra os vídeos, informações e o contato do criador da mesma (telefone dele) e tb manual de utilização.
Ele liberou um ENDPOINT e Token pra uso e esta funcionando aki nos testes

O bacana é q vc pode comprar a API e usar na tua carteira de clientes. A API estava com promoção até este final de semana, achei ela no fórum do ACBr a promoção era até dia 13/03 ai conversei com o Hendell criador e falei q não tinha conhecimento da mesma onde o mesmo estendeu a promoção até este final de semana.

https://wxdev.com.br/forum/index.php?/forum/20-dicas-e-truques/

Link to comment
Share on other sites

 

Fiz um classe em HARBOUR pra essa API e compartilhei no fórum do Toledo, vou compartilhar aki tb, caso alguém queira testar.

 

********************************************************************************	
function Exemplo_API_Whats
	LOCAL oWhats := TWhatsappAPI_WTS():New()

	oWhats:Situacao()
	oWhats:NivelBateria()
	oWhats:NrConectado()
	oWhats:EnviarMsg('55DDDCelularDestino', 'Teste *mensagem*')
	oWhats:EnviarMsg('55DDDCelularDestino', NIL, 'd:\documento.pdf') ; Inkey(2)
	oWhats:EnviarMsg('55DDDCelularDestino', NIL, 'd:\imagem.png')    ; Inkey(2)
	oWhats:End()
Quit()

********************************************************************************
#DEFINE httpGet  1
#DEFINE httpPost 2

********************************************************************************
CLASS TWhatsappAPI_WTS

		DATA sToken    INIT 'Token qdo vc adquirir ou pede pro Hendell pra testes'
		DATA sEndPoint INIT 'URL do seu ENDPOINT fica na tua estrutura, ou pede um pra testes'

		DATA sRet      INIT ''
		DATA hHash     INIT hb_Hash()
		DATA nMetodo   INIT 0  // 1 GET 2 POST

		METHOD ComunicaAPI()
		METHOD Situacao()
		METHOD Obter_QRCode()
		METHOD NrConectado()
		METHOD NivelBateria()
		METHOD EnviarMsg()
		METHOD MostraRetorno() INLINE PTAlert( 'Codigo..:;'+	PADC( hb_cStr(::hHash['codigo'],70)    ) +';' +;
													      'Mensagem:;'+  PADC( UPPER(ALLTRIM(hb_UTF8ToStr(hb_cStr(::hHash['mensagem'])))),70) +';' +;
													    	'Retorno.:;'+	PADC( hb_cStr(::hHash['retorno'],70)   ), aOk, vcroxo)

//		METHOD WhatsAPI_SetarWebhook() // essa parte nao fiz ainda q é a parte pra ler o retorno das mensagens

		Method End() INLINE Self := Nil
ENDCLASS

*******************************************************************************
METHOD Situacao() Class TWhatsappAPI_WTS
	Mensag("Consultando situacao da API...")
	::ComunicaAPI("/whatsapp/situacao", httpGet)

	If 'false' $ ::hHash['retorno']
		MsgInfo( "Nao conectado. Obtenha QRCode", 'Atenção' ) 
	Else
		MsgInfo( "Whatsapp ja esta conectado.", 'Atenção' ) 
	EndIf
Return  

*******************************************************************************
METHOD NivelBateria() Class TWhatsappAPI_WTS
	Mensag("Consultando nivel bateria")
	::ComunicaAPI("/whatsapp/bateria", httpGet)
	::MostraRetorno()
*******************************************************************************
METHOD NrConectado() Class TWhatsappAPI_WTS
	Mensag("Consultando Nr Conectado API...")
	::ComunicaAPI("/whatsapp/meunumero", httpGet)
	::MostraRetorno()
Return  
********************************************************************************
METHOD EnviarMsg(sContato, sMsg, sFilename) Class TWhatsappAPI_WTS
	LOCAL sURL 
	DEFAULT sMsg TO ''
	DEFAULT sFilename TO ''
	IF EMPTY(sFilename) .AND. EMPTY(sMsg)
		Alert('falta parametro')
		RETURN
	ENDIF
	IF EMPTY(sFilename)
		Mensag("Enviando mensagem de texto...")
		sURL := "/whatsapp/msg"
	ELSE
		Mensag("Enviando arquivo...")
		sURL := "/whatsapp/arquivo"
	ENDIF
	::ComunicaAPI(sURL, httpPost, sContato, sMsg, sFilename)
	::MostraRetorno()
********************************************************************************
Procedure Obter_QRCode() Class TWhatsappAPI_WTS
	Mensag("Obtendo QRCode...")
	::ComunicaAPIWhats('/whatsapp/qrcode', httpGet)

// ATENۂO O RETORNO AKI  RETORNADO O QRCODE EM Q VC TEM Q CARREGAR UM OBJETO GRAFICO ATRAVES DE UMA LIB GRAFICA FIVEWIN, XAILER, MINIGUI, HWGUI ETC
//     If 'obtido com sucesso' $ ::hHash['mensagem'] 
//			AKI CARREGA O OBJETO GRAFICO NA LIB Q VC USAR ::hHash['retorno'], { 20,20,-20,-20 }, "QR-CODE" 
//     Else
//        MsgInfo( "O Whatsapp esta reiniciando. Favor repetir a operação.", 'Atenção' )            
//     EndIf            
Return 
*------------------------------------------------------------------------------*

METHOD  ComunicaAPI(sURL, nMetodo, sContato, sMsg, sFilename) Class TWhatsappAPI_WTS
	LOCAL cMetodo, oWeb, sContent := ''
	TRY
		oWeb  := CreateObject( 'MSXML2.ServerXMLHTTP.6.0' ) 
	CATCH
		oWeb  := CreateObject( 'MSXML2.XMLHTTP' )
	END
	IF EMPTY(sContato) .AND. nMetodo = httpPost  
		Alert("Falta telefone")
		RETURN NIL
	END
	
	sURL    := ::sEndPoint + sURL  
	cMetodo := IIF( nMetodo == httpGet, 'GET', 'POST')
	oWeb:Open( cMetodo, sUrl,  .F.)  // True = pra vir o ResponseBody 
   oWeb:SetRequestHeader( 'token', ::sToken )

	IF nMetodo = httpPost
		oWeb:setRequestHeader( "contato", sContato )
		IF .NOT. EMPTY(sFilename)
			oWeb:setRequestHeader( "filename", SUBSTR(ALLTRIM( CharRem( "[<(-)>]*&@:", sFileName ) ),2))
			oWeb:setRequestHeader( "caption",  SUBSTR(ALLTRIM( CharRem( "[<(-)>]*&@:", sFileName ) ),2)) 
			
			sContent = hb_MemoRead(sFileName)
			sContent = hb_base64encode(sContent)
			sContent = hb_StrToUTF8(sContent)
			sContent = ALLTRIM( CharRem( CRLF, sContent ) )
		ELSE
			IF .NOT. EMPTY(sMsg)
				sContent = sMsg
			ENDIF
		END
      oWeb:setRequestHeader( "Content-Type", "text/plain; charset=UTF-8" )
	END
	TRY
		IF EMPTY(sContent)
			oWeb:Send(  )  
		ELSE
			oWeb:Send( sContent )  
		ENDIF
		::sRet := oWeb:ResponseBody()
		hb_jsondecode( ::sRet, @::hHash )
	CATCH ; END
  RETURN NIL

 

Link to comment
Share on other sites

Eu uso assim

Instale o WhatsZap desktop no computador, conecte usando o qrcode com celular e execute assim

WHATS_APP_MSN("17997121234","Ola, sou eu no Whats","C:\Users\GiovanyVecchi\AppData\Local\WhatsApp\WhatsApp.exe")

#Include "Fivewin.ch"

FUNCTION WHATS_APP_MSN(f_cNumeroWhats,f_cMensagem,f_cWhatsAppCaminho)
   Local lc_oShell, lc_cLink, lc_cFindExe := Space(1000)
   Local lc_hWndWhats, lc_nSecondsWhats := 0
   Local lc_lWhatsPresent := .F.
   
   f_cNumeroWhats     := AllTrim(f_cNumeroWhats)
   f_cMensagem        := AllTrim(f_cMensagem)
   f_cWhatsAppCaminho := Alltrim(f_cWhatsAppCaminho)
 
  lc_hWndWhats := FindWindow(,"WhatsApp")

  if hb_IsNil(lc_hWndWhats)
    lc_lWhatsPresent := .F.
  Else
    if lc_hWndWhats == 0
      lc_lWhatsPresent := .F.
    Else
      lc_lWhatsPresent := .T.
      BringWindowToTop( lc_hWndWhats )
      SysWait(.3)
      SendMessage(lc_hWndWhats,WM_SETFOCUS,0,0)
      SysWait(.2)
    EndIf
  EndIf  
   
  If !lc_lWhatsPresent
    WinExec(chr(34)+f_cWhatsAppCaminho+chr(34))
    hb_idleSleep(40)
  EndIf
  
  lc_cLink   := chr(34)+f_cWhatsAppCaminho+chr(34)+" https://api.whatsapp.com/send?phone=55"+TXT_CHAR_CLEAN(f_cNumeroWhats,{"(",")","-",".","+"})
  
  lc_oShell := tOleAuto():New( "WScript.Shell" )
  
  lc_oShell:run(lc_cLink,,.T.)
  hb_idleSleep(5)
  f_cMensagem := StrTran(f_cMensagem,CRLF,"+{ENTER}")
  lc_oShell:sendkeys(f_cMensagem)
  hb_idleSleep(1)
  lc_oShell:SendKeys("~")
  hb_idleSleep(1.5)

if !lc_lWhatsPresent

    lc_hWndWhats := FindWindow(,"WhatsApp")
  
    if hb_IsNil(lc_hWndWhats)
      lc_lWhatsPresent := .F.
    Else
      if lc_hWndWhats == 0
        lc_lWhatsPresent := .F.
      Else
        lc_lWhatsPresent := .T.
      EndIf
    EndIf  
  
  EndIf

Return lc_lWhatsPresent
 

 

Link to comment
Share on other sites

Olá Pessoal, boa tarde!

Procurem pela API WTSApi ou posso dar o contato do fornecedor para vocês ( não sei pode colocar aqui esse tipo de informação) fiz uma mensageria com essa API e envia qualquer tipo de documento ( JPEG, PDF, PNG ) e mensagens, você tem retorno do envio.Funciona tudo certinho. Acho que vale a pena. 

Att.,

Oliveiros Junior

 

 

Link to comment
Share on other sites

 

Existe sem custo mensal nem limite de mensagens... segue

https://documenter.getpostman.com/view/4545782/SWTHbveC?version=latest#intro

Vc vincula o Whats do cliente na API e ele usa, logicamente respeitando as regras do Whats para SPAM etc, e consegue enviar arquivos etc.

Fiz uns videos e compartilhei um exemplo de como integrar (mas em outra linguagem) porém como é via GET e POST da pra fazer tranquilo em Harbour/Fivewin.

Não comprei a API mas tenho conhecidos q usam, ela esta ativa a 3 anos. No link abaixo vc encontra os vídeos, informações e o contato do criador da mesma (telefone dele) e tb manual de utilização.
Ele liberou um ENDPOINT e Token pra uso e esta funcionando aki nos testes

O bacana é q vc pode comprar a API e usar na tua carteira de clientes. A API estava com promoção até este final de semana, achei ela no fórum do ACBr a promoção era até dia 13/03 ai conversei com o Hendell criador e falei q não tinha conhecimento da mesma onde o mesmo estendeu a promoção até este final de semana.

https://wxdev.com.br/forum/index.php?/forum/20-dicas-e-truques/

Essa aki q mostrei no vídeo @oliveiros e aproveitando obrigado pro compartilhar o trecho do teu código q permitiu criar a classe acima

É da WTSApi q falei, ai nos links q compartilhei tem os vídeos e contato do Hendell.

Link to comment
Share on other sites

 

Eu uso assim

Instale o WhatsZap desktop no computador, conecte usando o qrcode com celular e execute assim

WHATS_APP_MSN("17997121234","Ola, sou eu no Whats","C:\Users\GiovanyVecchi\AppData\Local\WhatsApp\WhatsApp.exe")


#Include "Fivewin.ch"

FUNCTION WHATS_APP_MSN(f_cNumeroWhats,f_cMensagem,f_cWhatsAppCaminho)
   Local lc_oShell, lc_cLink, lc_cFindExe := Space(1000)
   Local lc_hWndWhats, lc_nSecondsWhats := 0
   Local lc_lWhatsPresent := .F.
   
   f_cNumeroWhats     := AllTrim(f_cNumeroWhats)
   f_cMensagem        := AllTrim(f_cMensagem)
   f_cWhatsAppCaminho := Alltrim(f_cWhatsAppCaminho)
 
  lc_hWndWhats := FindWindow(,"WhatsApp")

  if hb_IsNil(lc_hWndWhats)
    lc_lWhatsPresent := .F.
  Else
    if lc_hWndWhats == 0
      lc_lWhatsPresent := .F.
    Else
      lc_lWhatsPresent := .T.
      BringWindowToTop( lc_hWndWhats )
      SysWait(.3)
      SendMessage(lc_hWndWhats,WM_SETFOCUS,0,0)
      SysWait(.2)
    EndIf
  EndIf  
   
  If !lc_lWhatsPresent
    WinExec(chr(34)+f_cWhatsAppCaminho+chr(34))
    hb_idleSleep(40)
  EndIf
  
  lc_cLink   := chr(34)+f_cWhatsAppCaminho+chr(34)+" https://api.whatsapp.com/send?phone=55"+TXT_CHAR_CLEAN(f_cNumeroWhats,{"(",")","-",".","+"})
  
  lc_oShell := tOleAuto():New( "WScript.Shell" )
  
  lc_oShell:run(lc_cLink,,.T.)
  hb_idleSleep(5)
  f_cMensagem := StrTran(f_cMensagem,CRLF,"+{ENTER}")
  lc_oShell:sendkeys(f_cMensagem)
  hb_idleSleep(1)
  lc_oShell:SendKeys("~")
  hb_idleSleep(1.5)

if !lc_lWhatsPresent

    lc_hWndWhats := FindWindow(,"WhatsApp")
  
    if hb_IsNil(lc_hWndWhats)
      lc_lWhatsPresent := .F.
    Else
      if lc_hWndWhats == 0
        lc_lWhatsPresent := .F.
      Else
        lc_lWhatsPresent := .T.
      EndIf
    EndIf  
  
  EndIf

Return lc_lWhatsPresent
 

 

Olá, testei essa sua função muito legal, mas... para mim só deu certo para envio de post para o contato selecionado no WhatsApp o numero que envie não recebeu a mensagem e sim a conversa em foco ?

HASA

Link to comment
Share on other sites

Então, a principio só tem numero, retirei o 55 ai não vai nada, e o caminho deve estar correto porque entra a mensagem só que na conversa em foco e não no zap que estou enviando tipo outro numero mesmo, mas... vou reforçar a leitura dos numeros do celular para ver se não estão indo caracteres especiais ocultos ou alto do tipo ok, agradeço.

Detalhe estou usando HARBOUR 3.2 com FINDWINDOWEX()

HASA

Link to comment
Share on other sites

 

Então, a principio só tem numero, retirei o 55 ai não vai nada, e o caminho deve estar correto porque entra a mensagem só que na conversa em foco e não no zap que estou enviando tipo outro numero mesmo, mas... vou reforçar a leitura dos numeros do celular para ver se não estão indo caracteres especiais ocultos ou alto do tipo ok, agradeço.

Detalhe estou usando HARBOUR 3.2 com FINDWINDOWEX()

HASA

Não seria "+55"  Sei que no whatsapp web, para conversar com alguém sem ter ele nos contatos deve-se mandar o "+55" antes do número..

 

Link to comment
Share on other sites

Tmb não consigui usar essa rotina, testei de varias maneiras... +55, 55, com DDD sem DDD, com zero antes do DDD sem zero... sempre acontece o que o amigo disse... envia a msg para o que esta em foco (aberto), ou seja, a rotina acima, não consegue buscar o celular e abrir a conversa para este....

Link to comment
Share on other sites

 

Tmb não consigui usar essa rotina, testei de varias maneiras... +55, 55, com DDD sem DDD, com zero antes do DDD sem zero... sempre acontece o que o amigo disse... envia a msg para o que esta em foco (aberto), ou seja, a rotina acima, não consegue buscar o celular e abrir a conversa para este....

Exato.

HASA

Link to comment
Share on other sites

Estranho, uso esta rotina em varios clientes e não tem problemas.

Voce pode deixar o whatsapp carregado que ele envia certinho.

Mostra pra mim a linha de comando, a variavel lc_cLink

lc_cLink   := chr(34)+f_cWhatsAppCaminho+chr(34)+" https://api.whatsapp.com/send?phone=55"+TXT_CHAR_CLEAN(f_cNumeroWhats,{"(",")","-",".","+"})
  
Link to comment
Share on other sites

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...