如何从 GCP Functions GUI 调用 PubSub 函数

How invoke a PubSub function from the GCP Functions GUI

我部署了以下功能:

interface MessageData {
  reviewId: string;
}

export const applyPreAssessRules = functions
  .pubsub.topic("applyPreAssessRules")
  .onPublish(async (message) => {
    const { reviewId } = message.json as MessageData;
    ...
  }

云平台GUI提供了测试功能的页面,但我不知道如何格式化输入。

我尝试了几种方法,包括:

{"reviewId": "LRuvmv14u7c47IRiravi"}
{"message": {"reviewId": "LRuvmv14u7c47IRiravi"}}
{"message": { "json": {"reviewId": "LRuvmv14u7c47IRiravi"}}}

我不断收到以下输出:

Error: function execution failed. Details: The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type undefined

我错过了什么?

我已经使用 Firebase 部署了该函数。不知道这是否有所作为...

事实上,@eespinola 几乎为您指明了正确的方向。如果您仔细检查他提供的 link,您会发现 Cloud Functions 默认订阅者代码段:

/**
 * Triggered from a message on a Cloud Pub/Sub topic.
 *
 * @param {object} pubsubMessage The Cloud Pub/Sub Message object.
 * @param {string} pubsubMessage.data The "data" property of the Cloud Pub/Sub Message.
 */
exports.subscribe = (pubsubMessage) => {
  // Print out the data from Pub/Sub, to prove that it worked
  console.log(Buffer.from(pubsubMessage.data, 'base64').toString());
};

此代码段显示 pubsub 事件包含一个名为 "data" 的字段,该字段是 base64 编码的字符串。此外,如果您搜索 PubSub 的 API 文档,您将找到消息的 JSON representation 语法:

{
  "data": string,
  "attributes": {
    string: string,
    ...
  },
  "messageId": string,
  "publishTime": string
}

因此,您需要使用该格式将您的负载编码为 base64 字符串,并将其转换回函数内的 Javascript 对象。