如何从 Slack 获取用户 ID 到机器人服务

2024-03-21

我正在使用 Azure LUIS 创建一个简单的机器人,这是我的第一个机器人。经过一些研究后,我取得了一些不错的进展,现在还与 Slack 集成作为测试它的渠道。

机器人功能运行良好,但我希望识别用户的身份。这样我就可以个性化机器人对话,并从用户的个人资料表中提取用户的特定信息。

无论如何,我是否可以获得 slack 用户的 UID 或任何参考 ID,以便我可以将其与用户配置文件一起存储在我的用户表中?

因此,下次当用户向机器人打招呼时,机器人可以说“你好,John”而不是仅仅说“你好”。

Thanks!


是的。您可以使用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正在检索它的位置。在本例中,它位于对话框中,但同样;你会/可以在回合上下文中执行(使用逻辑来获取,如果不存在,则设置)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 Slack 获取用户 ID 到机器人服务 的相关文章

随机推荐

  • proxy_pass 不使用 /etc/hosts 解析 DNS

    在 Nginx 中proxy pass指令未使用以下命令解析 DNS etc hosts文件 有什么方法可以实现这种可能性 也许利用 Lua 作为最后的手段 如果您有一台带有 systemd 的服务器 您可以使用它附带的名称服务器 syst
  • 如何了解我的 Android 应用在用户设备上消耗了多少电池?

    我正在编写一个应用程序来评估 Android 上蓝牙 P2P 网络的可行性 我注意到 在 Galaxy Nexus 上 它使用的电池很少 而在 Nexus S 上 它消耗电池的速度非常快 这是由于蓝牙导致CPU负载过高直接导致的 现在 我想
  • Camel中如何动态添加和启动路由?

    我正在尝试从 Camel 的路线中删除一些样板 例如 让我们考虑两条相似的路线 并且可以生成它们的大部分内部内容 我创建了一个组件 模板 它创建了TemplateEndpoint 并修改了 XML 配置以使用模板组件 自定义方法Templa
  • 适用于 Android 的自定义旋转对话框

    如何制作自定义主题 Android Spinner 对话框 该博客有一个示例 可能可以解决您的问题 http www mokasocial com 2011 03 easily create a default custom styled
  • SKLearn Naive Bayes:在 tfidf 矢量化后添加特征

    因此 我的任务是训练一个电话记录模型 以下代码执行此操作 一些背景信息 x 是一个字符串列表 每个第 i 个元素是一个完整的转录本 y 是布尔值列表 表示调用的结果是正还是负 以下代码有效 但这是我的问题 我想将通话时长作为一项训练功能 我
  • 带 ProgressBar 的 Endless RecyclerView 用于分页

    我正在使用一个RecyclerView http developer android com reference android support v7 widget RecyclerView html并以十个为一组从 API 获取对象 对于
  • PHP 未在正确的位置回显

    我在我的 WordPress 网站上运行一些 PHP 代码 当 PHP 运行以回显某些信息时 它没有在正确的位置回显它 代码的缩写版本是 div class description cms div h2 Search By Category
  • 使用 Ruby On Rails 进行事务操作

    我在控制器内有一个复杂的操作 可以对数据库执行多个更新查询 我怎样才能做出这个动作行为类似于交易没有任何结构重构 MyModel transaction do begin model update stuff sub model updat
  • 如何让控件重绘 Windows 窗体?

    我不太确定 重绘 是我正在寻找的 我是手工设计 Windows 窗体的新手 我创建了一个类 它将使用 TableLayoutPanel 作为传递的变量 并在该表格布局面板中进行自己的设计 以便可以重用该控件并调整其参数以适应其包含的数据 我
  • 用于本机 C++ 的 C++/CLI 包装器,可在 C# 中用作参考

    标题解释了 我有本机 C dll 正在为其编写 C CLI 包装器 这些包装器将依次导入到 C 中作为参考 问题是在 C 中我看不到包装器中的类 从 DLL 导入 我应该使用哪些关键字以及如何重新声明我的本机 C 对象以在 C 中可见 好的
  • 角度从 1 开始 ngFor 索引

    ngFor索引是否可以从1而不是0开始 let data of datas let i index 1 没用 ngFor let item of items slice 1 let i index 切片管 https angular io
  • 在 Visual Studio 2015 中使用和导出 std::string 和 std::vector

    使用 VS2013 和合适的导出宏 我可以使用此示例代码导出 std string 和 std vector ifdef MSC VER Explicit template exports c EXPORT TEMPLATE templat
  • Qt 安装程序框架 - 在开始菜单中为所有用户创建快捷方式

    使用安装程序框架 我想为我的应用程序创建一个安装程序 该应用程序由管理员安装在 PC 上 然后该应用程序由不同的用户使用 在安装程序中 我创建从可执行文件到开始菜单的快捷方式 这是在installscript js通过命令 componen
  • Angularjs - 元素上的多个指令,其中一个是隔离范围

    想知道是否有人可以解释当前的行为 我有一个具有隔离范围的指令 称之为 dirA 然后我在上面添加了另一个指令 dirB 期望第二个指令获取isolate指令创建的每个范围 dirB 获取控制器范围 为什么它不能获得 dirA 为该元素创建的
  • Rails - 使用父级的范围父级验证嵌套属性的唯一性

    我在 Rails 中对具有父级的嵌套属性进行范围唯一性验证时遇到问题 背景 我有一个包含 3 个模型的 Rails 4 应用程序 app models account rb class Account lt ActiveRecord Bas
  • 在 C# 中实现这 3 个类的最佳方式:Vector、Direction(单位向量)、Point

    所有点都是向量 所有向量都是点 所有方向都是向量 并非所有向量都是方向 这不应该意味着不允许双向转换 我希望最好将运算符全部覆盖一次 因为它们都是完全相同的 在 C 中 我可以定义 class Vector float x y z 并执行
  • Couchbase 几秒后超时

    我有大约 100 200k 个小文档 其中包含 base64 编码的图像 非常小的图像 我正在尝试将所有这些文档插入 Couchbase 但在前 28k 个文档 总大小约为 185 Mb 后我不断收到此错误 Error Client Sid
  • npm 包上的“at”(@) 前缀是什么意思?

    In the Angular 组件路由器文档 https docs angularjs org guide component router我刚刚偶然发现了一个我以前从未见过的 npm 命令 我不明白发生了什么 npm install an
  • Delphi:如何使用 $OVERFLOWCHECKS OFF 禁用溢出检查?

    我有一些代码会导致下溢 var t1 t2 delta DWORD begin t1 0xffffff00 t2 0x00000037 delta t2 t1 减法本身does生成上溢 下溢 但我不希望 Delphi 抛出EIntOverf
  • 如何从 Slack 获取用户 ID 到机器人服务

    我正在使用 Azure LUIS 创建一个简单的机器人 这是我的第一个机器人 经过一些研究后 我取得了一些不错的进展 现在还与 Slack 集成作为测试它的渠道 机器人功能运行良好 但我希望识别用户的身份 这样我就可以个性化机器人对话 并从