Amirhossein Hosseinpouramirhp
CV
Service · APIs, bots and pipelines

Integrations and automation

The hard part is always the detail that fails quietly.

Connecting systems that were never meant to talk: payment gateways, SMS and OTP providers, marketplace APIs, Telegram bots and Mini Apps, spreadsheet pipelines and Cloudflare Workers. Most of it ends in a WordPress or WooCommerce store, and all of it has to keep working when one side changes.

Tell me what needs connecting See four flows

Four connections, end to end

Each of these replaced a person copying something from one system into another. The line under each name is what that looked like before.

  1. Card-to-card payments

    Before A screenshot in WhatsApp with no order number, and someone matching it to an order by hand.

    Easy Receipt
    1. Order page

      The customer uploads the receipt

    2. WooCommerce

      Stored on that order, by its own key

    3. Telegram

      Approve or Reject, allow-listed people only

    4. Order status

      Moved on, and the customer emailed

  2. Store events into a chat

    Before A fixed message with no buttons, dates in the wrong calendar, and a code snippet to change one word.

    Integration for Telegram
    1. Site event

      An order, a stock change, a new user, a form

    2. Your template

      Macros, validated before it is saved

    3. Channel, group or chat

      Buttons underneath, a PDF invoice attached if you want one

  3. A catalogue in a spreadsheet

    Before Edited in Google Sheets, then re-entered by hand into WooCommerce.

    How it was built
    1. Google Sheet

      The source of truth

    2. Apps Script

      SKU loader and attribute manager

    3. WooCommerce REST API

      Term names, not slugs

    4. Products

      With their attributes filled in

  4. Numbers a client keeps asking for

    Before The same question in the chat every week, answered by someone copying a figure out of Analytics.

    Client Hub
    1. Analytics, Search Console, WooCommerce

      Read-only, fetched live

    2. Client Hub

      A React app and a Telegram Mini App

    3. The client

      One tap inside Telegram, no password

What I connect

The honest home for work that does not fit a category: two systems, a contract between them, and the edge cases nobody wrote down.

Payment gateways and bank transfers

Gateways where they exist, and the card-to-card flow where they do not: the receipt attached to the right order and reviewed from a phone.

SMS and one-time codes

Login and verification by code, with the SMS provider behind an interface you can swap when a route turns unreliable. Gravity Forms OTP Verification checks a number or an email before a submission is saved.

Marketplace APIs

A store connected to a platform that sets its own rules. One integration with a major regional marketplace's reseller API is under NDA, so it appears here without code, screens or figures.

Telegram bots and Mini Apps

Notifications with buttons, approvals from a chat, and dashboards that open inside Telegram with no login.

Spreadsheet pipelines

A sheet as the source of truth for a catalogue, or a daily XLSX summary of chosen form fields, delivered by email or Telegram.

Cloudflare Workers

Small services at the edge where a server would be too much: an uptime monitor with KV state, and a watchdog that lives away from the server it watches.

From the work

Two integrations. One is written up; the other is under NDA, and says so.

Lumiere Vibe · a Pigment client

Google Sheets to WooCommerce

The catalogue was edited in Google Sheets and then re-entered by hand into WooCommerce. I built a Google Apps Script and WooCommerce REST integration that treats the sheet as the source of truth: an SKU loader, chip-style multi-select dropdowns built on the Sheets API, and an attribute manager sidebar.

The detail that cost the most time

The WooCommerce REST API expects attribute term names in the options array, not slugs. Send slugs and it fails quietly, with empty attributes.

54ms cached time to first byte on the same store, once LiteSpeed and Redis were set up properly and Action Scheduler and transients were cleared down
Google Apps ScriptSheets API v4WooCommerce REST APILiteSpeedRedis

Under NDA

A marketplace reseller integration

A WooCommerce integration with a major regional marketplace's reseller API. There is no code, no screen and no figure from it here. Some of my work is under an NDA like this one and does not appear on this site at all.

Rules every integration follows

Learned on shipped products, and written into the code so they cannot be unlearned.

One transition, every channel
Approving in Telegram and approving in the admin run the same code: status, note, emails, hooks.
Validate before sending
A message is checked before it is saved, so a stray asterisk never silently kills a notification.
Allow-list who can act
Only named people can press Approve, and every press is written into the order's notes.
Read-only where reading is enough
A dashboard that shows a store's numbers cannot change an order, a page or a setting.
Money goes to private chats
Invoices and payment details never go to a group, by rule and by code.
A route around a block
Where Telegram is blocked, messages go through your own relay instead of failing.
Fail soft
If the other side is unreachable, nothing turns red. A stale answer beats a false one.
Log what was sent
What, to whom, when, and whether it arrived.

How an integration goes

Two systems means two sets of assumptions. Most of the work is writing both down.

  1. A short call

    Thirty minutes. What talks to what, and what happens today when it does not. I tell you honestly whether I am the right person.

  2. A written scope

    What each side sends, what it expects back, and what happens when it answers late or not at all. Then what will be built, what will not, how long, and what it costs.

  3. Built on staging

    Against test accounts wherever the other side offers them. Nothing lands on production without your sign-off.

  4. Handover

    Documentation, a recorded walkthrough, and everything in your repository, not mine.

  5. Maintenance, if you want it

    Other people's APIs change. Monthly or on demand, optional and separate.

A good fit when

Two systems need to share data, someone is copying it by hand today, and the scope can be written down.

Not a fit when

You need it next week, or the budget assumes an off-the-shelf connector will do the job.

branch main 6 active projects ↑ 113 releases services/integrations-automation.md Sari --:-- UTC+3:30 its@amirhp.com