Using OpenAI API from Firebase Cloud Functions in flutter app

题意:"在 Flutter 应用中通过 Firebase Cloud Functions 使用 OpenAI API。"

问题背景:

I can't figure out how to make this work.

"我不知道该如何让这正常运行。"

This is my cloud function in Javascript. I'm trying a simple code to see if the connection works (other cloud functions not using the openai package do work fine).

"这是我用 JavaScript 编写的云函数。我正在尝试一个简单的代码来测试连接是否正常(其他不使用 openai 包的云函数运行良好)。"

The function does work on GCP when I test it, but won't connect to my flutter function for some reason:

"该函数在 GCP 上测试时可以运行,但由于某种原因无法连接到我的 Flutter 函数。"

error:

flutter: Error calling Firebase Function: internal Response is missing data field.

Cloud function

javascript 复制代码
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const axios = require('axios');
const cors = require('cors')({ origin: true });
admin.initializeApp();

exports.openAiResponse2 = functions.https.onRequest(async (request, response) => {
  const apiKey = 'sk-';
  cors(request, response, async () => {
    try {
      const apiResponse = await axios.post(
        'https://api.openai.com/v1/chat/completions',
        {
          model: 'gpt-3.5-turbo',
          messages: [{ role: 'user', content: 'Say this is a test!' }],
          temperature: 0.7,
        },
        {
          headers: {
            'Authorization': `Bearer ${apiKey}`,
            'Content-Type': 'application/json',
          },
        },
      );

     // response.status(200).json({ message: 'OpenAI API connection successful.', engines: apiResponse.data });
        response.status(200).json({
              message: 'OpenAI API connection successful.',
              completion: apiResponse.data.choices[0].message.content,
            });
    } catch (error) {
      console.error('Error connecting to OpenAI API:', error);
      response.status(500).send('Error connecting to OpenAI API');
    }
  });
});

Flutter:

javascript 复制代码
Future<void> talkToMe2() async {
  try {
    HttpsCallable callable = FirebaseFunctions.instance.httpsCallable('openAiResponse2');
    print(callable);
    final response = await callable.call();
    print('response is $response');
    print('External API response: ${response.data}');
  } on FirebaseFunctionsException catch (e) {
    print('Error calling Firebase Function: ${e.code} ${e.message}');
  } catch (e) {
    print('Error calling Firebase Function: $e');
  }
}

This is my package.json

javascript 复制代码
{
  "name": "functions",
  "description": "Cloud Functions for Firebase",
  "scripts": {
    "serve": "firebase emulators:start --only functions",
    "shell": "firebase functions:shell",
    "start": "npm run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
  "engines": {
    "node": "16"
  },
  "main": "index.js",
  "dependencies": {
    "firebase-admin": "^11.5.0",
    "firebase-functions": "^4.2.0",
    "openai": "^3.2.1"
  },
  "devDependencies": {
    "firebase-functions-test": "^3.0.0"
  },
  "private": true
}

And my flutter doctor

javascript 复制代码
[✓] Flutter (Channel stable, 3.7.12, on macOS 13.2 22D49 darwin-arm64, locale en-ES)
[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0-rc1)
[✓] Xcode - develop for iOS and macOS (Xcode 14.1)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2021.1)
[✓] VS Code (version 1.77.3)
[✓] Connected device (4 available)
[✓] HTTP Host Availability

I can't seem to find a solution. Thanks!

"我似乎找不到解决方案。谢谢!"

问题解决:

I am not a flutter developer but httpsCallable is for onCall not onRequest.

"我不是 Flutter 开发者,但 `httpsCallable` 是用于 `onCall` 而不是 `onRequest`。"

https://firebase.google.com/docs/functions/callable?gen=2nd

https://firebase.google.com/docs/functions/http-events?gen=2nd

If you look at the flutter sample, you should have something like below for https callable

"如果你查看 Flutter 示例,针对 https callable,你应该有类似下面的代码。"

javascript 复制代码
const functions = require('firebase-functions');

exports.listFruit = functions.https.onCall((data, context) => { //<<<-- not onRequest
  return ["Apple", "Banana", "Cherry", "Date", "Fig", "Grapes"]
});
相关推荐
天燹8 分钟前
OpenClaw (Clawdbot) Windows 平台本地化一键部署实践
ai
小邓睡不饱耶9 分钟前
实战|W餐饮平台智能化菜品推荐方案(含Spark实操+算法选型+完整流程)
python·ai·ai编程·ai写作
寻星探路6 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
孟健13 小时前
吹爆 OpenClaw!一个人 +6 个 AI 助理,我再也不想招人了
openai·agent·ai编程
SEO_juper13 小时前
2026内容营销破局指南:告别流量内卷,以价值赢信任
人工智能·ai·数字营销·2026
七夜zippoe14 小时前
脉向AI|当豆包手机遭遇“全网封杀“:GUI Agent是通向AGI的必经之路吗?
人工智能·ai·智能手机·agent·gui
全栈前端老曹14 小时前
【MongoDB】Node.js 集成 —— Mongoose ORM、Schema 设计、Model 操作
前端·javascript·数据库·mongodb·node.js·nosql·全栈
JaguarJack14 小时前
OpenClaw 最新保姆级飞书对接指南教程 搭建属于你的 AI 助手
ai·clawdbot·openclaw
x-cmd15 小时前
[260207] x-cmd 更新 v0.8.0:Kimi、豆包、智谱全集结!薅到摩尔线程试用后,帮你秒接入 Claude code!
ai·x-cmd·kimi·zhipu·摩尔线程·doubao·claude-code
xuhe215 小时前
[全流程详细教程]Docker部署ClawBot, 使用GLM4.7, 接入TG Bot实现私人助理. 解决Docker Openclaw Permission Denied问题
linux·docker·ai·github·tldr