是的。您可以使用 channelData 对象来获取 ApiToken 和 user 值。例如,在 C# 中,您可以使用 turnContext.Activity.ChannelData 在 JSON 中获取这些值:
{{
"SlackMessage": {
"token": "............",
"team_id": "<TEAM ID>",
"event": {
"type": "message",
"text": "thanks",
"user": "<USER WHO MESSAGED>",
"channel": "............",
"channel_type": "channel"
},
"type": "event_callback",
"event_id": ""............",
"event_time": 1553119134,
"authed_users": [
"............",
"<USER WHO MESSAGED>"
]
},
"ApiToken": "<ACTUAL TOKEN HERE>"
}}
然后,使用这两条信息,您可以从 Slack 检索信息。
https://slack.com/api/users.info?token=<ACTUAL TOKEN HERE>&user=<USER WHO MESSAGED>&pretty=1
并获得包含您需要的信息的响应:
{
"ok": true,
"user": {
"id": "<USER WHO MESSAGED>",
"team_id": "<TEAM ID>",
"real_name": "Dana V",
理想情况下,您可能希望设置机器人用户状态并首先检查它,如果不存在,则对 Slack 进行 API 调用,然后存储在状态中。因此,进一步的请求不需要转到 Slack,而只需从状态存储中提取。
基本上,您可以/应该在 onTurn 事件中执行此操作。首先,创建您的用户状态存储,例如here。
然后您可以检查该值并在未填充时写入该值。 This example 在简单的提示下,可能会有所帮助。您不需要像本例那样提示输入用户名,但会从状态读取/写入用户名。您仍然可以使用对话框,但您不需要它们来提示名称,因为您正在动态地这样做。
您可以看到here 正在设置用户名,here 正在检索用户名。在这种情况下,它在对话框中,但又一次;你会/可以只在回合上下文中做(使用逻辑获取,如果不存在,则设置)。