Kotlin在Android上使用Dialogflow和Fuel进行简单聊天的机器人

时间:2019-03-16 18:46:59

标签: android http kotlin dialogflow

我一直在关注本教程on how to create a simple chatbox in Android Studio.

我已经在Dialogeflow上成功创建了一个实体,并再次检查是否正确复制了ACCESS_KEY

这是我的代码:

FuelManager.instance.baseHeaders = mapOf(
            "Authorization" to "Bearer $ACCESS_TOKEN"
    )

    FuelManager.instance.basePath =
            "https://api.dialogflow.com/v1/"

    FuelManager.instance.baseParams = listOf(
            "v" to "20170712",                  // latest protocol
            "sessionId" to UUID.randomUUID(),   // random ID
            "lang" to "en"                      // English language
    )

    val human = ChatUser(
            1,
            "You",
            BitmapFactory.decodeResource(resources,
                    R.drawable.ic_account_circle)
    )

    val agent = ChatUser(
            2,
            "Agent",
            BitmapFactory.decodeResource(resources,
                    R.drawable.ic_account_circle)
    )

    my_chat_view.setOnClickSendButtonListener(
            View.OnClickListener {
                my_chat_view.send(Message.Builder()
                        .setUser(human)
                        .setText(my_chat_view.inputText)
                        .build()
                )

                // More code here
            }
    )
        Fuel.get("/query",
                listOf("query" to my_chat_view.inputText))
                .responseJson { _, _, result ->
                    val reply = result.get().obj()
                            .getJSONObject("result")
                            .getJSONObject("fulfillment")
                            .getString("speech")

                    my_chat_view.send(Message.Builder()
                            .setRight(true)
                            .setUser(agent)
                            .setText(reply)
                            .build()
                    )
                }

我发现我收到一个HTTP 404错误,这意味着Fuel正在创建的任何路径错误或我缺少参数。

我仔细检查了访问令牌是否正确,甚至创建了另一个以防万一并更新了应用程序。

当我运行该程序时,它使应用程序崩溃。只有当我使用try catch语句返回查询的值时,才发现它是因为它返回了404错误。我的日志也显示了这一点。

我想念什么吗?这是我第一次使用Dialogflow。

过去3个小时,我一直在努力工作,查看日志并尝试使用try catch语句,但仍然不知道我缺少什么。

Dialogflow API Reference告诉我,我所需要的只是Authorization令牌,协议版本(我都尝试过使用它们)。

如果有人可以帮助我并且需要更多信息,请告诉我。

1 个答案:

答案 0 :(得分:1)

搜索stackoverflow后,我发现了this答案,该答案为我提供了GET请求所需的结构。

因此我从查询中删除了FuelManager的basePath和baseParams,并以上面发布的链接指定的格式对GET请求进行了硬编码。

Fuel.get("https://api.dialogflow.com/v1/query?v=20150910&lang=en&query="
                +chatView.inputText+"&sessionId=12345")

我唯一的猜测是baseParams和basePath未能正确链接到Fuel实例。