Clipper On Line • Ver Tópico - Comunicação SOAP
Página 1 de 2

Comunicação SOAP

MensagemEnviado: 26 Jul 2019 13:44
por JoséQuintas
Lembram que falei que a programação imita as "coisas humanas" ?

A comunicação SOAP...
- endereço de internet pra entrega
- informações na conexão
- ENVELOPE com o XML dentro
- Cada webservice tem seus detalhes
- etc

Complicado??????
Nunca viu isso antes???
Deixe eu lembrar

envelope.png


Se preencher errado, os correios não entregam.
Se preencher o SOAP errado.... também

Se não colocar a carta dentro de um envelope não vai...
No SOAP também...

A carta precisa destinatário?
O SOAP também.

A carta precisa selos?
O SOAP também precisa algo equivalente a selos.

Se for internacional, precisa escrever no idioma do país que vai receber....

Interessante né.....

Acostumamos a pensar igual computador, comparando qualquer coisa com o uso do computador, com alguma coisa que conhecemos no computador.
Por isso, às vezes, quem nunca mexeu acaba entendendo melhor, apenas porque usa outra referência como ponto de partida.

O lado chato é ....
Só quem aprendeu consegue saber se realmente dá pra comparar com alguma coisa humana...
E nem sempre quem aprendeu consegue enxergar isso.

Comecei a pensar em programação por esse ângulo, comparando com alguma coisa da vida humana.
E não é que muita coisa se parece.... e até facilita pensar de um jeito humano...

o XML da nota vai para o webservice dentro de um envelope.... e pra cada coisa vai para um endereço diferente....
Uia.... é igual uma carta do correio, pra mandar pra locais diferentes !!!!

Precisa passar a SOAP Action !!!
Dá pra comparar com uma empresa, pra ir pra um departamento específico !!!

Webservice é complicado ?
É tão complicado quanto enviar uma carta pelos correios !!!!

Comunicação SOAP

MensagemEnviado: 26 Jul 2019 13:58
por JoséQuintas
Agora vamos falar de sefazclass, ou de componentes pra NFE.....

O que eles tem em comum?
Eles são como uma agência dos correios.

Eles tem a lista dos endereços, e a lista dos departamentos.
E sabem de algumas regras pra "entregar a carta" em cada lugar.

Uau.... matei os componentes de NFE.... kkk
Mas é praticamente isso, é simples assim.

Porque às vezes uma UF não funciona, ou novos serviços precisam de alteração?
Ué... porque pode ter alterado o endereço do destinatário, ou porque para aquele "novo país/local" tem algum detalhe a mais a ser colocado, talvez um "selo" a mais na carta.

Pensando assim, a gente até fica mais tranquilo em fazer alterações, ou quando não funciona, porque estamos certos de que é só acertar aquele detalhezinho.
É diferente de pensar em algo complexo, desconhecido, que parece ser de outro mundo.

Cheguei a comentar aqui que isso da Sefaz seria parecido com enviar email.
Pensando bem, é mais parecido com enviar uma carta.
E às vezes essa carta tem resposta, e às vezes não.

Comunicação SOAP

MensagemEnviado: 26 Jul 2019 14:08
por JoséQuintas
Autorizar uma nota.....
Envia o XML... pega o recibo
Depois consulta o recibo... pega o resultado

Igual uma carta registrada.
Você envia a carta, e recebe o protocolo de recebimento da carta.
Depois envia outra carta perguntando qual o resultado da nota que enviou, mostrando o protocolo de recebimento que tem em mãos.
E aí sim... recebe o resultado se foi autorizada ou não.

É igual a enviar carta ou não?

Nota:
De vez em quando me vém essa "inspiração" pra explicar certas coisas... acho tão interessante que posto por aqui.

Lembram que comentei:
Simplificar fontes não altera somente os fontes, altera nossa cabeça.
Talvez isso tenha vindo como efeito colateral, de "descomplicar" os fontes, e foi descomplicando a cabeça.

Comunicação SOAP

MensagemEnviado: 01 Ago 2019 22:43
por sygecom
Zé,
O problema é quando os correios estão de greve e ninguém entrega a carta, não responde nada, a gente fica pergunta o que está acontecendo, até que 3 horas depois sai a noticia em outro lugar qualquer que eles estão de greve e, pedem para você usar outros métodos de envio de carta como contingência.

E quando você envia a carta e os correios dizem que estão com carta e ainda vão entregar uma resposta para você, mas isso já se passou 6 meses e ainda está em processamento, eles devem ter perdido a carta e não sabem como vão nos responder, tenho cliente com nota em processamento desde o inicio do ano, quando deu uma pane e ativaram o contingência.

Comunicação SOAP

MensagemEnviado: 01 Ago 2019 23:15
por JoséQuintas
Não deixa de ser parecido... sua carta tá lá no meio de milhares... sem previsão de encontrar kkkk
E se tá de greve... tá de greve... a carta fica parada...
Continua valendo a comparação.

Só não tem a opção de levar pessoalmente na Sefaz....

Comunicação SOAP

MensagemEnviado: 03 Ago 2019 07:07
por gilbertosilverio
Ola Quintas,

Achei bem didático tua postagem, fácil de entender, mais onde eu enrosco e em saber qual o endereço que devo enviar.

Estou tentando baixar um xml de cotação, a empresa me passou um XML para integração , e minha duvida e se este XML faz parte da conexão ou somente devo usar partes dele.

Ja tentei de todas as maneira entender como isso funciona, mais sou burro demais, pois não vai...

Por favor, baseado neste XML de integração, como devo configurar o "ENDEREÇO DE ENVIO" (casa do cara...kkkk), e aqui que me perco, nunca sei o que e o inicio, com configurar a rotina de envio.

<?xml version="1.0" encoding="UTF-8"?>
<con:soapui-project id="1bcfb632-35f9-48cd-ad67-48bb533f13de" activeEnvironment="Default" name="Integração Fornecedor - HOMOLOGAÇÃO" resourceRoot="" soapui-version="5.2.0" abortOnError="false" runType="SEQUENTIAL" xmlns:con="http://eviware.com/soapui/config"><con:settings/><con:interface xsi:type="con:WsdlInterface" id="5403d6bb-cfd2-40ea-ba6f-efe83186f396" wsaVersion="NONE" name="IWSFornecedorCotacaoPortBinding" type="wsdl" bindingName="{http://cotacao.fornecedores.client.webService.apoio.com.br/}IWSFornecedorCotacaoPortBinding" soapVersion="1_1" anonymous="optional" definition="http://homologacao.apoiocotacoes.com.br/app/fornecedores/WSFornecedores?wsdl" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><con:settings/><con:definitionCache type="TEXT" rootPart="http://homologacao.apoiocotacoes.com.br/app/fornecedores/WSFornecedores?wsdl"><con:part><con:url>http://homologacao.apoiocotacoes.com.br/app/fornecedores/WSFornecedores?wsdl</con:url><con:content><![CDATA[<!--Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.3-b01-.-->
<!--Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.3-b01-.-->
<definitions targetNamespace="http://cotacao.fornecedores.client.webService.apoio.com.br/" name="WSFornecedorCotacaoService" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://cotacao.fornecedores.client.webService.apoio.com.br/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/">
  <types/>
  <message name="post">
    <part name="arg0" type="xsd:string"/>
    <part name="arg1" type="xsd:string"/>
    <part name="arg2" type="xsd:string"/>
    <part name="arg3" type="xsd:string"/>
    <part name="arg4" type="xsd:string"/>
  </message>
  <message name="postResponse">
    <part name="return" type="xsd:string"/>
  </message>
  <message name="request">
    <part name="arg0" type="xsd:string"/>
    <part name="arg1" type="xsd:string"/>
    <part name="arg2" type="xsd:string"/>
    <part name="arg3" type="xsd:string"/>
  </message>
  <message name="requestResponse">
    <part name="return" type="xsd:string"/>
  </message>
  <portType name="IWSFornecedorCotacao">
    <operation name="post" parameterOrder="arg0 arg1 arg2 arg3 arg4">
      <input wsam:Action="http://cotacao.fornecedores.client.webService.apoio.com.br/IWSFornecedorCotacao/postRequest" message="tns:post"/>
      <output wsam:Action="http://cotacao.fornecedores.client.webService.apoio.com.br/IWSFornecedorCotacao/postResponse" message="tns:postResponse"/>
    </operation>
    <operation name="request" parameterOrder="arg0 arg1 arg2 arg3">
      <input wsam:Action="http://cotacao.fornecedores.client.webService.apoio.com.br/IWSFornecedorCotacao/requestRequest" message="tns:request"/>
      <output wsam:Action="http://cotacao.fornecedores.client.webService.apoio.com.br/IWSFornecedorCotacao/requestResponse" message="tns:requestResponse"/>
    </operation>
  </portType>
  <binding name="IWSFornecedorCotacaoPortBinding" type="tns:IWSFornecedorCotacao">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/>
    <operation name="post">
      <soap:operation soapAction=""/>
      <input>
        <soap:body use="literal" namespace="http://cotacao.fornecedores.client.webService.apoio.com.br/"/>
      </input>
      <output>
        <soap:body use="literal" namespace="http://cotacao.fornecedores.client.webService.apoio.com.br/"/>
      </output>
    </operation>
    <operation name="request">
      <soap:operation soapAction=""/>
      <input>
        <soap:body use="literal" namespace="http://cotacao.fornecedores.client.webService.apoio.com.br/"/>
      </input>
      <output>
        <soap:body use="literal" namespace="http://cotacao.fornecedores.client.webService.apoio.com.br/"/>
      </output>
    </operation>
  </binding>
  <service name="WSFornecedorCotacaoService">
    <port name="IWSFornecedorCotacaoPort" binding="tns:IWSFornecedorCotacaoPortBinding">
      <soap:address location="http://homologacao.apoiocotacoes.com.br:80/app/fornecedores/WSFornecedores"/>
    </port>
  </service>
</definitions>]]></con:content><con:type>http://schemas.xmlsoap.org/wsdl/</con:type></con:part></con:definitionCache><con:endpoints><con:endpoint>http://homologacao.apoiocotacoes.com.br:80/app/fornecedores/WSFornecedores</con:endpoint></con:endpoints><con:operation id="8280406c-b58f-4215-ba01-37658633a58f" isOneWay="false" action="" name="post" bindingOperationName="post" type="Request-Response" inputName="" receivesAttachments="false" sendsAttachments="false" anonymous="optional"><con:settings/><con:call id="bbd6ec41-c699-45df-9ebf-95822afd968a" name="Request 1"><con:settings/><con:encoding>UTF-8</con:encoding><con:endpoint>http://homologacao.apoiocotacoes.com.br:80/app/fornecedores/WSFornecedores</con:endpoint><con:request><![CDATA[<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cot="http://cotacao.fornecedores.client.webService.apoio.com.br/">
   <soapenv:Header/>
   <soapenv:Body>
      <cot:post>
         <arg0>?</arg0>
         <arg1>?</arg1>
         <arg2>?</arg2>
         <arg3>?</arg3>
         <arg4>?</arg4>
      </cot:post>
   </soapenv:Body>
</soapenv:Envelope>]]></con:request><con:wsaConfig mustUnderstand="NONE" version="200508" action="http://cotacao.fornecedores.client.webService.apoio.com.br/IWSFornecedorCotacao/postRequest"/></con:call></con:operation><con:operation id="c73e15e7-2a6d-43ab-b5a5-731389cb4db0" isOneWay="false" action="" name="request" bindingOperationName="request" type="Request-Response" inputName="" receivesAttachments="false" sendsAttachments="false" anonymous="optional"><con:settings/><con:call id="3cf63423-9243-4f8f-ae8b-b02dbc99e126" name="Buscar Cotação por ID"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers">&lt;xml-fragment/></con:setting></con:settings><con:encoding>UTF-8</con:encoding><con:endpoint>http://homologacao.apoiocotacoes.com.br:80/app/fornecedores/WSFornecedores</con:endpoint><con:request><![CDATA[<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cot="http://cotacao.fornecedores.client.webService.apoio.com.br/">
   <soapenv:Header/>
   <soapenv:Body>
      <cot:request>
         <arg0>?</arg0>
         <arg1>?</arg1>
         <arg2>?</arg2>
         <arg3>?</arg3>
      </cot:request>
   </soapenv:Body>
</soapenv:Envelope>]]></con:request><con:credentials><con:authType>No Authorization</con:authType></con:credentials><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:wsaConfig mustUnderstand="NONE" version="200508" action="http://cotacao.fornecedores.client.webService.apoio.com.br/IWSFornecedorCotacao/requestRequest"/><con:wsrmConfig version="1.2"/></con:call><con:call id="65e01ac6-ed05-45e7-8e8f-425cb80a50c3" name="Buscar Cotação por DT_BEGIN"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers">&lt;xml-fragment/></con:setting></con:settings><con:encoding>UTF-8</con:encoding><con:endpoint>http://homologacao.apoiocotacoes.com.br:80/app/fornecedores/WSFornecedores</con:endpoint><con:request><![CDATA[<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cot="http://cotacao.fornecedores.client.webService.apoio.com.br/">
   <soapenv:Header/>
   <soapenv:Body>
      <cot:request>
         <arg0>cfernandesws</arg0>
         <arg1>qetuo</arg1>
         <arg2>WGG</arg2>
         <arg3>1234</arg3>
      </cot:request>
   </soapenv:Body>
</soapenv:Envelope>]]></con:request><con:credentials><con:authType>No Authorization</con:authType></con:credentials><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:wsaConfig mustUnderstand="NONE" version="200508" action="http://cotacao.fornecedores.client.webService.apoio.com.br/IWSFornecedorCotacao/requestRequest"/><con:wsrmConfig version="1.2"/></con:call></con:operation></con:interface><con:properties/><con:wssContainer/><con:oAuth2ProfileContainer/><con:sensitiveInformation/></con:soapui-project>


O pessoal do suporte da APOIO, me passou que precisa chegar la este resquet, para pegar o XML de retorno da cotação
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cot="http://cotacao.fornecedores.client.webservice.apoio.com.br/">
   <soapenv:Header/>
   <soapenv:Body>
      <cot:request>
         <usuario>USUARIO</usuario>
         <senha>SENHA</senha>
         <operacao>WGG</operacao>
         <parametros>DT_BEGIN=02/08/2019 17:18:56;DT_END=02/08/2019 17:28:56;LAYOUT=WG;ISO=0</parametros>
      </cot:request>
   </soapenv:Body>
</soapenv:Envelope>


Se você puder me ajudar, preciso aprender como isso funciona, pois já tentei de tudo e não vai...

Grato.

Comunicação SOAP

MensagemEnviado: 03 Ago 2019 07:38
por JoséQuintas
gilbertosilverio escreveu:Achei bem didático tua postagem, fácil de entender, mais onde eu enrosco e em saber qual o endereço que devo enviar.


Quer enviar e não sabe o endereço.
Liga lá e pergunta.

Comunicação SOAP

MensagemEnviado: 03 Ago 2019 07:43
por gilbertosilverio
Ola, Quintas,

Muito Obrigado pela ajuda, vou ligar...

Comunicação SOAP

MensagemEnviado: 04 Ago 2019 10:13
por gilbertosilverio
Ola, Quintas,

Baixei tua SEFAZCLASS, para tentar entender como devo usar as TAGs do XML que postei aqui, e ao tentar compilar das esse erro.

Tirei o -w3 e passou. Como e so pra teste mesmo, vai que vai...

Comunicação SOAP

MensagemEnviado: 04 Ago 2019 10:56
por JoséQuintas
Para teste pode incluir manualmente, e pra definitivo mais prático colocar no harbour/bin/hbmk.hbc
Indicar pasta de sefazclass.hbc

-lpathsefazclass.hbc

---harbour\bin\hbmk.hbc---
libpaths=pathsefazclass.hbc

Comunicação SOAP

MensagemEnviado: 04 Ago 2019 11:04
por JoséQuintas
Só voltando ao "endereço".
Geralmente ele é o ponto de partida, às vezes é a única referência que temos.
Como exemplo, da NFE, no portal da NFE:

nfe.png

Comunicação SOAP

MensagemEnviado: 04 Ago 2019 11:10
por JoséQuintas
E dependendo do tipo de webservice, o próprio webservice já mostra uma espécie de manual, automaticamente.

nfe.png


A partir do endereço, podemos até usar a ferramenta SOAPUI pra ajudar a criar alguma coisa de teste.
Então... o endereço do webservice acaba sendo o ponto de partida mesmo.

E a empresa pode ter endereços diferentes para teste e para produção, então, raramente isso consta no XML.

Comparando com a carta....
O XML vai dentro da carta... falta saber o que vai preencher do lado de fora, o endereço do destinatário.

Comunicação SOAP

MensagemEnviado: 06 Ago 2019 09:30
por gilbertosilverio
Ola Quintas,

Quero te agradecer, pelas dicas, pois consegui entender como esse negocio funciona.

Para quem precisar, baseado no exemplos do fórum que o Quintas e que outros postaram, e pelo meu método infalível, de tentativa e erro, fica aqui a comunicação da apoio.

FUNCTION EnviaSOAP()
   LOCAL oServer, cXmlEnvio, cRetorno, cUrl, cHost

   PRIVATE cXml      :="C:\NFE\cXML.XML"
   PRIVATE ArquivoXml:="C:\NFE\TESTASOAP.XML"

   if hwg_msgyesno([Enviar]) = .t.

      cUrl  := "http://homologacao.apoiocotacoes.com.br/app/fornecedores/WSFornecedores?wsdl"
      cHost := "http://cotacao.fornecedores.client.webService.apoio.com.br"

      cXmlEnvio :=[<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cot="http://cotacao.fornecedores.client.webService.apoio.com.br/">]
      cXmlEnvio +=   [<soapenv:Header/>]
      cXmlEnvio +=   [<soapenv:Body>]
      cXmlEnvio +=      [<cot:request>]
      cXmlEnvio +=         [<usuario>USUARIO</usuario>]
      cXmlEnvio +=         [<senha>SENHA</senha>]
      cXmlEnvio +=         [<operacao>WGG</operacao>]
      cXmlEnvio +=         [<parametros>DT_BEGIN=06/08/2019 07:50:00;DT_END=06/08/2019 07:59:00;LAYOUT=WG;ISO=0</parametros>]
      cXmlEnvio +=      [</cot:request>]
      cXmlEnvio +=   [</soapenv:Body>]
      cXmlEnvio +=[</soapenv:Envelope>]

Hb_MemoWrit( cXML, cXmlEnvio)

//HWG_MSGINFO(STR(LEN(cXmlEnvio)))

         oServer := win_OleCreateObject( "MSXML2.ServerXMLHTTP.6.0" )

         oServer:Open( "POST", cUrl, .F. )
       //oServer:SetRequestHeader( "Accept-Encoding", [gzip,deflate] )
         oServer:SetRequestHeader( "Content-Type",   [text/xml;charset=UTF-8])
       //oServer:SetRequestHeader( "SOAPAction",     [request] )
         oServer:SetRequestHeader( "Content-Length", [407] )
       //oServer:SetRequestHeader( "Host:",          cHost )
         oServer:SetRequestHeader( "Connection",     [Keep-Alive])
         oServer:SetRequestHeader( "User-Agent",     [Apache-HttpClient/4.1.1 (java 1.5)])
         oServer:send( cXmlEnvio )
         oServer:WaitForResponse( 1000 )
         cRetorno := oServer:responseText

//HWG_MSGINFO(STR(LEN(cRetorno)))

      IF ValType( cRetorno ) != "C"
         cRetorno := ""
      ELSE
         Hb_MemoWrit( ArquivoXml, cRETORNO)
      ENDIF
   ENDIF

RETURN


Detalhe, o SoapUI, mostra o uso de SOAPAction e Host, mais so consegui fazer a comunicação tirando estas duas linhas, creio que e por que no ENVELOPE, ja consta.

Comunicação SOAP

MensagemEnviado: 06 Ago 2019 09:49
por JoséQuintas
gilbertosilverio escreveu:Detalhe, o SoapUI, mostra o uso de SOAPAction e Host, mais so consegui fazer a comunicação tirando estas duas linhas, creio que e por que no ENVELOPE, ja consta.


Depois vou tentar confirmar isso.
Eu não sabia que isso era possível.

mesmo assim, estranho ser xmlns:cot e não xmlns:host.
poderia ser uma complicação a mais descobrir o nome correto.

Comunicação SOAP

MensagemEnviado: 03 Set 2019 08:01
por gilbertosilverio
Bom dia Quintas,

Por favor me da mais uma dica...

Como faço para testar se o webservice que estou tentando acessar esta ativo.

Existe algum comando para verificar isso.

Error WINOLE/1007 O tempo limite da operação foi atingido
(0x80072EE2): msxml6.dll (DOS Error -2147352567)
Called from ->WIN_OLEAUTO:SEND(0)
Called from ->ENVIA_WH(1854)
Called from ->RESPONDE_WHS_COTACAO(1665)


Estou fazendo teste em homologação, e geralmente o pessoal desativa o webserver, ai da a mensagem acima.

Procurei na net, mais não achei, os codigos de retorno da msxml6, tem algum macete pra ficar facil ou tenho que por dentro de um TRY.

To enviando desta maneira,

      Hb_MemoWrit( cXML, cXmlEnvio)

      oServer := win_OleCreateObject( "MSXML2.ServerXMLHTTP.6.0" )

      oServer:Open( "POST", cUrl, .F. )
      oServer:SetRequestHeader( "Content-Type",        [text/xml;charset=UTF-8])
      oServer:SetRequestHeader( "Content-Length",      [407] )
      oServer:SetRequestHeader( "Transfer-encoding",   [chunked])
      oServer:SetRequestHeader( "Connection",          [Keep-Alive])
      oServer:SetRequestHeader( "User-Agent",          [Apache-HttpClient/4.1.1 (java 1.5)])
      oServer:send( cXmlEnvio )
      oServer:WaitForResponse( 1000 )

      cRetorno := oServer:responseText


Grato.

Comunicação SOAP

MensagemEnviado: 03 Set 2019 08:49
por JoséQuintas
Error WINOLE/1007 O tempo limite da operação foi atingido
(0x80072EE2): msxml6.dll (DOS Error -2147352567)


Esqueceu do Clipper e do Harbour?
DOS ERROR é erro do sistema operacional.
É que a tabela de erros do Windows não se limita a tabela do DOS.

Comunicação SOAP

MensagemEnviado: 03 Set 2019 09:01
por JoséQuintas
Tem casos aonde o webservice obriga a usar msxml6, msxml5, msxml4, msxml3
Parece que tem versão que não era padrão, mas tem webservice que deixou nesse fora do padrão, por isso obriga que se cometa o mesmo erro.
Infelizmente tem dessas também: se lá é fora do padrão, a comunicação padrão pode falhar.

Mas.. não seria simples igual enviar carta?
Bom... de repente a comunicação foi pra China... e estão entregando na casa de um brasileiro que mora lá e não sabe ler chinês... isso seria algo fora do padrão, alguém da China não ler em chinês - tudo certo na comunicação mas... caiu numa situação fora do normal.