A3RT Talk APIに「こちらこそすみません」と送ると正常ステータスで空文字が返却される
Talk APIを実装して運用していたところ早速エラーを吐いていました。
2020/02/15:追記 修正されました。
LINE botのエラー内容
herokuのログ抜粋&整形。
2020-01-11T07:33:53.404186+00:00 app[web.1]: linebot.exceptions.LineBotApiError: LineBotApiError: status_code=400, request_id=xxxxxxxx, error_response={ "details": [{ "message": "May not be empty", "property": "messages[0].text" }], "message": "The request body has 1 error(s)" }, (以下略)
LINE botのリプライに空文字を設定しているためエラーが起きています。リプライに設定するメッセージはTalk APIより取得しているためおそらくそこで空文字が返却されているのでしょう。
LINE botに送られてきたメッセージを確認すると「こちらこそすみません」でした。curl
でレスポンスを確認してみます。
Talk APIの調査
curl -s -X POST https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk \ > -F "apikey={APIキー}" \ > -F "query=こちらこそすみません" \ > | jq . { "status": 0, "message": "ok", "results": [ { "perplexity": 1.9135245437520036, "reply": "" } ] }
-s
は進捗非表示のオプションです。パイプの渡し先のjq
はjsonフォーマッターでutf8のデコードもしてくれてます。初めて知ったのですがとても便利。
やはり応答メッセージが空文字ですね。そんなパターンあるんだなあと思ってAPI仕様見たらそのパターンではステータスが2000
で返却されるらしい。
No. | status | HTTPstatus | message | 返却条件 |
---|---|---|---|---|
1 | 0 | 200 | ok | 正常応答 |
14 | 2000 | 200 | empty reply | 応答テキストが空 |
さきほどのレスポンスではステータスは0
だったし謎。
少し文字列を変えたりして検証してみたが空文字の返答が来るのは「こちらこそすみません」のみでした。生成された応答メッセージに問題があってレスポンス返すところとかで抜け落ちたりしてるのかな?折角なので問い合わせてみたいと思います。こちらに問題があったら申し訳ない限りですが…
修正
このbotの利用者は一人しかいないので特に対応はしません。