如何通过webhook基于用户输入评估终止对话(api v2)

时间:2017-12-04 13:45:53

标签: c# dialogflow

让我们说我的机器人与用户进行了持续的对话,我的webhook问道,“你做完了吗?"并且用户回答"是"。 如何通过webhook关闭对话? 我怀疑它是通过followupEventInput但我无法得到任何工作。

我没有使用nodeJS库。用C#编码。

以下是我尝试的内容:我使用输出上下文和事件进行响应:事件与"结束对话"在意向窗口底部的Google智能助理下。

 {  
  "fulfillmentText": "OK. The note was recorded.",
  "fulfillmentMessages": [
  {
  "text": {
    "text": [
      "OK. The note was recorded."
    ]
  }
}
],
  "outputContexts": [
{
  "lifespanCount": 2,
  "name": "projects/xxx/agent/sessions/1512399774430/contexts/note-end"
}
],
"followupEventInput": {
"name": "end-event",
"languageCode": "en"
  }
}

使用上面的代码,用户永远不会听到" OK。记录已被记录。",会话突然结束,谷歌首页说"该应用程序不再响应" (或类似的东西)。有效,但不能接受。

如果我没有放下followupEvent,用户会听到"好的。记录被记录下来。"但是对话并没有结束......那么我需要依靠用户使用另一个意图来关闭它,这是我想要避免的,因为它会是多余的。

2 个答案:

答案 0 :(得分:1)

您可以通过两种方式结束使用Dialogflow的Google智能助理对话:

  1. Dialogflow中定义的响应
  2. 转到Dialogflow中定义的意图并向下滚动并点击from collections.abc import MutableSequence from threading import RLock class MD(dict): # No need for a full MutableMapping subclass, as the use is limited def __getitem__(self, key): return super().__getitem__(id(key)) class Reversible(MutableSequence): def __init__(self, args): self.seq = list() self.reverse = MD() self.lock = RLock() for element in args: self.append(element) def __getitem__(self, index): return self.seq[index] def __setitem__(self, index, value): with self.lock: del self.reverse[id(self.seq[index])] self.seq[index] = value self.reverse[id(value)] = index def __delitem__(self, index): if index < 0: index += len(self) with self.lock: # Increase all mapped indexes for obj in self.seq[index:]: self.reverse[obj] -= 1 del self.reverse[id(self.seq[index])] del self.seq[index] def __len__(self): return len(self.seq) def insert(self, index, value): if index < 0: index += len(self) with self.lock: # Increase all mapped indexes for obj in self.seq[index:]: self.reverse[obj] += 1 self.seq.insert(index, value) self.reverse[id(value)] = index 并选中标有Google Assistant的复选框 enter image description here 注意:这仅适用于Dialogflow控制台中定义的响应,而不适用于履行创建的响应。

    1. webhook中定义的响应
    2. 回复Dialogflow的webhook请求,其响应形式为:

      End conversation

      使用这些方法中的任何一种,您的应用都会说出控制台(#1)或webhook(#2)中指定的内容,并结束与用户的对话。在Dialogflow intent(对于#1)或有效负载对象(对于#2)的响应部分填写值,以在结束对话时向用户发送响应。

      <强>来源

      Dialogflow Webhook Response v2 docs:https://dialogflow.com/docs/reference/api-v2/rest/v2beta1/WebhookResponse

      Google webhook响应文档上的操作:https://developers.google.com/actions/reference/rest/Shared.Types/AppResponse#FIELDS.expect_user_response

答案 1 :(得分:0)

行。经过进一步调查,似乎:

  • 履行的文本永远不会发送给用户,但需要设置为某些内容(&#34;&#34;有效),否则将告知用户应用程序没有响应并且s /他必须稍后再试。
  • 上下文和事件是正确和必要的。我找到的唯一方法是让用户听到&#34;好的。记录被记录下来。&#34;将此消息包含为与事件关联的意图的文本响应。以这种方式设置时,应用程序以可接受的方式关闭。