如何为Google Actions不同发布渠道配置不同Fulfillment URL?
First off, let’s clear up a common misconception: your Google Action isn’t locked into using the auto-generated Firebase project for fulfillment. You can point any release channel to any public HTTPS endpoint—including functions from a manually created Firebase project you set up specifically for Alpha testing.
You’ve got two solid options to mirror the Alexa/Lambda workflow you’re familiar with:
Option 1: Separate Action Projects for Full Isolation
If you want complete separation between Alpha, Beta, and Production (no shared configuration), creating a new Google Action project for Alpha is a valid approach. Here’s how to do it:
- Head to the Google Actions Console and create a new project dedicated to your Alpha environment.
- Export the intent/entity configuration from your main (Beta/Prod) project (via
Settings > Export/Import > Export as JSON), then import it into the new Alpha project to avoid rebuilding everything from scratch. - Link the new Alpha project to your separate Firebase project (or just set the fulfillment URL directly to your Alpha Firebase function’s HTTPS endpoint—you don’t even have to link the projects if you don’t want to).
- Manage releases independently: push Alpha changes to the new project’s Alpha channel, Beta changes to your main project’s Beta channel, etc.
Pros: Total isolation—changes to Alpha won’t affect Beta/Prod, and you can test new intent structures without risking your live setup.
Cons: You’ll need to sync configuration changes (like new intents) across projects manually (or via export/import), which adds a minor overhead.
Option 2: Single Action Project with Channel-Specific Fulfillment (Recommended)
This is the more efficient approach, matching the Alexa/Lambda workflow you prefer. Keep one Action project and assign different fulfillment targets to each release channel:
Step 1: Deploy environment-specific endpoints
- Option A: Deploy separate Firebase Functions (e.g.,
alphaFulfillment,betaFulfillment,prodFulfillment)—either in your existing Firebase project or across separate projects. Each function gets its own unique HTTPS URL. - Option B: Use a single fulfillment function that routes requests based on the release channel. Google adds an
X-Goog-Release-ChannelHTTP header to every fulfillment request, with values likealpha,beta, orproduction. In your Node.js function, you can access this withreq.get('X-Goog-Release-Channel')to route to the correct backend service.
Step 2: Assign endpoints to each channel
- In the Google Actions Console, go to
Deploy > Release Management > Release Channels. - For each channel (Alpha, Beta, Production), click into the channel, then navigate to
Fulfillmentsettings. - Paste the HTTPS URL for the fulfillment endpoint you want to use for that channel (e.g., your Alpha Firebase function URL for the Alpha channel).
Pros: No duplicate Action configuration—all intent/entity changes are managed in one project, and you just switch the fulfillment target per channel. This keeps your workflow clean and aligned with what you know from Alexa.
Cons: Less isolation than separate projects, but if your fulfillment logic handles channel routing properly, this shouldn’t be an issue.
Final Recommendation
For most teams, Option 2 is the best choice because it reduces overhead while still giving you the environment separation you need. If you’re testing a complete rewrite of your Action or need strict isolation between environments, go with Option 1.
内容的提问来源于stack exchange,提问作者Jerome E. Garcia

