チャットボットのBotpressを使用していて、ユーザー入力の内容をAPIに渡したいケースがありますが、日本語の内容をそのまま渡そうとするとエラーになったので、解決方法を調べました。
Call APIのエラー
Call APIを使用して対話からのユーザー入力をGET値としてAPIに渡します。
ここでは天気の情報を返すAPIを例として使います。
以下は対話エミュレーターの表示。
ユーザーが「今日の大阪の天気」を聴いたのに対してエラーを返しています。
ログを確認すると、「UNESCAPED CHARACTERS」のエラーが出力されていました。どうやらGET値として設定する前にURLエンコードをする必要があるようです。
対処法
フックを使って入力をURLエンコードしてeventに保存しておきます。
Call API実行時にeventを参照してGET値に設定します。
Botpress studioの左メニューの「code editor」から「Hooks」を選び、フックを新規作成します。フックには「event.payload.text」をURLエンコードしてから「web ContextString」として「event.state.user」に保存するコードを登録します。
次はCall APIのGET値を修正します。
「event.state.user.web ContextString」をGET値に指定します。
対話エミュレーターを実行すると、APIが正しいレスポンスを返していることがわかります。