的进行API调用step允许您配置API调用到另一个系统,如内部CRM或ERP,或将会话细节推到外部端点,如Amazon Event Bridge或谷歌Analytics。
在本文中,我们将向您介绍在bot流程中包含和配置该步骤所涉及的过程。
的概述进行API调用步骤及其配置规则,请参见理解机器人步骤类型:进行API调用.
本文包括以下部分:
向机器人添加Make API调用步骤
添加API细节
使用API详细信息部分配置您想要进行的HTTP调用,包括HTTP请求方法、外部资源的位置,以及在需要时添加标头。下面的步骤是前一节过程的继续。
添加API详细信息
- 在“配置”面板中,单击API的细节.
- 使用下拉菜单选择请求方法:
- 得到从外部资源上的服务器检索数据。这是最常用的方法。
- 帖子发送数据以创建或更新外部系统上的资源。如果资源已经存在,则发送的数据将修改该资源。
- 把发送数据以更新或创建资源。如果资源已经存在,则发送的数据将替换该资源。
- 补丁发送数据以更新外部站点上的资源。它用于对资源应用部分修改。
- 删除移除外部位置上的资源。
- 输入一个端点URL.端点URL是要连接到的外部资源的位置。端点URL支持
https://
协议。你可以包括变量在URL的路径或查询字符串值。有关更多信息,请参见在API调用中传递变量. - 可选地,选择一个连接来验证API调用。注意:你必须创建连接在使用它之前进行API调用的一步。
- 如果需要,输入可选标头的键和值。重要的是:不要使用头文件进行身份验证。使用API连接代替。
进行API调用包括与身份验证相关的标头的步骤,例如
授权
或x-api-key
,自动失败。如果一个进行API调用步骤失败,对话按照步骤进行API调用失败分支。 - 点击进行API调用来测试API调用。如果变量被添加到步骤的URL或头,您可以包括可选的测试数据到您的外部服务,以检查API调用是否如预期的那样工作。注意,这将向配置的端点URL发出HTTP请求。
在API调用中传递变量
当你进入端点URL对于API调用,您可以包含变量URL的路径或查询字符串值。这允许您将数据从对话传递到外部系统。
例如,消息传递机器人可以使用命令提示客户提供订单号询问细节的一步。然后机器人可以使用进行API调用步骤从您的在线商店获取订单的运输状态。
不能在端点URL的域或子域中使用变量。下表包括有效和无效的例子端点URL值。
有效端点URL | 无效端点URL |
---|---|
https://myshopify.com/admin/api/orders/order_number. json 通过从Shopify指定订单ID检索订单。 |
变量不能添加到域/子域 |
通过关键字搜索从谷歌的places API检索位置。 |
变量不能添加到查询字符串键 |
如果变量无效或为空,机器人将在对话期间跳过该变量。
保存API响应中的变量
在配置详细信息并测试API调用之后,可以将API调用的JSON响应中的值保存为变量.a中最多可以保存8个变量进行API调用的一步。
从Response数据创建一个变量
- 在“配置”面板中,单击进行API调用.
- 展开accordion并标识希望转换为变量的来自外部系统的数据。提示:切换到Response body选项卡,查看从外部系统返回的原始响应。
- 点击保存.
- 为新变量命名。变量名只能包含小写字母、数字和下划线。
关于台阶分支
的进行API调用Step是一个分支步骤。添加此步骤将根据API是否成功执行拆分机器人响应。
在机器人运行时,任意200个响应代码将使机器人沿着成功的分支移动。所有400或500个响应代码将使机器人沿着失败的分支移动。如果API返回200并返回空响应,则在会话期间将跳过此步骤保存的所有变量。
38岁的评论
这太棒了艾梅Spanier!是否有可能向用户请求信息,以便使用他们的输入作为API请求的参数(例如,在外部CRM上验证电子邮件地址)?
是的佩德罗·罗德里格斯这是在未来几个月发布的路线图上。
太棒了,谢谢你的跟进!
这太棒了。我们可以使用它从我们自己的ZD实例中获取信息吗?我想要得到消息票数,并显示给客户。这将有助于设置等待时间预期,因为我们无法在本地做到这一点。我尝试了,但一直得到未经授权的401错误。我还尝试设置用户和pwd键和值。
你好@Jason,目前还不可能收集这些信息,因为我们无法在新请求中使用其他请求的参数。
遵循示例图像
我将userid保存为一个变量,我不能在另一个API调用中使用这个变量。
对于401错误,你需要创建一个全局令牌,或者使用Base64令牌和你的用户名和密码,你需要在Zendesk中启用它。亚博
你可以按照这个说明来做https://developer.亚博zendesk.com/api-reference/ticketing/introduction/#security-and-authentication
嘿!我目前正致力于将一个外部API包含到我们的机器人中。我试图做一个POST请求,但有问题的请求体。
我为请求体输入的格式是普通的JSON,例如
{“测试”:“你好”}
现在我遇到的问题是,我使用的外部API返回请求无效。当手动发送完全相同的请求时(例如通过浏览器控制台),请求将被正确处理。
所以我的问题是,我是否必须以任何特定的方式格式化JSON主体,以便Zendesk正确地将请求转发到外部API?亚博
我已经检查了集成日志,它似乎是请求主体被发送到Zendesk服务器作为一个字符串。亚博当稍后将JSON字符串解析为JSON时,是否可能在您这边发生一些错误?
上面的情况似乎就是我在这里遇到的情况,因为当我检查我试图使用该工具调用的一个api的日志时,请求体中包含的不是实际的JSON,而是JSON的字符串化版本(带有转义的引号)。
任何想法吗?
你能提供一段请求的代码片段让我们看一看吗?
谢谢!
我如何做API调用与数据库json和重定向到específic组?
埃里克·纳尔逊
抱歉回复晚了,我举个例子。在这个例子中,我调用了一个托管在AWS上的API,我将共享请求日志来演示这个问题。
让我们从Zendesk请求开始。亚博这是我放入Zendesk的内容(注意,我添加亚博了所有隐式要求的标题,它们只是不在截图中,它们与问题无关)
上述请求导致这被记录在我们的API:
可以看到引号是双转义的。我也不太确定结尾的\n来自哪里,我不认为我已经进入了一个新的行,但它可能是不相关的。
现在,当我直接使用Javascript发送请求时,结果是不同的。请求示例:
这将产生以下日志:
在这里,它只是将JSON记录为字符串,记录它的发送方式。这也是我们所期望和正确的。
所以我的问题是,我是否在流构建器中使用了错误的API调用,JSON应该以不同的格式输入?或者在发送HTTP请求时,软件中是否存在破坏JSON的问题?
如果您对我提供的示例有任何其他问题,请让我知道。
你好,
如何将聊天中存储的变量传递给API请求URL?
例如,是否有可能将客户问题存储为变量,以便在URL中作为参数传递?
先谢谢你
不幸的是,目前有一个错误,我们存储的变量在文本中使用时没有翻译。
这对最终用户体验非常不利。
大家好亚博,Zendesk团队,
你能补充信息吗:
如何对Zendesk实例进行API调用:亚博
1 .获取信息
2-更新机票吗?
-我们应该把什么作为键和值能够连接到我们适当的Zendesk实例?亚博
谢谢你!
我们试图对服务器上的端点使用GET调用,该端点接收用户的电子邮件并返回包含关于用户的几个数据点的json。然而,当我们尝试测试它时,我们得到一个错误,说API调用不能包括一个句号,因此在调用中作为变量发送电子邮件似乎不起作用。
您能否提供一个端点URL的示例,包括任何查询参数(确保编辑任何敏感信息)。此外,您是否可以包括您在发出请求时看到的完整错误。
谢谢!
Tipene
嗨,Tipene,当然,这里是在Bot Flow Builder中复制的步骤:
—添加步骤
-进行API调用
-在API详细信息中,包括GET请求方法与这种类型的请求https://XXXXXXX.XXXXX.XXXXX/api/admin/users/ {{sf.requester.email}} /
—选中“Add Variable”,选中“Responses from Customers: Email”,添加“{{sf.requester”。如上所示的Email}}
-按下Make API Call,然后被要求在电子邮件中包含测试数据。我写了我的电子邮件XXXXXX@gmail.com并得到一个错误“在URL路径中添加的变量不能包含句点。”
谢谢你为我提供这个澄清!
不幸的是,正如您在前面的评论中提到的,您所看到的错误是变量中有句号的结果。这是一个系统规则,不能被覆盖。带有额外符号或标点符号的变量应该在PUT或POST请求中作为有效负载体发送。
有任何问题请随时联系我!
Tipene
你好
我有一个头部键的问题:我需要使用“授权”键与承载令牌,但字段值它很短!
所以我的承载令牌被截断,我有一个授权错误....
谢谢你的联系!
值字段的字符限制是256个,包括空格。通常,您不应该看到oAuth令牌超过这个长度。您能否确保值字段中没有可能导致问题的额外空格?
谢谢!
Tipene
我的web服务使用JWT令牌左372 c。
“eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoicGFwZXJpbm8iLCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvY2xhaW1zL2V4cGlyYXRpb24iOiIwMi8wNi8yMDI2IDEzOjU5OjM1IiwiZXhwIjoxNzgwNDA4Nzc1LCJpc3MiOiJJc3N1ZXIiLCJhdWQiOiJBdWRpZW5jZSJ9.VG7qHYzzojd2HwVteMrm4gDOFN8KGUsP2F24DtTgX7E”
有很多web服务使用长令牌…
嘿okean123
谢谢你的反馈。这个问题已经解决了,如果你能确认就太好了。
嗨Tipene休斯我们注意到我们可以用post发送有效载荷体,但不能用GET请求。有可能让我们在GET中发送有效载荷吗?这将解决不允许在原始GET请求的URL中包含电子邮件,而是在主体中包含电子邮件的问题。
嘿Gabriele Sannicandro
谢谢,我已经捕捉到您的反馈,以便我们修复。
嗨迭戈比利亚雷亚尔,
不幸的是,它不可能通过GET请求发送数据作为有效负载;您将需要使用适当的POST或PUT请求方法。
我已经将此作为反馈记录给我们的产品团队,他们可能会根据需求在未来的更新中添加此额外功能。
抱歉我帮不上什么忙!
Tipene
是否有一种方法可以在变量的帮助下将当前用户上下文发送到make a api调用步骤?我想在流构建器中为经过身份验证的用户和匿名用户提供不同的流…你能告诉我细节吗?
嘿吉奥莉•Sanil
这是不可能的,但这个用例已在我们的路线图中优先考虑,以解决2023年上半年的问题。谢谢
是否可以访问用户的external_id值?
我们计划在2023年第一季度将external_id作为一个系统变量公开。
除了external_id,还有其他变量可以用来识别用户吗?例如ZenDesk 亚博ID,我们可以同步到我们的数据库
嗨羽朱我也很好奇卡尔顿的问题,如果你有什么想法。我们如何通过FlowBuilder的API调用插入特定于客户的变量?
请登录留下评论。