向Twilio发送短信时,Twilio会向指定的URL发送多个请求,以通过webhook提供该短信发送的状态。我想让这个回调异步,所以我开发了一个云函数,它将请求的表示发送到云任务,该任务本身到达我的应用程序的专用端点,该端点在内部重新创建和模拟Twilio请求。
Twilio签署他的请求使用:
- 我的twilio帐户的密钥
- 它所访问的绝对URL
- 以及他的请求正文
所以在我的后端,我应该知道Twilio最初到达了哪个端点。我想在Cloud函数中进行,并且我想以编程的方式进行,因为这个";异步webhook";也用于人们回复短信。
我的webhook的当前URL具有以下格式:
https://<location>-<project>.cloudfunctions.net/<cloud function name>/<some SMS uuid>
当前发送到我的云任务的有效载荷如下:
absoluteUri: req.protocol + '://' + req.hostname + req.originalUrl,
relativeUri: req.originalUrl,
queryParams: req.query,
headers: req.headers,
body: req.body,
问题是req.originalUrl
不包含完整的URI,我的absoluteUri
当前为:
https://<location>-<project>.cloudfunctions.net/<some SMS uuid>
所以我的问题是:在云函数内部,有没有一种方法可以通过编程获得它的名称?
我使用的是python 3.9,并从奇怪命名的";K_ SERVICE";环境变量。
import os
print("Current Cloud Function Name {}".format(os.environ.get('K_SERVICE')))
尽情享受吧,谷歌在每一个新的语言版本中都会删除越来越多有用的环境变量。https://cloud.google.com/functions/docs/configuring/env-var#python_37_and_go_111
由于云函数名称是入口点,应该进行硬编码,我最终编写了一个部署脚本,该脚本使用了一些占位符。
看起来很难看,如果你有更好的方式,那将是受欢迎的。