Migrate a Dify webhook-to-Google-Sheets workflow to AI Flowi Workflow
Use the production-tested Verification Router design to validate incoming fields before appending a Google Sheets row. The AI Flowi side was production-tested on 8 October 2026: accepted inputs returned 200, validation rejects returned 422 with reasons, and missing or invalid keys returned 403. Rejects wrote no row. A sanitised workflow JSON was imported into a clean flow and re-tested. The Dify side is documented, not tested by Ai Flowi.
Full build steps: webhook to Google Sheets tutorial. Download the sanitised, validated workflow JSON ZIP.
Dify DSL is not an import format for AI Flowi. Dify exports its own DSL YAML; AI Flowi imports its own workflow JSON. Use the Dify export as a reference for rebuilding behaviour. Renaming or converting the file syntax does not make the components or credentials compatible.
Before you start
- Record your existing Dify input fields, transformations, column order, destination, authentication, caller response and duplicate-delivery policy.
Dify-to-AI Flowi mapping and platform notes
Dify documents a Webhook Trigger and HTTP Request node. Its marketplace Google Sheets plugin by omluc, v0.0.2, is third-party and lists Batch Get and Batch Update with service-account JSON authentication. No official Google Sheets tool was found in Dify’s official documentation when it was checked on 8 October 2026. For an append, the derived route is Batch Update with a chosen range or HTTP Request to the Sheets API values:append operation. A range update is not automatically an append: record how your current flow picks its destination.
Dify’s Webhook Trigger documents default 200 and a custom-status documented range of 200–399. Record the response your sender currently relies on. These Dify details are documented, not tested by Ai Flowi; this tutorial does not claim that the derived Dify route was executed.
Related: Migrate an n8n webhook-to-Google-Sheets workflow to AI Flowi Workflow.
| Dify route | AI Flowi destination | Manual rebuild notes |
|---|---|---|
| Webhook Trigger | Universal Webhook | Record the incoming fields, authentication and caller response; replace the sender route after testing. |
| HTTP Request to Sheets API values:append, or the third-party plugin’s Batch Update with a chosen range | Append Rows | Rebuild the name/email/request column mapping. A range update is not automatically an append; record how the existing route selects its destination. |
| Service-account JSON used by the Google Sheets plugin | Google Connection | Re-authorise the destination account; plugin credentials do not transfer. |
What to rebuild manually
Dify’s DSL export excludes third-party tool API keys and actual knowledge-base content. Its service-account plugin credentials are not an AI Flowi Google Connection: re-authorise the destination account. Inspect exports for secrets before sharing them. The supplied public JSON is sanitised; an ordinary bulk export can retain account labels, connection identifiers, spreadsheet IDs and endpoint URLs.
What does not carry over
- No native import: Dify DSL YAML does not import into AI Flowi. Manually rebuild the behaviour; the supplied AI Flowi JSON is a starting recipe, not a converted Dify workflow.
- Features without a tested equivalent in this recipe: the third-party Sheets plugin’s Batch Get / Batch Update route and Dify’s custom webhook status range of 200–399 do not establish equivalent append or caller-response behaviour in AI Flowi. These source-platform details are documented (official source, checked 8 October 2026), not tested by Ai Flowi: Dify marketplace plugin listing and Dify Webhook Trigger. Rebuild and test any required behaviour separately.
- Credentials and knowledge content: recreate the Google connection and webhook authentication in AI Flowi. Dify DSL excludes third-party tool API keys and actual knowledge-base content (documented (official source, checked 8 October 2026), not tested by Ai Flowi); retain required knowledge documents separately.
- Webhook URL: the sender must use the new AI Flowi Production Endpoint after acceptance checks. Keep the old Dify URL and required historical logs for rollback.
Tested AI Flowi results (8 October 2026)
The supplied design passed production and clean-import tests on 8 October 2026. These results cover the AI Flowi recipe, not your migrated Dify workflow. Rebuild your own field mapping, credentials and destination, then verify both the caller response and the written sheet before switching the sender.
| Case | Recorded HTTP result | Recorded destination result |
|---|---|---|
| Valid body and platform key | 200, with append result | One row added in name/email/request order |
| Missing field, wrong type or invalid email | 422, with field reasons | No row added |
| Malformed JSON | 422, with object-body error | No row added |
| Missing or invalid platform key | 403, before flow execution | No row added |
| Bad spreadsheet ID, original flow only | 404, raw Google component error | Test sheet unchanged |
| Identical valid event delivered twice | 200 for each delivery | Two rows added; no deduplication |
The clean imported copy reproduced success, validation rejects, key rejects and duplicate behaviour. The bad-ID test was covered on the original design only. Compare response bodies and read back the actual sheet after each case; a canvas or successful import alone does not prove a write.
Known limits: the simpler 8 October append version adds a row for each duplicate delivery. For retrying senders, use and test the duplicate-protection version, production-tested on 9 October 2026, which uses event_id and Upsert Row for sequential deliveries; simultaneous deliveries can still both insert. A Sheets failure exposed raw Google error detail, including a spreadsheet ID in its API URL; this recipe has no supported in-flow catch for that error. Automatic retries/recovery, ambiguous timeouts, throughput, general reliability, externally created sheets and External Provider authentication remain unverified. Retrying an invalid body unchanged will not correct it.
Keep credentials, knowledge documents and required historical logs separately: Dify’s DSL does not transfer them through an AI Flowi JSON import. Caller responses, retry policies and access rules require behaviour checks even when node names look similar.
Cutover checklist
Use these steps for your rebuilt Dify workflow. They are an operating checklist, not evidence that this cross-platform cutover has been tested.
- Build and configure: follow the base tutorial setup, or its duplicate-protection setup for retrying senders. Recreate the Google connection; check the Spreadsheet ID, tab, column order, field mapping, POST method, Platform API Key authentication and From Flow response mode. Keep JQ fields visible.
- Run acceptance tests on AI Flowi: valid authenticated input must return 200 and write one row; missing fields, wrong types, invalid email and malformed JSON must return 422 without a row; missing and invalid keys must return 403 without a row. Read back the sheet after each case.
- Test duplicate deliveries: the append version writes two rows for two identical valid deliveries. With the duplicate-protection version, send the same
event_idsequentially: expect 200 with{"status":"inserted"}, then 200 with{"status":"duplicate"}and no extra row. Simultaneous deliveries can still both insert. - Run both systems in parallel against a test sheet: send the same synthetic inputs to Dify and AI Flowi, using separate tabs in the test spreadsheet so writes can be compared. Compare mapped values, column order, HTTP responses and duplicate behaviour with your recorded caller contract. Resolve differences before changing the production sender.
- Switch the sender URL: record the old URL and cutover time, then replace the Dify webhook URL with the AI Flowi Production Endpoint and configure the sender’s AI Flowi authentication.
- Monitor the first requests: check caller status/body and actual destination rows for missing or duplicate writes. A Sheets failure can return a raw platform error; the tested recipe has no in-flow catch. Use the rollback plan if the rebuilt behaviour fails your checks.
- Keep a rollback window: disable the old Dify workflow after switching. Keep it disabled, not deleted, with its URL and configuration available until your chosen rollback window ends.
Rollback plan
- Restore delivery: point the sender back to the recorded Dify webhook URL, restore its original authentication, and re-enable the old workflow. Verify a request and the destination row, then disable the AI Flowi replacement.
- Reconcile the cutover window: when the duplicate-protection version is used, compare rows written during the window with sender records by
event_idbefore replaying missing events. Keep the same identifier for a retry. Upsert Row updates an existing matching row; it does not merge existing duplicate rows, and its key scope is one worksheet. If the old workflow does not storeevent_id, retain it in the sender records for manual reconciliation. The append version has no event_id duplicate protection, so review its window rows manually before replaying.
Switching back does not undo sheet writes. This is a manual operational rollback; the tested duplicate-protection limits still apply, including possible simultaneous inserts.
Sources and evidence scope
- Updated webhook-to-Google-Sheets tutorial and sanitised workflow JSON ZIP. Recipe, exact JQ, responses and limits come from the production and clean-import report dated 8 October 2026; ports match the sanitised import file.
- Google Connection, AI Flowi workflow import/export and AI Flowi pricing.
- Dify DSL export, Webhook Trigger, HTTP Request, omluc Google Sheets plugin and official tool catalogue. Official sources were checked on 8 October 2026; documented, not tested by Ai Flowi.