【问题标题】:IBM Language Translator returns 403 Forbidden upon identify()IBM Language Translator 在 identify() 时返回 403 Forbidden
【发布时间】:2020-06-15 04:44:45
【问题描述】:

我按照官方文档创建了此处概述的多语言 Watson 助手: https://github.com/with-watson/multilingual-chatbot

但是,在 IBM Cloud 上部署函数并使用以下命令通过 IBM Cloud CLI 测试部署的函数后,我收到错误消息(以下日志):

bx wsk 动作调用翻译器 --result --param text "Hallo, ich habe eine Frage."

{ "error": "该操作没有返回字典。" }

"2020-01-13T12:54:57.787506Z    stderr: Traceback (most recent call last):",
"2020-01-13T12:54:57.787554Z    stderr: File \"pythonrunner.py\", line 88, in run",
"2020-01-13T12:54:57.787560Z    stderr: exec('fun = %s(param)' % self.mainFn, self.global_context)",
"2020-01-13T12:54:57.787564Z    stderr: File \"<string>\", line 1, in <module>",
"2020-01-13T12:54:57.787568Z    stderr: File \"__main__.py\", line 98, in main",
"2020-01-13T12:54:57.787571Z    stderr: response = translator.identify( text )",
"2020-01-13T12:54:57.787575Z    stderr: File \"/action/virtualenv/lib/python3.6/site-packages/watson_developer_cloud/language_translator_v3.py\", line 193, in identify",
"2020-01-13T12:54:57.787579Z    stderr: accept_json=True)",
"2020-01-13T12:54:57.787583Z    stderr: File \"/action/virtualenv/lib/python3.6/site-packages/watson_developer_cloud/watson_service.py\", line 587, in request",
"2020-01-13T12:54:57.787587Z    stderr: info=error_info, httpResponse=response)",
"2020-01-13T12:54:57.787591Z    stderr: watson_developer_cloud.watson_service.WatsonApiException: Error: Forbidden, Code: 403",
"2020-01-13T12:54:57.788Z       stderr: The action did not initialize or run as expected. Log data might be missing."

看起来 API 密钥已被识别,但不允许用于此操作,但是当通过 cURL 使用时,所使用的密钥确实返回了正确的值。

main中执行的代码和上面Github上提供的一样,我没有做任何改动。

关于如何解决此问题的任何想法?谢谢!

【问题讨论】:

  • 您在 params.json 文件中传递什么代替 workspace_id?
  • 我正在传递从 Skills > View API Details > Skill ID 获取的 Skill ID
  • 我刚刚尝试运行代码示例,一切正常

标签: ibm-cloud ibm-watson watson-assistant


【解决方案1】:

curl 使用的密钥字符串是不记名令牌。云功能所需的 API 密钥可能是 Identity and Access Management, IAM 提供的。

在顶部的 https://cloud.ibm.com 控制台 GUI 中,单击管理 > 访问 (IAM),然后选择左侧的 IBM Cloud API 密钥并选择 API 密钥。这将创建一个代表您的 API 密钥,就像登录名和凭据一样。这是使其工作的最简单方法,但不适用于生产。

对于生产,请考虑使用服务 ID,并可能与访问组结合使用。

【讨论】:

  • 感谢您的回答。我测试了您的建议,但在将密钥交换为 IBM Cloud API 密钥后仍然收到 403。此外,之前我已经按照他们的指南的建议为两种资源(助理、语言翻译)创建了服务 ID 和 API 密钥 - 结果是相同的错误。
【解决方案2】:

以下是对我有用的附加更改

我已运行以下命令来更新environment.yml 文件中提到的软件包

conda update --all
  • 我机器上的conda版本是4.8.1
  • cloud-functions/wsk/functions/fn 插件版本为 1.0.36

【讨论】:

  • 我根据您的建议更新了软件包,并具有相同的 conda 和云功能版本,但不幸的是它没有帮助。但是,我在另一个区域(更改为 us-south - prev. eu-gb)重新创建了资源(翻译、助理),它立即开始工作。
【解决方案3】:

在创建语言翻译器实例时,请确保选择正确的区域。
更改后它对我有用。

【讨论】:

    猜你喜欢
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    • 2014-06-15
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多