0

我正在开发一个聊天机器人,它将根据用户的问题返回某些信息。获取此信息的过程可能需要几秒钟,我想确保用户知道这一点。

因此,我使用此stackoverflow question中的建议,并通过服务帐户通过 REST API 返回第一条消息。

然后,第二条机器人消息通过正常实现。我在这里使用基本机器人的模板,部署到 Google Cloud App Engine。

这是我的代码片段:

@app.route("/", methods=["POST"])
def home_post():
    """Respond to POST requests to this endpoint.
    All requests sent to this endpoint from Hangouts Chat are POST
    requests.
    """

    credentials = ServiceAccountCredentials.from_json_keyfile_name(
        "credentials.json", scopes=SCOPES
    )
    http = httplib2.Http()
    chat = discovery.build("chat", "v1", http=credentials.authorize(http))

    event_data = request.get_json()
    thread = event_data["message"]["thread"]

    message = {"text": "Thanks for your question! Let me check :)", "thread": thread}
    chat.spaces().messages().create(
        parent=event_data["space"]["name"], body=message
    ).execute()

    # doing something to find information requested by user

    return json.jsonify({"text": "Here is my answer :)"})

一切都按预期工作,除了聊天中的第一条消息放在最初的机器人提及之前,第二条消息通过之后(如录音或屏幕截图所示)。

录音:https ://www.loom.com/share/c37472b703184965ad9ee649cb9f17bc

在此处输入图像描述

为什么会这样?我能做些什么来确保订单保持不变?

谢谢!

4

1 回答 1

1

您的代码正在运行onEvent

因此,事件类型为:

  • 未指定
  • 信息
  • ADDED_TO_SPACE
  • REMOVED_FROM_SPACE
  • CARD_CLICKED

换句话说:

只需将机器人添加到聊天室就已经是一个会触发他发送消息的事件 - 甚至在提到机器人之前。

如何避免:

实现一个条件语句,在发送消息之前检查事件的类型。

样本:

if event_data['type'] == 'MESSAGE':
    message = {"text": "Thanks for your question! Let me check :)", "thread": thread}
    chat.spaces().messages().create(
        parent=event_data["space"]["name"], body=message
    ).execute()
else:
    return

无样品chat.spaces().messages().create

if event_data['type'] == 'MESSAGE':
    message = "Thanks for your question! Let me check :)"
else:
    return
return json.jsonify({'text': message})

于 2020-12-04T08:42:16.573 回答