> ## Documentation Index
> Fetch the complete documentation index at: https://doc.apicomponente.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

# Primeiros passos

> Vamos configurar o servidor e as instancias

### Acesso ao servidor e instancias

<AccordionGroup>
  <Accordion icon="server" title="Autenticando o servidor da API">
    Para usar o componente euAtendo, é necessário definir o servidor URL e a GlobalAPI antes de utilizar as funções. Esses valores podem ser fixados no seu código, pois geralmente não mudam.

    Caso ainda não possua um servidor privado, você pode testar utilizando o servidor **COMUNITÁRIO DISPONÍVEL**:

    * **ApiGlobal:** ASD3F21APIDEVS6A5SPAULOJRDEVFA1
    * **endPoint:** [https://apiv1demo.apidevs.app](https://apiv1demo.apidevs.app)
    * **Manager:** [https://apiv1demo.apidevs.app/manager](https://apiv1demo.apidevs.app/manager)

    Abaixo segue um exemplo de como configurar esses valores no evento **onShow** do formulário em Delphi:

    ```delphi theme={null}
    procedure TForm1.FormShow(Sender: TObject);
    begin
      ApiEuAtendo1.VersionAPI := TVersionOption.V1; // Definir a versão da API
      ApiEuAtendo1.GlobalAPI := 'ASD3F21APIDEVS6A5SPAULOJRDEVFA1'; // Chave Global API
      ApiEuAtendo1.EvolutionApiURL := 'https://apiv1demo.apidevs.app'; // URL do servidor
    end;
    ```
  </Accordion>

  <Accordion icon="mobile" title="Instâncias 'Celulares de Clientes'">
    Cada instância representa um dispositivo conectado (por exemplo, o celular de um cliente). Pode ser utilizado para uma única empresa ou para diferentes empresas.

    Sempre que uma instância é criada, é obrigatório salvar o nome e a senha da instância para uso futuro. Dessa forma, sempre que o ERP for inicializado, os valores serão passados ao componente durante a sua inicialização.

    Antes de chamar a função **CriarInstancia**, é necessário passar dois parâmetros ao componente:

    ```delphi theme={null}
    ApiEuAtendo1.NomeInstancia := edtNome.Text; // Nome da instância
    ApiEuAtendo1.ChaveApi      := edtSenha.Text; // Chave API da instância (Opcional)
    ```

    A criação de uma instância pode ser feita da seguinte forma:

    ```delphi theme={null}
    var
      ErrorMsg: string;
    begin
      if not ApiEuAtendo1.CriarInstancia(ErrorMsg) then
      begin
        ShowMessage('Erro ao criar instância: ' + ErrorMsg);
        Exit;
      end;
    end;
    ```

    Após chamar a função para criar a instância, é necessário implementar o evento que será disparado com as informações da instância recém-criada:

    ```delphi theme={null}
    procedure TForm9.ApiEuAtendo1CriarInstancia(Sender: TObject;
      const InstanceResponse: TInstanceResponse);
    begin
      edtNome.Text   := InstanceResponse.InstanceName; // Nome da instância
      edtStatus.Text := InstanceResponse.Status;       // Status da instância
      edtSenha.Text  := InstanceResponse.ApiKey;       // Chave API da instância

      // Configurar o componente com os dados da nova instância
      ApiEuAtendo1.ChaveApi      := InstanceResponse.ApiKey;
      ApiEuAtendo1.NomeInstancia := InstanceResponse.InstanceName;
    end;
    ```

    Assim, após a criação da instância, os dados retornados (nome, status, chave API) são armazenados e usados para futuras conexões.
  </Accordion>
</AccordionGroup>

### Lendo o QRCode e Conectando à Instância

<AccordionGroup>
  <Accordion icon="qrcode" title="Gerar QRCode para Conectar">
    Antes de conectar a instância ao WhatsApp, você precisa gerar e escanear o QRCode. A função `ExibirQRCode` do componente **ApiEuAtendo** permite isso.

    Exemplo de como gerar o QRCode:

    ```delphi theme={null}
    var
      ErrorMsg: string;
    begin
      // Chamar a função para exibir o QRCode da instância
      if not ApiEuAtendo1.ExibirQRCode(ErrorMsg) then
      begin
        ShowMessage('Erro ao gerar QRCode: ' + ErrorMsg);
        Exit;
      end;
      
      ShowMessage('QRCode gerado com sucesso. Escaneie com o WhatsApp para conectar.');
    end;
    ```

    Agora, precisamos implementar o evento `OnObterQrCode` para capturar o QRCode gerado em formato Base64 e exibi-lo:

    ```delphi theme={null}
    procedure TForm9.ApiEuAtendo1ObterQrCode(Sender: TObject;
      const Base64QRCode: string);
    begin
      // Carregar a imagem do QRCode gerado a partir do Base64
      LoadBase64ToImage(Base64QRCode, Image1); // Exibe o QRCode no componente Image1
    end;
    ```

    A função `LoadBase64ToImage` converte a string Base64 do QRCode em uma imagem visual para que o usuário possa escanear o QRCode diretamente da interface do sistema.

    Após a leitura do QRCode, o dispositivo será vinculado à instância e ficará pronto para o envio e recebimento de mensagens.
  </Accordion>

  <Accordion icon="signal" title="Verificar Status da Instância">
    Após a leitura do QRCode e conexão do dispositivo, você pode verificar o status da instância para garantir que está conectada e pronta para uso. Use a função `StatusInstancia` para isso.

    Exemplo de como verificar o status da instância após a leitura do QRCode:

    ```delphi theme={null}
    var
      ErrorMsg: string;
    begin
      // Chamar a função para obter o status da instância
      ApiEuAtendo1.StatusInstancia;
    end;
    ```

    Agora implemente o evento que será disparado quando a função de status for chamada no componente o Events OnStatusInstancia:

    ```delphi theme={null}
    procedure TForm9.ApiEuAtendo1StatusInstancia(Sender: TObject;
      const InstanceStatus: TInstanceStatus);
    begin
      // Exibir o nome da instância e o estado atual
      edtNome.Text   := InstanceStatus.InstanceName;
      edtStatus.Text := InstanceStatus.State; // Estados: open, closed, connecting

      if InstanceStatus.State = 'open' then
        ShowMessage('Instância conectada com sucesso.')
      else if InstanceStatus.State = 'closed' then
        ShowMessage('Instância desconectada. Escaneie o QRCode novamente.')
      else if InstanceStatus.State = 'connecting' then
        ShowMessage('A instância está tentando conectar. Por favor, aguarde.');
    end;
    ```

    Com isso, você pode verificar em tempo real o status da instância e agir conforme necessário. O estado pode ser um dos seguintes:

    * **open**: Instância conectada e pronta para uso.
    * **closed**: Instância desconectada, necessitando de nova conexão via QRCode.
    * **connecting**: A instância está em processo de conexão.
  </Accordion>
</AccordionGroup>

### Metodos e funções

<AccordionGroup>
  <Accordion icon="message-bot" title="Enviando uma mensagem de texto">
    Para enviar uma mensagem de texto simples utilizando o componente **euAtendo**, você deve usar a função `EnviarMensagemDeTexto`. Certifique-se de que a instância está criada e conectada antes de realizar o envio.

    Exemplo de como enviar uma mensagem de texto:

    ```delphi theme={null}
    var
    	id:String;
    	begin
    	 edtIDMensagem.Text := ApiEuAtendo1.EnviarMensagemDeTexto(edtNumeroContato.Text,memoMensagemEnviar.Lines.text);
    	 edtIDMensagem.Text := ApiEuAtendo1.EnviarMensagemDeTexto('559982385000', 'Estou testando o seu componente');
    	end;
    	
    	//se o ID for retornado a mensagem foi enviada com sucesso, usar trye para tratamento de erros, com o ID
    	// da mensagem voce pode solicitar o status de enviado, entregue e lida

    ```

    Neste exemplo, substitua `+5511999999999` pelo número do destinatário. Caso ocorra algum erro durante o envio, a variável `ErrorMsg` retornará a descrição do erro.
  </Accordion>

  <Accordion icon="file-arrow-up" title="Enviando um texto com anexo (arquivo)">
    Para enviar uma mensagem com um arquivo anexo (por exemplo, uma imagem ou documento), utilize a função `EnviarArquivo`. O caminho do arquivo no sistema local deve ser fornecido.

    Exemplo de como enviar uma mensagem com um anexo:

    ```delphi theme={null}
    var
      ErrorMsg: string;
    begin
      // Enviar texto e arquivo para um número específico
       if FileOpenDialog1.Execute then
    	  begin
    		edtIDMensagem.Text := ApiEuAtendo1.EnviarMensagemDeMidia
    		  (edtNumeroContato.Text, '', 'teste de envio de anexo',
    		  FileOpenDialog1.FileName);
    	  end;
    end;
    ```

    Neste exemplo, o arquivo `arquivo.pdf` será enviado junto com o texto. O caminho do arquivo deve ser completo e apontar para o local correto no sistema.
  </Accordion>

  <Accordion icon="code" title="Enviando um texto com anexo em base64">
    Para enviar um arquivo codificado em base64, utilize a função `EnviarMensagemDeBase64`. O código abaixo mostra como abrir um arquivo com **FileOpenDialog**, converter para base64 e enviá-lo via componente **euAtendo**.

    Exemplo de como enviar uma mensagem com anexo em base64:

    ```delphi theme={null}
    var
      ErrorMsg: string;
    begin
      // Abrir o diálogo para selecionar o arquivo
      if FileOpenDialog1.Execute then
      begin
        if FileOpenDialog1.FileName <> '' then
        begin
          // Limpar o Memo1 e adicionar o conteúdo do arquivo convertido para base64
          memo1.Lines.Clear;
          memo1.Lines.Add(FileToBase64(FileOpenDialog1.FileName));
          
          // Enviar o arquivo codificado em base64
          if not ApiEuAtendo1.EnviarMensagemDeBase64('+559982385000', 'Segue seu boleto', Memo1.Lines.Text, 'document', 'orcamento.pdf', ErrorMsg) then
          begin
            ShowMessage('Erro ao enviar anexo base64: ' + ErrorMsg);
          end
          else
          begin
            ShowMessage('Anexo base64 enviado com sucesso!');
          end;
        end;
      end;
    end;
    ```

    Neste exemplo:

    * O arquivo é selecionado através de **FileOpenDialog**.
    * O conteúdo do arquivo é convertido para base64 usando a função `FileToBase64`.
    * O anexo em base64 é enviado utilizando a função `EnviarMensagemDeBase64`.
    * O quarto parâmetro ('document') indica o tipo de anexo, e o quinto ('orcamento.pdf') é o nome que o destinatário verá.
  </Accordion>
</AccordionGroup>

## Update your docs

Add content directly in your files with MDX syntax and React components. You can use any of our components, or even build your own.

<CardGroup>
  <Card title="Style Your Docs" icon="paintbrush" href="/settings/global">
    Add flair to your docs with personalized branding.
  </Card>

  <Card title="Add API Endpoints" icon="square-code" href="/api-playground/configuration">
    Implement your OpenAPI spec and enable API user interaction.
  </Card>

  <Card title="Integrate Analytics" icon="chart-mixed" href="/analytics/supported-integrations">
    Draw insights from user interactions with your documentation.
  </Card>

  <Card title="Host on a Custom Domain" icon="browser" href="/settings/custom-domain/subdomain">
    Keep your docs on your own website's subdomain.
  </Card>
</CardGroup>
