是的。您可以使用channelData对象来获取ApiToken
, and 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 https://github.com/Microsoft/BotBuilder-Samples/blob/ba4aeb136782154dffcab4ce6a0f795bdfcf295b/samples/javascript_nodejs/04.simple-prompt/index.js#L86.
然后您可以检查该值并写入(如果未填充)。这个例子 https://github.com/Microsoft/BotBuilder-Samples/tree/master/samples/javascript_nodejs/04.simple-prompt根据简单的提示,可能会有所帮助。您不需要像本示例那样提示输入用户名,但会从状态中读取/写入用户名。您仍然可以使用对话框,但您不需要它们来进行名称提示,因为您是动态执行此操作的。
你可以看到here https://github.com/Microsoft/BotBuilder-Samples/blob/ba4aeb136782154dffcab4ce6a0f795bdfcf295b/samples/javascript_nodejs/04.simple-prompt/bot.js#L55设置用户名的位置和here https://github.com/Microsoft/BotBuilder-Samples/blob/ba4aeb136782154dffcab4ce6a0f795bdfcf295b/samples/javascript_nodejs/04.simple-prompt/bot.js#L62正在检索它的位置。在本例中,它位于对话框中,但同样;你会/可以在回合上下文中执行(使用逻辑来获取,如果不存在,则设置)。