Analýza dat přijatých faktur a automatický import do CRM – WordPress Plugin

Majitelé firmy pozitiv.cz mě oslovili se zajímavou poptávkou: potřebovali automaticky importovat přijaté faktury v PDF do CRM Podio, a to pomocí unikátního nástroje Rossum.

Analýza údajů na faktuře

Rossum je služba, která dokáže pomocí umělé inteligence analyzovat data na faktuře v PNG nebo PDF a přes API vrátit data ve strojově čitelné podobě. Podívejte se, jak funguje jejich API.

Vytvořil jsem tedy WordPress plugin, který:

  • načte obsah emailové schránky, kam se posílají přijaté faktury
  • stáhne přílohy a odešle je na API služby Rossum
  • jednou za 5 minut kontroluje, zda už se faktura analyzovala
  • pokud nastal v analýze problém, pošle upozornění emailem, pokud se faktura analyzovala v pořádku, vytvoří přes API Podio nový záznam s vyplněnými údaji a originálem faktury jako přílohou

Na načítání emailů jsem použil knihovnu IMAP, Podio má svoji PHP knihovnu, Rossum má uvedené příklady implementace.

Ukázka kódu, který zařídí načtení emailu, stažení přílohy a odeslání dokumentu na API Rossum, pak vypadá takto:

/**
 * Upload invoices
 *
 * @param \WP_REST_Request $request Full data about the request.
 *
 * @return \WP_Error|\WP_REST_Request|\WP_REST_Response | bool
 */
public function upload_invoices( $request ) {
  // Fetch emails
  foreach ( $this->imap->get_messages() as $message ) {
    /** @var $message \Ddeboer\Imap\Message */
    $attachments = $message->getAttachments();
    if ( ! $attachments || empty( $attachments ) ) {
      continue;
    }

    foreach ( $attachments as $attachment ) {
      // @var $attachment \Ddeboer\Imap\Message\Attachment
      $filename = $attachment->getFilename();
      $path     = ROSSUMPODIO_TMP_PATH . $filename;
      file_put_contents( $path, $attachment->getDecodedContent() );
      $file_id = $this->rossum->upload_file( $path );
      if ( is_wp_error( $file_id ) ) {
        wp_mail( $this->podio->error_email, sprintf( 'Error uploading invoice %s', $attachment->getFilename() ), $file_id->get_error_message() );
        continue;
      }

      $this->db->save_item( $file_id, $filename );
    }

    $message->move( $this->imap->get_mailbox( $this->imap->mailbox_name_trash ) );
    $this->imap->expunge();

  }

  return new \WP_REST_Response( array( 'status' => 'success' ), 200 );
}

Automatický import faktur do CRM ušetří firmě pozitiv.cz několik hodin práce týdně. Pokud se vám takové řešení líbí, nebo potřebujete jinou integraci služeb přes API, kontaktujte mě.

Přidat komentář