Да.Вы можете использовать объект 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",
В идеале вы, возможно, захотите сначала настроить состояние пользователя бота и проверить это сначала, а затем, если неттам, затем сделайте вызов API для Slack, затем сохраните в состоянии.Поэтому дальнейшие запросы не нужно отправлять в Slack, а будут просто извлекать из хранилища состояний.
По сути, вы можете / должны сделать это в событии onTurn.Сначала создайте свое хранилище пользовательских состояний, например здесь .
Затем вы можете проверить это значение и записать его, если оно не заполнено. Этот пример для простых подсказок может быть полезен.Вам не нужно запрашивать имя пользователя, как в этом примере, но вы можете читать / писать имя пользователя из состояния.Вы все еще можете использовать диалоги, но они вам не понадобятся для подсказки имени, поскольку вы делаете это динамически.
Вы можете увидеть здесь , где задается имя пользователя и здесь где это извлекается.В этом случае это в диалогах, но опять же;вы могли бы / могли бы просто сделать это в контексте поворота (используя логику, чтобы получить, а если нет, установить).