Microsoft TeamsFishbowl Agent view

How to connect Microsoft Teams to Fishbowl

Short answer

To get Fishbowl into Teams, run a middleware service that polls the Fishbowl API or reads its MySQL database, then posts adaptive cards to a channel through a Teams incoming webhook or Workflows, or through a Bot Framework bot for two-way actions. Authenticate the bot with Entra ID and keep Fishbowl write-backs behind an approved API user.

Many Fishbowl shops already run Microsoft 365, so the office team lives in Teams while the warehouse and purchasing staff live in the Fishbowl client. Questions like what is on hand for a part, has this PO been approved, or why is this order back-ordered end up as chat messages that someone answers by switching windows.

Teams is a good fit for approvals and exception alerts because it handles identity, mobile notification and audit trail for you. The work is in translating Fishbowl events into cards that a person can act on safely.

Fishbowl does not push events, so the integration is built around a polling or query layer. That is fine for purchasing and sales workflows measured in minutes, and it keeps the Fishbowl server's attack surface unchanged.

What teams use it for

PO approval cards

Post an adaptive card when a PO crosses an amount threshold, with vendor, lines and total, and an Open in Fishbowl link plus Approve and Reject buttons routed through the middleware.

Low stock channel

A scheduled job compares quantity on hand and committed against reorder points and posts a daily digest to a purchasing channel.

Part lookup bot

Type a part number in a chat with the bot and get on-hand by location, open demand and last cost, read from the API.

Late shipment escalations

Orders past their scheduled ship date and not yet packed are posted to the customer service channel with the assigned salesperson mentioned.

Cycle count discrepancies

Large count variances from a cycle count are posted for a supervisor to review before adjustments are accepted.

Daily flash

A morning message with orders shipped, open orders and POs due this week from saved SQL or API summaries.

Fishbowl integration surface

  • Fishbowl REST API with approved app credentials and session token, covering parts, inventory, sales orders, purchase orders and shipments in current builds (endpoint set varies by version).
  • Legacy Fishbowl JSON API over a TCP socket on the server, available in many older installs where the REST API is absent.
  • MySQL schema: read-only queries over part, partdetail, so, po, ship and related tables are a practical source for digest cards.
  • Fishbowl user and group permissions, which should bound what the integration user can see; approvals in Teams do not replace Fishbowl's own PO approval and issue steps.
  • Fishbowl custom fields and notes, which can store the Teams message link or an approval reference for traceability.

How it works

  1. 1

    Decide one-way or two-way

    Alerts only can use a Teams Workflows webhook or Power Automate with no bot. Buttons that call back into your service require a registered Azure Bot or Teams app.

  2. 2

    Register in Entra ID

    Create an app registration for the bot, set a client secret or certificate, and restrict the app with a Teams app permission policy so only the relevant team can install it.

  3. 3

    Stand up the middleware

    Host it where it can reach Fishbowl internally and be reached by Teams over HTTPS. A common pattern is a service in a DMZ that holds card state, with an internal worker that talks to Fishbowl.

  4. 4

    Detect events from Fishbowl

    Poll the API or query read-only SQL on a schedule, keeping a high-water mark so each PO or order triggers one card, not many.

  5. 5

    Design the adaptive cards

    Keep cards short: key fields, one action row, and a deep link. Use Action.Submit with an identifier for the record so the callback can be validated.

  6. 6

    Handle callbacks safely

    Map the Teams user from the Entra token to a Fishbowl user, check they hold approval rights, then call the API. Update the card to show who acted and when.

Example flows

High value PO approval

Trigger: A PO over a set amount moves to a status awaiting approval.

  1. The poller finds the PO and builds a card with vendor, lines and total.
  2. The card posts to the approvers' channel with Approve and Reject.
  3. A manager clicks Approve; the middleware verifies their identity and rights.
  4. The service calls Fishbowl and the card updates with the approver and time.

Result: Approvals move out of email threads, with a record of who approved from where.

Part lookup in chat

Trigger: A salesperson messages the bot with a part number.

  1. The bot normalises the part number and queries the Fishbowl API.
  2. It returns on-hand by location, committed quantity and open POs.
  3. A button offers a link to the part record in the client.

Result: Sales answers stock questions in seconds without opening Fishbowl.

Keeping data on-prem

Fishbowl on a local server can remain private. The middleware connects to it over the LAN and holds an outbound connection to Microsoft services; Teams reaches the bot through a public HTTPS endpoint, so place only that thin endpoint in a DMZ or behind a reverse proxy and keep the Fishbowl API and MySQL internal. If you want natural-language part and order questions in the bot, point it at a locally hosted open-weight model via vLLM or Ollama so inventory and customer data are not sent to a public model API.

Security checklist

  • Validate the Microsoft token on every bot request and restrict to your tenant ID.
  • Map Teams identities to Fishbowl users explicitly; never let one shared service account approve on everyone's behalf.
  • Keep the Fishbowl API credentials in a secret store, not in card payloads or config files in the repo.
  • Limit channels: pricing and cost data should not appear in channels with guests or external members.
  • Log every approval action with Teams user, Fishbowl user, record and timestamp.

Ways to get it done

Power Automate or Teams Workflows with a scheduled report

Effort: Hours to a couple of days; no two-way actions.

Simple daily digests and alerts where a CSV or emailed report is acceptable.

In-house Teams bot

Effort: Three to five weeks including Azure setup, app packaging and testing.

A team with Node or .NET skills that needs approvals and lookups.

Partner build with Netray

Effort: Pilot scoped by flow; usually approvals first, then lookups.

You want natural-language questions, approvals and an on-prem model in one assistant.

Pitfalls

  • !Using incoming webhook connectors that Microsoft has been retiring, instead of Workflows or a bot; confirm what your tenant supports.
  • !Approving through Teams while Fishbowl still shows the PO unapproved because the API call failed silently.
  • !Posting costs into broad channels that include people who should not see them.
  • !Not de-duplicating, so every poll cycle reposts the same low stock list.

Frequently asked questions

Is there a Fishbowl app in the Teams store?

I am not aware of an official one. Fishbowl integrates with other business apps, but Teams usually needs a custom bot or an automation flow. Check the Fishbowl app listings for your version in case a partner has published something since.

Can I use Power Automate with Fishbowl?

Yes if you can reach the data. Power Automate can run on a schedule, call an HTTP endpoint or read a file produced by a Fishbowl report, then post to Teams. For an on-prem Fishbowl behind a firewall you typically need the on-premises data gateway or an internal relay.

Can Teams buttons change data in Fishbowl?

They can, through your middleware calling the Fishbowl API. Treat it like any write integration: map the clicker to a Fishbowl user, check rights, validate the record state, and log the result. Many teams start read-only and add approvals once trust is built.

Do I need to expose Fishbowl to the internet?

No. Only the bot endpoint needs to be reachable from Microsoft. Keep Fishbowl and MySQL on the internal network, with the middleware bridging the two. Direct exposure of the Fishbowl API port is a common and avoidable risk.

Can the bot answer questions in plain English?

With a language model layer, yes. Keep it grounded: the model chooses a defined lookup like stock by part, the service runs it with the user's permissions, and the answer cites the values returned. Free-form SQL generated by a model against the live database is best avoided.

Want Microsoft Teams working on your Fishbowl?

A free 30 minute assessment: we map the integration path for your version and setup, and where it should run.

Get a free assessment