Дооснащение и Kotlin Ошибка Post Post 400 - PullRequest
0 голосов
/ 09 февраля 2020

Я пытаюсь сделать простой пост-запрос к диалоговому потоку Google при модернизации, используя kotlin. Я моделирую свой код с этого сайта . Тем не менее, я продолжаю получать 400 ошибок, когда пытаюсь выполнить поиск, поэтому, должно быть, что-то не так с моим интерфейсом, создающим тело сообщения, которое я считаю. У меня работает python код, который выполняет те же функции, что и здесь:

url = "https://api.dialogflow.com/v1/query?v=20170712"
headers = {
  'Authorization': 'Bearer ' + my_key ,
  'Content-Type' : 'application/json'
}
body = {
    'lang': 'en',
    'query': 'id like to fix my wire c1000 stocks',
    'sessionId': 'me'
}
resp = r.post(url,headers=headers,data=json.dumps(body))

Я настроил это в android studio как 3 класса:

1) Message.kt Тело почтового запроса

object Message {
    data class MsgBody(val lang: String, val query: String, val sesId: String)
}

2) Model.kt Ответ из диалогового потока

object Model {
    data class Response(val resp: Result)
    data class Result(val fulfillment: Fulfillment)
    data class Fulfillment(val speech: String)
}

3) DialogFlowService.kt Интерфейс, в котором есть точка отправки почтового запроса

interface DialogFlowService {
    @Headers(
        "Authorization: Bearer {MY API KEY}",
        "Content-Type: application/json"
    )
    @POST("query")
    fun getAiMessage(@Body msg: Message.MsgBody,
                     @Query("v") v: String): Observable<Model1.Response>
    companion object {
        fun create(): DialogFlowService {

            val retrofit = Retrofit.Builder()
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl("https://api.dialogflow.com/v1/")
                .build()

            return retrofit.create(DialogFlowService::class.java)
        }
    }

}

Все это затем используется в моей основной деятельности, как показано ниже:

class MainActivity : AppCompatActivity() {

    private var disposable: Disposable? = null

    private val dialogFlowService by lazy {
        DialogFlowService.create()
    }
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)


        button.setOnClickListener {
            if (editText.text.toString().isNotEmpty()) {
                sendMessage(editText.text.toString())
            }
        }
    }

    private fun sendMessage(msg: String){
        disposable = dialogFlowService.getAiMessage(Message.MsgBody("en",msg,"me"),"20170712")
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(
                { result -> textView.text = "DialogFlow says: ${result.resp.fulfillment.speech}" },
                { error -> Toast.makeText(this, error.message, Toast.LENGTH_SHORT).show() }
            )
    }
    override fun onPause() {
        super.onPause()
        disposable?.dispose()
    }
}

Я пытался следовать этому уроку как можно ближе и очень растерялся относительно того, что я сделал неправильно. Как я уже говорил выше, я думаю, что это связано с моим файлом DialogFlowService.kt. Спасибо за любую помощь заранее.

1 Ответ

0 голосов
/ 09 февраля 2020

Ошибка в пост-запросе, поскольку имя переменной модели sesId не равно фактическому ключу sessionId. Как сказал Рагхунандан, перехватчик каротажа очень полезен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...